以下図面について、本発明の一実施の形態を詳述する。
(1)第1の実施の形態
(1−1)本実施の形態による計算機システムの構成
図1において、1は全体として本実施の形態による計算機システムを示す。この計算機システム1は、ネットワーク2を介して接続された1又は複数のホストサーバ3と、ストレージ装置4とを備えて構成される。
ネットワーク2は、例えばSAN(Storage Area Network)、LAN(Local Area Network)、インターネット、公衆回線又は専用回線などから構成される。このネットワーク2を介したホストサーバ3及びストレージ装置4間の通信は、例えばネットワーク2がSANである場合にはファイバーチャネルプロトコルに従って行われ、ネットワーク2がLANである場合にはTCP/IP(Transmission Control Protocol/Internet Protocol)プロトコルに従って行われる。
ホストサーバ3は、CPU(Central Processing Unit)及びメモリ等の情報処理資源を備えたコンピュータ装置であり、例えばパーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。ホストサーバ3は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の情報入力装置(図示せず)と、モニタディスプレイやスピーカ等の情報出力装置(図示せず)とを備える。
ストレージ装置4は、複数の記憶デバイス5と、これら複数の記憶デバイス5へのデータの入出力を制御する0系及び1系の2つのコントローラ6A,6Bとを備えて構成される。
記憶デバイス5は、例えばSCSI(Small Computer System Interface)ディスク等の高価なディスクデバイス、又はSATA(Serial AT Attachment)ディスクや光ディスク等の安価なディスクデバイスなどから構成される。
これらの記憶デバイス5は、0系及び1系の各コントローラ6A,6BによりRAID(Redundant Arrays of Inexpensive Disks)方式で運用される。なおコントローラは1つであってもよい。1又は複数の記憶デバイス5により提供される物理的な記憶領域上に、1又は複数の論理的なボリューム(以下、これを論理ボリュームと呼ぶ)VOLが設定される。そしてデータは、この論理ボリュームVOL内に所定大きさのブロック(以下、これを論理ブロックと呼ぶ)を単位として記憶される。
各論理ボリュームVOLには、それぞれ固有の識別子(以下、これをLUN(Logical Unit number)と呼ぶ)が付与される。本実施の形態の場合、データの入出力は、このLUNと、各論理ブロックにそれぞれ付与されるその論理ブロックに固有の番号(以下、これをLBA(Logical Block Address)と呼ぶ)との組み合わせたものをアドレスとして、当該アドレスを指定して行われる。
0系、1系のコントローラ6A,6Bは、それぞれホスト制御部7A,7B、MPU(Micro Processing Unit)8A,8B、スイッチ9A,9B、キャッシュメモリ10A,10B及びドライブ制御部11A,11Bを備える。
ホスト制御部7A,7Bは、ネットワーク2に対するインタフェースであり、CPU(Central Processing Unit)及びメモリなどの情報処理資源を備える。ホスト制御部7A,7Bは、かかるネットワーク2を介してライトデータ及びリードデータや各種コマンドなどをホストサーバ3との間で送受する。
MPU8A,8Bは、ホストサーバ3からのライトコマンドやリードコマンドに応答して記憶デバイス5に対するデータの入出力処理を制御するプロセッサであり、記憶デバイス5から読み出したマイクロプログラムに基づいてホスト制御部7A,7B、スイッチ9A,9B及びドライブ制御部11A,11Bを制御する。
スイッチ9A,9Bは、ホスト制御部7A,7B、キャッシュメモリ10A,10B及びドライブ制御部11A,11B間におけるデータの転送元及び転送先を切り替える。本実施の形態の場合、スイッチ9A,9Bは、デュアルキャスト部12A,12Bが搭載された汎用のPCIe(PCI(peripheral component interconnect)Express)スイッチにDMA(Direct Memory Access)部13A,13B及びパリティ生成部14A,14Bを付加することにより構成されている。
デュアルキャスト部12A,12Bは、ライトデータやリードデータを自系のMPU8A,8Bを介して自系(0系又は1系)のキャッシュメモリ10A,10Bに転送するだけでなく、後述するバス15を介して他系(1系又は0系)のコントローラ6B,6Bに転送するデュアルキャスト機能を有する。またDMA部13A,13Bは、キャッシュメモリ10A,10Bに格納されたデータに対して直接アクセスするDMA機能を有する。
パリティ生成部14A,14Bは、ライトデータに対するRAID用のパリティ(以下、これをRAIDパリティと呼ぶ)を生成してライトデータに付加したり、このRAIDパリティを用いてリードデータに対するエラーチェックを実行するRAIDエラーチェック機能を有する。
なお、これらデュアルキャスト部12A,12B、DMA部13A,13B及びパリティ生成部14A,14Bは、その一部又は全部が、ハードウェアにより構成されていても、またソフトウェアにより構成(スイッチ9A,9B内の図示しないCPUが対応するプログラムを実行する構成)されていてもよい。またデュアルキャスト部12A,12Bによる後述のようなデュアルキャスト機能は、2つのコントローラを使用する場合にのみ機能し、1つのコントローラで運用を行うときには機能しない。
またスイッチ9A,9Bは、他系(0系又は1系)のスイッチ9B,9Aとバス15を介して接続されており、このバス15を通じて他系のコントローラ9B,9Aとの間でコマンドやデータを送受することができるようになされている。
キャッシュメモリ10A,10Bは、ホスト制御部7A,7B及びドライブ制御部11A,11B間において転送されるデータを一時的に記憶するために用いられる。このキャッシュメモリ10A,10Bには、ストレージ装置4の起動時に所定の記憶デバイス5から読み出された上述のマイクロプログラムや、各種のシステム情報も格納される。
ドライブ制御部11A,11Bは、記憶デバイス5に対するインタフェースであり、CPU及びメモリなどの情報処理資源を備える。このドライブ制御部11A,11Bは、ホスト制御部7A,7Bから与えられるホストサーバ3からのライトコマンドやリードコマンドに応じて対応する記憶デバイス5を制御することにより、ライトデータやリードデータをライトコマンドやリードコマンドにおいて指定された論理ボリュームVOL内の当該ライトコマンド又はリードコマンドにおいて指定されたアドレス位置に読み書きする。
(1−2)ストレージ装置におけるデータ転送方式
次に、ストレージ装置4におけるデータ転送方式について説明する。これに際して、まず、従来のストレージ装置におけるデータ転送の流れについて説明する。
(1−2−1)従来のストレージ装置におけるデータ転送方式
図1との対応部分に同一符号を付した図2は、従来のストレージ装置21において、0系のコントローラ22Aがホストサーバ3からライトコマンド及びライトデータを受信した場合における処理の流れを示す。この図2において、一点鎖線の矢印RA1〜RA7は0系のコントローラ22Aのキャッシュメモリ10Aや対応する記憶デバイス5に読み書きされるライトデータ等の流れを示し、二点鎖線の矢印RB1〜RB2は1系のコントローラ22Bのキャッシュメモリ11Bに書き込まれるライトデータの流れを示す。図4、図11、図15、図19、図23、図25、図27及び図29においても同様である。
また以下においては、0系のコントローラ22Aのホスト制御部23Aやデータ転送制御部24Aなどの構成部位を、適宜、「0系のホスト制御部23A」や「0系のデータ転送制御部24A」などと呼び、1系のコントローラ22Bのホスト制御部23Bやデータ転送制御部24Bなどの構成部位を、適宜、「1系のホスト制御部23B」や「1系のデータ転送制御部24B」などと呼ぶものとする。
かかる従来のストレージ装置21において、0系のホスト制御部23Aは、ホストサーバ3からのライトコマンド及びライトデータを受信すると、ライトデータを0系のデータ転送制御部24Aに送信する(矢印RA1)。
0系のデータ転送制御部24Aは、このライトデータを受信すると、MPU8A,8Bの制御のもとに、このライトデータ用のエラーチェックコード(以下、これをデータ用エラーチェックコードと呼ぶ)を生成し、生成したデータ用エラーチェックコードをライトデータに付加する。そして0系のデータ転送制御部24Aは、この後、このライトデータを0系のキャッシュメモリ10Aに格納する(矢印RA2)。なお、この場合のエラーチェックコードとしては、例えばLA/LRCが用いられる。またデータ転送制御部24Aは、かかるライトデータ及びそのデータ用エラーチェックコードを1系のデータ転送制御部24Bに転送し、これらライトデータ及びそのデータ用エラーチェックコードを1系のキャッシュメモリ10Bにも格納させる(矢印RB1)。
続いて0系のデータ転送制御部24Aは、0系のキャッシュメモリ10Aからライトデータ及びそのデータ用エラーチェックコードを読み出し(矢印RA3)、このデータ用エラーチェックコードを用いて当該ライトデータに対するエラーチェック処理を実行する。また0系のデータ転送制御部24Aは、このエラーチェック処理においてエラーが検出されなかったときには、かかるライトデータ及びデータ用エラーチェックコードからなるデータ群のRAIDパリティと、このRAIDパリティ用のエラーチェックコード(以下、これをパリティ用エラーチェックコードと呼ぶ)とを生成し、生成したRAIDパリティ及びそのパリティ用エラーチェックコードを0系のキャッシュメモリ10Aに格納する(矢印RA4)。
また0系のデータ転送制御部24Aは、かかるRAIDパリティ及びそのパリティ用エラーチェックコードを1系のデータ転送制御部24Bに転送し、これらRAIDパリティ及びそのパリティ用エラーチェックコードを1系のキャッシュメモリ10Bにも格納させる(矢印RB2)。
続いて0系のデータ転送制御部24Aは、0系のキャッシュメモリ10Aからライトデータ及びそのデータ用エラーチェックコードと、そのRAIDパリティ及び当該RAIDパリティのパリティ用エラーチェックコードとを読み出す(矢印RA5)。
そして0系のデータ転送制御部24Aは、かかるパリティ用エラーチェックコードを用いてRAIDパリティに対するエラーチェック処理を実行する。また0系のデータ転送制御部24Aは、このエラーチェック処理においてエラーを検出しなかったときには、かかるライトデータ及びそのデータ用エラーチェックコードと、そのRAIDパリティ及び当該RAIDパリティのパリティ用エラーチェックコードとを0系のドライブ制御部11Aに転送する(矢印RA6)。
かくして0系のドライブ制御部11Aは、これらライトデータ及びそのデータ用エラーチェックコードと、そのRAIDパリティ及び当該RAIDパリティのパリティ用エラーチェックコードとをライトコマンドにおいて指定された論理ボリュームVOL内の当該ライトコマンドにおいて指定されたアドレス位置に格納する(矢印RA7)。
なお、以上のライト処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードと、そのRAIDパリティ及び当該RAIDパリティのパリティ用エラーチェックコードとは、その後破棄される。
一方、図2との対応部分に同一符号を付した図3は、従来のストレージ装置21において、0系のコントローラ22Aがホストサーバ3からリードコマンドを受信した場合における処理の流れを示す。この図2において、一点鎖線の矢印LA1〜LA6は0系のコントローラ22Aのキャッシュメモリ10Aや対応する記憶デバイス5に読み書きされるリードデータ等の流れを示し、二点鎖線の矢印LB1は1系のコントローラ22Bのキャッシュメモリ10Bに書き込まれるリードデータの流れを示す。図7、図13、図17及び図21においても同様である。
かかるストレージ装置21において、0系のコントローラ22Aがホストサーバ3からのリードコマンドを受領した場合、まず0系のドライブ制御部11Aが、このリードコマンドにおいて指定された論理ボリュームVOL内の当該リードコマンドにおいて指定されたアドレス位置からデータ及びそのデータ用エラーチェックコードを読み出し(矢印LA1)、読み出したデータ(リードデータ)及びそのデータ用エラーチェックコードを0系のデータ転送制御部24Aに送信する(矢印LA2)。
0系のデータ転送制御部24Aは、このデータ用エラーチェックコードを用いてリードデータに対するエラーチェック処理を実行し、エラーを検出しなかったときには、リードデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aに格納する(矢印LA3)。
また0系のデータ転送制御部24Aは、かかるリードデータ及びそのデータ用エラーチェックコードを1系のデータ転送制御部24Bに転送し、かかるライトデータ及びそのデータ用エラーチェックコードを1系のキャッシュメモリ10Bにも格納させる(矢印LB1)。
続いて0系のデータ転送制御部24Aは、かかるリードデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aから読み出し(矢印LA4)、読み出したデータ用エラーチェックコードを用いてリードデータに対するエラーチェック処理を実行する。
そして0系のデータ転送制御部24Aは、このエラーチェック処理においてエラーを検出しなかった場合には、リードデータからデータ用エラーチェックコードを取り除き、このリードデータを0系のホスト制御部23Aに送信する(矢印LA5)。そして0系のホスト制御部23Aは、このリードデータをリードコマンドの送信元のホストサーバ3に転送する(矢印LA6)。
なお、以上のリード処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたリードデータ及びそのデータ用エラーチェックコードは、その後破棄される。
以上のように従来のストレージ装置21においては、ストレージ装置21内におけるデータ転送の信頼性を担保するためにライトデータやリードデータに対してエラーチェックコードを付加し、このエラーチェックコードを用いたエラーチェック処理を適宜実行しているが、このようなエラーチェック処理に関する一連の処理をすべてデータ転送制御部24A,24Bが行っている。
このため従来のストレージ装置21では、上述のようなエラーチェック処理に関する一連の処理を実行できるようなデータ転送制御部24A,24Bを特注する必要があり、データ転送制御部24A,24Bとして汎用のスイッチなどを利用することができなかった。この結果、従来のストレージ装置21では、データ転送制御部24A,24Bにおける処理負荷が大きく、データ転送制御部24A,24Bの性能如何によっては装置全体のデータ入出力性能が悪くなる問題があり、またデータ入出力性能の高いデータ転送制御部24A,24Bを使用するためにはストレージ装置21全体としての製造コストが高くなるという問題がある。
そこで本実施の形態によるストレージ装置4(図1)においては、上述のようなエラーチェック処理のうち、エラーチェックコードの生成及び生成したエラーチェックコードをライトデータへの付加等の処理をホスト制御部7A,7B(図1)において実行することにより、スイッチ9A,9B(図1)としてPCIeスイッチをカスタマイズしたものを利用できるようにしたものである。以下、このようなストレージ装置4内におけるデータ転送方式(ストレージ装置内でのライトデータやリードデータの転送の方式)について以下に説明する。
(1−2−2)本実施の形態によるデータ転送方式におけるライト処理の流れ
図4は、本実施の形態のストレージ装置4がホストサーバ3からのライトコマンド及びライトデータを受信した場合における、ストレージ装置4内での処理の流れを示している。以下においては、0系のコントローラ6Aがライトコマンド及びライトデータを受信した場合について説明するが、1系のコントローラ6Bがライトデータを受信した場合も同様である。また図5は、かかる処理の流れを概略的に示すフローチャートある。
ストレージ装置4において、0系のホスト制御部7Aは、ホストサーバ3からのライトコマンド及びライトデータを受信すると(図4の矢印RA10)、このライトデータのデータ用エラーチェックコードを生成し、生成したデータ用エラーチェックコードをそのライトデータに付加する(図5のSP1)。また0系のホスト制御部7Aは、かかるライトデータ及びデータ用エラーチェックコードを0系のスイッチ9Aのデュアルキャスト部12Aに送信する(図4の矢印RA11)。なお本実施の形態及び以下の第2〜第8の実施の形態においては、かかるデータ用エラーチェックコードとしてDIF(Data Integrity Field)を使用する。DIFの構成例を図6(A)に、またLA/LRCの構成例を図6(B)にそれぞれ示す。
かかるデュアルキャスト部12Aは、受信したライトデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aに格納すると共に、これらライトデータ及びそのデータ用エラーチェックコードを1系のスイッチ9Bに転送することにより、これらを1系のキャッシュメモリ10Bにも格納させる(図4の矢印RA12及び矢印RB10、図5のSP2)。
続いて0系のスイッチ9AのDMA部13Aが、0系のキャッシュメモリ10Aからライトデータ及びそのデータ用エラーチェックコードを読み出し(図4の矢印RA13)、このデータ用エラーチェックコードを用いたライトデータに対するエラーチェック処理を実行する(図5のSP3)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(SP4:YES)、0系のMPU8Aは、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、所定の第1のエラー処理が開始する(図5のSP5)。そしてストレージ装置4は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(SP4:NO)、0系のスイッチ9Aのパリティ生成部14Aが、0系のキャッシュメモリ10Aからライトデータ及びそのデータ用エラーチェックコードを読み出す(図4の矢印RA14)。そしてパリティ生成部14Aは、かかるライトデータ及びそのデータ用エラーチェックコードからなるデータ群のRAIDパリティを生成すると共に、このRAIDパリティのパリティ用エラーチェックコードを生成してこれを当該RAIDパリティに付加する(図5のSP6)。
またパリティ生成部14Aは、このようにして得られたRAIDパリティ及びそのパリティ用エラーチェックコードを0系のキャッシュメモリ10Aに格納する(図4の矢印RA15、図5のSP7)。次にMPU8Aは、これらRAIDパリティ及びそのパリティ用エラーチェックコードを0系のキャッシュメモリ10Aから読み出して1系のスイッチ9Bに転送することにより、これらを1系のキャッシュメモリ10Bにも格納させる(図4の矢印RB11、図5のSP8)。
次いでスイッチ9AのDMA部13Aが、ライトデータ及びデータ用エラーチェックコードと、RAIDパリティ及びそのパリティ用エラーチェックコードとを0系のキャッシュメモリ10Aから読み出し(図4の矢印RA16)、このデータ用エラーチェックコードと、パリティ用エラーチェックコードを用いたライトデータと、RAIDパリティとに対するエラーチェック処理を実行する(図5のSP9)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図5のSP10:YES)、0系のMPU8Aは、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、所定の第2のエラー処理を開始する(図5のSP5)。そしてストレージ装置4は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図5のSP10:NO)、スイッチ9Aは、ライトデータ及びそのデータ用エラーチェックコードと、RAIDパリティ及びそのパリティ用エラーチェックコードとを0系のキャッシュメモリ10Aから読み出し、これらをドライブ制御部11Aに送信する(図4の矢印RA17)。
かくしてドライブ制御部11Aは、これらライトデータ及びそのデータ用エラーチェックコードと、RAIDパリティ及びそのパリティ用エラーチェックコードとを、かかるライトコマンドにおいて指定された論理ボリュームVOL内の対応するアドレス位置に格納する(図5のSP11)。そしてストレージ装置4は、この後、このライト処理を終了する。
なお、以上のライト処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードと、そのRAIDパリティ及びそのパリティ用エラーチェックコードとは、その後破棄される。
(1−2−3)本実施の形態によるデータ転送方式におけるリード処理の流れ
一方、図7は、本実施の形態のストレージ装置4がホストサーバ3からのリードコマンドを受信した場合における、ストレージ装置4内での処理の流れを示している。以下においても0系のコントローラ6Aがリードコマンドを受信した場合について説明するが、1系のコントローラ6Bがリードコマンドを受信した場合も同様である。また図8は、かかる処理の流れを概略的に示すフローチャートである。
ストレージ装置4において、0系のコントローラ6Aがホストサーバ3からのリードコマンドを受信すると、まず0系のドライブ制御部11Aが、このリードコマンドにおいて指定された論理ボリュームVOL内の当該リードコマンドにおいて指定されたアドレス位置からデータ及びそのデータ用エラーチェックコードを読み出し(図7の矢印LA10)、読み出したデータ(リードデータ)及びそのデータ用エラーチェックコードを0系のスイッチ9Aのデュアルキャスト部12Aに送信する(図7の矢印LA11)。
デュアルキャスト部12Aは、受信したリードデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aに格納すると共に、これらリードデータ及びそのデータ用エラーチェックコードを1系のスイッチ9Bに転送することにより、これらを1系のキャッシュメモリ10Bにも格納させる(図7の矢印LA12及び矢印LB10、図8のSP20)。
続いて0系のホスト制御部7Aが、かかるリードデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aから読み出し(図7の矢印LA13、図8のSP21)、そのデータ用エラーチェックコードを用いたリードデータに対するエラーチェック処理を実行する(図8のSP22)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(SP23:YES)、0系のMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図8のSP24)。そしてストレージ装置4は、この後、このリード処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(SP23:NO)、0系のホスト制御部7Aが、かかるリードデータからデータ用エラーチェックコードを削除し(図8のSP25)、このリードデータをリードコマンドの送信元のホストサーバ3に送信する(図7の矢印LA14、図8のSP26)。そしてストレージ装置4は、この後、このリード処理を終了する。
なお、以上のリード処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたデータ用エラーチェックコードが付加されたリードデータは、その後破棄される。
(1−2−3)エラー処理
次に、図5のステップSP5において実行される第1のエラー処理について説明する。図9は、かかる第1のエラー処理の具体的な処理内容を示すフローチャートである。
0系のDMA部13Aは、図5のステップSP3におけるエラーチェックにおいてエラーを検出した場合(図5のSP4:YES)、図9に示す第1のエラー処理を開始し、0系のキャッシュメモリ10A内の所定領域(以下、これをチェック結果格納領域と呼ぶ)にエラーステータスを書き込むと共に、1系のコントローラ6Bにエラー通知を発行する。またMPU8Aは、この後、自系のコントローラ6Aを閉塞する(SP30)。
かかるエラー通知を受けた1系のコントローラ6B側はライト処理を開始し(SP31)、まずスイッチ9BのDMA部13Bが、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードを読み出し、当該データ用エラーチェックコードを用いたライトデータに対するエラーチェック処理を実行する(SP32)。
このエラーチェックの結果、DMA部13Bは、エラーを検出したというチェック結果が得られた場合(SP33:YES)、1系のキャッシュメモリ10B内のチェック結果格納領域にエラーステータスを書き込み、この後、この1系のコントローラ10Bを閉塞してこの第1のエラー処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(SP33:NO)、1系のコントローラ6Bにおいて図9のステップSP35〜ステップSP39を図5のステップSP6〜ステップSP11と同様に処理することにより、ライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを1系のキャッシュメモリ10Bに格納する。そして1系のコントローラ6Bは、この後、このライト処理を終了する。
一方、図10は、図5のステップSP10において実行される第2のエラー処理の具体的な処理内容を示すフローチャートである。
0系のDMA部13Aは、図5のステップSP9におけるエラーチェックにおいてエラーを検出した場合(図5のSP10:YES)、図10に示す第2のエラー処理を開始し、0系のキャッシュメモリ10A内のチェック結果格納領域にエラーステータスを書き込むと共に、1系のコントローラ6Bにエラー通知を発行する。またDMA部13Bは、この後、自系のコントローラ6Aを閉塞する(SP40)。
かかるエラー通知を受けた1系のコントローラ6B側はライト処理を開始し(SP41)、まずスイッチ9BのDMA部13Bが、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードを読み出し、当該データ用エラーチェックコードを用いたライトデータに対するエラーチェック処理を実行する(SP42)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(SP43:YES)、DMA部13Bは、1系のキャッシュメモリ10B内のチェック結果格納領域にエラーステータスを書き込み、この後、この1系のコントローラ10Bを閉塞してこの第2のエラー処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(SP43:NO)、DMA部13Bは、ライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとをドライブ制御部11Aを介して、ライトコマンドにおいて指定された論理ボリュームVOL内の当該ライトコマンドにおいて指定されたアドレス位置に書き込み(SP45)、この後、このライト処理を終了する。
(1−3)本実施の形態の効果
以上のように本実施の形態によるストレージ装置4では、データ用エラーチェックコードやパリティ用エラーチェックコードの付加をホスト制御部7A,7Bやスイッチ9A,9Bのパリティ生成部14Aにおいて行い、これらデータ用エラーチェックコード又はパリティ用エラーチェックコードを用いたエラーチェック処理をスイッチ9A,9BのDMA部13Aで行う。
従って、本実施の形態によれば、スイッチ9A,9BとしてカスタマイズしたPCIeスイッチを適用しながらも、必要なエラーチェック処理を適宜行うことができ、かくしてコストを抑えながら信頼性高くデータ転送を行うことができる。
また本実施の形態によれば、ホスト制御部7A,7Bにおいてエラーチェックコードを付加するようにしているため、例えばホスト制御部7A,7B及びスイッチ9A,9B間におけるデータ転送をも保証することができ、従来に比べてより一層とデータ転送の信頼性を向上させることができる。
(2)第2の実施の形態
図1との対応部分に同一符号を付して示す図11は、第2の実施の形態による計算機システム30を示す。この計算機システム30は、ストレージ装置31の0系及び1系のコントローラ32A,32Bにおいて、ホスト制御部7A,7Bに加えてドライブ制御部33A,33Bにおいてもエラーチェック処理を実行できる点が第1の実施の形態による計算機システム1と異なる。
また計算機システム30においては、このような構成の違いに伴い、ストレージ装置31におけるライト処理の流れも第1の実施の形態によるストレージ装置4(図1)と相違する。
なお図11においては、ストレージ装置31内の0系のコントローラ32Aがホストサーバ3からのライトコマンド及びライトデータを受信した場合における当該ストレージ装置31内のデータの流れを示しているが、1系のコントローラ32Bがライトコマンド及びライトデータを受信した場合も同様である。また図12は、本実施の形態のストレージ装置31におけるライト処理の流れを概略的に示すフローチャートである。
図11の矢印RA20〜RA25、矢印RA27、矢印RB20及び矢印RB21におけるデータの流れは、図4の矢印RA10〜RA15、矢印RA18、矢印RB10及び矢印RB11におけるデータの流れと同様である。また図12のステップSP50〜ステップSP57、ステップSP59及びステップSP60において実行される処理は、図5のステップSP1〜ステップSP8、ステップSP10及びステップSP11において実行される処理と全く同じである。
本実施の形態と第1の実施の形態との相違点は、第1の実施の形態では、ストレージ装置4において、RAIDパリティに対するエラーチェック処理をスイッチ9AのDMA部13Aにおいて実行していたのに対し、本実施の形態では、かかるエラーチェック処理をストレージ装置31のドライブ制御部33Aにおいて実行することである。
すなわち本実施の形態によるストレージ装置31の場合、ライトデータ及びそのデータ用エラーチェックコードからなるデータ群のRAIDパリティ及びそのパリティ用エラーチェックコードを1系のキャッシュメモリ10Bに格納し終えると(図11の矢印RB21、図12のSP57)、0系のドライブ制御部33Aが0系のキャッシュメモリ10Aからライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを読み出す。そして0系のドライブ制御部33Aは、このとき読み出したライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードに対するエラーチェック処理を実行する(図12のSP58)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図12のSP59:YES)、0系のMPU8Aは、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図12のSP54)。そしてストレージ装置31は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図12のSP59:NO)、0系のドライブ制御部33Aが、上述のように0系のキャッシュメモリ10Aから読み出したライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを、ライトコマンドにおいて指定された論理ボリュームVOL内の対応するアドレス位置に格納する(図12のSP60)。そしてストレージ装置31は、この後、このライト処理を終了する。
なお、以上のライト処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとは、その後破棄される。
一方、図13は、本実施の形態のストレージ装置31がホストサーバ3からのリードコマンドを受信した場合における、ストレージ装置31内での処理の流れを示している。また図14は、かかる処理の流れを概略的に示すフローチャートである。
図13において矢印LA20〜矢印LA24及び矢印LB20で示すデータの流れは図7において矢印LA10〜矢印LA14及び矢印LB10で示すデータの流れと同様である。また図14のステップSP74〜ステップSP79において実行される処理は、図8のステップSP20〜ステップSP26において実行される処理と全く同じである。異なる点は、第1の実施の形態では、リードデータに対するエラーチェック処理をDMA部13A,13Bで実行するのに対して、本実施の形態においては、リードデータに対するエラーチェック処理をドライブ制御部11Aにおいて実行することである。
すなわち本実施の形態によるストレージ装置31の場合、ドライブ制御部33Aは、ホストサーバ3からのリードコマンドに応じて、当該リードコマンドにおいて指定された論理ボリュームVOLから指定されたリードデータ及びそのデータ用エラーチェックコードを読み出す(図13のLA20、図14のSP70)。
そしてドライブ制御部33Aは、読み出したデータ用エラーチェックコードを用いたリードデータに対するエラーチェック処理を実行する(図14のSP71)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図14のSP72:YES)、0系のMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図14のSP73)。そしてストレージ装置31は、この後、このリード処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図14のSP72:NO)、ストレージ装置31は、図14のステップSP74〜ステップSP79を図8のステップSP20〜ステップSP26と同様に処理する。
なお、以上のリード処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたリードデータ及びそのデータ用エラーチェックコードは、その後破棄される。
以上のように本実施の形態による計算機システム30によれば、第1の実施の形態と同様に、ストレージ装置4のスイッチ9A,9Bとして、カスタマイズしたPCIeスイッチを適用しながら、必要なエラーチェック処理を適宜行うことができ、かくしてコストを抑えながら信頼性高くデータ転送を行うことができる。
また本実施の形態によれば、ドライブ制御部33A,33Bにおいてエラーチェック処理を実行するため、キャッシュメモリ10A,10B及びドライブ制御部33A,33B間におけるデータ転送をも保証することができ、第1の実施の形態のストレージ装置4に比べてより一層とデータ転送の信頼性を向上させることができる。
さらに本実施の形態によれば、ドライブ制御部33A,33Bにおいてエラーチェック処理を実行するため、その分、第1の実施の形態によるストレージ装置4に比べてスイッチ9A,9Bの処理負荷を軽減することができる。
(3)第3の実施の形態
(3−1)本実施の形態によるデータ転送方式
図1との対応部分に同一符号を付して示す図15は、第3の実施の形態による計算機システム40の構成を示す。この計算機システム40は、ストレージ装置41のホスト制御部43A,43Bにエラーチェックコードを生成するエラーチェックコード生成機能が搭載されておらず、スイッチ44A,44BのDMA部45A,45Bに当該エラーチェックコード生成機能が搭載されている点が第1の実施の形態による計算機システム1と異なる。
また本実施の形態による計算機システム40は、このような構成の違いに伴い、ストレージ装置41におけるライト処理の流れも第1の実施の形態によるストレージ装置41と相違する。
なお図15においては、ストレージ装置41内の0系のコントローラ42Aがホストサーバ3からのライトコマンド及びライトデータを受信した場合における当該ストレージ装置41内のデータの流れを示しているが、1系のコントローラ42Bがライトコマンド及びライトデータを受信した場合も同様である。また図16は、本実施の形態のストレージ装置41におけるライト処理の流れを概略的に示すフローチャートある。
このストレージ装置41において、0系のホスト制御部43Aは、ホストサーバ3からのライトコマンド及びライトデータを受信すると(図15の矢印RA30)、ライトデータを0系のスイッチ44Aのデュアルキャスト部12Aに送信する(図15の矢印RA31)。
デュアルキャスト部12Aは、受信したライトデータを0系のキャッシュメモリ10Aに格納すると共に、このライトデータを1系のスイッチ44Bに転送することにより、当該ライトデータを1系のキャッシュメモリ10Bにも格納させる(図4の矢印RA32及び矢印RB30、図16のSP80)。
続いて0系のスイッチ44AのDMA部45Aが、0系のキャッシュメモリ10Aからライトデータを読み出し(図15の矢印RA33)、このライトデータのデータ用エラーチェックコードを生成し(図16のSP81)、生成したデータ用エラーチェックコードを0系のキャッシュメモリ10Aに格納する(図15の矢印RA34、図16のSP82)。
またDMA部45Aは、このデータ用エラーチェックコードをキャッシュメモリ10Aから読み出して1系のスイッチ44Bに送信することにより、当該データ用エラーチェックコードを1系のキャッシュメモリ10Bにも格納させる(図15の矢印RB31、図16のSP83)。
この後、このストレージ装置41では、図4のステップSP3〜ステップSP11と同様にしてステップSP84〜ステップSP91の処理が実行される。従って、図15の矢印RA35〜矢印RA40に示すデータの流れは、図4の矢印RA13〜矢印RA18と同様となる。そしてストレージ装置41は、この後、このライト処理を終了する。
なお、以上のライト処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとは、その後破棄される。
一方、図17は、本実施の形態のストレージ装置41がホストサーバ3からリードコマンドを受信した場合における、ストレージ装置41内での処理の流れを示している。以下においても0系のコントローラ42Aがリードコマンドを受信した場合について説明するが、1系のコントローラ42Bがリードコマンドを受信した場合も同様である。また図18は、かかる処理の流れを概略的に示すフローチャートである。
ストレージ装置41において、ホストサーバ3からのリードコマンドを0系のコントローラ42Aが受領した場合、まず0系のドライブ制御部11Aが、このリードコマンドにおいて指定された論理ボリュームVOL内の当該リードコマンドにおいて指定されたアドレス位置からデータ及びそのデータ用エラーチェックコードを読み出し(図17の矢印LA30)、読み出したデータ(リードデータ)及びそのデータ用エラーチェックコードを0系のスイッチ44Aのデュアルキャスト部12Aに送信する(図17の矢印LA31)。
デュアルキャスト部12Aは、受信したリードデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aに格納すると共に、これらリードデータ及びそのデータ用エラーチェックコードを1系のスイッチ44Bに転送し、これらリードデータ及びそのデータ用エラーチェックコードを1系のキャッシュメモリ10Bにも格納させる(図17の矢印LA32及び矢印LB30、図18のSP100)。
続いて0系のスイッチ44AのDMA部45Aが、かかるリードデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aから読み出し(図17の矢印LA33、図18のSP101)、そのデータ用エラーチェックコードを用いた当該リードデータに対するエラーチェック処理を実行する(図18のSP102)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図18のSP103:YES)、0系のMPU8Aは、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図18のSP104)。そしてストレージ装置41は、この後、このリード処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図18のSP103:NO)、DMA部45Aが、リードデータに付加されたデータ用エラーチェックコードを削除し、リードデータのみを0系のキャッシュメモリ10Aに格納する(図17の矢印AL34、図18のSP105)。
このリードデータは、この後0系のホスト制御部43Aにより読み出され(図17の矢印AL35)、ホストサーバ3に送信される(図17の矢印LA36、図18のSP106)。そしてストレージ装置41は、この後、このリード処理を終了する。
なお、以上のリード処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたリードデータ及びそのデータ用エラーチェックコードは、その後破棄される。
(3−2)本実施の形態の効果
以上のように本実施の形態によれば、第1の実施の形態と同様に、ストレージ装置41のスイッチ44A,44Bとして、カスタマイズしたPCIeスイッチを適用しながらも、必要なエラーチェック処理を適宜行うことができ、かくしてコストを抑えながら信頼性高くデータ転送を行うことができる。
また本実施の形態によれば、ライトデータ等に対するエラーチェックコードの生成や、当該エラーチェックコードを用いたエラーチェックをすべてスイッチ44A,44Bにおいて実行するため、第1の実施の形態のストレージ装置4に比べてホスト制御部43A,43Bや、ドライブ制御部11A,11Bにおける負荷を軽減し、これらホスト制御部43A,43B及びドライブ制御部11A,11Bの構成を簡易化することができる。
(4)第4の実施の形態
図15との対応部分に同一符号を付して示す図19は、第4の実施の形態による計算機システム50を示す。この計算機システム50は、ストレージ装置51のドライブ制御部55A,55Bにエラーチェック機能が搭載されている点が第3の実施の形態による計算機システム40と異なる。
また計算機システム50においては、上述のような構成の違いに伴い、ストレージ装置51におけるライト処理の流れも第3の実施の形態によるストレージ装置41と相違する。図20は、このような第4の実施の形態のストレージ装置51におけるライト処理の流れを概略的に示すフローチャートある。
なお図19においては、ストレージ装置51内の0系のコントローラ52Aがホストサーバ3からのライトコマンド及びライトデータを受信した場合における当該ストレージ装置51内でのライト処理の流れを示しているが、1系のコントローラ52Bがライトコマンド及びライトデータを受信した場合も同様である。
図19において矢印RA40〜矢印RA47及び矢印RB40〜矢印RB43で示すデータの流れは、図15において矢印RA30〜矢印RA37及び矢印RB30〜矢印RB33で示すデータの流れと同様である。また図20のステップSP110〜ステップSP119において実行される処理は、図16のステップSP80〜ステップSP89において実行される処理と全く同じである。異なる点は、第3の実施の形態では、RAIDパリティに対するエラーチェック処理をスイッチ44AのDMA部45Aにおいて実行しているのに対して、本実施の形態においては、かかるエラーチェック処理をドライブ制御部11Aにおいて実行することである。
すなわち本実施の形態によるストレージ装置51の場合、0系のスイッチ53のパリティ生成部14Aにおいて生成されたRAIDパリティ及びそのパリティ用エラーチェックコードが0系のキャッシュメモリ10Aに格納されると(図19の矢印RA47、図20のSP119)、0系のドライブ制御部55Aがライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを0系のキャッシュメモリ10Aから読み出す(図19の矢印RA48)。
そして0系のドライブ制御部55Aは、そのライトデータ及びパリティ用エラーチェックコードを用いた当該ライトデータ及びRAIDパリティに対するエラーチェック処理を実行する(図20のSP120)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図20のSP121:YES)、0系のMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図20のSP116)。そしてストレージ装置51は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図20のSP121:NO)、0系のドライブ制御部55Aが、上述のように0系のキャッシュメモリ10Aから読み出したライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとをライトコマンドにおいて指定された論理ボリュームVOL内の当該ライトコマンドにおいて指定されたアドレス位置に格納する(図19の矢印RA49、図20のSP122)。そしてストレージ装置51は、この後、このライト処理を終了する。
なお、以上のライト処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとは、その後破棄される。
一方、図21は、本実施の形態のストレージ装置51がホストサーバ3からリードコマンドを受信した場合における、ストレージ装置51内での処理の流れを示している。以下においても0系のコントローラ52Aがリードコマンドを受信した場合について説明するが、1系のコントローラ52Bがリードコマンドを受信した場合も同様である。また図22は、かかる処理の流れを概略的に示すフローチャートである。
ストレージ装置51において、ホストサーバ3からのリードコマンドを0系のコントローラ52Aが受領した場合、まず0系のドライブ制御部55Aが、このリードコマンドにおいて指定された論理ボリュームVOL内の対応するアドレス位置からデータ及びそのデータ用エラーチェックコードを読み出し(図21の矢印LA50、図22のSP130)、このデータ用エラーチェックコードを用いたかかるデータ(リードデータ)に対するエラーチェック処理を実行する(図22のSP131)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図22のSP132:YES)、0系のMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図22のSP133)。そしてストレージ装置51は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図22のSP132:NO)、ドライブ制御部55Aが、かかるリードデータ及びそのデータ用エラーチェックコードをスイッチ53Aのデュアルキャスト部12Aに送信する。そしてデュアルキャスト部12Aは、与えられたリードデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aに格納すると共に、これらリードデータ及びそのデータ用エラーチェックコードを1系のスイッチ44Bに転送し、これらリードデータ及びそのデータ用エラーチェックコードを1系のキャッシュメモリ10Bにも格納させる(図21の矢印LA52及び矢印LB50、図22のSP134)。
この後、ストレージ装置51は、図22のステップSP135〜ステップSP139を図18のステップSP100〜ステップSP106と同様に処理する。従って、図21の矢印LA52〜矢印LA56におけるデータの流れは、図17の矢印LA33〜矢印LA36におけるデータの流れと同じである。そしてストレージ装置51は、この後、このリード処理を終了する。
なお、以上のリード処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたリードデータ及びそのデータ用エラーチェックコードは、その後破棄される。
以上のように本実施の形態によれば、第1の実施の形態と同様に、ストレージ装置51のスイッチ53A,53Bとして、カスタマイズしたPCIeスイッチを適用しながらも、必要なエラーチェック処理を適宜行うことができ、かくしてコストを抑えながら信頼性高くデータ転送を行うことができる。
また本実施の形態によれば、ドライブ制御部55A,55Bにおいてエラーチェック処理を実行するため、キャッシュメモリ10A,10B及びドライブ制御部55A,55B間におけるデータ転送をも保証することができ、従来に比べてより一層とデータ転送の信頼性を向上させることができる。
さらに本実施の形態によれば、このようにドライブ制御部55A,55Bにおいてエラーチェック処理を実行するため、第3の実施の形態のストレージ装置41に比べて、スイッチ53A,53Bの負荷を軽減することができる。
(5)第5の実施の形態
図4との対応部分に同一符号を付して示す図23は、第5の実施の形態による計算機システム60示す。本実施の形態による計算機システム60は、ストレージ装置61の0系及び1系のコントローラ62A,62Bに実装するスイッチ63A,63Bとして、汎用のPCIeスイッチを用いている点が第1の実施の形態による計算機システム1と異なる。
また計算機システム60においては、このような構成の違いに伴い、ライトデータやリードデータに対するエラーチェック処理を、0系のキャッシュメモリ10Aに格納されたプログラム64に基づき、0系のMPU8Aにより実行するようになされた点が第1の実施の形態による計算機システム1と相違する。図24は、本実施の形態によるストレージ装置61におけるライト処理の流れを概略的に示すフローチャートある。
なお図23においては、ストレージ装置61内の0系のコントローラ62Aがホストサーバ3からのライトコマンド及びライトデータを受信した場合における当該ストレージ装置61内の処理の流れを示しているが、1系のコントローラ62Bがライトコマンド及びライトデータを受信した場合も同様である。
ストレージ装置61において、0系のホスト制御部7Aは、ホストサーバ3からのライトコマンド及びライトデータを受信すると(図23の矢印RA50)、このライトデータのデータ用エラーチェックコードを生成し、これをライトデータに付加する。また0系のホスト制御部7Aは、これらライトデータ及びそのデータ用エラーチェックコードをスイッチ63Aのデュアルキャスト部12Aに送信する(図23の矢印RA51)。
デュアルキャスト部12Aは、0系のホスト制御部7Aから送信されるライトデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aに格納すると共に、これらを1系のスイッチ63Bに転送して1系のキャッシュメモリ10Bにも格納させる(図23の矢印RA52及び矢印RB50、図24のSP141)。
続いてMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づいて、当該0系のキャッシュメモリ10Aからライトデータ及びそのデータ用エラーチェックコードを読み出し(図23の矢印RA53)、このデータ用エラーチェックコードを用いた当該ライトデータに対するエラーチェック処理を実行する(図24のSP142)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図24のSP143:YES)、0系のMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図24のSP143)。そしてストレージ装置61は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図24のSP143:NO)、MPU8Aは、プログラム64に基づいて、ライトデータ及びそのデータ用エラーチェックコードからなるデータ群に対するRAIDパリティを生成すると供に、このRAIDパリティ用のパリティ用エラーチェックコードを生成し、当該パリティ要エラーチェックコードをかかるRAIDパリティに付加する(図24のSP145)。
続いてMPU8Aは、このRAIDパリティ及びそのパリティ用エラーチェックコードを0系のキャッシュメモリ10Aに書き込む(図23の矢印RA54、図24のSP146)。またMPU8Aは、これらRAIDパリティ及びそのパリティ用エラーチェックコードを0系のキャッシュメモリ10Aから読み出して1系のスイッチ63Bに転送することにより、これらを1系のキャッシュメモリ10Bに格納させる(図23の矢印RB51、図24のSP147)。
次いでMPU8Aは、0系のキャッシュメモリ10Aからライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを読み出す。またMPU8Aは、0系のキャッシュメモリ10Aに格納されたプログラム64に基づいて、かかるライトデータのデータ用エラーチェックコードと、パリティ用エラーチェックコードとを用いたそのライトデータ及びRAIDパリティに対するエラーチェック処理とを実行する(図24のSP148)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図24のSP149:YES)、0系のMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第2のエラー処理を開始する(図24のSP144)。そしてストレージ装置61は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図24のSP149:NO)、MPU8Aが、ライトデータ及びそのデータ用エラーチェックコードと、RAIDパリティ及びそのパリティ用エラーチェックコードとを0系のキャッシュメモリ10Aから読み出し、これらをドライブ制御部11Aに送信する(図23の矢印RA56)。
かくしてドライブ制御部11Aは、これらライトデータ及びそのデータ用エラーチェックコードと、RAIDパリティ及びそのパリティ用エラーチェックコードとを、かかるライトコマンドにおいて指定された論理ボリュームVOL内の対応するアドレス位置に格納する(図24のSP150)。そしてストレージ装置61は、この後、このライト処理を終了する。
なお、以上のライト処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとは、その後破棄される。
以上のように本実施の形態による計算機システム60によれば、ストレージ装置61において、エラーチェックコードの生成及び当該エラーチェックコードを用いたエラーチェック処理をMPU8Aが行うため、スイッチ63A,63Bとして汎用のPCIeスイッチを用いることができ、かくしてコストを抑えながら信頼性高くデータ転送を行うことができる。
(6)第6の実施の形態
図23との対応部分に同一符号を付した図25は、第6の実施の形態による計算機システム70を示す。この計算機システム70は、ストレージ装置71の0系及び1系のコントローラ72A,72Bにおいて、ホスト制御部7A,7Bに加えてドライブ制御部74A,74Bにもエラーチェック機能が搭載された点が第5の実施の形態によるストレージ装置60と異なる。
また計算機システム70においては、このような構成の違いに伴い、ストレージ装置70におけるライト処理の流れも第5の実施の形態によるストレージ装置60と相違する。図26は、本実施の形態によるストレージ装置71におけるライト処理の流れを概略的に示すフローチャートである。
なお図25においては、ストレージ装置71内の0系のコントローラ72Aがホストサーバ3からのライトコマンド及びライトデータを受信した場合における当該ストレージ装置71内の処理の流れを示しているが、1系のコントローラ72Bがライトコマンド及びライトデータを受信した場合も同様である。
図25の矢印RA60〜RA64、矢印RB60及び矢印RB61におけるデータの流れは、図23の矢印RA50〜RA54、矢印RB50及び矢印RB51におけるデータの流れと同様である。また図26のステップSP160〜ステップSP167において実行される処理は、図24のステップSP140〜ステップSP147において実行される処理と全く同じである。
本実施の形態と第5の実施の形態との相違点は、第5の実施の形態では、ストレージ装置61において、ライトデータ及びRAIDパリティに対するエラーチェック処理をスイッチ9AのDMA部13Aにおいて実行していたのに対し、本実施の形態では、かかるエラーチェック処理をストレージ装置71のドライブ制御部33Aにおいて実行することである。
すなわち本実施の形態によるストレージ装置61の場合、ライトデータ及びそのデータ用エラーチェックコードからなるデータ群のRAIDパリティ及びそのパリティ用エラーチェックコードを1系のキャッシュメモリ10Bに格納し終えると(図25の矢印RB60、図26のSP167)、0系のドライブ制御部74Aが0系のキャッシュメモリ10Aからライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを読み出す。そして0系のドライブ制御部74Aは、このとき読み出したライトデータ及びパリティ用エラーチェックコードを用いたライトデータ及びRAIDパリティに対するエラーチェック処理を実行する(図26のSP168)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図26のSP169:YES)、0系のMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図26のSP164)。そしてストレージ装置71は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図26のSP169:NO)、0系のドライブ制御部74Aは、上述のように0系のキャッシュメモリ10Aから読み出した0系のキャッシュメモリ10Aからライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを、ライトコマンドにおいて指定された論理ボリュームVOL内の対応するアドレス位置に格納する(図12のSP170)。そしてストレージ装置31は、この後、このライト処理を終了する。
なお、以上のライト処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとは、その後破棄される。
以上のように本実施の形態の計算機システム70によれば、第5の実施の形態と同様に、ストレージ装置71内におけるエラーチェックコードの生成及び当該エラーチェックコードを用いたエラーチェック処理をMPU8Aが行うため、スイッチ73A,73Bとして汎用のPCIeスイッチを用いることがで、かくしてコストを抑えながら信頼性高くデータ転送を行うことができる。
また本実施の形態によれば、ドライブ制御部74A,74Bにおいてエラーチェック処理を実行するため、キャッシュメモリ10A,10B及びドライブ制御部74A,74B間におけるデータ転送をも保証することができ、第5の実施の形態のストレージ装置61に比べてより一層とデータ転送の信頼性を向上させることができる。
さらに本実施の形態によれば、このようにドライブ制御部74A,74Bにおいてエラーチェック処理を実行するようにしているため、MPU8A,8Bの処理負荷を軽減することができる。
(7)第7の実施の形態
図23との対応部分に同一符号を付して示す図27は、第7の実施の形態による計算機システム80の構成を示す。この計算機システム80は、ストレージ装置81のホスト制御部83A,83Bにエラーチェックコードを生成するエラーチェックコード生成機能が搭載されておらず、かかるエラーチェックコードの生成処理及び当該エラーチェックコードを用いたエラーチェック処理を、キャッシュメモリ10A,10Bに格納されたプログラムに基づいてMPU8A,8Bにより実行する点が第5の実施の形態による計算機システム60と異なる。
また本実施の形態による計算機システム80は、このような構成の違いに伴い、ストレージ装置81におけるライト処理の流れも第5の実施の形態によるストレージ装置60と相違する。
なお図27においては、ストレージ装置81内の0系のコントローラ82Aがホストサーバ3からのライトコマンド及びライトデータを受信した場合における当該ストレージ装置81内のデータの流れを示しているが、1系のコントローラ82Bがライトコマンド及びライトデータを受信した場合も同様である。また図28は、本実施の形態のストレージ装置81におけるライト処理の流れを概略的に示すフローチャートある。
このストレージ装置81において、0系のホスト制御部83Aは、ホストサーバ3からのライトコマンド及びライトデータを受信すると(図27の矢印RA70)、ライトデータをスイッチ63Aのデュアルキャスト部12Aに送信する(図27の矢印RA71)。
デュアルキャスト部12Aは、受信したライトデータを0系のキャッシュメモリ10Aに格納すると共に、これを1系のスイッチ63Bに転送することにより、当該ライトデータを1系のキャッシュメモリ10Bにも格納させる(図27の矢印RA72及び矢印RB70、図28のSP170)。
続いてMPU8Aが、0系のキャッシュメモリ10Aに格納された所定のプログラム84に基づいて、当該キャッシュメモリ10Aからライトデータを読み出し(図27の矢印RA73)、このライトデータのデータ用エラーチェックコードを生成する(図28のSP171)。
またMPU8Aは、かかるプログラム84に基づいて、このデータ用エラーチェックコードを0系のキャッシュメモリ10Aに格納する(図27の矢印RA74、図28のSP172)と共に、当該データ用エラーチェックコードを0系のキャッシュメモリ10Aから読み出して1系のスイッチ63Bに送信することにより、当該データ用エラーチェックコードを1系のキャッシュメモリ10Bにも格納させる(図27の矢印RB71、図28のSP173)。
次いでMPU8Aは、かかるプログラム84に基づいて、ライトデータ及びそのデータ用エラーチェックコードを0系のキャッシュメモリ10Aから読み出し(図27の矢印RA75)、そのデータ用エラーチェックコードを用いた当該ライトデータに対するエラーチェック処理を実行する(図28のSP174)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図28のSP175:YES)、0系のMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図28のSP176)。そしてストレージ装置81は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図28のSP175:NO)、MPU8Aは、プログラム84に基づいて、ライトデータ及びそのデータ用エラーチェックコードからなるデータ群のRAIDパリティを生成すると共に、このRAIDパリティのパリティ用エラーチェックコードを生成する(図28のSP177)。
またMPU8Aは、かかるプログラム84に基づいて、かかるRAIDパリティ及びそのパリティ用エラーチェックコードを0系のキャッシュメモリ10Aに格納すると共に(図27の矢印RA76、図28のSP178)、これらRAIDパリティ及びそのパリティ用エラーチェックコードを当該キャッシュメモリ10Aから読み出して1系のスイッチ63Bに送信することにより、当該RAIDパリティ及びそのパリティ用エラーチェックコードを1系のキャッシュメモリ10Bに格納させる(図27の矢印RB72、図28のSP179)。
この後、MPU8Aは、ライトデータ及びデータ用エラーチェックコードと、RAIDパリティ及びそのパリティ用エラーチェックコードとを0系のキャッシュメモリ10Aから読み出し(図27の矢印RA77)、データ用エラーチェックコードとパリティ用エラーチェックコードとを用いて、ライトデータと、RAIDパリティとに対するエラーチェック処理を実行する(図28のSP180)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図28のSP181:YES)、MPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図28のSP176)。そしてストレージ装置81は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図28のSP181:NO)、MPU8Aは、プログラム84に基づいて、ライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを0系のキャッシュメモリ10Aから読み出し、これらをドライブ制御部11Aに送信する(図27の矢印RA78)。
かくしてドライブ制御部11Aは、これらライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを、ライトコマンドにおいて指定された論理ボリュームVOL内の当該ライトコマンドにおいて指定されたアドレス位置に格納する(図27の矢印RA79、図28のSP182)。そしてストレージ装置81は、この後、このライト処理を終了する。
なお、以上のライト処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとは、その後破棄される。
以上のように本実施の形態によれば、第5の実施の形態と同様に、ストレージ装置81内におけるエラーチェックコードの生成及び当該エラーチェックコードを用いたエラーチェック処理をMPU8Aが行うため、スイッチ63A,63Bとして汎用のPCIeスイッチを用いることができ、かくしてコストを抑えながら信頼性高くデータ転送を行うことができる。
また本実施の形態によれば、ライトデータ等に対するエラーチェックコードの生成や、当該エラーチェックコードを用いたエラーチェックをすべてMPU8A,8Bにおいて実行するため、第5の実施の形態のストレージ装置4に比べてホスト制御部83A,83Bや、ドライブ制御部11A,11Bにおける負荷を軽減し、これらホスト制御部83A,83B及びドライブ制御部11A,11Bの構成を簡易化することができる。
(8)第8の実施の形態
図27との対応部分に同一符号を付して示す図29は、第8の実施の形態による計算機システム90を示す。この計算機システム90は、ストレージ装置91のドライブ制御部93Aにエラーチェック機能が搭載されている点が第7の実施の形態による計算機システム80と異なる。
また計算機システム90においては、上述のような構成の違いに伴い、ストレージ装置91におけるライト処理の流れも第7の実施の形態によるストレージ装置91と相違する。図30は、このような第8の実施の形態のストレージ装置91におけるライト処理の流れを概略的に示すフローチャートある。
なお図29においては、ストレージ装置81内の0系のコントローラ92Aがホストサーバ3からのライトコマンド及びライトデータを受信した場合における当該ストレージ装置91内でのライト処理の流れを示しているが、1系のコントローラ92Aがライトコマンド及びライトデータを受信した場合も同様である。
図29において矢印RA80〜矢印RA86で示すデータの流れは、図27の矢印RA30〜矢印RA37及び矢印RB30〜矢印RB33におけるデータの流れと同様である。また図30のステップSP180〜ステップSP189において実行される処理は、図28のステップSP170〜ステップSP179において実行される処理と全く同じである。異なる点は、第7実施の形態では、ライトデータ及びデータ用エラーチェックコードと、RAIDパリティ及びそのパリティ用エラーチェックコードとのエラーチェックをMPU8Aが行っていたのに対し、本実施の形態では、かかるエラーチェック処理をドライブ制御部93Aにおいて実行することである。
すなわち本実施の形態によるストレージ装置91の場合、0系のMPU8Aがライトデータ及びそのデータ用エラーチェックコードからなるデータ群のRAIDパリティ及びそのパリティ用エラーチェックコードが0系のキャッシュメモリ10Aに格納されると(図29の矢印RB82、図30のSP199)、0系のドライブ制御部93Aがライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとを0系のキャッシュメモリ10Aから読み出す(図29の矢印RA88)。
そして0系のドライブ制御部93Aは、そのデータ用エラーチェックコードと、パリティ用エラーチェックコードとを用いて、当該ライトデータとRAIDパリティとに対するエラーチェック処理を実行する(図30のSP200)。
このエラーチェックの結果、エラーを検出したというチェック結果が得られた場合(図30のSP201:YES)、0系のMPU8Aが、0系のキャッシュメモリ10Aに格納されたプログラムに基づき、上述の第1のエラー処理を開始する(図30のSP196)。そしてストレージ装置91は、この後、このライト処理を終了する。
これに対して、かかるエラーチェックの結果、エラーを検出しなかったというチェック結果が得られた場合(図30のSP201:NO)、ドライブ制御部93Aは、上述のように0系のキャッシュメモリ10Aから読み出したライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとをライトコマンドにおいて指定された論理ボリュームVOL内の当該ライトコマンドにおいて指定されたアドレス位置に格納する(図29の矢印RA88、図30のSP202)。そしてストレージ装置91は、この後、このライト処理を終了する。
なお、以上のライト処理が正常に終了した場合、1系のキャッシュメモリ10Bに格納されたライトデータ及びそのデータ用エラーチェックコードと、これらのRAIDパリティ及びそのパリティ用エラーチェックコードとは、その後破棄される。
以上のように本実施の形態によれば、第5の実施の形態と同様に、ストレージ装置91内におけるエラーチェックコードの生成及び当該エラーチェックコードを用いたエラーチェック処理をMPU8Aが行うため、スイッチ63A,63Bとして汎用のPCIeスイッチを用いることができ、かくしてコストを抑えながら信頼性高くデータ転送を行うことができる。
また本実施の形態によれば、ドライブ制御部93A,93Bにおいてエラーチェック処理を実行するようにしているため、例えばスイッチ63A,63B及びドライブ制御部93A,93B間におけるデータ転送をも保証することができ、従来に比べてより一層とデータ転送の信頼性を向上させることができる。
さらに本実施の形態によれば、このようにドライブ制御部93A,93Bにおいてエラーチェック処理を実行するため、第7の実施の形態のストレージ装置81に比べて、MPU8A,8Bの負荷を軽減することができる。