なお、以後の説明では、「***テーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。各種情報がデータ構造に依存しないことを示すために「***テーブル」を「***情報」と呼ぶことができる。
また、以後の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit ))によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び通信制御装置(例えば通信ポート)を用いながら行うため、処理の主語がプロセッサとされてもよい。また、プログラムを主語として説明された処理は、管理システムが行う処理としても良い。また、プログラムの一部又は全ては専用ハードウェアによって実現されてもよい。このため、プログラムを主語として説明された処理は、コントローラが行う処理としても良い。コントローラは、プロセッサと、プロセッサに実行されるコンピュータプログラムを記憶する記憶資源とを含んでも良いし、上記の専用ハードウェアを含んでも良い。また、コンピュータプログラムは、プログラムソースから各計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
また、以下の説明では、管理システムは、一以上の計算機、例えば、管理計算機、又は、管理計算機と表示用計算機との組み合わせである。具体的には、例えば、管理計算機が表示用情報を表示する場合は、管理計算機が管理システムである。また、処理の高速化や高信頼化のために、複数の計算機で管理計算機と同等の機能が実現されてもよく、この場合は、当該複数の計算機(表示を表示用計算機が行う場合は表示用計算機を含んで良い)が、管理システムである。
まず、本発明の適用例であるストレージシステムの構成について説明する。
図1は、ストレージシステム30の構成の一例を示す。このストレージシステム30は、データを格納する複数のストレージ装置50と、これら複数のストレージ装置に接続されているシステムコントローラ20とを有する。ストレージ装置は、例えば、FMPK(Flash Memory Package)50である。
FMPK50は、データを格納する不揮発メモリと、不揮発メモリ及びシステムコントローラ20に接続されているデバイスコントローラ60とを有する。不揮発メモリは例えば、NAND型のFM(Flash Memory)55である。不揮発メモリはフラッシュメモリに限定されず、追記型のメモリ(例えば、相変化メモリ)でも良い。デバイスコントローラ60は、通信インタフェースデバイス、記憶デバイス及びそれらに接続された制御デバイスを有する。通信インタフェースデバイスは例えば、システムインタフェース53とFMインタフェース54である。以下の説明において、インタフェースをI/Fと示すことがある。システムI/F53は、システムコントローラ20に接続される。FM I/F54は、FM55に接続される。
記憶デバイスは例えば、メモリ52及びバッファ66である。制御デバイスは例えば、CPU51である。制御デバイスは、CPU51のようなプロセッサの他に、所定の処理(例えば圧縮、伸長、暗号化又は復号化)を行う専用ハードウェア回路を含んでも良い。専用ハードウェア回路は例えば、パリティ又は中間パリティを計算するパリティ演算回路65である。メモリ52には、FM55を制御するためのプログラム及び各種情報が記憶される。CPU51は、メモリ52に記憶されているプログラムを実行することにより各種機能を実現させる。バッファ66は例えば、DRAM(Dynamic Random Access Memory)等の揮発メモリである。また、バッファ66は、FM55へ書き込むデータ、FM55から読み出したデータ、パリティ演算中のデータ等を一時的に格納する。
FMPK50は、複数のFM55を有していても良い。複数のFM55は、異種の記憶媒体を含んでも良いし、同種の記憶媒体であっても良い。例えば、FM55は、複数の物理ブロックで構成されている。各物理ブロックは複数の物理ページで構成されている。FM55内の各セルは、SLC(Single Level Cell)であってもMLC(Multiple LevelCell)であっても良い。また、不揮発メモリは、他の不揮発メモリであっても良いし、相変化メモリ等の記録可能なメモリであっても良い。
図2は、システムコントローラ20の構成を示す。システムコントローラ20は、通信インタフェースデバイス、記憶デバイス、及びそれらに接続された制御デバイスを有する。通信インタフェースデバイスは例えば、通信ネットワークに接続するための通信I/F18、FMPK50に接続するためのディスクI/F19である。記憶デバイスは例えば、メモリ12及びバッファ26である。制御デバイスは例えば、CPU11である。制御デバイスは、CPU11のようなプロセッサの他に、所定の処理(例えば圧縮、伸長、暗号化又は復号化)を行う専用ハードウェア回路を含んでも良い。専用ハードウェア回路は例えば、パリティ又は中間パリティのいずれかを計算するパリティ演算回路25である。メモリ12には、FMPK50を制御するためのプログラム及び各種情報が記憶される。CPU11は、メモリ12に記憶された情報に基づき、プログラムを実行することにより各種機能を実現させる。バッファ26は例えば、DRAM等の揮発メモリである。また、バッファ26は、FMPK50へライトするデータ、FMPK50からリードしたデータ、パリティ演算中のデータ等を一時的に格納する。なお、システムコントローラ20に接続される全てのFMPK50がパリティ演算回路65を有している場合には、システムコントローラ20は、パリティ演算回路25を有していなくても良い。
システムコントローラ20に相当する従来のシステムコントローラが提供していた機能として、パリティ演算、スナップショット、データ圧縮、重複排除などがあるが、これらの機能をFMPK50等の記憶媒体が実現できる。この実施例では、パリティ演算機能を説明する。
システムコントローラ20とデバイスコントローラ60が階層を形成していることから、システムコントローラ20を上位コントローラ、デバイスコントローラ60を下位コントローラ、と定義することもできる。
次に、システムコントローラ20がRAID(Redundant Array of Independent Disks)機能をサポートしているコントローラである場合のストレージシステム30の適用例である、計算機システムについて説明する。
図3は、実施例1に係る計算機システムの構成の一例を示す。この計算機システムは、ホスト計算機10と、ストレージシステム30とを有する。ホスト計算機10とストレージシステム30とは、通信ネットワーク、例えば、SAN(Storage Area Network)1を介して接続される。なお、計算機システムは、複数のホスト計算機10を有していても良い。この場合、ストレージシステム30は、SAN1を介して複数のホスト計算機10に接続される。
ストレージシステム30は、複数のFMPK50と、これらのFMPK50を制御するシステムコントローラ20とを有する。ストレージ装置は例えば、FMPK50である。この例においてシステムコントローラ20は例えば、RAIDコントローラである。また、この例において、ストレージシステム30は、複数のシステムコントローラ20を有する。各システムコントローラ20は、SAN1を介してホスト計算機10に接続されている。複数のFMPK50の夫々は、複数のシステムコントローラ20に接続されている。なお、ストレージシステム30は、一つのシステムコントローラ20だけを有していても良い。
システムコントローラ20の構成は、図2に示された構成と同様である。メモリ12には更に、複数のFMPK50を用いるRAID機能のためのプログラム及び各種情報が記憶される。この例において、システムコントローラ20は、パリティ演算回路25を有しているが、パリティ演算回路25を有していなくても良い。
ホスト計算機10は、管理システムであっても良い。
以下、システムコントローラ20がRAID5の制御を行う場合について説明する。
システムコントローラ20は、RG(RAID Group)とLU(Logical Unit、論理ボリュームと呼ばれることもある)とFMPK50と関連付けられている。図4は、RG及びLUの構成の一例を示す。システムコントローラ20は、FMPK50の幾つかをRGに割り当て、RGの記憶領域の一部又は全部をLUに割り当てる。なお、論理ボリュームは、シンプロビジョニング技術によりボリュームの容量が仮想化された仮想ボリュームであってもよい。仮想ボリュームには予めデータを格納するための物理的な記憶領域が割当てられていない。当該仮想ボリュームへのライト要求に応じて所定の単位で、当該仮想ボリュームに対して、物理的な記憶領域が割当てられる。
図5は、RG管理テーブル600の一例を示す。図6は、LU管理テーブル700の一例を示す。図7は、FMPK管理テーブル800の一例を示す。システムコントローラ20は、RG(RAID Group)とLU(Logical Unit)とFMPK50との関係を、メモリ12内のRG管理テーブル600とLU管理テーブル700とFMPK管理テーブル800へ書き込む
RG管理テーブル600は、RG毎のレコードを有する。或るRGのレコードは、このRGを示すRG番号601と、このRGに割り当てられたFMPK50を示すFMPK番号602と、このRGのRAIDレベル603とを示す。
LU管理テーブル700は、LU毎のレコードを有する。或るLUのレコードは、このLUを示すLU番号701と、このLUに割り当てられたRGを示すRG番号702と、このLUに割り当てられたストライプブロックのサイズであるストライプサイズ703と、このLUの開始論理アドレスであるLU開始アドレス704と、このLUのサイズであるLUサイズ705と、このLUのIO特性706とを示す。IO特性706はこのLUに対して行われたIOパターンの傾向であり、シーケンシャルの傾向が強いか、或いはランダムの傾向が強いか、を示す。
IO特性706は、ユーザにより予め指定されても良いし、システムコントローラ20により判定されても良い。また、これらを組み合わせ、IO特性706の初期値がユーザにより予め指定され、所定の時間が経過した後、システムコントローラ20が判定により初期値を最適化しても良い。また、IO特性706の判定方法として例えば、システムコントローラ20は、単位時間毎に、或るLUに対するコマンドの統計を取り、ランダムI/OパターンとシーケンシャルのI/Oパターンのうち高いほうを当該LUのIO特性706と判定しても良い。コマンドの種類は、ランダムライト及びシーケンシャルライトを含む。ランダムライトの割合とシーケンシャルライトの割合の比較は、これらのコマンドの頻度を比較しても良いし、これらのコマンドにより書き込まれたデータ量を比較しても良い。また、システムコントローラ20は、一定周期でIO特性706を前述の判定方法によりモニタリングし、変更の必要があれば、LU管理テーブル700を更新しても良い。
FMPK管理テーブル800は、FMPK50毎のレコードを有する。或るFMPK50のレコードは、このFMPK50を示すFMPK番号801と、このFMPK50が所属するRGを示す所属RG番号802と、このFMPK50のパリティ演算機能を示すパリティ演算機能サポート情報803とを示す。パリティ演算機能サポート情報803は例えば、このFMPK50がパリティ演算回路65等のパリティ演算機能を有するか否かを示すフラグである。
図8は、RG上のアドレス空間の一例を示す。図9は、RGに所属するFMPK50上のアドレス空間の一例を示す。この例において、システムコントローラ20は、RAID5のRG#0のために、4個のFMPK50であるFMPK#0〜FMPK#3を割り当てる。更にシステムコントローラ20は、RG#0上のアドレス空間から、連続する領域をLU#0に割り当て、別の連続する領域をLU#1に割り当てる。システムコントローラ20は、FMPK#0〜FMPK#3上のアドレス空間に亘るストライプラインを割り当て、ストライプライン順、FMPK番号順にストライプブロック及びパリティを割り当てる。ここでシステムコントローラ20は、ストライプライン毎に、ストライプブロック及びパリティを割り当てるFMPK番号をシフトさせる。このときシステムコントローラ20は、RG#0,LU#0,LU#1に関する情報を、RG管理テーブル600とLU管理テーブル700とFMPK管理テーブル800へ書き込む。
図10は、FMPK50におけるページマッピングの一例を示す。FMPK50上の論理アドレス空間は、複数の論理ページに分割されている。一方、FMPK50上の物理アドレス空間は、複数の物理ブロックに分割されており、更に各物理ブロックは、所定のブロックサイズを有し、複数の物理ページに分割されている。各論理ページ及び各物理ページは、所定のページサイズを有する。
なお、物理ページの代わりに、物理ブロック等、他の物理領域が用いられても良い。また、論理ページの代わりに、論理ユニット等、他の論理領域が用いられても良い。
図11は、ページマッピング管理テーブル1100の一例を示す。デバイスコントローラ60は、論理ページを物理ページに関連付け、その関連をメモリ52内のページマッピング管理テーブル1100へ書き込む。ページマッピング管理テーブル1100は、論理ページ毎のレコードを有する。或る論理ページのレコードは、この論理ページを示す論理ページ番号1101と、現在この論理ページに割り当てられている物理ページである現物理ページを示す物理ページ番号1102と、現物理ページの直前にこの論理ページに割り当てられていた物理ページである旧物理ページを示す旧物理ページ番号1103とを示す。即ち、或る論理ページに関連付けられている旧物理ページは、一世代前にこの論理ページに関連付けられていた現物理ページを示す。論理ページに関連付けられた旧物理ページは有効ページとして、論理ページとの関連付けが解除されるまでその関連性が保持される。関連付けが解除された旧物理ページは無効ページとなるため、リクラメーション処理等により所定のタイミングで、旧物理ページ内のデータが消去される。リクラメーション処理とは、メモリの特性上データを上書きできないフラッシュメモリにおいて、無効データ(無効ページに格納されているデータ)を消去して、その無効データが格納されていたページを再度書き込み可能な状態にする処理を言う。フラッシュメモリではブロック単位でデータを消去するので、デバイスコントローラ60は、対象ブロック内に有効ページと無効ページの両方がある場合、有効ページ内のデータを他ブロックへ移動してから、対象ブロックに格納されている無効データを消去する。本実施例においては、デバイスコントローラ60は、論理ページに関連付けられた物理ページ1102及び旧物理ページ1103を有効ページと判断して、リクラメーション処理を実行する。
旧物理ページの管理方法の具体例について説明する。デバイスコントローラ60は、ページマッピング管理テーブル1100に示されている旧物理ページが不要か否かを判定し、或る旧物理ページが不要と判定された場合、この旧物理ページと論理ページの関連付けを解除しても良い。例えば、デバイスコントローラ60により管理される旧物理ページ数の上限が予め設定され、デバイスコントローラ60は、ページマッピング管理テーブル1100から旧物理ページを古い順に削除する。また、デバイスコントローラ60は、システムコントローラ20からの指示により、ページマッピング管理テーブル1100から旧物理ページを削除しても良い。判定基準の一例としては、データ更新に伴うパリティの更新が終了したことである。また、システムコントローラ20は、旧物理ページのデータが必要か否かを判定し、この旧物理ページが不要であると判定された場合に、この旧物理ページに対応するデバイスコントローラ60へ、ページマッピング管理テーブル1100からこの旧物理ページを削除することを指示しても良い。また、システムコントローラ20又はデバイスコントローラ60は、FM55の使用済みの容量が一定値以上になった場合に、ページマッピング管理テーブル1100から旧物理ページを削除しても良い。また、旧物理ページのデータの読み出しが要求され、且つ旧物理ページがページマッピング管理テーブル1100に残っている場合、デバイスコントローラ60は、旧物理ページのデータを読み出すことができる。
次に、システムコントローラ20の動作について説明する。
まず、データ更新時のライト方法について説明する。
ライト方法は例えば、リードモディファイライト及びフルストライプライトである。この例におけるリードモディファイライトは、一つのストライプラインの中で指定された一つのストライプブロックのデータを更新する処理である。あるいは、この例におけるフルストライプライトは、一つのストライプライン内の全てのデータを更新する処理である。リードモディファイライトは、指定されたストライプブロックの旧データと新データから中間パリティを計算し、中間パリティと旧パリティから新パリティを計算する。フルストライプライトは、全ての新データから新パリティを計算する。ここで、旧データは更新前のデータを示し、新データは更新後のデータを示し、旧パリティは更新前のパリティを示す、新パリティは更新後のパリティを示す。中間パリティは、パリティ演算の途中のパリティであり、旧パリティと新パリティの差分を示す。
次に、パリティ演算機能について説明する。
パリティ演算機能は例えば、パリティ演算回路25及びパリティ演算回路65であり、一つのストライプラインにおける二つのストライプブロックのデータの間の排他的論理和(exclusive OR)をパリティとして計算する。また、パリティ演算機能は、旧データと新データの間の排他的論理和を中間パリティとして計算する。また、パリティ演算機能は、旧パリティと中間パリティの間の排他的論理和を新パリティとして計算する。旧データをDi、新データをDi_new、旧パリティをPとすると、新パリティP_newは次式で表される。
P_new = P+(Di+Di_new)
ここで、演算子「+」は排他的論理和を表し、(Di+Di_new)は中間パリティを表す。中間パリティは、Di以外の全てのデータ間の排他的論理和に等しい。
なお、パリティの代わりに、ハミング符号等、他の冗長コードが用いられても良い。
次に、システムコントローラ20がFMPK管理テーブル800にパリティ演算機能サポート情報803を登録するパリティ演算機能登録処理について説明する。
図12は、パリティ演算機能登録処理の一例を示す。システムコントローラ20は、新規のFMPK50をインストールする時や、システムコントローラ20の立ち上げ時等に、パリティ演算機能登録処理を行う。
まずシステムコントローラ20は、パリティ演算機能サポート確認コマンドをFMPK50のデバイスコントローラ60へ発行し、その応答を受領する(1201)。このときパリティ演算機能サポート確認コマンドを受けたデバイスコントローラ60は、デバイスコントローラ60自身がパリティ演算機能を有しているか否かを示す応答をシステムコントローラ20へ送る。次にシステムコントローラ20は、応答に基づいて、デバイスコントローラ60がパリティ演算機能を有しているか否かを示す情報を、FMPK管理テーブル800のパリティ演算機能サポート情報803へ登録し(1202)、この処理のフローを終了する。
なお、パリティ演算機能登録処理を行う代わりに、ユーザが予めパリティ演算機能サポート情報803を登録しても良い。
次に、パリティ演算を行うパリティ演算実施装置の決定方法について説明する。
図13は、パリティ演算実施装置の決定方法1300の一例を示す。システムコントローラ20は決定方法1300に従って、システムコントローラ20又はデバイスコントローラ60をパリティ演算実施装置として決定する。システムコントローラ20は、システムコントローラ20がパリティ演算回路25等のパリティ演算機能を有するか否かを示す情報と、FMPK管理テーブル800のパリティ演算機能サポート情報803とに基づいて、システムコントローラ20とデバイスコントローラ60の何れかをパリティ演算実施装置として決定する。パリティ演算実施装置を決定するための4個のケースが定義されている。各ケースは、ケース番号1301、システムコントローラ20がパリティ演算機能を有するか否かを示すシステム機能情報1302と、デバイスコントローラ60がパリティ演算機能を有するか否かを示すデバイス機能情報1303と、パリティ演算実施装置を示すパリティ演算実施情報1304と、オプション1305とを示す。
ケース#1は、システムコントローラ20がパリティ演算機能を有しており、且つデバイスコントローラ60もパリティ演算機能を有しているケースである。パリティ演算実施情報1304によれば、このケースにおいてシステムコントローラ20は、パリティ演算実施装置としてシステムコントローラ20とデバイスコントローラ60の何れも選択することができる。この場合、システムコントローラ20は、オプション1305に基づいて後述のライト処理を行う。
ケース#2は、システムコントローラ20がパリティ演算機能を有しており、且つデバイスコントローラ60がパリティ演算機能を有していないケースである。パリティ演算実施情報1304によれば、このケースにおいてシステムコントローラ20は、パリティ演算実施装置としてシステムコントローラ20を選択する。
ケース#3は、システムコントローラ20がパリティ演算機能を有しておらず、且つデバイスコントローラ60がパリティ演算機能を有しているケースである。パリティ演算実施情報1304によれば、このケースにおいてシステムコントローラ20は、パリティ演算実施装置としてデバイスコントローラ60を選択する。
ケース#4は、システムコントローラ20がパリティ演算機能を有しておらず、且つデバイスコントローラ60もパリティ演算機能を有していないケースである。パリティ演算実施情報1304によれば、このケースにおいてシステムコントローラ20は、パリティ演算実施装置としてシステムコントローラ20とデバイスコントローラ60の何れも選択することができない。
なお、パリティ演算機能登録処理及びパリティ演算実施装置の決定は、省かれても良い。例えば、システムコントローラ20と全てのデバイスコントローラ60がパリティ演算機能を有している場合、システムコントローラ20は、パリティ演算機能登録処理及びパリティ演算実施装置の決定を省き、後述するケース#1におけるライト処理を行う。また、管理者等によりパリティ演算実施装置が予め設定されている場合も、これらの処理を省略可能である。
次に、ケース#1〜#3におけるシステムコントローラ20のライト処理について説明する。
図14は、システムコントローラ20のライト処理の一例を示す。まずシステムコントローラ20は、外部ホストからIO要求としてライト要求を受領する(1401)。外部ホストは例えば、SAN1を介してシステムコントローラ20に接続されたホスト計算機10である。次にシステムコントローラ20は、パリティ演算を行うパリティ演算実施装置としてシステムコントローラ20及びデバイスコントローラ60の一方を選択するパリティ演算選択処理を行う(1402)。なお、ケース#2及びケース#3では、パリティ演算実施装置は選択済みなので、ステップ1402の処理は省略する。次にシステムコントローラ20は、受領した命令に基づいてライト方法を選択するライト方法選択処理を行う(1403)。ライト方法は、リードモディファイライト及びフルストライプライトの一方である。次にシステムコントローラ20は、選択されたライト方法に従ってデバイスコントローラ60にデータ及びパリティを更新させるデータ更新処理を行う(1404)。
次に、パリティ演算選択処理1402の幾つかの具体例について説明する。
まず、システムコントローラ20がLU毎のIO特性706に基づいてパリティ演算実施装置を選択する処理の具体例である、第1パリティ演算選択処理について説明する。
図15は、第1パリティ演算選択処理の一例を示す。まずシステムコントローラ20は、LU管理テーブル700に基づいて、当該ライトの対象のLUのIO特性706がランダムを示すか否かを判定する(1501)。当該LUのIO特性706がランダムを示す場合(1501,Yes)、システムコントローラ20は、パリティ演算実施装置としてデバイスコントローラ60を選択することにより、デバイスコントローラ60にパリティ演算を指示することを決定し(1502)、この処理のフローを終了する。一方、当該LUのIO特性706がランダムを示さない場合(1501,No)、すなわち後述するシーケンシャルライトの場合は、システムコントローラ20は、パリティ演算実施装置としてシステムコントローラ20を選択することにより、システムコントローラ20がパリティ演算を実施することを決定し(1503)、この処理のフローを終了する。
即ち、システムコントローラ20は、IO契機で、LU管理テーブル700のIO特性706を参照し、IO特性706が、当該LUへの書き込みにおいてランダムライトがシーケンシャルライトより多いことを示す場合、デバイスコントローラ60にパリティ生成を指示する。一方、IO特性706が、当該LUへの書き込みにおいてランダムライトがシーケンシャルライトより少ないことを示す場合、システムコントローラ20がパリティ生成を実施する。
次に、システムコントローラ20がシステムコントローラ20のハードウェアの負荷を検出し、この負荷に基づいてパリティ演算実施装置を選択する処理の具体例である、第2パリティ演算選択処理について説明する。
図16は、第2パリティ演算選択処理の一例を示す。ハードウェアは例えば、CPU11、メモリ12、パリティ演算回路25である。まずシステムコントローラ20は、自身のハードウェアの負荷が基準より高いか否かを判定する(1601)。ハードウェアの負荷が基準より高いと判定された場合(1601,Yes)、システムコントローラ20は、パリティ演算実施装置としてデバイスコントローラ60を選択し、デバイスコントローラ60にパリティ演算を指示し(1602)、この処理のフローを終了する。一方、ハードウェアの負荷が基準より高くないと判定された場合(1601,No)、システムコントローラ20は、パリティ演算実施装置としてシステムコントローラ20を選択し(1603)、この処理のフローを終了する。
ここで、システムコントローラ20は例えば、システムコントローラ20のハードウェアの負荷を計測し、計測結果が所定の閾値を超えた場合に、ハードウェアの負荷が高いと判定する。計測結果は例えば、CPU11の利用率、メモリ12の使用量、パリティ演算回路25へ入力されたデータ量等である。
次に、システムコントローラ20が当該ライトのIOパターンに基づいてパリティ演算実施装置を選択する処理の具体例である、第3パリティ演算選択処理について説明する。
図17は、第3パリティ演算選択処理の一例を示す。まずシステムコントローラ20は、当該IO要求のIOパターンがランダムライトか否かを判定する(1701)。IOパターンがランダムライトであると判定された場合(1701,Yes)、システムコントローラ20はパリティ演算実施装置としてデバイスコントローラ60を選択し、デバイスコントローラ60にパリティ演算を指示し(1702)、この処理のフローを終了する。一方、IOパターンがランダムライトでないと判定された場合、即ちIOパターンがシーケンシャルライトであると判定された場合(1701,No)、システムコントローラ20は、パリティ演算実施装置としてシステムコントローラ20を選択し(1703)、この処理のフローを終了する。
次に、システムコントローラ20が当該ライトのIOパターンとシステムコントローラ20のハードウェアの負荷とに基づいてパリティ演算実施装置を選択する処理の具体例である、第4パリティ演算選択処理について説明する。
図18は、第4パリティ演算選択処理の一例を示す。まずシステムコントローラ20は、当該ライトのIOパターンがランダムライトか否かを判定する(1801)。IOパターンがランダムライトであると判定された場合(1801,Yes)、システムコントローラ20はパリティ演算実施装置としてデバイスコントローラ60を選択し、デバイスコントローラ60にパリティ演算を指示し(1802)、この処理のフローを終了する。一方、IOパターンがランダムライトでないと判定された場合(1801,No)、システムコントローラ20は、ハードウェアの負荷が高いか否かを判定する(1803)。ハードウェアの負荷が高いと判定された場合(1803,Yes)、システムコントローラ20は、処理のフローを1802へ移行させる。一方、ハードウェアの負荷が高くないと判定された場合(1803,No)、システムコントローラ20は、パリティ演算実施装置としてシステムコントローラ20を選択し(1804)、この処理のフローを終了する。
なお、システムコントローラ20は、以上に示された複数の種類のパリティ演算選択処理1402を組み合わせることにより、パリティ演算実施装置を選択しても良い。
シーケンシャルライト時及びフルストライプライト時、システムコントローラ20がパリティ演算を行うことにより、システムコントローラ20からデバイスコントローラ60へのデータ転送量の増大を防ぐことができる。これによりライト速度の低下を防ぐことができる。
次に、ライト方法選択処理1403の具体例について説明する。
図19は、ライト方法選択処理1403の一例を示す。ライト方法の選択肢は例えば、リードモディファイライト及びフルストライプライトである。まずシステムコントローラ20は、当該IO要求であるライトのIOパターンがランダムライトか否かを判定する(1901)。IOパターンがランダムライトであると判定された場合(1901,Yes)、システムコントローラ20は、ライト方法としてリードモディファイライトを選択し(1902)、この処理のフローを終了する。一方、IOパターンがランダムライトでないと判定された場合(1901,No)、即ちIOパターンがシーケンシャルライトであると判定された場合、システムコントローラ20は、ライト方法としてフルストライプライトを選択し(1903)、この処理のフローを終了する。
次に、パリティ演算実施装置の選択結果とライト方法の選択結果に応じたデータ更新処理1404の幾つかの具体例について説明する。
まず、パリティ演算実施装置としてデバイスコントローラ60が選択され、ライト方法としてリードモディファイライトが選択された場合のデータ更新処理1404の具体例である、第1リードモディファイライト処理について説明する。
図20は、第1リードモディファイライト処理の一例を示す。図21は、第1リードモディファイライト処理におけるシステムコントローラ20の動作の一例を示す。この例において、4個のFMPK50であるFMPK#0,#1,#2,#3は、一つのストライプライン内のデータD0,D1,D2、パリティPを夫々格納している。ここでシステムコントローラ20が、ライトの命令により、D0の旧データを更新するための新データを受けた状態を初期状態とする。以下の説明において、FMPK#0,#1,#2,#3のうち、更新されるデータを格納しているFMPK#0をデータFMPKと呼ぶことがある。また、FMPK#0,#1,#2,#3のうち、パリティを格納しているFMPK#3をパリティFMPKと呼ぶことがある。
まずシステムコントローラ20は、FMPK#0,#1,#2,#3の中からD0に対応するFMPK#0(データFMPK)を選択し、旧データの保持と新データの書き込みとを指示する旧データ保持ライトコマンドをFMPK#0へ発行することにより、新データをFMPK#0へ転送する(2101)。このコマンドを受けたFMPK#0のデバイスコントローラ60は、システムコントローラ20からの新データをFMPK#0内の旧データの物理ページと異なる物理ページへ書き込む。通常ライトコマンドでは、論理ページに新物理ページが割り当てられると旧物理ページは無効となり、旧物理ページに格納されている旧データは消去の対象となる。そこで、システムコントローラ20は、パリティの更新が完了するまで旧データが保持されるようにするため、通常ライトコマンドではなく旧データ保持ライトコマンドを利用する。以後の説明において、ライトコマンドとは、通常ライトコマンドを示すものとする。
次にシステムコントローラ20は、中間パリティを要求する中間パリティリードコマンドをFMPK#0へ発行することにより、FMPK#0から中間パリティを取得する(2102)。中間パリティは、旧パリティのパリティ演算により新パリティを生成するための、中間演算結果である。このコマンドを受けたFMPK#0のデバイスコントローラ60は、FMPK#0内に格納された旧データとFMPK#0内に格納された新データとから中間パリティを計算し、応答として中間パリティをシステムコントローラ20へ送る。ここでFMPK#0のデバイスコントローラ60は、計算された中間パリティを、バッファ66へ書き込んでも良いし、FMPK#0内のFM55の中で旧データの物理ページ及び新データの物理ページの両方と異なる物理ページへ書き込んでも良い。
次にシステムコントローラ20は、FMPK#0,#1,#2,#3の中からPに対応するFMPK#3(パリティFMPK)を選択し、パリティの更新を指示するパリティ更新ライトコマンドをFMPK#3へ発行することにより、FMPK#0から受信した中間パリティをFMPK#3へ転送する(2103)。このコマンドを受けたFMPK#3は、FMPK#3内の旧パリティとシステムコントローラ20からの中間パリティから新パリティを計算し、新パリティをFMPK#3へ書き込む。FMPK#3のデバイスコントローラ60は、新パリティをFMPK#3へ書き込んだら、システムコントローラ20に対してパリティ更新ライトの完了応答を通知する。ここでFMPK#3のデバイスコントローラ60は、システムコントローラ20からの中間パリティを、バッファ66へ書き込んでも良いし、FMPK#3内のFM55の中で旧パリティの物理ページ及び新パリティの物理ページの両方と異なる物理ページへ書き込んでも良い。
次にシステムコントローラ20は、FMPK#3からの完了応答を受信すると、旧データを無効にすることを指示する旧データ破棄コマンドを、FMPK#0へ発行し(2104)、このフローを終了する。このコマンドを受けたFMPK#0のデバイスコントローラ60は、保持していた旧データを無効とするため、マッピング管理テーブル1100から旧データ破棄コマンドにより特定された論理ページにマッピングされた物理ページを削除する。
なお、システムコントローラ20は、パリティ更新ライトコマンド発行後、FMPK#3からの完了応答を所定の時間以内に受信しなかった場合は、パリティの更新が失敗したものと判断して、FMPK#0から中間パリティを再取得し、その中間パリティをFMPK#3へ再転送することで、パリティの更新処理を再実行してもよい。
具体的には、システムコントローラ20は、パリティ更新ライトコマンド発行後、FMPK#3からの完了応答を所定の時間以内に受信しなかった場合は、中間パリティリードコマンドをFMPK#0へ再発行し、このコマンドに応じて再計算された中間パリティを受信する。そして、システムコントローラ20は、パリティ更新ライトコマンドをFMPK#3へ再発行することにより、再計算された中間パリティをFMPK#3に書き込む。
この処理によれば、一つのストライプブロックのデータの更新におけるシステムコントローラ20とデバイスコントローラ60の間のデータ転送は次のようになる。
(1)更新後のデータがシステムコントローラ20からデータFMPKのデバイスコントローラ60へ転送される。
(2)中間パリティがデータFMPKのデバイスコントローラ60からシステムコントローラ20へ転送される。
(3)中間パリティがシステムコントローラ20からパリティFMPKのデバイスコントローラ60へ転送される。
これにより、システムコントローラ20とデバイスコントローラ60の間のデータ転送を抑えることができる。あるいは、システムコントローラ20がパリティ演算を行う場合、システムコントローラ20とデバイスコントローラ60の間のデータ転送は次のようになる。
(1)更新前のデータがデータFMPKのデバイスコントローラ60からシステムコントローラ20へ転送される。
(2)更新前のパリティがパリティFMPKのデバイスコントローラ60からシステムコントローラ20へ転送される。
(3)更新後のデータがシステムコントローラ20からデータFMPKのデバイスコントローラ60へ転送される。
(4)更新後のパリティがシステムコントローラ20からパリティFMPKのデバイスコントローラ60へ転送される。
このようにシステムコントローラ20がパリティ演算を行う場合に比べると、第1リードモディファイライト処理のデータ転送は少ない。
また、データFMPKが更新前のデータと更新後のデータの両方をFM55に保持することにより、データFMPKのデバイスコントローラ60が中間パリティを演算するために使用するバッファ66を削減することができる。
更に、新データのライト後も旧データをパリティが更新されるまで保持することで、パリティ更新前に障害が起きた場合にも、データ復旧が可能となる。また、パリティ更新後は旧データを無効にして旧データを消去対象とすることで、旧データによる記憶領域の使用量を削減することができる。
次に、パリティ演算実施装置としてデバイスコントローラ60が選択され、ライト方法としてリードモディファイライトが選択された場合の別のデータ更新処理1404の別の具体例である、第2リードモディファイライト処理について説明する。
図22は、第2リードモディファイライト処理の一例を示す。図23は、第2リードモディファイライト処理におけるシステムコントローラ20の一例の動作を示す。この例における初期状態は、第1リードモディファイライト処理の初期状態と同様である。まずシステムコントローラ20は、リードコマンドをD0に対応するFMPK#0(データFMPK)へ発行することにより、FMPK#0から旧データを取得する(2301)。このコマンドを受けたFMPK#0のデバイスコントローラ60は、FMPK#0内の旧データを読み出し、旧データを応答としてシステムコントローラ20へ送る。
次にシステムコントローラ20は、パリティ更新ライトコマンドをPに対応するFMPK#3(パリティFMPK)へ発行することにより、新データと旧データをFMPK#3へ転送する(2302)。このコマンドを受けたFMPK#3のデバイスコントローラ60は、システムコントローラ20からの新データとシステムコントローラ20からの旧データとFMPK#3内の旧パリティから新パリティを計算し、この新パリティを、FMPK#3へ書き込む。
次にシステムコントローラ20は、ライトコマンドをFMPK#0に発行することにより、新データをFMPK#0に転送する(2303)。このコマンドを受けたFMPK#0のデバイスコントローラ60は新データをFMPK#0へ書き込む。
この処理によれば、一つのストライプブロックのデータの更新におけるシステムコントローラ20とデバイスコントローラ60の間のデータ転送は次のようになる。
(1)更新前のデータがデータFMPKのデバイスコントローラ60からシステムコントローラ20へ転送され、更新後のデータがシステムコントローラ20からデータFMPKのデバイスコントローラ60に転送される。
(2)更新前のデータと更新後のデータとがシステムコントローラ20からパリティFMPKのデバイスコントローラ60へ転送される。
これにより、システムコントローラ20とデバイスコントローラ60の間のデータ転送を抑えることができる。
2302において、システムコントローラ20は、1回のパリティ更新ライトコマンドで、新データと旧データをパリティFMPKへ転送する。この時の転送データ量は、第1リードモディファイライト処理が中間パリティをシステムコントローラ20からパリティFMPKへ転送する場合の転送データ量に比べて、2倍になる。しかし、転送回数が1回であるため、データ転送のオーバヘッドの増加を防ぐことができる。データ転送が、例えばSAS(Serial Attached Small Computer System Interface)−6GBのような高速インタフェースにより行われる場合、転送データ量が増加するデメリットより転送回数が減少するメリットの方が大きい。
更に、新データのライト後も旧データをパリティが更新されるまで保持することで、パリティ更新前に障害が起きた場合にもデータ復旧が可能となる。また、パリティ更新後は旧データを無効にして、旧データを消去対象とすることで、旧データによる記憶領域の使用量を削減することができる。
なお、パリティ演算実施装置としてデバイスコントローラ60が選択され、ライト方法としてリードモディファイライトが選択された場合、第1リードモディファイライト処理及び第2リードモディファイライト処理の何れが行われても良い。
次に、パリティ演算実施装置としてシステムコントローラ20が選択され、ライト方法としてリードモディファイライトが選択された場合のデータ更新処理1404の具体例である、第3リードモディファイライト処理について説明する。
図24は、第3リードモディファイライト処理の一例を示す。図25は、第3リードモディファイライト処理におけるシステムコントローラ20の動作の一例を示す。この例における初期状態は、第1リードモディファイライト処理の初期状態と同様である。まずシステムコントローラ20は、D0を要求するリードコマンドをD0に対応するFMPK#0へ発行することによりFMPK#0から旧データを取得し、リードコマンドをPに対応するFMPK#3へ発行することによりFMPK#3から旧パリティを取得する(2501)。このリードコマンドを受けたFMPK#0は、FMPK#0内の旧データを読み出し、旧データを応答としてシステムコントローラ20へ送る。また、このリードコマンドを受けたFMPK#3のデバイスコントローラ60は、FMPK#3内の旧パリティを読
み出し、旧パリティを応答としてシステムコントローラ20へ送る。
次にシステムコントローラ20は、旧データと旧パリティと新データから新パリティを計算する(2502)。次にシステムコントローラ20は、ライトコマンドをFMPK#0へ発行することによりFMPK#0へ新データを転送し、ライトコマンドをPに対応するFMPK#3へ発行することによりFMPK#3へ新パリティを転送し(2503)、この処理のフローを終了する。このライトコマンドを受けたFMPK#0のデバイスコントローラ60は、FMPK#0へ新データを書き込む。また、このライトコマンドを受けたFMPK#3は、FMPK#3へ新パリティを書き込む。
この処理によれば、一つのストライプブロックのデータの更新におけるシステムコントローラ20とデバイスコントローラ60の間のデータ転送は次のようになる。
(1)更新前のデータがデータFMPKのデバイスコントローラ60からシステムコントローラ20へ転送され、更新後のデータがシステムコントローラ20からデータFMPKのデバイスコントローラ60に転送される。
(2)更新前のパリティがパリティFMPKのデバイスコントローラ60からシステムコントローラ20へ転送される。
(3)更新後のパリティがシステムコントローラ20からパリティFMPKのデバイスコントローラ60へ転送される。
これにより、システムコントローラ20とデバイスコントローラ60の間のデータ転送を抑えることができる。
次に、フルストライプライトの幾つかの具体例について説明する。
まず、パリティ演算実施装置としてデバイスコントローラ60が選択され、ライト方法としてフルストライプライトが選択された場合の別のデータ更新処理1404の具体例である、第1フルストライプライト処理について説明する。
図26は、第1フルストライプライト処理の一例を示す。図27は、第1フルストライプライト処理におけるシステムコントローラ20の動作の一例を示す。この例において、FMPK#0,#1,#2,#3は、D0,D1,D2,Pを夫々格納している。ここでシステムコントローラ20が、ライトの命令により、D0,D1,D2の旧データを更新するための新データを受けた状態を初期状態とする。以下の説明において、FMPK#0,#1,#2,#3のうち、更新されるデータを格納しているFMPK#0,#1,#2をデータFMPKと呼ぶことがある。
まずシステムコントローラ20は、D0,D1,D2に夫々対応するFMPK#0,#1,#2(データFMPK)へライトコマンドを発行することにより、受領データをD0,D1,D2の新データに分割し、D0,D1,D2の新データをFMPK#0,#1,#2へ夫々転送する(2701)。このライトコマンドを受けたFMPK#0,#1,#2のデバイスコントローラ60は、システムコントローラ20からの新データをFMPK#0,#1,#2へ夫々書き込む。
次にシステムコントローラ20は、パリティの生成と書き込みを指示するパリティ生成ライトコマンドをPに対応するFMPK#3(パリティFMPK)へ発行することにより、D0,D1,D2の新データをFMPK#3へ転送し(2702)、この処理のフローを終了する。このライトコマンドを受けたFMPK#3のデバイスコントローラ60は、D0,D1,D2の新データから新パリティを計算し、新パリティをFMPK#3へ書き込む。
この処理によれば、一つのストライプラインのデータの更新におけるシステムコントローラ20とデバイスコントローラ60の間のデータ転送は次のようになる。
(1)更新後のデータがシステムコントローラ20からデータFMPKのデバイスコントローラ60へ転送される。
(2)更新後のパリティデータがシステムコントローラ20からパリティFMPKのデバイスコントローラ60へ転送される。
これにより、システムコントローラ20とデバイスコントローラ60の間のデータ転送を抑えることができる。
次に、パリティ演算実施装置としてシステムコントローラ20が選択され、ライト方法としてフルストライプライトが選択された場合の別のデータ更新処理1404の具体例である、第2フルストライプライト処理について説明する。
図28は、第2フルストライプライト処理の一例を示す。図29は、第2フルストライプライト処理におけるシステムコントローラ20の動作の一例を示す。この例における初期状態は、第1フルストライプライト処理の初期状態と同様である。まずシステムコントローラ20は、D0,D1,D2の新データから新パリティを計算する(2901)。次にシステムコントローラ20は、D0,D1,D2に夫々対応するFMPK#0,#1,#2へライトコマンドを発行することにより、D0,D1,D2の新データをFMPK#0,#1,#2へ夫々転送し、Pに対応するFMPK#3へライトコマンドを発行することにより、計算された新パリティをFMPK#3へ転送し(2902)、この処理のフローを終了する。ライトコマンドを受けたFMPK#0,#1,#2のデバイスコントローラ60は、システムコントローラ20からの新データをFMPK#0,#1,#2へ夫々書き込む。また、ライトコマンドを受けたFMPK#3のデバイスコントローラ60は、システムコントローラ20からの新パリティをFMPK#3へ書き込む。
この処理によれば、一つのストライプラインのデータの更新におけるシステムコントローラ20とデバイスコントローラ60の間のデータ転送は次のようになる。
(1)更新後のデータがシステムコントローラ20からデータFMPKのデバイスコントローラ60へ転送される。
(2)、更新後のパリティがシステムコントローラ20からパリティFMPKのデバイスコントローラ60へ転送される。
これにより、システムコントローラ20とデバイスコントローラ60の間のデータ転送を抑えることができる。
次に、パリティ演算実施装置の選択結果に応じたデータ復旧処理の幾つかの具体例について説明する。
まず、パリティ演算実施装置としてデバイスコントローラ60が選択された場合のデータ復旧処理の具体例である、第1データ復旧処理について説明する。
図30は、第1データ復旧処理の一例を示す。図31は、第1データ復旧処理におけるシステムコントローラ20の動作の一例を示す。この例において、FMPK#0,#1,#2,#3は、D0,D1,D2,Pを夫々格納している。ここで、FMPK#1内のFM55に障害が発生し、このFM55が新たなFM55に交換された状態を初期状態とする。以下の説明において、FMPK#0,#1,#2,#3のうち、復旧されるデータを格納しているFMPK#1を復旧中FMPKと呼ぶことがある。
まずシステムコントローラ20は、FMPK#0,#1,#2,#3が所属するRG内の生存しているFMPK#0,#2,#3へリードコマンドを発行することにより、FMPK#0,#2,#3に夫々格納されたD0,D2,Pを取得する(3101)。このリードコマンドを受けたFMPK#0,#2,#3のデバイスコントローラ60は、D0,D2,Pを夫々読み出し、読み出したD0,D2,Pをシステムコントローラ20へ転送する。ここで読み出されるデータであってもパリティであっても良い。
次にシステムコントローラ20は、復旧中のFMPK#1(復旧中FMPK)へパリティ生成を示すライトコマンドを発行することにより、読み出されたD0,D2,PをFMPK#1へ転送し(3102)、この処理のフローを終了する。このライトコマンドを受けたFMPK#1のデバイスコントローラ60は、D0,D2,PからD1を計算することによりD1の復旧データを生成し、D1の復旧データをFMPK#1へ書き込む。
この処理によれば、一つのストライプブロックのデータの復旧におけるシステムコントローラ20とデバイスコントローラ60の間のデータ転送は次のようになる。
(1)復旧中FMPK以外のFMPK50のデータが対応するデバイスコントローラ60からシステムコントローラ20へ転送される。
(2)転送されたデータがシステムコントローラ20から復旧中FMPKのデバイスコントローラ60へ転送される。
これにより、システムコントローラ20とデバイスコントローラ60の間のデータ転送を抑えることができる。
次に、パリティ演算実施装置としてシステムコントローラ20が選択された場合のデータ復旧処理の具体例である、第2データ復旧処理について説明する。
図32は、第2データ復旧処理の一例を示す。図33は、第2データ復旧処理におけるシステムコントローラ20の動作の一例を示す。この例における初期状態は、第1の具体例と同様である。まずシステムコントローラ20は、FMPK#0,#1,#2,#3が所属するRG内の生存しているFMPK#0,#2,#3へリードコマンドを発行することにより、FMPK#0,#2,#3からD0,D2,Pを読み出す(3301)。このリードコマンドを受けたFMPK#0,#2,#3のデバイスコントローラ60は、D0,D2,Pを夫々読み出し、読み出したD0,D2,Pをシステムコントローラ20へ転送する。ここで読み出されるデータであってもパリティであっても良い。
次にシステムコントローラ20は、D0,D2,PからD1を計算することにより、D1の復旧データを生成する(3302)。次にシステムコントローラ20は、ライトコマンドをFMPK#1へ発行することにより、復旧されたD1をFMPK#1へ書き込み(3303)、この処理のフローを終了する。このライトコマンドを受けたFMPK#1のデバイスコントローラ60は、受けたD1をFMPK#1へ書き込む。
この処理によれば、一つのストライプブロックのデータの復旧におけるシステムコントローラ20とデバイスコントローラ60の間のデータ転送は次のようになる。
(1)復旧中FMPK以外のFMPK50のデータが対応するデバイスコントローラ60からシステムコントローラ20へ転送される。
(2)転送されたデータがシステムコントローラ20から復旧中FMPKのデバイスコントローラ60へ転送される。
これにより、システムコントローラ20とデバイスコントローラ60の間のデータ転送を抑えることができる。
次に、デバイスコントローラ60の動作について説明する。
まず、通常のライトコマンドを受けた場合のデバイスコントローラ60の処理の具体例である、通常ライト処理について説明する。
この通常ライト処理において、デバイスコントローラ60は、旧データを保持する必要がない。
図34は、通常ライト処理の一例を示す。まずデバイスコントローラ60は、通常のライトコマンドを受領する(3401)。次にデバイスコントローラ60は、このライトコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをライト先論理ページとする(3402)。次にデバイスコントローラ60は、新規に空きページを取得し、取得された物理ページをライト先物理ページとして割り当てる(3403)。次にデバイスコントローラ60は、ライトコマンドにより受領したライトデータをライト先物理ページへ書き込む(3404)。
次にデバイスコントローラ60は、ページマッピング管理テーブル1100においてライト先論理ページにライト先物理ページを関連付け、物理ページ番号としてライト先物理ページの番号を登録する(3405)。次にデバイスコントローラ60は、コマンド完了を示す応答をシステムコントローラ20へ送り(3406)、この処理のフローを終了する。
3403において、デバイスコントローラ60は、未使用の物理ページを確保する、物理ブロックを消去してその物理ブロック内の物理ページを確保する、等の処理を行うことにより、空きの物理ページを取得しても良い。このとき、デバイスコントローラ60は、物理ブロックの消去のために、ページマッピング管理テーブル1100における他の論理ページと旧物理ページの関連付けを解除しても良い。
次に、旧データ保持ライトコマンドを受けた場合のデバイスコントローラ60の処理の具体例である、旧データ保持ライトコマンド処理について説明する。
この旧データ保持ライト処理は例えば、前述の第1リードモディファイライト処理に用いられる。
図35は、旧データ保持ライト処理の一例を示す。まずデバイスコントローラ60は、旧データ保持ライトコマンドを受領する(3501)。次にデバイスコントローラ60は、このライトコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをライト先論理ページとする(3502)。次にデバイスコントローラ60は、ページマッピング管理テーブル1100を参照することにより、ライト先論理ページに物理ページが割り当てられているか否かを判定する(3503)。
ライト先論理ページに物理ページが割り当てられている場合(3503,Yes)、デバイスコントローラ60は、ページマッピング管理テーブル1100においてライト先論理ページに関連付けられている物理ページ番号を旧物理ページ番号として登録する(3504)。
ライト先論理ページに物理ページが割り当てられていない場合(3503、No)又は3504の後、デバイスコントローラ60は、新規に空きページを取得し、取得された物理ページをライト先物理ページとして割り当てる(3505)。次にデバイスコントローラ60は、ライトコマンドにより受領したライトデータをライト先物理ページへ書き込む(3506)。
次にデバイスコントローラ60は、ページマッピング管理テーブル1100においてライト先論理ページにライト先物理ページを関連付け、物理ページ番号としてライト先物理ページの番号を登録する(3507)。次にデバイスコントローラ60は、コマンド完了を示す応答をシステムコントローラ20へ送り(3508)、この処理のフローを終了する。
この処理によれば、データFMPKは、データの更新時に更新前のデータを保持することができる。更に、データFMPKのデバイスコントローラ60は、更新された論理ページと、旧データを格納する旧物理ページと、新データを格納する物理ページとを関連付けることができる。これにより、データFMPKは、データ更新時、更新前のデータと更新後のデータの両方を不揮発メモリに保持することができる。また、データFMPKのデバイスコントローラ60は、揮発メモリを用いることなく、更新前のデータと更新後のデータの両方を読み出すことができる。更に、システムコントローラ20は、データFMPKのデバイスコントローラ60に更新前のデータと更新後のデータの両方を保持させることができる。
次に、中間パリティリードコマンドを受けた場合のデバイスコントローラ60の処理の具体例である、中間パリティリード処理について説明する。
この中間パリティリード処理は、指定されたアドレスの旧データと新データのパリティ演算を行うことにより、中間パリティを生成して返す。この中間パリティリード処理は例えば、前述の第1リードモディファイライト処理に用いられる。
図36は、中間パリティリード処理の一例を示す。まずデバイスコントローラ60は、中間パリティリードコマンドを受領する(3601)。次にデバイスコントローラ60は、この中間パリティリードコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをリード先論理ページとする(3602)。次にデバイスコントローラ60は、ページマッピング管理テーブル1100を参照することにより、リード先論理ページに対応する旧物理ページが登録されているか否かを判定する(3603)。
リード先論理ページに対応する旧物理ページが登録されている場合(3603,Yes)、デバイスコントローラ60は、リード先論理ページに対応する旧物理ページのデータと現在の物理ページのデータとを読み出し、読み出されたデータから中間パリティを計算する(3604)。次にデバイスコントローラ60は、中間パリティをシステムコントローラ20へ転送し(3606)、この処理のフローを終了する。
3603において、リード先論理ページに対応する旧物理ページが登録されていない場合(3603,No)、デバイスコントローラ60は、リード先論理ページの旧データがないことを示すコマンド結果をシステムコントローラ20へ報告し(3605)、この処理のフローを終了する。
3605においてリード先論理ページの旧データがないことを示す結果を受けたシステムコントローラ20は例えば、新データと同一ストライプライン内の全てのデータを読み出し、読み出されたデータから新パリティを計算し、パリティに対応するデバイスコントローラ60へ新パリティを書き込むためのライトコマンドを発行しても良い。或いはこの場合、システムコントローラ20は例えば、新データと同一ストライプライン内の全てのデータを読み出し、パリティに対応するデバイスコントローラ60へ、読み出されたデータから新パリティを計算するためのパリティ生成ライトコマンドを発行しても良い。
この処理によれば、データFMPKのデバイスコントローラ60は、システムコントローラ20から中間パリティの演算の指示を受けた場合、更新前のデータと更新後のデータとを読み出し、読み出されたデータから中間パリティを生成することができる。更に、システムコントローラ20は、データFMPKのデバイスコントローラ60に中間パリティを生成させ、デバイスコントローラ60から中間パリティを取得することができる。
仮に、データFMPKのデバイスコントローラ60がシステムコントローラ20の動作と非同期で中間パリティを生成したとする。この場合、中間パリティの演算がデバイスコントローラ60のバッファ66をに負担をかけることにより、このデバイスコントローラ60の性能が低下する。また、中間パリティ演算に必要なデータがバッファ66に格納されている状態で電源断が発生した場合、このデータが消失し、データ復旧が不可能になる可能性がある。一方、この実施例によれば、データFMPKのデバイスコントローラ60が中間パリティリードコマンドを受けたタイミングで中間パリティを生成することにより、ストレージシステム30の性能低下を防ぐことができる。また、中間パリティ演算に必要なデータの消失を防ぎ、ストレージシステム30の信頼性を向上させることができる。
次に、パリティ更新ライトコマンドを受けた場合のデバイスコントローラ60の処理の具体例である、パリティ更新ライト処理について説明する。
このパリティ更新ライト処理は、転送された中間パリティと指定された旧パリティとのパリティ演算を行うことにより、新パリティを生成して、この新パリティをFM55へ書き込む。このパリティ更新ライトコマンドは例えば、前述の第1リードモディファイライト処理に用いられる。
図37は、パリティ更新ライト処理の一例を示す。まずデバイスコントローラ60は、パリティ更新ライトコマンドを受領する(3701)。次にデバイスコントローラ60は、このライトコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをリード先論理ページとする(3702)。次にデバイスコントローラ60は、ページマッピング管理テーブル1100を参照することにより、リード先論理ページに対応する物理ページ番号を求め、この物理ページ番号に示された物理ページからデータを読み出す(3703)。読み出されたデータは例えば、旧パリティである。次にデバイスコントローラ60は、新規に空きページを取得し、取得された物理ページを結果格納先物理ページとして割り当てる(3704)。次にデバイスコントローラ60は、読み出されたデータと受領したデータとを用いてパリティ演算を行い、演算結果を結果格納先物理ページへ書き込む(3705)。
次にデバイスコントローラ60は、ページマッピング管理テーブル1100においてライト先論理ページに結果格納先物理ページを関連付け、物理ページ番号として結果格納先物理ページの番号を登録する(3706)。次にデバイスコントローラ60は、コマンド完了を示す応答をシステムコントローラ20へ送り(3707)、この処理のフローを終了する。
この処理によれば、パリティFMPKのデバイスコントローラ60は、システムコントローラ20からの更新後のデータと、パリティFMPKに格納されている更新前のパリティとから更新後のパリティを算出し、更新後のパリティをFM55へ送信することができる。更に、システムコントローラ20は、パリティFMPKのデバイスコントローラ60に更新後のパリティを生成させ保存させることができる。
次に、パリティ生成ライトコマンドを受けた場合のデバイスコントローラ60の処理の具体例である、パリティ生成ライト処理について説明する。
このパリティ生成ライト処理は、複数ストライプブロック分の転送されたデータを用いてパリティを生成し、このパリティを指定アドレスへ書き込むコマンドである。このパリティ生成ライト処理は例えば、前述の第1フルストライプライト処理及びデータ復旧処理に用いられる。
図38は、パリティ生成ライトコマンドによるデバイスコントローラ60の処理の一例を示す。まずデバイスコントローラ60は、パリティ生成ライトコマンドを受領する(3801)。次にデバイスコントローラ60は、このライトコマンドにより指定された論理アドレスから論理ページ番号を求め、この論理ページ番号の論理ページをライト先論理ページとする(3802)。次にデバイスコントローラ60は、新規に空きページを取得し、取得された物理ページをライト先物理ページとして割り当てる(3803)。次にデバイスコントローラ60は、ライトコマンドにより受領したライトデータをライト先物理ページへ書き込む(3804)。
次にデバイスコントローラ60は、ページマッピング管理テーブル1100においてライト先論理ページにライト先物理ページを関連付け、物理ページ番号としてライト先物理ページの番号を登録する(3805)。次にデバイスコントローラ60は、コマンド完了を示す応答をシステムコントローラ20へ送り(3806)、この処理のフローを終了する。
この処理によれば、パリティFMPKのデバイスコントローラ60は、システムコントローラ20からの更新後のデータから更新後のパリティを算出し、更新後のパリティをパリティFMPKへ書き込むことができる。更に、システムコントローラ20は、パリティFMPKのデバイスコントローラ60に更新後のパリティを生成させ保存させることがでる。
図39は、デバイスコントローラ60による、旧データ破棄処理の一例を示す。まず、デバイスコントローラ60は、システムコントローラ20から旧データ破棄コマンドを受領する(3901)。次に、デバイスコントローラ60は、この旧データ破棄コマンドで指定された論理アドレスから論理ページ番号を求め、この論理ページ番号に対応する旧物理ページ番号をページマッピング管理テーブル1100から削除する(3902)。デバイスコントローラ60は、旧データ破棄コマンドを受領するまで、旧データを無効にしない。つまり、デバイスコントローラ60は、新データをライトした後であっても、パリティが更新される(旧データ破棄コマンドを受領する)まで旧データを確実に保持することができる。このように、パリティが更新されるまで旧データを維持することにより、パリティ更新前に障害が起きた場合であっても、データ復旧が可能となる。また、パリティ更新後は旧データを無効にして消去対象とすることで、旧データによる記憶領域の使用量を削減することができる。