ストレージ装置、及びその制御方法、並びにプログラム
UDTのみをチェックすることで、高速にデータ上書き更新の完了を検出することができるディスクアレイ装置を提供する。データに付与する保証コードにDIFを用いる場合に、UDTに位置誤りを検出するアドレス情報に加え、上書確定を検出するチェック情報を定義する。キャッシュ格納中のデータに対する上書き更新が発生した場合は、キャッシュ上データのチェックビットをホストアダプタが新データに付与する値と異なるものに変更した後に、データの転送を開始する。データ上書き完了時には、チェックビットが正しい値(元の値)に変更されることにより、上書き更新が確定したことを検出可能とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージ装置、及びその制御方法、並びにプログラムに関し、例えば、ストレージ装置(ディスクアレイ装置)の上位装置であるホストからデータを受け取った場合(以下、データライト)の、ディスクアレイ装置内の書き込みを確定させるための技術に関する。
【背景技術】
【0002】
ディスクアレイ装置では、RAID(Redundant Array of Independent (or Inexpensive) Disks)構成を採ることで、複数ディスクの並列動作を可能とし、ホストからのデータ読み出し(以下、データリード)およびデータライトを高速に実現している。また、ディスクアレイ装置では、Mirror、Parity等のRAIDレベルに応じた冗長データを作成することにより、ディスク故障に対して高い耐障害性を実現している。
【0003】
さらに、ディスクアレイ装置では、システム全体の信頼性を向上する目的で、受領データに対し転送中のデータ化けや転送先アドレス誤りを検出するための保証コードが付与されている。例えば、データライト時には、ホストから受領したデータは一定のデータ長である論理データブロックに分割され、論理データブロックごとに保証コードの付加を行い、保障コード付論理データがキャッシュメモリやディスクに格納される。その後、ホストからのデータリード要求時には、ホスト転送前に保証コードをチェックすることで、ホストに転送するデータがライト時のものと同一であることが保証される。
【0004】
保証コードの具体例としては、一般的に転送中のデータビットエラーを検出するためのLRC(Longitudinal Redundancy Check)、および、アドレス誤りを検出するためのLA(Logical Address)を付与する技術が知られている(特許文献1参照)。近年では、保証コードの標準フォーマットとして、ストレージインタフェース技術委員会であるT10が提唱する、DIF(Data Integrity Field)が広まっている。
【0005】
また、保証コードの生成・付与およびチェック・削除をサポートするインタフェース機器を、ディスクアレイ装置のホストアダプタとして使用することもある。この場合、ディスクアレイ装置の入り口であるディスクアダプタが、データライト時にホストから受領したデータに対して保証コードを付与する。一方、データリード時には、ディスクアダプタが、保証コードの整合性をチェックする。このようにすることで、装置内でデータエラーや紛失が発生していないことを保証することができるようになっている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2001−202295号公報
【特許文献2】特開2003−323263号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1に示されるようなディスクアレイ装置では、保証コードを用いてデータリード時におけるデータエラー(データ化けやデータの欠落等)がないことを確認しているが、データライト時においてキャッシュメモリ上にデータが間違いなく書き込まれたことを保証することは考慮されていない。一般的なディスクアレイ装置は、I/O(Input/Output)処理性能向上のため高速低容量のキャッシュメモリを備えており、データライト時には非同期ライト処理と呼ばれる処理方式を採っている。これは、ホストから転送されたデータをキャッシュメモリに格納した時点で、ホストに対し転送完了を通知し、その後任意のタイミングでキャッシュメモリ上のデータをディスク装置に書き込む処理方式である。
【0008】
このため、特許文献1に開示されるようなディスクアレイ装置では、データ書き込み時の転送エラー発生によりキャッシュメモリにデータが正しく書き込まれずに、ホストからのデータ転送セッションがクローズされてしまう場合がある。つまり、ホストは、ディスクアレイ装置からの転送終了を受領した時点でデータ転送が正常終了したと判断し、転送セッションをクローズしてしまう。その後、ディスクアレイ装置がキャッシュメモリ上のデータのエラーを検出したとしても、ホストに対するデータの再送要求は実行できない。結果的に、ディスクアレイ装置は受領したデータを紛失するデータロストを起こしてしまう。
【0009】
従って、キャッシュメモリにデータが間違いなく格納されたことを保証するためには、ホストに転送完了を通知する前に、キャッシュメモリ内に格納されたデータの保証コードをチェックし、転送エラーが発生していないことを確認する必要がある。
【0010】
本発明はこのような状況に鑑みてなされたものであり、キャッシュメモリにデータが正しく書かれたことを保証してデータロストの発生を防止するための技術を提供するものである。
【課題を解決するための手段】
【0011】
本発明では、キャッシュメモリへのデータ転送確定を保証するための手段として、保証コードのアドレス部をチェックする処理方式をとる。ただし、アドレス部のみのチェックの場合、キャッシュ上に存在するデータを上書き更新(以下、上書きライト)する場合の更新検出能力がない。なぜなら、上書きの前後でアドレス情報は不変であるため、どの契機でチェックしてもチェック結果は常に同じとなるためである。
【0012】
そこで、本発明では、保証コードに上書き更新を確定するためのチェックビットを設け、アドレス情報とチェックビットの双方を確認することで、上書きライトを確定させている。
【0013】
まず、上書きライト時にはホストからのデータ転送が始まる前に、キャッシュ上に存在する上書き対象データに付与された保証コードのチェックビットに未更新であることを示す「1」を設定する。次に、ホストに対しデータ転送要求を発行し、ホストアダプタに、ホストから転送されるデータに付与する保証コードのチェックビット部分に、更新済みであることを示す「0」を付与するように指示を出す。ホストアダプタからキャッシュメモリに転送されるデータには、チェックビットに更新済みを示す「0」が付与された保証コードが付与されるため、キャッシュメモリ上のデータが正しく更新された場合は、事前に「1」に設定していたチェックビットが「0」に更新されているはずである。ゆえに、キャッシュメモリへの転送終了後、更新対象データの保証コード部分のうち、アドレス部とチェックビットのみをチェックすれば、アドレス誤りと上書き更新の双方を確定することが可能となる。
【0014】
即ち、本発明によるディスクアレイ装置は、メモリ(160)と、転送処理部(110)と、メモリ制御部(150)と、を有する。ここで、メモリ(160)には、ディスク部(200)におけるデータの位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)とを含む保証コード(310)を有する更新対象の旧データ(301)が格納されている。そして、メモリ制御部(150)が旧データ(301)の更新である更新データ(302)の書き込み要求を外部機器(40)から受信した際には、旧データ(301)のチェック情報(341)を更新データ(302)に付与するチェック情報(341)と異なる情報に変更した後に、外部機器(40)に更新データ(302)の転送開始を指示する。転送処理部(110)は、外部機器(40)から受信した更新データ(302)に、位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)を含む保証コード(310)を付与し、保証コード付更新データをメモリ(160)に転送する。これにより、更新データ(302)がメモリ(160)に正しく書き込まれた場合に、変更後のチェック情報(341)が変更前のチェック情報(341)に戻るようにする。なお、メモリ制御部(150)は、書き込み要求に含まれる旧データ(301)を特定する情報を参照し、メモリ(160)に更新対象の前記旧データ(301)が存在するか確認し、存在する場合に旧データ(301)のチェック情報(341)を変更するようにする。
【0015】
また、転送処理部(110)は、メモリ制御部(150)からの更新データ(302)のメモリ(160)への書き込み完了の通知を外部機器(40)に送信する。
【0016】
なお、転送処理部(110)が、更新データ(302)を所定単位長(例えば、512バイト)で複数に分割して複数のデータブロック(300)を生成し、それぞれのデータブロック(300)に保証コード(310)を付与するようにしても良い。この場合、メモリ制御部(150)は、データブロック(300)単位で、更新データ(302)のメモリ(160)への書き込みを確定させ、変更後のチェック情報(341)を変更前のチェック情報(341)に戻すようにする。
【0017】
また、メモリ制御部(150)は、更新データ(302)に付されている保証コード(310)の位置情報(342,351)と更新データ(302)が書かれるべきディスク部(200)の位置を示す設定情報(16240)とを照合することにより、更新データ(302)が正しいデータか否かを確認する。
【0018】
さらに、保証コード(310)が、データエラーを検出するためのデータエラー検出コード(320)を含む場合、メモリ制御部(150)が、メモリ(160)に書き込まれた更新データ(302)から演算して得られた情報とデータエラー検出コード(320)とを比較し、両者が一致する場合に更新データ(302)のメモリ(160)への書き込みを確定させるようにしてもよい。
【0019】
さらなる本発明の特徴は、以下本発明を実施するための形態および添付図面によって明らかになるものである。
【発明の効果】
【0020】
本発明によれば、ディスクアレイ装置においてデータロストを起こす可能性を低下させることができ、ディスクアレイ装置のデータ信頼性を向上させることができる。
【0021】
また、保証コードのアドレス部チェックのみでは検出できない、キャッシュ上データの上書き更新についてのエラーを検出することができるようになる。
【図面の簡単な説明】
【0022】
【図1】本発明の第1の実施形態におけるディスクアレイシステムの概略構成を示すブロック図である。
【図2】DIFフォーマットについての概要図である。
【図3】メモリの内部構成を示す図である。
【図4】LU管理テーブルの構成例を示す図である。
【図5】メモリ管理テーブルの構成例を示す図である。
【図6】転送リストの構成例を示す図である。
【図7】本発明で使用するUDTのフォーマット例を示す図である。
【図8】データ上書きライトの動作概要を説明するための図である。
【図9】データ上書きライトを説明するためのフローチャートである。
【図10】ホスト計算機からのデータ転送要求に対してCPUが行う受領準備処理を説明するためのフローチャートである。
【図11】ホストアダプタがデータに対して保証コードを付与する際の処理を説明するためのフローチャートである。
【図12】CPUがキャッシュへのデータ転送終了を確認する際の処理を説明するためのフローチャートである。
【図13】CPUがホスト計算機に対してデータ転送結果を送信する際の処理を説明するためのフローチャートである。
【図14】管理ソフトウェアがユーザに動作モードの設定インタフェース例を示す図である。
【図15】第2の実施形態におけるディスクアレイシステムの概略構成を示すブロック図である。
【図16】第2の実施形態におけるメモリの内部構成を示す図である。
【図17】依頼テーブル16250の構成例を示す図である。
【図18】ステータス管理テーブル16260の構成例を示す図である。
【図19】第2の実施形態における、ホスト計算機からのデータ転送要求に対してCPUが行う受領準備処理の詳細を説明するためのフローチャートである。
【図20】自系CPUが他系CPUに対してのチェック依頼を発行し、終了結果を得るまでの処理の詳細を説明するためのフローチャートである。
【図21】自系CPUと他系CPUの通信に関する概要を説明するための図である。
【発明を実施するための形態】
【0023】
本発明は、メモリ(キャッシュメモリ)内の旧データを更新データで上書きする際に、確実に上書き保存できたことを保証するための技術を開示するものである。
【0024】
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。なお、本発明では、データ保証コードにDIFを用いることを前提としているが、別のフォーマットを用いても良い。
【0025】
(1)第1の実施形態
<システム構成>
図1は、本発明の第1の実施形態によるディスクアレイシステム(ストレージシステム)の概略構成を示すブロック図である。ディスクアレイシステムは、ディスクアレイ装置(ストレージ装置)10と、ホスト計算機40と、を備えている。
【0026】
図1において、ディスクアレイ装置10は、ディスクアレイ装置10全体の制御を行なう制御部100と、データが記憶されるディスク部200とから構成される。
【0027】
ディスクアレイ装置10には、制御部100のホストアダプタ110を介して、ホスト計算機(ディスクアレイ装置10を利用する上位装置(例えばアプリケーションサーバ))40が接続されている。なお、ディスクアレイ装置10とホスト計算機40を接続するためのインタフェースには、例えば、データ転送に用いられるSCSIプロトコルに対応するSAN(Storage Area Network)20が用いられる。SAN20の構築には、例えば、ファイバチャネル、SCSI(Small Computer System Interface)、iSCSI(internet Small Computer System Interface)、USB(Universal Serial Bus)、IEEE1394バス等を用いることが可能である。
【0028】
また、ディスクアレイ装置10に接続されるホスト計算機40は、複数台設置されていても良い。また、SAN20に代えて、他種のインタフェースが採用されても良い。
【0029】
ホスト計算機40には、ディスクアレイ装置10の動作を制御する制御ソフトウェアがインストールされており、ホスト計算機40で実行される制御ソフトウェアにより、ディスクアレイ装置10に対してコマンドなどを発行し、ディスクアレイ装置10の動作を制御することができる。ただし、ディスクアレイ装置10とホスト計算機40で実行される制御ソフトウェアとは、例えばLAN(Local Area Network)30を経由して通信されるため、制御部100にはディスクアレイ装置10がLAN30と接続するためのインタフェースであるNIC(Network Interface Card)140を備えている。ディスクアレイ装置10の管理、制御或いは保守を行う計算機は、ホスト計算機40とは別の計算機が使用されても良い。また、LAN30に代えて他種の通信ネットワークが利用されても良い。
【0030】
制御部100は、ホスト計算機40が接続されて当該ホスト計算機40との通信を行うホストアダプタ110と、制御部100及びディスク部200が互いに通信するためのインタフェースとなるディスクアダプタ130と、LAN30の接続インタフェースであるNIC140と、ディスクアレイ装置10全体の制御を行なうCPU(Central Processing Unit)150と、Switch120と、を備えている。CPU150と、ホストアダプタ110と、ディスクアダプタ130は、Switch120を介して接続されている。各デバイス間においては、例えばPCI(Peripheral Component Interconnect)のような内部バス170により通信が行われる。なお、Switch120に代えてIOH(I/O HUB)を用いても良い。
【0031】
また、制御部100は、CPU150がディスクアレイ装置10を制御するために必要なコンピュータプログラムやデータが記憶されるメモリ160を備えている。CPU150とメモリ160とは、例えばDDR3(Double Data Rate 3)等の専用バス180で接続されている。さらに、本発明においてメモリ160は、ホスト計算機40とディスク部200との間で通信されるデータを一時的に記憶するキャッシュメモリとしての役割も備えている。
【0032】
ホストアダプタ110は、DMA(Direct Memory Access)転送機能111を備えている。そして、ホストアダプタ110は、CPU150によってメモリ160内で設定される転送リストに従ってデータ転送を実施する。また、ホストアダプタ110は、DIF生成・チェック機能112を備えている。つまり、ホストアダプタ110は、データライト時には、ホスト計算機40から受領したデータに対しデータ保証コードであるDIFを付与することができ、また、データリード時には、メモリ160から転送されたデータから演算して得られたコードと付加されている保証コードとを比較することで、ディスクアレイ装置10内でデータが変化していなかチェックすることができる。両者が同一であれば、データが変化していないことが保証される。
【0033】
ディスクアダプタ130は、ホストアダプタ110と同様のDMA機能131およびDIF機能132を備えており、メモリ160とディスク装置210間の転送における転送エラーの検出を行うことが可能となっている。
【0034】
ディスク部200は、複数のディスク装置群210を備えている。各ディスク装置群210はさらに複数のディスク装置220から構成され、複数のディスク装置220のうちの2以上のディスク装置220によりRAIDグループが構成される。ディスク装置220は、例えばハードディスクドライブ(HDD)であるが、他種の物理ディスクドライブ、例えば、DVD(Digital Versatile Disk)ドライブなどであっても良い。また、物理ディスクドライブに代えて、半導体メモリドライブ(例えばフラッシュメモリドライブ)などの他種の物理記憶装置を採用しても良い。なお、ディスク装置群210とディスクアダプタ130とはファイバチャネル、SAS(Serial Attached SCSI)等の専用バス190により接続されている。
【0035】
<DIFフォーマットの構成>
図2は、DIFフォーマットの概略構成を示す図である。図2に示されるように、DIFを使用する場合、ホスト計算機40から受領したデータは512Byte単位の論理データブロック300に分割され、そこにデータ保証コードである8ByteのDIF310が付与される。DIF310は、例えば2ByteのCRC(Cyclical Redundancy Check)コード320と合計6ByteのUDT(User Defined Tag)330より構成される。
【0036】
CRC320は従来のLRCに相当するデータビットエラーを検出するためのコードであり、512Byteの論理データブロック300に対するCRC計算結果が格納される。また、UDT330は2ByteのApplication Tag340と4ByteのReference Tag350より構成され、ユーザが任意の値を設定可能であるが、一般的に従来のLA(Logical Address)に相当する使われ方(アドレス(位置)誤りを検出する)が想定されている。つまり、UDT(Application Tag)340は従来のLUN(Logical Unit Number)に相当し、UDT(Reference Tag)350は、従来のLBAに相当する。
【0037】
<メモリの内部構成>
図3は、メモリ160の内部構成を示す図である。図3に示されるように、メモリ160は、ユーザデータを一時的に格納するために使用される領域であるデータキャッシュ領域1610と、ディスクアレイ装置10を制御するためのプログラムや各種テーブルが格納されているシステム領域1620とにより構成される。
【0038】
データキャッシュ領域1610は、任意のサイズを持つ複数のセグメントに分割され、セグメント単位でユーザデータ16110を格納する領域である。
【0039】
システム領域1620は、CPU150が実行する各種プログラムであるプログラム群16210と、RAIDグループ内に作成されたLU(Logical Unit)のアドレス空間とディスク装置内の物理アドレス空間との対応を管理するためのLU管理テーブル16220と、データキャッシュ領域1610のセグメントを管理するためのメモリ管理テーブル16230と、CPU150によって作成され、CPU150がホストアダプタ110もしくはディスクアダプタ130に対してDMA転送を指示するために使用する転送リスト16240と、を格納している。
【0040】
<各テーブル及び転送リストの構成>
図4は、LU管理テーブル16220の構成を示す図である。図4において、LUN162210は、作成されたLUの識別子であり、この識別子にはユニークな数字が割り当てられる。LUサイズ162220は、LUの容量を示している。ディスクNo162230は、LUを格納するディスク装置220のディスク番号を示し、START LBA162240およびLAST LBA162250はLUの開始アドレスおよび最終のアドレスを示している。
【0041】
図5は、メモリ管理テーブル16230の構成を示す図である。図5において、セグメントNo162310は、セグメントの識別子であり、この識別子にはそれぞれユニークな数字が割り当てられている。LUN162320、LBA162330、及びLENGTH162340は、セグメントに格納されているユーザデータを管理するための情報である。LUN162320は対象データのLUナンバーを示し、LBA162330はLU内の対象データの先頭アドレスを示し、LENGTH162340は対象データのデータ長を示している。なお、格納すべきデータサイズが1セグメントのサイズよりも大きいときには、複数のセグメントに亘って当該データのLUN、LBA及びLENGTHが管理されることになる。
【0042】
図6は、転送リスト16240の構成を示す図である。転送リストは、CPU150によって作成されるホストアダプタ110に対する命令文である。ホストアダプタ110は、この転送リストを参照し、転送処理を実行する。なお、図6では、リストは1つしか示されていないが、複数の転送リストが作成されメモリ160に格納される。
【0043】
図6において、リストNo162410は複数枚あるリストの識別子であり、この識別子にはユニークな数字が割り当てられる。転送方向162420は、DMA転送の転送方向を示す情報である。例えば、DMA転送を行うデバイスから見て自身のバッファからデータが転送される方向を「RD(リード)」、反対に自身のバッファにデータが入ってくる方向を「WR(ライト)」として転送方向が示される。
【0044】
セグメントNo162430およびLENGTH162440は、DMA転送先のアドレスおよび転送サイズを示す情報である。また、チェックビット162450、LUN162460、及びLBA162470は、本実施形態で使用するUDT330(詳細は図7で説明)の設定内容を示す情報である。Mode162480は、DIFに対する動作内容を示す情報である。ここには、例えば、データにDIFを付与する場合は「付与」、チェックのみ実施する場合は「Check」、チェック後にDIFを削除する場合は「Check & Delete」のようなコマンドに対する数値が入力される。
【0045】
例えば、図6に示される転送リスト16240によれば、ホストアダプタ110は、メモリ160のセグメントNo.100に対して、LUN10のLBA200に格納されるべき8LENGTH分のデータにDIFを付与し、チェックビットを0として書き込む処理を実行する。
【0046】
図7は、本発明の実施形態におけるUDT(User Defined Tag)の使用例を示す図である。図7に示されるように、本発明では、UDT330として、Application Tag340にデータ上書き確定のチェックビット341と、転送先LU番号であるLUN342が設定される。また、Reference Tag350にはLBA351が設定される。このように、LUN342およびLBA351を定義することにより、従来のLAと同様のアドレス誤りチェック機能を実現し、さらにチェックビット341によりキャッシュに上に格納されているデータ(旧データ)への上書きライト完了を保証することができる。
【0047】
<上書きライト完了保証処理の内容>
続いて、図8及び9を参照して、上書き完了保証処理の具体的な動作(例)について説明する。図8は、メモリ上に存在するデータに対する更新である、上書きライトの動作概要図であり、図9は、図8をフローチャートとして表した図である。
【0048】
図8は、メモリ160に格納されている旧データ301を、ホスト計算機40が新データ302に更新し、その更新データをメモリに書き込むまでの様子を示している。データの流れが実線で、データ転送を行うために必要なコマンドの流れが破線でそれぞれ示されている。
【0049】
ホスト計算機40は、データ転送要求コマンド(書き込み要求)をディスクアレイ装置10に発行する(ステップS100)。コマンドを受け取ったCPU150は、データ転送要求コマンドを解釈(LUN、LBA及びLENGTHを特定する)し、データ受領準備処理を行う。このコマンド解釈により、メモリ160上に旧データ301が存在する(キャッシュヒット)かどうか分かる。データ受領準備処理として具体的には、CPU150は、キャッシュ上に旧データ301が存在する場合、旧データ301に付与されたチェックビット341に未更新データを示す「1(図8中、黒塗り)」を設定し、さらにホストアダプタ110に対して、新データ(更新データ)302へ付与するDIFの設定内容を含むDMA転送リスト(図6参照)を作成する。このとき、DMA転送リスト中の新データ302に付与するDIF310内のチェックビット341には更新済みを示す「0(図8中、白塗り)」を設定する(ステップS200)。なお、旧データがメモリ160上に存在しない(キャッシュミス)場合には、CPU150は、チェックビットの設定はせずに、データをそのまま転送するようにホスト計算機40に通知する。
【0050】
その後、CPU150は、ホスト計算機40に対してデータ転送許可通知を発行する(ステップS300)。データ転送許可通知を受け取ったホスト計算機40は、ディスクアレイ装置10に対し新データ302の転送を開始する(ステップS400)。
【0051】
また、新データ302を受け取ったホストアダプタ110は、転送リストの設定内容に従って新データ302の各ブロックに対してDIFを付与しながら、新データをブロック単位(図2参照)でメモリ160へ転送する。このとき、付与されるDIFのチェックビット341は更新済みを示す「0」と設定される(ステップS500)。
【0052】
ホストアダプタ110の転送終了後、CPU150はメモリ上のUDTを読み込み、チェックビット341を含むUDTの値が妥当であるか否かをチェックする(ステップS600)。すなわち、旧データ301が新データ302に確実に更新されている場合は、上書き更新のためLA部分に該当するLUN342およびLBA351は更新前と同じであるが、チェックビット341の値は更新済みを示す「0」となっているはずである。その後、CPU150は、ホストアダプタ110を介して、チェック結果に応じたレスポンスをホスト計算機40に送信し(ステップS700)、ホスト計算機40はレスポンス内容に応じて、転送の終了やデータ再送等のコマンド終了処理を実施する(ステップS800)。以上のステップにより、旧データ301が新データ302に確実に更新されたことを保証できるようになる。
【0053】
<ステップS200の詳細>
図10は、データ受領準備処理であるステップS200を詳細に説明するためのフローチャートである。
【0054】
CPU150は、ホスト計算機40からのデータライト要求を受け取ると、要求コマンドのターゲット情報から抽出したライト対象データのLUN、LBA、LENGTHをキーに、メモリ管理テーブル16230を参照することで、対象データがメモリ160に存在する(キャッシュヒット)か否かを判定する(ステップS201)。ステップS201の判定の結果、対象データがメモリ上に存在する場合、CPU150はヒット判定であると判断し(判定結果、YES)、メモリ160上データのチェックビットに対し、未更新データを示す「1」をライトする(ステップS202)。その後、CPU150は、ホストアダプタがDMA転送を行うために必要な情報である転送リスト16240を作成し(ステップS203)、本処理を終了する。なお、ステップS203で作成する転送リスト16240の具体例としては、転送方向162420に「WR」が、DIF設定Mode162480に「付与」が、チェックビット162450に更新済みを示す「0」が、LUN162460およびLBA162470に対象データのLUNおよびLBAが、それぞれ設定されたものが挙げられる(図6参照)。
【0055】
一方、ステップS201の判定の結果、対象データがメモリ上に存在しない場合、CPU150は、キャッシュミスであると判断し(判定結果、NO)、上書き更新用の処理であるステップS202は実施せず、そのまま、DMA転送リスト16240の作成へと移行する。
【0056】
<ステップS500の詳細>
図11は、ホストアダプタ110がホスト計算機40から受け取ったデータにDIFを付与しながらメモリ160へのDMA転送を実施するステップS500を詳細に説明するためのフローチャートである。
【0057】
まず、ホストアダプタ110は、ホスト計算機40から受領したデータを一定のデータ長である論理データブロックに分割し(ステップS501)、転送リスト16240の設定内容に従って各論理データブロックにDIF保証コードを付与する(ステップS502)。
【0058】
その後、ホストアダプタ110は、論理データブロックと保証コードを転送先であるメモリ160へと転送する(ステップS503)。また、ホストアダプタ110は、CPU150に対し転送終了を送信する(ステップS504)。なお、データサイズを転送単位長(例:512バイト+DIF)で除算すれば、何回転送すべきかが分かるので、転送完了か否か判断することができる。
【0059】
<ステップS600の詳細>
図12は、CPU150がキャッシュへ転送されたデータが正しく更新されていることを確認する処理であるステップS600を詳細に説明するためのフローチャートである。
【0060】
ホストアダプタ110からの転送終了通知を受け取ると、CPU150は、転送先のメモリから対象データのUDT部分をリードし、リードした情報と設定情報とが一致するかを確認する。具体的には、CPU150は、転送リスト16240を参照し、チェックビット162450、LUN162460、及びLBA162470の設定内容と、実際に付与されたUDTの値を比較することで本処理を実行する(ステップS601)。
【0061】
アドレス部であるLUNとLBAの値が確認され(ステップS602)、チェック結果が妥当である場合(判定OK)、処理はチェックビットの判定処理に移行する(ステップS603)。ステップS603の判定の結果が妥当であると判断された場合は(判定OK)、CPU150は旧データの更新が正常に完了したと判断し、転送OKの判定を行い(ステップS604)本処理を終了する。
【0062】
一方、ステップS603の判定結果が妥当でない場合は、データ更新が確定されていないと判断され(判定NG)、処理は、タイムアウトであるか否かを判断するステップS606に移行する。ステップS606では、CPU150は、ステップS603から規定の時間経過したかを判断し、規定の時間を経過していない場合は(判定NO)、再度ステップS603の処理を実行する。規定時間以上を経過した場合は、CPU150は、何らかの障害が発生していると判断し(判定YES)、転送NGの判定処理を行う(ステップS605)。
【0063】
また、ステップS602にてアドレス部のチェック結果が妥当でないと判断した場合(判定NG)においても、CPU150は、転送異常であると判断し、転送NGの判定処理を行う(ステップS605)。
【0064】
<ステップS700の詳細>
図13は、CPU150が転送終了ステータスをホスト計算機40へ送信する処理であるステップS700を詳細に説明するためのフローチャートである。
【0065】
まず、CPU150は、ステップS600の判定結果を基に、データ転送が正常に終了したか否かを判断する(ステップS701)。正常終了である場合は(判定「正常」)、CPU150はホスト計算機40に「正常終了」を送信し、本処理を終了する(ステップS702)。
【0066】
一方、ステップS701の結果が正常終了でない場合は(判定「異常」)、CPU150はホスト計算機40にデータ転送が失敗したことを示す「転送異常」を送信し(ステップS703)、本処理を終了する。
【0067】
以上により、本発明にてデータライト時に、ホスト計算機40からメモリ160にデータが転送された際に、ホスト計算機40に対して転送終了応答を送信する前に、メモリ160へのデータライトが確定したことを保証することができる。
【0068】
<その他追加説明等>
なお、以上の各ステップでは、非同期ライトを想定しメモリ160へのライトフローのみを記載したが、ディスクアレイ装置10としては、任意のタイミングでメモリ160に格納したデータをディスク装置220へと格納する処理を実行する。
【0069】
また、本実施形態では、CPU150への性能影響を考慮し、データ転送終了確定のためのチェック対象をUDT330のみに限定している。つまり、転送完了保証には、キャッシュメモリ上に転送されたデータからUDT(LA)/CRC(LRC)等を再計算して得られた結果とホストアダプタが付与した値とを比較し、両者が一致するか判断する必要がある。UDT(LA)はアドレス等の位置情報であるため、単純な比較のみでチェック可能である。しかし、CRC(LRC)はデータ部の排他的論理和等の演算をとったものであるため、チェックのためにはキャッシュメモリ上のデータに対しても排他的論理和等の演算を実行する必要がある。本処理をCPU150が担当した場合、CPU150のリソースが消費され、装置のI/O処理性能低下を引き起こしてしまう。このため、上述の第1の実施形態では、チェック対象をUDT330のみに限定している。
【0070】
ただし、信頼性向上のためCRC320を含むDIF310全体に対するチェックを行っても良い。この場合、図12に記載したステップS601でのリード&コンペア対象をDIF310全体に対して行えばよい。また、ホスト計算機40にインストールされた制御ソフトウェアを介して、チェック動作の設定・確認を可能とするインタフェースを提供することで、ユーザの要件に応じた設定が可能となる。具体的には、CPU150のI/O処理性能は低下するが、データの信頼性は100%保証可能であるDIF310フルチェックモード(高信頼性モード)、もしくは、フルチェックに比べて信頼性は若干落ちるもののCPU150のI/O処理性能低下を抑止可能なUDT330のみの簡易チェックモード(高性能モード)の2パターンを制御ソフトウェアにより提供することで実現可能である。なお、図14は、制御ソフトウェアのインタフェース例を示している。
【0071】
(2)第2の実施形態
第2の実施形態は、ディスクアレイ装置10内に制御部100を2つ設けたディスクアレイシステム(ストレージシステム)に関する。このような2重構成を採用するのは、ディスクアレイ装置10の、制御部100の一点障害によるシステムダウンを避けるためである。本実施形態では、システムに2つの制御部100を搭載した場合を想定しているが、制御部の数は2つに限られるものではない。以下では、第1の実施形態との差分を中心に説明することとする。
【0072】
<システム構成>
図15は、本発明の第2の実施形態によるディスクアレイシステム(ストレージシステム)の概略構成を示す図である。当該ディスクアレイシステムは、第1の実施形態と同様、ディスクアレイ装置(ストレージ装置)10と、ホスト計算機40と、を備えている。ただし、図15に示されるように、ディスクアレイ装置の内部構成が第1の実施形態とは異なっている。
【0073】
また、図15に示されるディスクアレイ装置10においては、2つの制御部100及び400が専用の通信線170で接続され、各制御部が1つのディスク部200を共有している。さらに、第2の実施形態では、ホスト計算機40から転送されたデータは、データを受領した側(以下「自系」)の制御部100に属するSwitch120が持つコピー機能にてコピーされ、1つは自系のメモリ160へ、もう1つは反対側(以下「他系」)の制御部400のメモリ460へと転送される。これにより、ディスクアレイ装置10の内部で、ライトデータが自系と他系の両メモリ160及び460に同時に格納される「ミラーライト」動作を実現することができる。仮に、Switch120がコピー機能を持たない場合は、データは自系メモリ160に一度格納され、その後自系CPU150が他系メモリ460にデータを転送することでミラーライトを実現する。また、このミラーライトにより、例えば自系メモリ160に格納したデータをディスク220に格納する前に、自系の制御部100が故障したとしても、他系のメモリ460にも同一のデータが格納されているため他系の制御部400が処理を引き継ぎ、データをディスク装置220に書き込むことができる。
【0074】
<メモリの内部構成>
上書きライト時の基本的な処理は、図9のフローチャートと同様であるが、データ受領準備を行うステップS200と、転送終了の確認を行うステップS600において、第1の実施形態とは異なる処理が実行される。つまり、ステップS200では、上書きライトである場合は、自系メモリ160と他系メモリ460に格納されているデータに対しチェックビットの変更が行われた後、他系メモリ460のデータに対するチェックビットの更新が確定したことが確認できた場合に、処理は、データ転送許可フェーズであるステップS300に移行する。また、ステップS600では、自系メモリ160と他系メモリ460に転送されたデータの上書き更新が完了したことがそれぞれ確認された後に、処理はホスト計算機40に転送結果を報告するステップS700に移行する。
【0075】
これらの処理を実現するには、自系CPU150と他系CPU450との間で処理の依頼とレスポンス、処理状況のステータスをシェアする必要がある。
【0076】
そこで、第2の実施形態では、メモリ160のシステム領域1620に2つの新しいテーブルが設けられている。
【0077】
図16は、第2の実施形態におけるメモリ160の内部構成を示す図である。図16に示されるように、第2の実施形態では、追加の構成として、自系CPU150と他系CPU450が処理の依頼および結果の通達に使用する依頼テーブル16250(図17参照)と、依頼に対するお互いの処理状況をシェアするためのテーブルであるステータス管理テーブル16260(図18参照)と、が新たに設けられている。
【0078】
<新たに設けられたテーブルの内容>
図17は、依頼テーブル16250の構成例を示す図である。依頼テーブルは、自系装置が他系装置に対象データの保証コードのチェックを依頼する場合に発行されるテーブルである。
【0079】
図17において、リストNo162510は、複数枚ある依頼テーブルを識別するために割り振られた番号である。セグメントNo162520は、処理対象のデータが格納されている他系メモリ460内のセグメントの番号である。チェックビット162540、LUN162550およびLBA162560は、チェック対象データの期待値である。なお、他系のメモリ(キャッシュメモリ)のセグメントNoを知るための方法としては、例えば、特許文献2に開示されている方法(他系のメモリの状態を参照できる技術)を採用することができる。
【0080】
図17に示される例では、自系CPU150が、他系のメモリのセグメントNoが100の位置に格納されているデータの保証コードについて、チェックビット部分が「1」、LUNが「10」、LBAが「200」であることをチェックするように他系CPU450に対して依頼するときの設定例となっている。
【0081】
また、Result162570は他系CPU450からのチェック結果が格納される領域である。付与された保証コードが依頼情報と同一であればOKが、チェック結果が同一でない場合はNGがそれぞれ入力される。チェック結果が入力されていない場合には、N/Aとなっている。
【0082】
図18は、ステータス管理テーブル16260の構成例を示す図である。このステータス管理テーブルは、自系CPUから他系CPUへの依頼状況を管理するためのテーブルである。
【0083】
図18において、リストNo162610は、依頼テーブル16250のリストNo162510と同一の数値が入っており、これにより各依頼状況の管理が可能となっている。自系ステータス162620は依頼元である自系CPUの処理ステータスを示し、自系更新Time162630は自系CPU150が自系ステータス162620を更新した時間を示している。また、他系ステータス162640は依頼先である他系CPU450の処理ステータスを示し、他系更新Time162650は他系CPU450が他系ステータス162640を更新した時間を示している。ステータス管理テーブル16260の具体的な使用方法については、後述する図21の説明で明らかにする。
【0084】
<上書きライト完了保証処理の内容>
上書きライト時の基本的な処理は、図9のフローチャートと同様であるので、第1の実施形態とは異なる処理、つまり、データ受領準備を行うステップS200と、転送終了の確認を行うステップS600について、以下説明する。
【0085】
図19は、第2の実施形態における、ホスト計算機40からのデータ転送要求に対して自系CPU150が行う受領準備処理(ステップS200)の詳細を説明するためのフローチャートである。
【0086】
まず、ホスト計算機40からのデータライト要求を受け取った自系CPU150は、要求コマンドのターゲット情報から抽出したライト対象データのLUN、LBA、及びLENGTHをキーに、メモリ管理テーブル16230を参照することで、対象データが自系メモリ160に存在するか否かを判定する(ステップS210)。
【0087】
ステップS210の判定の結果、対象データがメモリ上に存在する場合、自系CPU150はキャッシュヒットであると判断し(判定結果、YES)、まず自系のメモリ160上データのチェックビットに対し、旧データが未更新であることを示す「1」をライトする(ステップS211)。次に、自系CPU150は、他系メモリ460上のデータのチェックビットに対して、未更新データを示す「1」をライトし(ステップS212)、他系CPU450に依頼テーブル16250を用いてチェックするように依頼通知する(ステップS213:詳細は図20にて説明)。
【0088】
そして、他系CPU450のチェック結果が正常である場合(判定:OK)、自系CPU150は、対象データのチェックビットが正しく更新できていると判断し、DMA転送(ホストアダプタによる転送)を行うために必要な情報である転送リスト16240を作成し(ステップS216)、本処理を終了させる。
【0089】
一方、ステップS214の判定において、他系CPU450のチェック結果が正常でない場合は(判定:NG)、自系CPU150は、プログラムのエラーやハードウェアの故障等により、他系制御部400が正常に動作していないと判断し、他系制御部400を閉塞させ、ホスト計算機40の制御ソフトウェアを通じて管理者に障害発生を通知するとともに、以後自系制御部100のみのシングル動作に切り替える(ステップS217)。その後、自系CPU150は、DMA転送リスト設定処理を行い(ステップS216)、本処理を終了する。
【0090】
また、ステップS210の判定の結果、対象データがメモリ上に存在しない場合、自系CPU150はキャッシュミスであると判断する(判定結果、NO)。そして、処理は、そのままDMA転送リスト16240の設定処理であるステップS216に移行する。
【0091】
図20は、自系CPU150が他系CPU450に対するチェック依頼を発行し終了結果を得るステップS213の詳細を説明するためのフローチャートである。
【0092】
自系CPU150は、依頼テーブル16250およびステータス管理テーブル16260を初期化した後に、依頼テーブル16250にチェック対象のセグメントNo、チェックビット値、LUN、及びLBAの情報をセットし(ステップS230)、他系CPU450に対して依頼テーブル16250のリストNo162510を通知することでチェックの依頼を送信する(ステップS231)。ここで、ステップS230では依頼テーブル16250のResult162570には初期値であるN/Aが入っている。
【0093】
ステップS231の後、自系CPU150は、依頼テーブル16250に対応するステータス管理テーブル16260の自系ステータス162620を「依頼中」に変更し、自系更新Time162630に現在の時間を入力する(ステップS232)。また、自系CPU150は、依頼テーブル16250のResult162570がチェックOKを示す「OK」、もしくは、チェック異常を示す「NG」に更新されているかを確認する(ステップS233)。Result162570に「OK」が入力されている場合は、自系CPU150は、他系CPU150のチェックが正常に終了したと判断し、判断結果として転送OKをリターンして本処理を終了する。
【0094】
また、ステップS233の判定の結果がNGである場合、自系CPU150は、現在時刻と自系更新Time162630もしくは他系更新Time162650の差分が規定の時間を超過しているかを判断するタイムアウトチェックを行う(ステップS234)。ステップS234の判断結果がYESの場合は、自系CPU150は、他系に障害が発生していると判断し、判定結果として転送NGをリターンして本処理を終了する。
【0095】
一方、ステップS234の判断結果がNOである場合は、処理は再度他系のチェック更新を確認するステップS233へと移行する。
【0096】
他系CPU450は、ステップS231で発行されたチェック依頼を受け取ると、依頼テーブル16250を参照し、チェック対象項目を確認する(ステップS236)。そして、他系CPU450は、ステータス管理テーブル16260の他系ステータス162640を「処理中」に更新するとともに、他系更新Time162650に現在の時間を入力する(ステップS237)。次に、他系CPU450は、チェック対象データのUDTをリードし、その内容が依頼テーブル16250に記載されているものと等しいか否かを比較し(ステップS238)、全項目が一致する場合はチェック正常を示す「OK」を、一致しない項目がある場合はチェック異常を示す「NG」を、依頼テーブル16250のResult162570に入力する(ステップS239)。また、他系CPU450は、ステータス管理テーブル16260の他系ステータス162640に「完了」を入力すると共に、他系更新Time162650に現在の時間を入力する(ステップS240)。その後、他系CPU450は、自系CPU150に対し、依頼テーブル16250のリストNo162510を通知することでチェックの終了を通知する(ステップS241)。
【0097】
<ステータス管理テーブルの変化の様子>
図21は、自系CPU150と他系CPU450の通信についての補足説明図であり、ステータス管理テーブル16260が更新される契機と入力値とを時系列に表現した図である。なお、図中のステップの欄は、図20のステップ番号に対応する。
【0098】
まず、ステップS230にてステータス管理テーブル16260の初期化が行われた場合、すべての入力値が初期値を示すN/Aとなる。次に、ステップS232にて自系CPU150が他系CPU450に対するチェック依頼を送信した場合には、自系ステータス162620が「依頼中」に、自系更新Time162630がそのときの時刻にそれぞれ更新される。
【0099】
一方、他系ステータス162640および他系更新Time162650は初期値「N/A」が入力されたままとなる。その後、ステップS237にて他系CPU450がチェックを開始した際には、他系ステータス162640は「処理中」に、他系更新Time162650はそのときの時刻にそれぞれ更新される。そして、ステップS240において、他系CPU450のチェックが完了した際に、他系ステータス162640が「完了」に、他系更新Time162650がそのときの時刻にそれぞれ更新される。なお、自系及び他系更新Timeは、CPUのクロックカウンタ値で表されている。
【0100】
<その他追加説明>
以上の更新フローをとることにより、依頼元である自系CPU150が依頼先である他系CPU450のチェック状態を確認することができる。また、更新Timeを記録することで他系CPU450からの応答が一定時間以上ない場合に、他系制御部400に障害が発生している可能性があることを自系CPU150が知ることができる。
【0101】
また、ホストアダプタ110からの転送後のチェックであるステップS600においても、自系メモリ160と他系メモリ460のデータが正しく上書きされていることを確認する必要があるが、この場合においても、図19及び20に示すフローチャートを用いることで実行可能である。
【0102】
以上より、第2の実施形態では、ミラーされたデータがそれぞれのメモリ160及び460に更新されたことを確定した後に、ホスト計算機40に対して応答を返すことが可能となる。
【0103】
また、第1および第2の実施形態では保証コードにDIFを用いたが、LA/LRCを用いた場合においても、LA/LRCに上書き確定用のチェックビットを設けることで、本実施形態と同様の機能を実現することが可能である。
【0104】
(3)まとめ
i)本発明は、高速、高信頼にデータを格納する装置である、ディスクアレイ装置に適用することができる。
【0105】
ii)本発明では、メモリ160には、ディスク部200における位置情報(LUN342やLBA351)と書き込み確定を保証するためのチェックビット341とを含む保証コード310を有する更新対象の旧データ301が格納されている。そして、CPU150が旧データ301の更新である更新データ302の書き込み要求をホスト計算機40から受信した際には、旧データ301のチェックビット341の値を更新データ302に付与する値である「0」とは異なる「1」に変更した後に、ホスト計算機40に更新データ302の転送開始を指示する。ホストアダプタ110は、ホスト計算機40から受信した更新データ302に、位置情報と書き込み確定を保証するためのチェックビット341(「0」に設定)を含む保証コード310を付与し、保証コード付更新データをメモリ160に転送する。これにより、更新データ302がメモリ160に正しく書き込まれた場合に、変更後のチェックビット341(「1」)が変更前のチェックビット341(「0」)に戻るようにする。このようにすることにより、メモリ160におけるデータのチェックビットが「1」のままであれば、上書き保存が完了していないことが分かり、上書きを確定してからホスト計算機40からのデータ転送のセッションを終了させることができる。よって、ディスクアレイ装置10内でのデータロストの危険性を低下させることができる。
【0106】
そして、ホストアダプタ110は、CPU150からの更新データ302のメモリ160への書き込み完了の通知をホスト計算機40に送信する。通知を受け取った跡に、ホスト計算機40がデータ転送を終了させる。これにより、メモリ160に更新データが上書き保存されたことが保証され、安全にデータ転送セッションを終了させることができるようになる。
【0107】
さらに、保証コード310に、データエラーを検出するためのCRCコード320が含まれる場合、CPU150が、メモリ160に書き込まれた更新データ302から演算して得られた情報とCRCコード320とを比較し、両者が一致する場合に更新データ302のメモリ160への書き込みを確定させるようにしてもよい。これにより、転送途中でデータエラーが発生してもエラーを含むデータがメモリ160に書き込まれたまま転送セッションが終了することを防ぐことができる。ただし、CRCコードチェックをするとCPU150に負荷が掛かるので、上述のように、UDT(LA)330とチェックビット341のみを用いて上書き確定処理をすることにより、CPU150の負荷を軽減(I/O処理性能の低下を防止)することができる。つまり、本発明では、信頼性重視か性能重視かによって、CRCを用いるか否か使い分けすることができる。
【0108】
iii)本発明の別の態様では、制御部100(自系)と、制御部100と同様の構成を有する制御部400(他系)を設け、両者を通信可能に設定し、ミラーリングを実現している。自系制御部100の処理動作は第1の実施形態の動作に加えて、他系に対して、旧データのチェックビットを「0」から「1」に変更し、自系と同様に他系でもメモリ460に更新データのコピーが確実に上書きされるように制御している。このようにすることにより、自系及び他系に同一の更新データを保持させることができ、自系に障害が発生しても他系のメモリ460から確実に更新されて上書き保証されたデータを読み出すことができるようになる。
【0109】
実施形態では、自系CPU150が他系メモリ460の内容を直接チェックしたり、チェックビットの変更をしたりしているが、自系CPU150が他系CPU450に他系メモリ460の内容のチェックやチェックビットの変更を依頼し、それに応答して他系CPU450が実際に内容チェックやチェックビット変更を行うようにしても良い。
【0110】
iv)なお、本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD−ROM、DVD−ROM、ハードディスク、光ディスク、光磁気ディスク、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
【0111】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータ上のメモリに書きこまれた後、そのプログラムコードの指示に基づき、コンピュータのCPUなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。
【0112】
また、実施の形態の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することにより、それをシステム又は装置のハードディスクやメモリ等の記憶手段又はCD-RW、CD-R等の記憶媒体に格納し、使用時にそのシステム又は装置のコンピュータ(又はCPUやMPU)が当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしても良い。
【符号の説明】
【0113】
10:ディスクアレイ装置
20:SAN
30:LAN
40:ホスト計算機
100:ディスクアレイ装置制御部
110:ホストアダプタ
120:Switch
130:ディスクアダプタ
140:NIC
150:CPU
160:メモリ
170:内部バス
180:メモリ専用バス
190:ディスクアダプタ専用バス
200:ディスクアレイ装置ディスク部
210:ディスク装置群
220:ディスク装置
【技術分野】
【0001】
本発明は、ストレージ装置、及びその制御方法、並びにプログラムに関し、例えば、ストレージ装置(ディスクアレイ装置)の上位装置であるホストからデータを受け取った場合(以下、データライト)の、ディスクアレイ装置内の書き込みを確定させるための技術に関する。
【背景技術】
【0002】
ディスクアレイ装置では、RAID(Redundant Array of Independent (or Inexpensive) Disks)構成を採ることで、複数ディスクの並列動作を可能とし、ホストからのデータ読み出し(以下、データリード)およびデータライトを高速に実現している。また、ディスクアレイ装置では、Mirror、Parity等のRAIDレベルに応じた冗長データを作成することにより、ディスク故障に対して高い耐障害性を実現している。
【0003】
さらに、ディスクアレイ装置では、システム全体の信頼性を向上する目的で、受領データに対し転送中のデータ化けや転送先アドレス誤りを検出するための保証コードが付与されている。例えば、データライト時には、ホストから受領したデータは一定のデータ長である論理データブロックに分割され、論理データブロックごとに保証コードの付加を行い、保障コード付論理データがキャッシュメモリやディスクに格納される。その後、ホストからのデータリード要求時には、ホスト転送前に保証コードをチェックすることで、ホストに転送するデータがライト時のものと同一であることが保証される。
【0004】
保証コードの具体例としては、一般的に転送中のデータビットエラーを検出するためのLRC(Longitudinal Redundancy Check)、および、アドレス誤りを検出するためのLA(Logical Address)を付与する技術が知られている(特許文献1参照)。近年では、保証コードの標準フォーマットとして、ストレージインタフェース技術委員会であるT10が提唱する、DIF(Data Integrity Field)が広まっている。
【0005】
また、保証コードの生成・付与およびチェック・削除をサポートするインタフェース機器を、ディスクアレイ装置のホストアダプタとして使用することもある。この場合、ディスクアレイ装置の入り口であるディスクアダプタが、データライト時にホストから受領したデータに対して保証コードを付与する。一方、データリード時には、ディスクアダプタが、保証コードの整合性をチェックする。このようにすることで、装置内でデータエラーや紛失が発生していないことを保証することができるようになっている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2001−202295号公報
【特許文献2】特開2003−323263号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1に示されるようなディスクアレイ装置では、保証コードを用いてデータリード時におけるデータエラー(データ化けやデータの欠落等)がないことを確認しているが、データライト時においてキャッシュメモリ上にデータが間違いなく書き込まれたことを保証することは考慮されていない。一般的なディスクアレイ装置は、I/O(Input/Output)処理性能向上のため高速低容量のキャッシュメモリを備えており、データライト時には非同期ライト処理と呼ばれる処理方式を採っている。これは、ホストから転送されたデータをキャッシュメモリに格納した時点で、ホストに対し転送完了を通知し、その後任意のタイミングでキャッシュメモリ上のデータをディスク装置に書き込む処理方式である。
【0008】
このため、特許文献1に開示されるようなディスクアレイ装置では、データ書き込み時の転送エラー発生によりキャッシュメモリにデータが正しく書き込まれずに、ホストからのデータ転送セッションがクローズされてしまう場合がある。つまり、ホストは、ディスクアレイ装置からの転送終了を受領した時点でデータ転送が正常終了したと判断し、転送セッションをクローズしてしまう。その後、ディスクアレイ装置がキャッシュメモリ上のデータのエラーを検出したとしても、ホストに対するデータの再送要求は実行できない。結果的に、ディスクアレイ装置は受領したデータを紛失するデータロストを起こしてしまう。
【0009】
従って、キャッシュメモリにデータが間違いなく格納されたことを保証するためには、ホストに転送完了を通知する前に、キャッシュメモリ内に格納されたデータの保証コードをチェックし、転送エラーが発生していないことを確認する必要がある。
【0010】
本発明はこのような状況に鑑みてなされたものであり、キャッシュメモリにデータが正しく書かれたことを保証してデータロストの発生を防止するための技術を提供するものである。
【課題を解決するための手段】
【0011】
本発明では、キャッシュメモリへのデータ転送確定を保証するための手段として、保証コードのアドレス部をチェックする処理方式をとる。ただし、アドレス部のみのチェックの場合、キャッシュ上に存在するデータを上書き更新(以下、上書きライト)する場合の更新検出能力がない。なぜなら、上書きの前後でアドレス情報は不変であるため、どの契機でチェックしてもチェック結果は常に同じとなるためである。
【0012】
そこで、本発明では、保証コードに上書き更新を確定するためのチェックビットを設け、アドレス情報とチェックビットの双方を確認することで、上書きライトを確定させている。
【0013】
まず、上書きライト時にはホストからのデータ転送が始まる前に、キャッシュ上に存在する上書き対象データに付与された保証コードのチェックビットに未更新であることを示す「1」を設定する。次に、ホストに対しデータ転送要求を発行し、ホストアダプタに、ホストから転送されるデータに付与する保証コードのチェックビット部分に、更新済みであることを示す「0」を付与するように指示を出す。ホストアダプタからキャッシュメモリに転送されるデータには、チェックビットに更新済みを示す「0」が付与された保証コードが付与されるため、キャッシュメモリ上のデータが正しく更新された場合は、事前に「1」に設定していたチェックビットが「0」に更新されているはずである。ゆえに、キャッシュメモリへの転送終了後、更新対象データの保証コード部分のうち、アドレス部とチェックビットのみをチェックすれば、アドレス誤りと上書き更新の双方を確定することが可能となる。
【0014】
即ち、本発明によるディスクアレイ装置は、メモリ(160)と、転送処理部(110)と、メモリ制御部(150)と、を有する。ここで、メモリ(160)には、ディスク部(200)におけるデータの位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)とを含む保証コード(310)を有する更新対象の旧データ(301)が格納されている。そして、メモリ制御部(150)が旧データ(301)の更新である更新データ(302)の書き込み要求を外部機器(40)から受信した際には、旧データ(301)のチェック情報(341)を更新データ(302)に付与するチェック情報(341)と異なる情報に変更した後に、外部機器(40)に更新データ(302)の転送開始を指示する。転送処理部(110)は、外部機器(40)から受信した更新データ(302)に、位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)を含む保証コード(310)を付与し、保証コード付更新データをメモリ(160)に転送する。これにより、更新データ(302)がメモリ(160)に正しく書き込まれた場合に、変更後のチェック情報(341)が変更前のチェック情報(341)に戻るようにする。なお、メモリ制御部(150)は、書き込み要求に含まれる旧データ(301)を特定する情報を参照し、メモリ(160)に更新対象の前記旧データ(301)が存在するか確認し、存在する場合に旧データ(301)のチェック情報(341)を変更するようにする。
【0015】
また、転送処理部(110)は、メモリ制御部(150)からの更新データ(302)のメモリ(160)への書き込み完了の通知を外部機器(40)に送信する。
【0016】
なお、転送処理部(110)が、更新データ(302)を所定単位長(例えば、512バイト)で複数に分割して複数のデータブロック(300)を生成し、それぞれのデータブロック(300)に保証コード(310)を付与するようにしても良い。この場合、メモリ制御部(150)は、データブロック(300)単位で、更新データ(302)のメモリ(160)への書き込みを確定させ、変更後のチェック情報(341)を変更前のチェック情報(341)に戻すようにする。
【0017】
また、メモリ制御部(150)は、更新データ(302)に付されている保証コード(310)の位置情報(342,351)と更新データ(302)が書かれるべきディスク部(200)の位置を示す設定情報(16240)とを照合することにより、更新データ(302)が正しいデータか否かを確認する。
【0018】
さらに、保証コード(310)が、データエラーを検出するためのデータエラー検出コード(320)を含む場合、メモリ制御部(150)が、メモリ(160)に書き込まれた更新データ(302)から演算して得られた情報とデータエラー検出コード(320)とを比較し、両者が一致する場合に更新データ(302)のメモリ(160)への書き込みを確定させるようにしてもよい。
【0019】
さらなる本発明の特徴は、以下本発明を実施するための形態および添付図面によって明らかになるものである。
【発明の効果】
【0020】
本発明によれば、ディスクアレイ装置においてデータロストを起こす可能性を低下させることができ、ディスクアレイ装置のデータ信頼性を向上させることができる。
【0021】
また、保証コードのアドレス部チェックのみでは検出できない、キャッシュ上データの上書き更新についてのエラーを検出することができるようになる。
【図面の簡単な説明】
【0022】
【図1】本発明の第1の実施形態におけるディスクアレイシステムの概略構成を示すブロック図である。
【図2】DIFフォーマットについての概要図である。
【図3】メモリの内部構成を示す図である。
【図4】LU管理テーブルの構成例を示す図である。
【図5】メモリ管理テーブルの構成例を示す図である。
【図6】転送リストの構成例を示す図である。
【図7】本発明で使用するUDTのフォーマット例を示す図である。
【図8】データ上書きライトの動作概要を説明するための図である。
【図9】データ上書きライトを説明するためのフローチャートである。
【図10】ホスト計算機からのデータ転送要求に対してCPUが行う受領準備処理を説明するためのフローチャートである。
【図11】ホストアダプタがデータに対して保証コードを付与する際の処理を説明するためのフローチャートである。
【図12】CPUがキャッシュへのデータ転送終了を確認する際の処理を説明するためのフローチャートである。
【図13】CPUがホスト計算機に対してデータ転送結果を送信する際の処理を説明するためのフローチャートである。
【図14】管理ソフトウェアがユーザに動作モードの設定インタフェース例を示す図である。
【図15】第2の実施形態におけるディスクアレイシステムの概略構成を示すブロック図である。
【図16】第2の実施形態におけるメモリの内部構成を示す図である。
【図17】依頼テーブル16250の構成例を示す図である。
【図18】ステータス管理テーブル16260の構成例を示す図である。
【図19】第2の実施形態における、ホスト計算機からのデータ転送要求に対してCPUが行う受領準備処理の詳細を説明するためのフローチャートである。
【図20】自系CPUが他系CPUに対してのチェック依頼を発行し、終了結果を得るまでの処理の詳細を説明するためのフローチャートである。
【図21】自系CPUと他系CPUの通信に関する概要を説明するための図である。
【発明を実施するための形態】
【0023】
本発明は、メモリ(キャッシュメモリ)内の旧データを更新データで上書きする際に、確実に上書き保存できたことを保証するための技術を開示するものである。
【0024】
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。なお、本発明では、データ保証コードにDIFを用いることを前提としているが、別のフォーマットを用いても良い。
【0025】
(1)第1の実施形態
<システム構成>
図1は、本発明の第1の実施形態によるディスクアレイシステム(ストレージシステム)の概略構成を示すブロック図である。ディスクアレイシステムは、ディスクアレイ装置(ストレージ装置)10と、ホスト計算機40と、を備えている。
【0026】
図1において、ディスクアレイ装置10は、ディスクアレイ装置10全体の制御を行なう制御部100と、データが記憶されるディスク部200とから構成される。
【0027】
ディスクアレイ装置10には、制御部100のホストアダプタ110を介して、ホスト計算機(ディスクアレイ装置10を利用する上位装置(例えばアプリケーションサーバ))40が接続されている。なお、ディスクアレイ装置10とホスト計算機40を接続するためのインタフェースには、例えば、データ転送に用いられるSCSIプロトコルに対応するSAN(Storage Area Network)20が用いられる。SAN20の構築には、例えば、ファイバチャネル、SCSI(Small Computer System Interface)、iSCSI(internet Small Computer System Interface)、USB(Universal Serial Bus)、IEEE1394バス等を用いることが可能である。
【0028】
また、ディスクアレイ装置10に接続されるホスト計算機40は、複数台設置されていても良い。また、SAN20に代えて、他種のインタフェースが採用されても良い。
【0029】
ホスト計算機40には、ディスクアレイ装置10の動作を制御する制御ソフトウェアがインストールされており、ホスト計算機40で実行される制御ソフトウェアにより、ディスクアレイ装置10に対してコマンドなどを発行し、ディスクアレイ装置10の動作を制御することができる。ただし、ディスクアレイ装置10とホスト計算機40で実行される制御ソフトウェアとは、例えばLAN(Local Area Network)30を経由して通信されるため、制御部100にはディスクアレイ装置10がLAN30と接続するためのインタフェースであるNIC(Network Interface Card)140を備えている。ディスクアレイ装置10の管理、制御或いは保守を行う計算機は、ホスト計算機40とは別の計算機が使用されても良い。また、LAN30に代えて他種の通信ネットワークが利用されても良い。
【0030】
制御部100は、ホスト計算機40が接続されて当該ホスト計算機40との通信を行うホストアダプタ110と、制御部100及びディスク部200が互いに通信するためのインタフェースとなるディスクアダプタ130と、LAN30の接続インタフェースであるNIC140と、ディスクアレイ装置10全体の制御を行なうCPU(Central Processing Unit)150と、Switch120と、を備えている。CPU150と、ホストアダプタ110と、ディスクアダプタ130は、Switch120を介して接続されている。各デバイス間においては、例えばPCI(Peripheral Component Interconnect)のような内部バス170により通信が行われる。なお、Switch120に代えてIOH(I/O HUB)を用いても良い。
【0031】
また、制御部100は、CPU150がディスクアレイ装置10を制御するために必要なコンピュータプログラムやデータが記憶されるメモリ160を備えている。CPU150とメモリ160とは、例えばDDR3(Double Data Rate 3)等の専用バス180で接続されている。さらに、本発明においてメモリ160は、ホスト計算機40とディスク部200との間で通信されるデータを一時的に記憶するキャッシュメモリとしての役割も備えている。
【0032】
ホストアダプタ110は、DMA(Direct Memory Access)転送機能111を備えている。そして、ホストアダプタ110は、CPU150によってメモリ160内で設定される転送リストに従ってデータ転送を実施する。また、ホストアダプタ110は、DIF生成・チェック機能112を備えている。つまり、ホストアダプタ110は、データライト時には、ホスト計算機40から受領したデータに対しデータ保証コードであるDIFを付与することができ、また、データリード時には、メモリ160から転送されたデータから演算して得られたコードと付加されている保証コードとを比較することで、ディスクアレイ装置10内でデータが変化していなかチェックすることができる。両者が同一であれば、データが変化していないことが保証される。
【0033】
ディスクアダプタ130は、ホストアダプタ110と同様のDMA機能131およびDIF機能132を備えており、メモリ160とディスク装置210間の転送における転送エラーの検出を行うことが可能となっている。
【0034】
ディスク部200は、複数のディスク装置群210を備えている。各ディスク装置群210はさらに複数のディスク装置220から構成され、複数のディスク装置220のうちの2以上のディスク装置220によりRAIDグループが構成される。ディスク装置220は、例えばハードディスクドライブ(HDD)であるが、他種の物理ディスクドライブ、例えば、DVD(Digital Versatile Disk)ドライブなどであっても良い。また、物理ディスクドライブに代えて、半導体メモリドライブ(例えばフラッシュメモリドライブ)などの他種の物理記憶装置を採用しても良い。なお、ディスク装置群210とディスクアダプタ130とはファイバチャネル、SAS(Serial Attached SCSI)等の専用バス190により接続されている。
【0035】
<DIFフォーマットの構成>
図2は、DIFフォーマットの概略構成を示す図である。図2に示されるように、DIFを使用する場合、ホスト計算機40から受領したデータは512Byte単位の論理データブロック300に分割され、そこにデータ保証コードである8ByteのDIF310が付与される。DIF310は、例えば2ByteのCRC(Cyclical Redundancy Check)コード320と合計6ByteのUDT(User Defined Tag)330より構成される。
【0036】
CRC320は従来のLRCに相当するデータビットエラーを検出するためのコードであり、512Byteの論理データブロック300に対するCRC計算結果が格納される。また、UDT330は2ByteのApplication Tag340と4ByteのReference Tag350より構成され、ユーザが任意の値を設定可能であるが、一般的に従来のLA(Logical Address)に相当する使われ方(アドレス(位置)誤りを検出する)が想定されている。つまり、UDT(Application Tag)340は従来のLUN(Logical Unit Number)に相当し、UDT(Reference Tag)350は、従来のLBAに相当する。
【0037】
<メモリの内部構成>
図3は、メモリ160の内部構成を示す図である。図3に示されるように、メモリ160は、ユーザデータを一時的に格納するために使用される領域であるデータキャッシュ領域1610と、ディスクアレイ装置10を制御するためのプログラムや各種テーブルが格納されているシステム領域1620とにより構成される。
【0038】
データキャッシュ領域1610は、任意のサイズを持つ複数のセグメントに分割され、セグメント単位でユーザデータ16110を格納する領域である。
【0039】
システム領域1620は、CPU150が実行する各種プログラムであるプログラム群16210と、RAIDグループ内に作成されたLU(Logical Unit)のアドレス空間とディスク装置内の物理アドレス空間との対応を管理するためのLU管理テーブル16220と、データキャッシュ領域1610のセグメントを管理するためのメモリ管理テーブル16230と、CPU150によって作成され、CPU150がホストアダプタ110もしくはディスクアダプタ130に対してDMA転送を指示するために使用する転送リスト16240と、を格納している。
【0040】
<各テーブル及び転送リストの構成>
図4は、LU管理テーブル16220の構成を示す図である。図4において、LUN162210は、作成されたLUの識別子であり、この識別子にはユニークな数字が割り当てられる。LUサイズ162220は、LUの容量を示している。ディスクNo162230は、LUを格納するディスク装置220のディスク番号を示し、START LBA162240およびLAST LBA162250はLUの開始アドレスおよび最終のアドレスを示している。
【0041】
図5は、メモリ管理テーブル16230の構成を示す図である。図5において、セグメントNo162310は、セグメントの識別子であり、この識別子にはそれぞれユニークな数字が割り当てられている。LUN162320、LBA162330、及びLENGTH162340は、セグメントに格納されているユーザデータを管理するための情報である。LUN162320は対象データのLUナンバーを示し、LBA162330はLU内の対象データの先頭アドレスを示し、LENGTH162340は対象データのデータ長を示している。なお、格納すべきデータサイズが1セグメントのサイズよりも大きいときには、複数のセグメントに亘って当該データのLUN、LBA及びLENGTHが管理されることになる。
【0042】
図6は、転送リスト16240の構成を示す図である。転送リストは、CPU150によって作成されるホストアダプタ110に対する命令文である。ホストアダプタ110は、この転送リストを参照し、転送処理を実行する。なお、図6では、リストは1つしか示されていないが、複数の転送リストが作成されメモリ160に格納される。
【0043】
図6において、リストNo162410は複数枚あるリストの識別子であり、この識別子にはユニークな数字が割り当てられる。転送方向162420は、DMA転送の転送方向を示す情報である。例えば、DMA転送を行うデバイスから見て自身のバッファからデータが転送される方向を「RD(リード)」、反対に自身のバッファにデータが入ってくる方向を「WR(ライト)」として転送方向が示される。
【0044】
セグメントNo162430およびLENGTH162440は、DMA転送先のアドレスおよび転送サイズを示す情報である。また、チェックビット162450、LUN162460、及びLBA162470は、本実施形態で使用するUDT330(詳細は図7で説明)の設定内容を示す情報である。Mode162480は、DIFに対する動作内容を示す情報である。ここには、例えば、データにDIFを付与する場合は「付与」、チェックのみ実施する場合は「Check」、チェック後にDIFを削除する場合は「Check & Delete」のようなコマンドに対する数値が入力される。
【0045】
例えば、図6に示される転送リスト16240によれば、ホストアダプタ110は、メモリ160のセグメントNo.100に対して、LUN10のLBA200に格納されるべき8LENGTH分のデータにDIFを付与し、チェックビットを0として書き込む処理を実行する。
【0046】
図7は、本発明の実施形態におけるUDT(User Defined Tag)の使用例を示す図である。図7に示されるように、本発明では、UDT330として、Application Tag340にデータ上書き確定のチェックビット341と、転送先LU番号であるLUN342が設定される。また、Reference Tag350にはLBA351が設定される。このように、LUN342およびLBA351を定義することにより、従来のLAと同様のアドレス誤りチェック機能を実現し、さらにチェックビット341によりキャッシュに上に格納されているデータ(旧データ)への上書きライト完了を保証することができる。
【0047】
<上書きライト完了保証処理の内容>
続いて、図8及び9を参照して、上書き完了保証処理の具体的な動作(例)について説明する。図8は、メモリ上に存在するデータに対する更新である、上書きライトの動作概要図であり、図9は、図8をフローチャートとして表した図である。
【0048】
図8は、メモリ160に格納されている旧データ301を、ホスト計算機40が新データ302に更新し、その更新データをメモリに書き込むまでの様子を示している。データの流れが実線で、データ転送を行うために必要なコマンドの流れが破線でそれぞれ示されている。
【0049】
ホスト計算機40は、データ転送要求コマンド(書き込み要求)をディスクアレイ装置10に発行する(ステップS100)。コマンドを受け取ったCPU150は、データ転送要求コマンドを解釈(LUN、LBA及びLENGTHを特定する)し、データ受領準備処理を行う。このコマンド解釈により、メモリ160上に旧データ301が存在する(キャッシュヒット)かどうか分かる。データ受領準備処理として具体的には、CPU150は、キャッシュ上に旧データ301が存在する場合、旧データ301に付与されたチェックビット341に未更新データを示す「1(図8中、黒塗り)」を設定し、さらにホストアダプタ110に対して、新データ(更新データ)302へ付与するDIFの設定内容を含むDMA転送リスト(図6参照)を作成する。このとき、DMA転送リスト中の新データ302に付与するDIF310内のチェックビット341には更新済みを示す「0(図8中、白塗り)」を設定する(ステップS200)。なお、旧データがメモリ160上に存在しない(キャッシュミス)場合には、CPU150は、チェックビットの設定はせずに、データをそのまま転送するようにホスト計算機40に通知する。
【0050】
その後、CPU150は、ホスト計算機40に対してデータ転送許可通知を発行する(ステップS300)。データ転送許可通知を受け取ったホスト計算機40は、ディスクアレイ装置10に対し新データ302の転送を開始する(ステップS400)。
【0051】
また、新データ302を受け取ったホストアダプタ110は、転送リストの設定内容に従って新データ302の各ブロックに対してDIFを付与しながら、新データをブロック単位(図2参照)でメモリ160へ転送する。このとき、付与されるDIFのチェックビット341は更新済みを示す「0」と設定される(ステップS500)。
【0052】
ホストアダプタ110の転送終了後、CPU150はメモリ上のUDTを読み込み、チェックビット341を含むUDTの値が妥当であるか否かをチェックする(ステップS600)。すなわち、旧データ301が新データ302に確実に更新されている場合は、上書き更新のためLA部分に該当するLUN342およびLBA351は更新前と同じであるが、チェックビット341の値は更新済みを示す「0」となっているはずである。その後、CPU150は、ホストアダプタ110を介して、チェック結果に応じたレスポンスをホスト計算機40に送信し(ステップS700)、ホスト計算機40はレスポンス内容に応じて、転送の終了やデータ再送等のコマンド終了処理を実施する(ステップS800)。以上のステップにより、旧データ301が新データ302に確実に更新されたことを保証できるようになる。
【0053】
<ステップS200の詳細>
図10は、データ受領準備処理であるステップS200を詳細に説明するためのフローチャートである。
【0054】
CPU150は、ホスト計算機40からのデータライト要求を受け取ると、要求コマンドのターゲット情報から抽出したライト対象データのLUN、LBA、LENGTHをキーに、メモリ管理テーブル16230を参照することで、対象データがメモリ160に存在する(キャッシュヒット)か否かを判定する(ステップS201)。ステップS201の判定の結果、対象データがメモリ上に存在する場合、CPU150はヒット判定であると判断し(判定結果、YES)、メモリ160上データのチェックビットに対し、未更新データを示す「1」をライトする(ステップS202)。その後、CPU150は、ホストアダプタがDMA転送を行うために必要な情報である転送リスト16240を作成し(ステップS203)、本処理を終了する。なお、ステップS203で作成する転送リスト16240の具体例としては、転送方向162420に「WR」が、DIF設定Mode162480に「付与」が、チェックビット162450に更新済みを示す「0」が、LUN162460およびLBA162470に対象データのLUNおよびLBAが、それぞれ設定されたものが挙げられる(図6参照)。
【0055】
一方、ステップS201の判定の結果、対象データがメモリ上に存在しない場合、CPU150は、キャッシュミスであると判断し(判定結果、NO)、上書き更新用の処理であるステップS202は実施せず、そのまま、DMA転送リスト16240の作成へと移行する。
【0056】
<ステップS500の詳細>
図11は、ホストアダプタ110がホスト計算機40から受け取ったデータにDIFを付与しながらメモリ160へのDMA転送を実施するステップS500を詳細に説明するためのフローチャートである。
【0057】
まず、ホストアダプタ110は、ホスト計算機40から受領したデータを一定のデータ長である論理データブロックに分割し(ステップS501)、転送リスト16240の設定内容に従って各論理データブロックにDIF保証コードを付与する(ステップS502)。
【0058】
その後、ホストアダプタ110は、論理データブロックと保証コードを転送先であるメモリ160へと転送する(ステップS503)。また、ホストアダプタ110は、CPU150に対し転送終了を送信する(ステップS504)。なお、データサイズを転送単位長(例:512バイト+DIF)で除算すれば、何回転送すべきかが分かるので、転送完了か否か判断することができる。
【0059】
<ステップS600の詳細>
図12は、CPU150がキャッシュへ転送されたデータが正しく更新されていることを確認する処理であるステップS600を詳細に説明するためのフローチャートである。
【0060】
ホストアダプタ110からの転送終了通知を受け取ると、CPU150は、転送先のメモリから対象データのUDT部分をリードし、リードした情報と設定情報とが一致するかを確認する。具体的には、CPU150は、転送リスト16240を参照し、チェックビット162450、LUN162460、及びLBA162470の設定内容と、実際に付与されたUDTの値を比較することで本処理を実行する(ステップS601)。
【0061】
アドレス部であるLUNとLBAの値が確認され(ステップS602)、チェック結果が妥当である場合(判定OK)、処理はチェックビットの判定処理に移行する(ステップS603)。ステップS603の判定の結果が妥当であると判断された場合は(判定OK)、CPU150は旧データの更新が正常に完了したと判断し、転送OKの判定を行い(ステップS604)本処理を終了する。
【0062】
一方、ステップS603の判定結果が妥当でない場合は、データ更新が確定されていないと判断され(判定NG)、処理は、タイムアウトであるか否かを判断するステップS606に移行する。ステップS606では、CPU150は、ステップS603から規定の時間経過したかを判断し、規定の時間を経過していない場合は(判定NO)、再度ステップS603の処理を実行する。規定時間以上を経過した場合は、CPU150は、何らかの障害が発生していると判断し(判定YES)、転送NGの判定処理を行う(ステップS605)。
【0063】
また、ステップS602にてアドレス部のチェック結果が妥当でないと判断した場合(判定NG)においても、CPU150は、転送異常であると判断し、転送NGの判定処理を行う(ステップS605)。
【0064】
<ステップS700の詳細>
図13は、CPU150が転送終了ステータスをホスト計算機40へ送信する処理であるステップS700を詳細に説明するためのフローチャートである。
【0065】
まず、CPU150は、ステップS600の判定結果を基に、データ転送が正常に終了したか否かを判断する(ステップS701)。正常終了である場合は(判定「正常」)、CPU150はホスト計算機40に「正常終了」を送信し、本処理を終了する(ステップS702)。
【0066】
一方、ステップS701の結果が正常終了でない場合は(判定「異常」)、CPU150はホスト計算機40にデータ転送が失敗したことを示す「転送異常」を送信し(ステップS703)、本処理を終了する。
【0067】
以上により、本発明にてデータライト時に、ホスト計算機40からメモリ160にデータが転送された際に、ホスト計算機40に対して転送終了応答を送信する前に、メモリ160へのデータライトが確定したことを保証することができる。
【0068】
<その他追加説明等>
なお、以上の各ステップでは、非同期ライトを想定しメモリ160へのライトフローのみを記載したが、ディスクアレイ装置10としては、任意のタイミングでメモリ160に格納したデータをディスク装置220へと格納する処理を実行する。
【0069】
また、本実施形態では、CPU150への性能影響を考慮し、データ転送終了確定のためのチェック対象をUDT330のみに限定している。つまり、転送完了保証には、キャッシュメモリ上に転送されたデータからUDT(LA)/CRC(LRC)等を再計算して得られた結果とホストアダプタが付与した値とを比較し、両者が一致するか判断する必要がある。UDT(LA)はアドレス等の位置情報であるため、単純な比較のみでチェック可能である。しかし、CRC(LRC)はデータ部の排他的論理和等の演算をとったものであるため、チェックのためにはキャッシュメモリ上のデータに対しても排他的論理和等の演算を実行する必要がある。本処理をCPU150が担当した場合、CPU150のリソースが消費され、装置のI/O処理性能低下を引き起こしてしまう。このため、上述の第1の実施形態では、チェック対象をUDT330のみに限定している。
【0070】
ただし、信頼性向上のためCRC320を含むDIF310全体に対するチェックを行っても良い。この場合、図12に記載したステップS601でのリード&コンペア対象をDIF310全体に対して行えばよい。また、ホスト計算機40にインストールされた制御ソフトウェアを介して、チェック動作の設定・確認を可能とするインタフェースを提供することで、ユーザの要件に応じた設定が可能となる。具体的には、CPU150のI/O処理性能は低下するが、データの信頼性は100%保証可能であるDIF310フルチェックモード(高信頼性モード)、もしくは、フルチェックに比べて信頼性は若干落ちるもののCPU150のI/O処理性能低下を抑止可能なUDT330のみの簡易チェックモード(高性能モード)の2パターンを制御ソフトウェアにより提供することで実現可能である。なお、図14は、制御ソフトウェアのインタフェース例を示している。
【0071】
(2)第2の実施形態
第2の実施形態は、ディスクアレイ装置10内に制御部100を2つ設けたディスクアレイシステム(ストレージシステム)に関する。このような2重構成を採用するのは、ディスクアレイ装置10の、制御部100の一点障害によるシステムダウンを避けるためである。本実施形態では、システムに2つの制御部100を搭載した場合を想定しているが、制御部の数は2つに限られるものではない。以下では、第1の実施形態との差分を中心に説明することとする。
【0072】
<システム構成>
図15は、本発明の第2の実施形態によるディスクアレイシステム(ストレージシステム)の概略構成を示す図である。当該ディスクアレイシステムは、第1の実施形態と同様、ディスクアレイ装置(ストレージ装置)10と、ホスト計算機40と、を備えている。ただし、図15に示されるように、ディスクアレイ装置の内部構成が第1の実施形態とは異なっている。
【0073】
また、図15に示されるディスクアレイ装置10においては、2つの制御部100及び400が専用の通信線170で接続され、各制御部が1つのディスク部200を共有している。さらに、第2の実施形態では、ホスト計算機40から転送されたデータは、データを受領した側(以下「自系」)の制御部100に属するSwitch120が持つコピー機能にてコピーされ、1つは自系のメモリ160へ、もう1つは反対側(以下「他系」)の制御部400のメモリ460へと転送される。これにより、ディスクアレイ装置10の内部で、ライトデータが自系と他系の両メモリ160及び460に同時に格納される「ミラーライト」動作を実現することができる。仮に、Switch120がコピー機能を持たない場合は、データは自系メモリ160に一度格納され、その後自系CPU150が他系メモリ460にデータを転送することでミラーライトを実現する。また、このミラーライトにより、例えば自系メモリ160に格納したデータをディスク220に格納する前に、自系の制御部100が故障したとしても、他系のメモリ460にも同一のデータが格納されているため他系の制御部400が処理を引き継ぎ、データをディスク装置220に書き込むことができる。
【0074】
<メモリの内部構成>
上書きライト時の基本的な処理は、図9のフローチャートと同様であるが、データ受領準備を行うステップS200と、転送終了の確認を行うステップS600において、第1の実施形態とは異なる処理が実行される。つまり、ステップS200では、上書きライトである場合は、自系メモリ160と他系メモリ460に格納されているデータに対しチェックビットの変更が行われた後、他系メモリ460のデータに対するチェックビットの更新が確定したことが確認できた場合に、処理は、データ転送許可フェーズであるステップS300に移行する。また、ステップS600では、自系メモリ160と他系メモリ460に転送されたデータの上書き更新が完了したことがそれぞれ確認された後に、処理はホスト計算機40に転送結果を報告するステップS700に移行する。
【0075】
これらの処理を実現するには、自系CPU150と他系CPU450との間で処理の依頼とレスポンス、処理状況のステータスをシェアする必要がある。
【0076】
そこで、第2の実施形態では、メモリ160のシステム領域1620に2つの新しいテーブルが設けられている。
【0077】
図16は、第2の実施形態におけるメモリ160の内部構成を示す図である。図16に示されるように、第2の実施形態では、追加の構成として、自系CPU150と他系CPU450が処理の依頼および結果の通達に使用する依頼テーブル16250(図17参照)と、依頼に対するお互いの処理状況をシェアするためのテーブルであるステータス管理テーブル16260(図18参照)と、が新たに設けられている。
【0078】
<新たに設けられたテーブルの内容>
図17は、依頼テーブル16250の構成例を示す図である。依頼テーブルは、自系装置が他系装置に対象データの保証コードのチェックを依頼する場合に発行されるテーブルである。
【0079】
図17において、リストNo162510は、複数枚ある依頼テーブルを識別するために割り振られた番号である。セグメントNo162520は、処理対象のデータが格納されている他系メモリ460内のセグメントの番号である。チェックビット162540、LUN162550およびLBA162560は、チェック対象データの期待値である。なお、他系のメモリ(キャッシュメモリ)のセグメントNoを知るための方法としては、例えば、特許文献2に開示されている方法(他系のメモリの状態を参照できる技術)を採用することができる。
【0080】
図17に示される例では、自系CPU150が、他系のメモリのセグメントNoが100の位置に格納されているデータの保証コードについて、チェックビット部分が「1」、LUNが「10」、LBAが「200」であることをチェックするように他系CPU450に対して依頼するときの設定例となっている。
【0081】
また、Result162570は他系CPU450からのチェック結果が格納される領域である。付与された保証コードが依頼情報と同一であればOKが、チェック結果が同一でない場合はNGがそれぞれ入力される。チェック結果が入力されていない場合には、N/Aとなっている。
【0082】
図18は、ステータス管理テーブル16260の構成例を示す図である。このステータス管理テーブルは、自系CPUから他系CPUへの依頼状況を管理するためのテーブルである。
【0083】
図18において、リストNo162610は、依頼テーブル16250のリストNo162510と同一の数値が入っており、これにより各依頼状況の管理が可能となっている。自系ステータス162620は依頼元である自系CPUの処理ステータスを示し、自系更新Time162630は自系CPU150が自系ステータス162620を更新した時間を示している。また、他系ステータス162640は依頼先である他系CPU450の処理ステータスを示し、他系更新Time162650は他系CPU450が他系ステータス162640を更新した時間を示している。ステータス管理テーブル16260の具体的な使用方法については、後述する図21の説明で明らかにする。
【0084】
<上書きライト完了保証処理の内容>
上書きライト時の基本的な処理は、図9のフローチャートと同様であるので、第1の実施形態とは異なる処理、つまり、データ受領準備を行うステップS200と、転送終了の確認を行うステップS600について、以下説明する。
【0085】
図19は、第2の実施形態における、ホスト計算機40からのデータ転送要求に対して自系CPU150が行う受領準備処理(ステップS200)の詳細を説明するためのフローチャートである。
【0086】
まず、ホスト計算機40からのデータライト要求を受け取った自系CPU150は、要求コマンドのターゲット情報から抽出したライト対象データのLUN、LBA、及びLENGTHをキーに、メモリ管理テーブル16230を参照することで、対象データが自系メモリ160に存在するか否かを判定する(ステップS210)。
【0087】
ステップS210の判定の結果、対象データがメモリ上に存在する場合、自系CPU150はキャッシュヒットであると判断し(判定結果、YES)、まず自系のメモリ160上データのチェックビットに対し、旧データが未更新であることを示す「1」をライトする(ステップS211)。次に、自系CPU150は、他系メモリ460上のデータのチェックビットに対して、未更新データを示す「1」をライトし(ステップS212)、他系CPU450に依頼テーブル16250を用いてチェックするように依頼通知する(ステップS213:詳細は図20にて説明)。
【0088】
そして、他系CPU450のチェック結果が正常である場合(判定:OK)、自系CPU150は、対象データのチェックビットが正しく更新できていると判断し、DMA転送(ホストアダプタによる転送)を行うために必要な情報である転送リスト16240を作成し(ステップS216)、本処理を終了させる。
【0089】
一方、ステップS214の判定において、他系CPU450のチェック結果が正常でない場合は(判定:NG)、自系CPU150は、プログラムのエラーやハードウェアの故障等により、他系制御部400が正常に動作していないと判断し、他系制御部400を閉塞させ、ホスト計算機40の制御ソフトウェアを通じて管理者に障害発生を通知するとともに、以後自系制御部100のみのシングル動作に切り替える(ステップS217)。その後、自系CPU150は、DMA転送リスト設定処理を行い(ステップS216)、本処理を終了する。
【0090】
また、ステップS210の判定の結果、対象データがメモリ上に存在しない場合、自系CPU150はキャッシュミスであると判断する(判定結果、NO)。そして、処理は、そのままDMA転送リスト16240の設定処理であるステップS216に移行する。
【0091】
図20は、自系CPU150が他系CPU450に対するチェック依頼を発行し終了結果を得るステップS213の詳細を説明するためのフローチャートである。
【0092】
自系CPU150は、依頼テーブル16250およびステータス管理テーブル16260を初期化した後に、依頼テーブル16250にチェック対象のセグメントNo、チェックビット値、LUN、及びLBAの情報をセットし(ステップS230)、他系CPU450に対して依頼テーブル16250のリストNo162510を通知することでチェックの依頼を送信する(ステップS231)。ここで、ステップS230では依頼テーブル16250のResult162570には初期値であるN/Aが入っている。
【0093】
ステップS231の後、自系CPU150は、依頼テーブル16250に対応するステータス管理テーブル16260の自系ステータス162620を「依頼中」に変更し、自系更新Time162630に現在の時間を入力する(ステップS232)。また、自系CPU150は、依頼テーブル16250のResult162570がチェックOKを示す「OK」、もしくは、チェック異常を示す「NG」に更新されているかを確認する(ステップS233)。Result162570に「OK」が入力されている場合は、自系CPU150は、他系CPU150のチェックが正常に終了したと判断し、判断結果として転送OKをリターンして本処理を終了する。
【0094】
また、ステップS233の判定の結果がNGである場合、自系CPU150は、現在時刻と自系更新Time162630もしくは他系更新Time162650の差分が規定の時間を超過しているかを判断するタイムアウトチェックを行う(ステップS234)。ステップS234の判断結果がYESの場合は、自系CPU150は、他系に障害が発生していると判断し、判定結果として転送NGをリターンして本処理を終了する。
【0095】
一方、ステップS234の判断結果がNOである場合は、処理は再度他系のチェック更新を確認するステップS233へと移行する。
【0096】
他系CPU450は、ステップS231で発行されたチェック依頼を受け取ると、依頼テーブル16250を参照し、チェック対象項目を確認する(ステップS236)。そして、他系CPU450は、ステータス管理テーブル16260の他系ステータス162640を「処理中」に更新するとともに、他系更新Time162650に現在の時間を入力する(ステップS237)。次に、他系CPU450は、チェック対象データのUDTをリードし、その内容が依頼テーブル16250に記載されているものと等しいか否かを比較し(ステップS238)、全項目が一致する場合はチェック正常を示す「OK」を、一致しない項目がある場合はチェック異常を示す「NG」を、依頼テーブル16250のResult162570に入力する(ステップS239)。また、他系CPU450は、ステータス管理テーブル16260の他系ステータス162640に「完了」を入力すると共に、他系更新Time162650に現在の時間を入力する(ステップS240)。その後、他系CPU450は、自系CPU150に対し、依頼テーブル16250のリストNo162510を通知することでチェックの終了を通知する(ステップS241)。
【0097】
<ステータス管理テーブルの変化の様子>
図21は、自系CPU150と他系CPU450の通信についての補足説明図であり、ステータス管理テーブル16260が更新される契機と入力値とを時系列に表現した図である。なお、図中のステップの欄は、図20のステップ番号に対応する。
【0098】
まず、ステップS230にてステータス管理テーブル16260の初期化が行われた場合、すべての入力値が初期値を示すN/Aとなる。次に、ステップS232にて自系CPU150が他系CPU450に対するチェック依頼を送信した場合には、自系ステータス162620が「依頼中」に、自系更新Time162630がそのときの時刻にそれぞれ更新される。
【0099】
一方、他系ステータス162640および他系更新Time162650は初期値「N/A」が入力されたままとなる。その後、ステップS237にて他系CPU450がチェックを開始した際には、他系ステータス162640は「処理中」に、他系更新Time162650はそのときの時刻にそれぞれ更新される。そして、ステップS240において、他系CPU450のチェックが完了した際に、他系ステータス162640が「完了」に、他系更新Time162650がそのときの時刻にそれぞれ更新される。なお、自系及び他系更新Timeは、CPUのクロックカウンタ値で表されている。
【0100】
<その他追加説明>
以上の更新フローをとることにより、依頼元である自系CPU150が依頼先である他系CPU450のチェック状態を確認することができる。また、更新Timeを記録することで他系CPU450からの応答が一定時間以上ない場合に、他系制御部400に障害が発生している可能性があることを自系CPU150が知ることができる。
【0101】
また、ホストアダプタ110からの転送後のチェックであるステップS600においても、自系メモリ160と他系メモリ460のデータが正しく上書きされていることを確認する必要があるが、この場合においても、図19及び20に示すフローチャートを用いることで実行可能である。
【0102】
以上より、第2の実施形態では、ミラーされたデータがそれぞれのメモリ160及び460に更新されたことを確定した後に、ホスト計算機40に対して応答を返すことが可能となる。
【0103】
また、第1および第2の実施形態では保証コードにDIFを用いたが、LA/LRCを用いた場合においても、LA/LRCに上書き確定用のチェックビットを設けることで、本実施形態と同様の機能を実現することが可能である。
【0104】
(3)まとめ
i)本発明は、高速、高信頼にデータを格納する装置である、ディスクアレイ装置に適用することができる。
【0105】
ii)本発明では、メモリ160には、ディスク部200における位置情報(LUN342やLBA351)と書き込み確定を保証するためのチェックビット341とを含む保証コード310を有する更新対象の旧データ301が格納されている。そして、CPU150が旧データ301の更新である更新データ302の書き込み要求をホスト計算機40から受信した際には、旧データ301のチェックビット341の値を更新データ302に付与する値である「0」とは異なる「1」に変更した後に、ホスト計算機40に更新データ302の転送開始を指示する。ホストアダプタ110は、ホスト計算機40から受信した更新データ302に、位置情報と書き込み確定を保証するためのチェックビット341(「0」に設定)を含む保証コード310を付与し、保証コード付更新データをメモリ160に転送する。これにより、更新データ302がメモリ160に正しく書き込まれた場合に、変更後のチェックビット341(「1」)が変更前のチェックビット341(「0」)に戻るようにする。このようにすることにより、メモリ160におけるデータのチェックビットが「1」のままであれば、上書き保存が完了していないことが分かり、上書きを確定してからホスト計算機40からのデータ転送のセッションを終了させることができる。よって、ディスクアレイ装置10内でのデータロストの危険性を低下させることができる。
【0106】
そして、ホストアダプタ110は、CPU150からの更新データ302のメモリ160への書き込み完了の通知をホスト計算機40に送信する。通知を受け取った跡に、ホスト計算機40がデータ転送を終了させる。これにより、メモリ160に更新データが上書き保存されたことが保証され、安全にデータ転送セッションを終了させることができるようになる。
【0107】
さらに、保証コード310に、データエラーを検出するためのCRCコード320が含まれる場合、CPU150が、メモリ160に書き込まれた更新データ302から演算して得られた情報とCRCコード320とを比較し、両者が一致する場合に更新データ302のメモリ160への書き込みを確定させるようにしてもよい。これにより、転送途中でデータエラーが発生してもエラーを含むデータがメモリ160に書き込まれたまま転送セッションが終了することを防ぐことができる。ただし、CRCコードチェックをするとCPU150に負荷が掛かるので、上述のように、UDT(LA)330とチェックビット341のみを用いて上書き確定処理をすることにより、CPU150の負荷を軽減(I/O処理性能の低下を防止)することができる。つまり、本発明では、信頼性重視か性能重視かによって、CRCを用いるか否か使い分けすることができる。
【0108】
iii)本発明の別の態様では、制御部100(自系)と、制御部100と同様の構成を有する制御部400(他系)を設け、両者を通信可能に設定し、ミラーリングを実現している。自系制御部100の処理動作は第1の実施形態の動作に加えて、他系に対して、旧データのチェックビットを「0」から「1」に変更し、自系と同様に他系でもメモリ460に更新データのコピーが確実に上書きされるように制御している。このようにすることにより、自系及び他系に同一の更新データを保持させることができ、自系に障害が発生しても他系のメモリ460から確実に更新されて上書き保証されたデータを読み出すことができるようになる。
【0109】
実施形態では、自系CPU150が他系メモリ460の内容を直接チェックしたり、チェックビットの変更をしたりしているが、自系CPU150が他系CPU450に他系メモリ460の内容のチェックやチェックビットの変更を依頼し、それに応答して他系CPU450が実際に内容チェックやチェックビット変更を行うようにしても良い。
【0110】
iv)なお、本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD−ROM、DVD−ROM、ハードディスク、光ディスク、光磁気ディスク、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
【0111】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータ上のメモリに書きこまれた後、そのプログラムコードの指示に基づき、コンピュータのCPUなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。
【0112】
また、実施の形態の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することにより、それをシステム又は装置のハードディスクやメモリ等の記憶手段又はCD-RW、CD-R等の記憶媒体に格納し、使用時にそのシステム又は装置のコンピュータ(又はCPUやMPU)が当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしても良い。
【符号の説明】
【0113】
10:ディスクアレイ装置
20:SAN
30:LAN
40:ホスト計算機
100:ディスクアレイ装置制御部
110:ホストアダプタ
120:Switch
130:ディスクアダプタ
140:NIC
150:CPU
160:メモリ
170:内部バス
180:メモリ専用バス
190:ディスクアダプタ専用バス
200:ディスクアレイ装置ディスク部
210:ディスク装置群
220:ディスク装置
【特許請求の範囲】
【請求項1】
ディスク部(200)における位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)とを含む保証コード(310)を有する更新対象の旧データ(301)を格納する第1のメモリ(160)と、
前記旧データの更新データ(302)及びその書き込み要求を外部機器(40)から受信し、データの位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)を含む保証コード(310)を前記更新データ(302)に付与し、前記保証コード付更新データを前記第1のメモリ(160)に転送する転送処理部(110)と、
前記書き込み要求に応答して、前記旧データ(301)の前記チェック情報(341)を前記更新データ(302)の前記チェック情報(341)と異なる情報に変更し、前記更新データ(302)の前記第1のメモリ(160)への書き込みを確定させた場合に前記変更後のチェック情報(341)を変更前のチェック情報(341)に戻す第1のメモリ制御部(150)と、
を備える、ストレージ装置(10)。
【請求項2】
請求項1において、
前記ディスク部(200)は、複数のディスク装置(220)を含み、
前記位置情報(342,351)は、前記ディスク部(200)におけるデータの格納位置であって、論理ユニット番号(342)と論理ユニット内の先頭アドレス情報(351)を含み、
前記チェック情報(341)は、更新済か否かを示すビット情報であり、
前記転送処理部(110)は、前記外部機器(40)であるホスト計算機(40)と通信するためのホストアダプタ(110)であり、
前記書き込み要求は、前記旧データ(301)の論理ユニット番号(342)と前記先頭アドレス情報(351)とデータ長を含み、
前記ホストアダプタ(110)は、前記更新データ(302)を所定単位長で複数に分割して複数のデータブロック(300)を生成し、それぞれのデータブロック(300)に前記保証コード(310)を付与し、
前記第1のメモリ制御部(150)は、前記旧データ(301)の論理ユニット番号(342)と前記先頭アドレス情報(351)とデータ長を参照し、前記第1のメモリ(160)に更新対象の前記旧データ(301)が存在するか確認し、存在する場合に前記旧データ(301)の前記チェック情報(341)を変更し、
前記第1のメモリ制御部(150)は、前記更新データ(302)に付されている前記保証コード(310)の前記位置情報(342,351)と前記更新データ(302)が書かれるべきディスク部(200)の位置を示す設定情報(16240)とを照合することにより、前記更新データ(302)が正しいデータか否かを確認すると共に、正しいデータであると確認できた場合に前記データブロック(300)単位で、前記第1のメモリ(160)への前記更新データ(302)の書き込みを確定させ、前記変更後のチェック情報(341)を前記変更前のチェック情報(341)に戻し、
前記ホストアダプタ(110)は、前記第1のメモリ制御部(150)からの前記更新データ(302)の前記第1のメモリ(160)への書き込み完了の通知を前記ホスト計算機(40)に送信する、ストレージ装置(10)。
【請求項3】
請求項1において、
前記書き込み要求は、前記第1のメモリ(160)内の前記旧データ(301)を特定する情報を含み、
前記第1のモリ制御部(150)は、前記書き込み要求に含まれる前記旧データ(301)を特定する情報を参照し、前記第1のメモリ(160)に更新対象の前記旧データ(301)が存在するか確認し、存在する場合に前記旧データ(301)の前記チェック情報(341)を変更する、ストレージ装置(10)。
【請求項4】
請求項1において、
前記転送処理部(110)は、前記第1のメモリ制御部(150)からの前記更新データ(302)の前記第1のメモリ(160)への書き込み完了の通知を前記外部機器(40)に送信する、ストレージ装置(10)。
【請求項5】
請求項1において、
前記転送処理部(110)は、前記更新データ(302)を所定単位長で複数に分割して複数のデータブロック(300)を生成し、それぞれのデータブロック(300)に前記保証コード(310)を付与し、
前記第1のメモリ制御部(150)は、前記データブロック(300)単位で、前記第1のメモリ(160)への書き込みを確定させ、前記変更後のチェック情報(341)を前記変更前のチェック情報(341)に戻す、ストレージ装置(10)。
【請求項6】
請求項1において、
前記第1のメモリ制御部(150)は、前記更新データ(302)に付されている前記保証コード(310)の前記位置情報(342,351)と前記更新データ(302)が書かれるべき前記ディスク部(200)の位置を示す設定情報(16240)とを照合することにより、前記更新データ(302)が正しいデータか否かを確認する、ストレージ装置(10)。
【請求項7】
請求項6において、
前記保証コード(310)は、さらに、データエラーを検出するためのデータエラー検出コード(320)を含み、
前記第1のメモリ制御部(150)は、前記第1のメモリ(160)に書き込まれた前記更新データ(302)から演算して得られた情報と前記データエラー検出コード(320)とを比較し、両者が一致する場合に前記更新データ(302)の前記第1のメモリ(160)への書き込みを確定させる、ストレージ装置(10)。
【請求項8】
請求項1において、
さらに、前記第1のメモリ(160)に格納されるデータのコピーデータを格納する第2のメモリ(460)と、
前記転送処理部(110)から前記第1のメモリ(160)に転送されるデータのコピーを生成するコピー生成部(120)と、
前記第2のメモリ(460)へのデータの書き込みを制御する第2のメモリ制御部(450)と、を備え、
前記コピー生成部(120)は、前記更新データのコピー(第2の更新データ)を生成し、
前記第2のメモリ制御部(450)は、前記第2の更新データを前記第2のメモリ(460)に書き込み、ミラーリングを実現する、ストレージ装置(10)。
【請求項9】
請求項8において、
前記第1のメモリ制御部(150)は、さらに、前記第2のメモリ(460)に存在する前記旧データ(301)のコピー(第2の旧データ)が有するチェック情報(341)を前記第2の更新データが有するチェック情報(341)と異なる情報に変更し、前記第2の更新データ(302)の前記第2のメモリ(160)への書き込みを確定させた場合に前記変更後のチェック情報(341)を変更前のチェック情報(341)に戻す、ストレージ装置(10)。
【請求項10】
請求項9において、
前記第1のメモリ制御部(150)は、更新対象である前記第2の旧データが有する前記位置情報(342,351)が前記第1のメモリ(160)に格納された旧データ(第1の旧データ)が有する前記位置情報(342,351)と同一であるか、及び、前記第2の旧データが有する前記チェック情報(341)が変更されているか、をチェックするように前記第2のメモリ制御部(450)に対して依頼し、
前記第2のメモリ制御部(450)は、チェック結果を前記第1のメモリ制御部(150)に返信し、
前記チェック結果がOKである場合に、前記転送処理部(110)は、前記第2の更新データの前記第2のメモリ(460)への転送を開始する、ストレージ装置(10)。
【請求項11】
請求項10において、
前記第1のメモリ制御部(150)は、さらに、前記チェック結果が前記第2のメモリ制御部(450)から返信されてくるまで、前記チェックの依頼の状況を管理する、ストレージ装置(10)。
【請求項12】
ストレージ装置(10)の制御方法であって、
前記ストレージ装置(10)は、ディスク部(200)におけるデータの位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)とを含む保証コード(310)を有する更新対象の旧データ(301)を格納する第1のメモリ(160)と、転送処理部(110)と、第1のメモリ制御部(150)と、を備え、
前記制御方法は、
前記転送処理部(110)が、前記旧データの更新データ(302)及びその書き込み要求を外部機器(40)から受信し、位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)を含む保証コード(310)を前記更新データ(302)に付与し、前記保証コード付更新データを前記第1のメモリ(160)に転送し、
前記メモリ制御部(150)が、前記書き込み要求に応答して、前記旧データ(301)の前記チェック情報(341)を前記更新データ(302)の前記チェック情報(341)と異なる情報に変更し、前記更新データ(302)の前記第1のメモリ(160)への書き込みを確定させた場合に前記変更後のチェック情報(341)を変更前のチェック情報(341)に戻す、制御方法。
【請求項13】
請求項12において、
前記ディスク部(200)は、複数のディスク装置(220)を含み、
前記位置情報(342,351)は、前記ディスク部(200)におけるデータの格納位置であって、論理ユニット番号(342)と論理ユニット内の先頭アドレス情報(351)を含み、
前記チェック情報(341)は、更新済か否かを示すビット情報であり、
前記転送処理部(110)は、前記外部機器(40)であるホスト計算機(40)と通信するためのホストアダプタ(110)であり、
前記書き込み要求は、前記旧データ(301)の論理ユニット番号(342)と前記先頭アドレス情報(351)とデータ長を含み、
前記ホストアダプタ(110)は、前記更新データ(302)を所定単位長で複数に分割して複数のデータブロック(300)を生成し、それぞれのデータブロック(300)に前記保証コード(310)を付与し、
前記第1のメモリ制御部(150)は、前記旧データ(301)の論理ユニット番号(342)と前記先頭アドレス情報(351)とデータ長を参照し、前記第1のメモリ(160)に更新対象の前記旧データ(301)が存在するか確認し、存在する場合に前記旧データ(301)の前記チェック情報(341)を変更し、
前記第1のメモリ制御部(150)は、前記更新データ(302)に付されている前記保証コード(310)の前記位置情報(342,351)と前記更新データ(302)が書かれるべきディスク部(200)の位置を示す設定情報(16240)とを照合することにより、前記更新データ(302)が正しいデータか否かを確認すると共に、正しいデータであると確認できた場合に前記データブロック(300)単位で、前記第1のメモリ(160)への前記更新データ(302)の書き込みを確定させ、前記変更後のチェック情報(341)を前記変更前のチェック情報(341)に戻す、制御方法。
【請求項14】
ディスク装置(220)を含むコンピュータを請求項1に記載のストレージ装置として機能させるためのプログラム。
【請求項1】
ディスク部(200)における位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)とを含む保証コード(310)を有する更新対象の旧データ(301)を格納する第1のメモリ(160)と、
前記旧データの更新データ(302)及びその書き込み要求を外部機器(40)から受信し、データの位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)を含む保証コード(310)を前記更新データ(302)に付与し、前記保証コード付更新データを前記第1のメモリ(160)に転送する転送処理部(110)と、
前記書き込み要求に応答して、前記旧データ(301)の前記チェック情報(341)を前記更新データ(302)の前記チェック情報(341)と異なる情報に変更し、前記更新データ(302)の前記第1のメモリ(160)への書き込みを確定させた場合に前記変更後のチェック情報(341)を変更前のチェック情報(341)に戻す第1のメモリ制御部(150)と、
を備える、ストレージ装置(10)。
【請求項2】
請求項1において、
前記ディスク部(200)は、複数のディスク装置(220)を含み、
前記位置情報(342,351)は、前記ディスク部(200)におけるデータの格納位置であって、論理ユニット番号(342)と論理ユニット内の先頭アドレス情報(351)を含み、
前記チェック情報(341)は、更新済か否かを示すビット情報であり、
前記転送処理部(110)は、前記外部機器(40)であるホスト計算機(40)と通信するためのホストアダプタ(110)であり、
前記書き込み要求は、前記旧データ(301)の論理ユニット番号(342)と前記先頭アドレス情報(351)とデータ長を含み、
前記ホストアダプタ(110)は、前記更新データ(302)を所定単位長で複数に分割して複数のデータブロック(300)を生成し、それぞれのデータブロック(300)に前記保証コード(310)を付与し、
前記第1のメモリ制御部(150)は、前記旧データ(301)の論理ユニット番号(342)と前記先頭アドレス情報(351)とデータ長を参照し、前記第1のメモリ(160)に更新対象の前記旧データ(301)が存在するか確認し、存在する場合に前記旧データ(301)の前記チェック情報(341)を変更し、
前記第1のメモリ制御部(150)は、前記更新データ(302)に付されている前記保証コード(310)の前記位置情報(342,351)と前記更新データ(302)が書かれるべきディスク部(200)の位置を示す設定情報(16240)とを照合することにより、前記更新データ(302)が正しいデータか否かを確認すると共に、正しいデータであると確認できた場合に前記データブロック(300)単位で、前記第1のメモリ(160)への前記更新データ(302)の書き込みを確定させ、前記変更後のチェック情報(341)を前記変更前のチェック情報(341)に戻し、
前記ホストアダプタ(110)は、前記第1のメモリ制御部(150)からの前記更新データ(302)の前記第1のメモリ(160)への書き込み完了の通知を前記ホスト計算機(40)に送信する、ストレージ装置(10)。
【請求項3】
請求項1において、
前記書き込み要求は、前記第1のメモリ(160)内の前記旧データ(301)を特定する情報を含み、
前記第1のモリ制御部(150)は、前記書き込み要求に含まれる前記旧データ(301)を特定する情報を参照し、前記第1のメモリ(160)に更新対象の前記旧データ(301)が存在するか確認し、存在する場合に前記旧データ(301)の前記チェック情報(341)を変更する、ストレージ装置(10)。
【請求項4】
請求項1において、
前記転送処理部(110)は、前記第1のメモリ制御部(150)からの前記更新データ(302)の前記第1のメモリ(160)への書き込み完了の通知を前記外部機器(40)に送信する、ストレージ装置(10)。
【請求項5】
請求項1において、
前記転送処理部(110)は、前記更新データ(302)を所定単位長で複数に分割して複数のデータブロック(300)を生成し、それぞれのデータブロック(300)に前記保証コード(310)を付与し、
前記第1のメモリ制御部(150)は、前記データブロック(300)単位で、前記第1のメモリ(160)への書き込みを確定させ、前記変更後のチェック情報(341)を前記変更前のチェック情報(341)に戻す、ストレージ装置(10)。
【請求項6】
請求項1において、
前記第1のメモリ制御部(150)は、前記更新データ(302)に付されている前記保証コード(310)の前記位置情報(342,351)と前記更新データ(302)が書かれるべき前記ディスク部(200)の位置を示す設定情報(16240)とを照合することにより、前記更新データ(302)が正しいデータか否かを確認する、ストレージ装置(10)。
【請求項7】
請求項6において、
前記保証コード(310)は、さらに、データエラーを検出するためのデータエラー検出コード(320)を含み、
前記第1のメモリ制御部(150)は、前記第1のメモリ(160)に書き込まれた前記更新データ(302)から演算して得られた情報と前記データエラー検出コード(320)とを比較し、両者が一致する場合に前記更新データ(302)の前記第1のメモリ(160)への書き込みを確定させる、ストレージ装置(10)。
【請求項8】
請求項1において、
さらに、前記第1のメモリ(160)に格納されるデータのコピーデータを格納する第2のメモリ(460)と、
前記転送処理部(110)から前記第1のメモリ(160)に転送されるデータのコピーを生成するコピー生成部(120)と、
前記第2のメモリ(460)へのデータの書き込みを制御する第2のメモリ制御部(450)と、を備え、
前記コピー生成部(120)は、前記更新データのコピー(第2の更新データ)を生成し、
前記第2のメモリ制御部(450)は、前記第2の更新データを前記第2のメモリ(460)に書き込み、ミラーリングを実現する、ストレージ装置(10)。
【請求項9】
請求項8において、
前記第1のメモリ制御部(150)は、さらに、前記第2のメモリ(460)に存在する前記旧データ(301)のコピー(第2の旧データ)が有するチェック情報(341)を前記第2の更新データが有するチェック情報(341)と異なる情報に変更し、前記第2の更新データ(302)の前記第2のメモリ(160)への書き込みを確定させた場合に前記変更後のチェック情報(341)を変更前のチェック情報(341)に戻す、ストレージ装置(10)。
【請求項10】
請求項9において、
前記第1のメモリ制御部(150)は、更新対象である前記第2の旧データが有する前記位置情報(342,351)が前記第1のメモリ(160)に格納された旧データ(第1の旧データ)が有する前記位置情報(342,351)と同一であるか、及び、前記第2の旧データが有する前記チェック情報(341)が変更されているか、をチェックするように前記第2のメモリ制御部(450)に対して依頼し、
前記第2のメモリ制御部(450)は、チェック結果を前記第1のメモリ制御部(150)に返信し、
前記チェック結果がOKである場合に、前記転送処理部(110)は、前記第2の更新データの前記第2のメモリ(460)への転送を開始する、ストレージ装置(10)。
【請求項11】
請求項10において、
前記第1のメモリ制御部(150)は、さらに、前記チェック結果が前記第2のメモリ制御部(450)から返信されてくるまで、前記チェックの依頼の状況を管理する、ストレージ装置(10)。
【請求項12】
ストレージ装置(10)の制御方法であって、
前記ストレージ装置(10)は、ディスク部(200)におけるデータの位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)とを含む保証コード(310)を有する更新対象の旧データ(301)を格納する第1のメモリ(160)と、転送処理部(110)と、第1のメモリ制御部(150)と、を備え、
前記制御方法は、
前記転送処理部(110)が、前記旧データの更新データ(302)及びその書き込み要求を外部機器(40)から受信し、位置情報(342,351)と書き込み確定を保証するためのチェック情報(341)を含む保証コード(310)を前記更新データ(302)に付与し、前記保証コード付更新データを前記第1のメモリ(160)に転送し、
前記メモリ制御部(150)が、前記書き込み要求に応答して、前記旧データ(301)の前記チェック情報(341)を前記更新データ(302)の前記チェック情報(341)と異なる情報に変更し、前記更新データ(302)の前記第1のメモリ(160)への書き込みを確定させた場合に前記変更後のチェック情報(341)を変更前のチェック情報(341)に戻す、制御方法。
【請求項13】
請求項12において、
前記ディスク部(200)は、複数のディスク装置(220)を含み、
前記位置情報(342,351)は、前記ディスク部(200)におけるデータの格納位置であって、論理ユニット番号(342)と論理ユニット内の先頭アドレス情報(351)を含み、
前記チェック情報(341)は、更新済か否かを示すビット情報であり、
前記転送処理部(110)は、前記外部機器(40)であるホスト計算機(40)と通信するためのホストアダプタ(110)であり、
前記書き込み要求は、前記旧データ(301)の論理ユニット番号(342)と前記先頭アドレス情報(351)とデータ長を含み、
前記ホストアダプタ(110)は、前記更新データ(302)を所定単位長で複数に分割して複数のデータブロック(300)を生成し、それぞれのデータブロック(300)に前記保証コード(310)を付与し、
前記第1のメモリ制御部(150)は、前記旧データ(301)の論理ユニット番号(342)と前記先頭アドレス情報(351)とデータ長を参照し、前記第1のメモリ(160)に更新対象の前記旧データ(301)が存在するか確認し、存在する場合に前記旧データ(301)の前記チェック情報(341)を変更し、
前記第1のメモリ制御部(150)は、前記更新データ(302)に付されている前記保証コード(310)の前記位置情報(342,351)と前記更新データ(302)が書かれるべきディスク部(200)の位置を示す設定情報(16240)とを照合することにより、前記更新データ(302)が正しいデータか否かを確認すると共に、正しいデータであると確認できた場合に前記データブロック(300)単位で、前記第1のメモリ(160)への前記更新データ(302)の書き込みを確定させ、前記変更後のチェック情報(341)を前記変更前のチェック情報(341)に戻す、制御方法。
【請求項14】
ディスク装置(220)を含むコンピュータを請求項1に記載のストレージ装置として機能させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【公表番号】特表2012−516477(P2012−516477A)
【公表日】平成24年7月19日(2012.7.19)
【国際特許分類】
【出願番号】特願2011−532385(P2011−532385)
【出願日】平成21年5月27日(2009.5.27)
【国際出願番号】PCT/JP2009/002325
【国際公開番号】WO2010/137067
【国際公開日】平成22年12月2日(2010.12.2)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公表日】平成24年7月19日(2012.7.19)
【国際特許分類】
【出願日】平成21年5月27日(2009.5.27)
【国際出願番号】PCT/JP2009/002325
【国際公開番号】WO2010/137067
【国際公開日】平成22年12月2日(2010.12.2)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]