以下図面について、本発明の一実施の形態を詳述する。
なお、以下の説明では、同種の要素を区別しないで説明する場合には、枝番を含む参照符号のうちの共通部分(枝番を除く部分)を使用し、同種の要素を区別して説明する場合は、枝番を含む参照符号を使用することがある。例えば、物理領域を特に区別しないで説明する場合には、「物理領域121」と記載し、個々の領域を区別して説明する場合には、「物理領域121-1」、「物理領域121-2」のように記載することがある。
(1)第1の実施の形態
図1において、100は全体として第1の実施の形態による計算機システムを示す。
図1は、計算機システム100に係る構成の一例を示す図である。計算機システム100は、ストレージシステム101とアプリケーションシステム102とを含んで構成される。ストレージシステム101とアプリケーションシステム102とは、通信可能に接続されている。
ストレージシステム101では、1以上の物理領域111(例えば、後述のメモリ212、ドライブ214等に確保された物理領域)を利用してキャッシュグループ110が組まれ、1以上の物理領域121(例えば、後述のドライブ214上に確保された物理領域)を利用してパリティグループ120が組まれている。なお、パリティグループ120の物理領域121は、複数の後述のノード210(サーバ計算機)に跨っていてもよいし、図22に示すように、複数の後述のプロセッサパッケージ213から接続されるドライブボックス内にまとまっていてもよい。
ストレージシステム101は、アプリケーションシステム102に提供される仮想ボリューム130の所定の領域131毎に、当該領域131にアクセス(読込みおよび/または書込み)があった頻度(アクセス頻度)をモニタ(監視)する。なお、所定の領域131は、後述のページ331であってもよいし、後述のリビルド対象領域133であってもよいし、データに対応するブロックであってもよいし、その他のまとまりであってもよい。
ストレージシステム101は、モニタした結果をアクセスモニタ情報140として管理する。また、ストレージシステム101は、障害が発生した際、復旧する領域131の優先度を領域131単位のエントリとして管理するキュー150を備える。そして、ストレージシステム101は、アプリケーションシステム102からデータ処理要求を受信したことに応じて(アクセスモニタ情報140の更新に基づいて)、キュー150におけるエントリをアクセス頻度の高い順に変更し、更新後のキュー150に従ってリビルドを管理する単位(リビルド管理単位)であるリビルド対象領域133毎にリビルドを実行する。
図1では、物理領域121-1に障害が発生し、データの復旧(リビルド)が行われている際に、物理領域121-1に記憶されているデータ132-11がアプリケーションシステム102からリード(参照)されるケースを例に挙げて、ストレージシステム101の概要について説明する。
ストレージシステム101は、アプリケーションシステム102からデータ処理要求を受信すると、データ132-11を復旧するためのデータ132-21,132-31,132-41を物理領域121-2,121-3,121-4から読み出し、データ132-11の復元であるデータ132-51を生成する。以下では、復元したデータを「修復データ」と記すことがある。
ストレージシステム101は、生成したデータ132-51をキャッシュグループ110の物理領域111に記憶する。また、ストレージシステム101は、キャッシュグループ110の物理領域111を監視し、アクセスモニタ情報140における、リード対象のデータ132-11に対応する仮想ボリューム130の領域131のアクセス頻度を更新する。
また、ストレージシステム101は、データ132-51についてリビルドを実行する際、リビルド対象領域133のデータとするために、データ132-52,135-53を生成する。より具体的には、ストレージシステム101は、データ132-22,132-32,132-42を物理領域121-2,121-3,121-4から読み出し、データ132-12の復元であるデータ132-52を生成する。また、ストレージシステム101は、データ132-23,132-33,132-43を物理領域121-2,121-3,121-4から読み出し、データ132-13の復元であるデータ132-53を生成する。
そして、ストレージシステム101は、キャッシュグループ110の物理領域111に記憶されているデータ132-51を読み出し、読み出したデータ132-51と、生成したデータ132-52,132-53とをまとめてリビルド先の物理領域121-5に記憶する。
なお、アプリケーションシステム102の一部または全部は、ストレージシステム101に含まれる構成であってもよい。
図2は、ストレージシステム101に係る物理構成の一例を示す図である。
ストレージシステム101には、1以上のサイト201が設けられてもよい。各サイト201は、ネットワーク202を介して通信可能に接続される。ネットワーク202は、例えば、WAN(Wide Area Network)であるが、WANに限定するものではない。
サイト201は、データセンタ等であり、1以上のノード210を含んで構成される。
ノード210は、一般的なサーバ計算機の構成を備えてよい。ノード210は、例えば、プロセッサ211、メモリ212等を含む1以上のプロセッサパッケージ213、1以上のドライブ214、1以上のポート215を含んで構成される。各構成要素は、内部バス216を介して接続されている。
プロセッサ211は、例えば、CPU(Central Processing Unit)であり、各種の処理を行う。
メモリ212は、ノード210の機能を実現する上で必要な制御用の情報を格納したり、データを格納したりする。また、メモリ212は、例えば、プロセッサ211により実行されるプログラムを格納する。メモリ212は、揮発性のDRAM(Dynamic Random Access Memory)であってもよいし、不揮発のSCM(Storage Class Memory)であってもよいし、その他の記憶デバイスであってもよい。
ドライブ214は、各種のデータ、プログラム等を記憶する。ドライブ214は、SAS(Serial Attached SCSI)またはSATA(Serial Advanced Technology Attachment)接続のHDD(Hard Disk Drive)やSSD(Solid State Drive)、NVMe(Non-Volatile Memory Express)接続のSSDの他、SCM等であってもよく、記憶デバイスの一例である。
ポート215は、ネットワーク220に接続され、サイト201内の他のノード210と通信可能に接続されている。ネットワーク220は、例えば、LAN(Local Area Network)であるが、LANに限定するものではない。
ストレージシステム101に係る物理構成は、上述の内容に限定されるものではない。例えば、ネットワーク202,220については、冗長化されていてもよい。また、例えば、ネットワーク220は、管理用のネットワークとストレージ用のネットワークとで分離してもよく、接続規格は、Ethernet(登録商標)、Infiniband、無線でもよく、接続トポロジも図2に示す構成に限定しない。
図3は、ストレージシステム101に係る論理構成の一例を示す図である。
ノード210は、ストレージプログラム360を備える。ストレージプログラム360は、キャッシュグループ300を構成する。キャッシュグループ300は、データを一時的に記憶(キャッシュ)するためのグループであり、1以上のキャッシュ領域301を備える。キャッシュ領域301は、メモリ212が備える物理領域およびドライブ214が備える物理領域のうちの全部または一部の領域であり、連続した領域である。以下では、キャッシュ領域301に書き込まれたデータを「キャッシュデータ」と記す。
また、ストレージプログラム360は、パリティグループ310を構成する。パリティグループ310は、複数のノード210のドライブ214の物理チャンク311から構成される。パリティグループ310は、データをノード210間に跨り保護するグループであり、例えば、データ保護ポリシが2D1Pである場合、異なるノード210のドライブ214から確保した3つの物理チャンク311でパリティグループ310が構成される。データ保護ポリシとしては、二重化、EC(Erasure Coding)、MEC(Multi-stage Erasure Coding)等がある。物理チャンク311は、ドライブ214が備える物理領域のうちの全部または一部の領域であり、連続した領域である。物理チャンク311は、データを記憶する物理領域(データ領域)と、パリティを記憶する物理領域(パリティ領域)とを含んで構成される。パリティは、データを障害から復号するための冗長符号である。
図3では、データ313-1とデータ313-2とパリティ313-3とで1つのストライプが組まれている例が示されている。また、ホストノード350のアプリケーション351から、障害が発生したノード210のデータが要求された場合、当該データと同じストライプを組むデータ312-1およびパリティ312-2から修復データ361が生成され、キャッシュ領域301に記憶されるとともに、当該アプリケーション351に応答されることが示されている。ホストノード350のアプリケーション351が修復データ361を次回以降に読み込む場合、ストレージプログラム360は、データの修復処理は実行せず、キャッシュに格納したデータ361を応答する。これにより、障害が発生したノード210のデータの2回目以降の読み込みオーバヘッドを削減し、スループットとレスポンスを向上させる。
パリティグループ310からは、論理チャンク321が切り出される。論理チャンク321は、各ノード210のストレージプール320に容量を割り当てる単位であり、パリティ領域を除いたデータ領域に対応する領域である。1つのパリティグループ310から1つの論理チャンク321が切り出されてもよいし、複数の論理チャンク321が切り出されてよい。
また、ストレージプログラム360は、ストレージプール320を構成する。ストレージプール320は、複数の論理チャンク321を含んで構成され、ストレージシステム101全体の容量を仮想化する。ストレージプール320からは、アプリケーション351により利用される仮想ボリューム330が切り出される。つまり、ストレージプログラム360は、利用者の要求に応じた容量を、ドライブ214に割り当てず、仮想ボリューム330として割り当てる。
例えば、ストレージプログラム360は、アプリケーション351からライト処理要求を受信した場合、新規のライトであるときは、仮想ボリューム330のページ331(より詳細には、ページ331に紐づく物理チャンク311の物理領域)を割り当てる。なお、ページ331には、ストレージプール320のページ322が対応付けられている。更新のライトであるときは、ストレージプログラム360は、割り当てたページ331に紐づく物理チャンク311の物理領域を特定してデータを更新する。なお、ライト処理要求のデータ(または後述の中間データ)は、データの冗長化に係る他のノード210に転送されてパリティが更新される。
このように、ストレージプログラム360は、ドライブ214を共有のストレージプール320として管理し、仮想ボリューム330に書き込まれたデータ量に応じてドライブ214に容量を割り当てる。これにより、使用されないドライブ214の無駄をなくし、効率的な運用が行わる。
なお、データにアクセスするアプリケーション351は、ホストノード350に設けられて動作するものであってもよいし、ストレージプログラム360と同一ノード210に設けられて動作するものであってもよいし、別のノード210に設けられて動作するものであってもよい。また、リビルド先については、障害が発生したノード210内でも、障害が発生したノード210外でも構わない。
図4は、メモリ212内の情報(ドライブ214からメモリ212に読み出される情報)の一例を示す図である。なお、制御情報テーブル410、各種のプログラム(ストレージプログラム360等)は、実行中はメモリ212上に展開されるが、停電等に備えてドライブ214等の不揮発な領域に格納されている。
制御情報テーブル410には、クラスタ管理テーブル411、ストレージプール管理テーブル412、パリティグループ管理テーブル413、キャッシュグループ管理テーブル414、モニタ管理テーブル415、およびリビルド管理テーブル416が含まれる。各テーブルについては、図5~図10を用いて後述する。
ストレージプログラム360は、リード処理プログラム421、ライト処理プログラム422、キャッシュ処理プログラム423、モニタ処理プログラム424、リビルド処理プログラム425、および優先順位変更処理プログラム426を備える。
ノード210の機能(リード処理プログラム421、ライト処理プログラム422、キャッシュ処理プログラム423、モニタ処理プログラム424、リビルド処理プログラム425、および優先順位変更処理プログラム426等)は、例えば、プロセッサ211がドライブ214に格納されたプログラムをメモリ212に読み出して実行すること(ソフトウェア)により実現されてもよいし、専用の回路等のハードウェアにより実現されてもよいし、ソフトウェアとハードウェアとが組み合わされて実現されてもよい。また、ノード210の機能の一部は、ノード210と通信可能な他のコンピュータにより実現されてもよい。
図5は、クラスタ管理テーブル411の一例を示す図である。
クラスタ管理テーブル411は、サイト201、ノード210、ドライブ214の構成を管理するための情報を格納する。
クラスタ管理テーブル411は、サイト構成管理テーブル510、ノード構成管理テーブル520、およびドライブ構成管理テーブル530を含んで構成される。なお、ストレージシステム101は、サイト構成管理テーブル510を管理し、サイト201は、サイト201内の複数のノード構成管理テーブル520を管理し、ノード210は、ノード210内の複数のドライブ構成管理テーブル530を管理する。
サイト構成管理テーブル510は、サイト201に係る構成(サイト201とノード210との関係等)を示す情報を格納する。より具体的には、サイト構成管理テーブル510は、サイト番号511と、状態512と、ノード番号リスト513とが対応付けられた情報を格納する。
サイト番号511は、サイト201を識別可能な識別情報である。状態512は、サイト201の状態を示す状態情報(NORMAL、WARNING、FAILURE等)である。ノード番号リスト513は、サイト201に設けられるノード210を識別可能な識別情報である。
ノード構成管理テーブル520は、サイト201ごとに設けられ、サイト201に設けられるノード210に係る構成(ノード210とドライブ214との関係等)を示す情報を格納する。より具体的には、ノード構成管理テーブル520は、ノード番号521と、状態522と、ドライブ番号リスト523とが対応付けられた情報を格納する。
ノード番号521は、ノード210を識別可能な識別情報である。状態522は、ノード210の状態を示す状態情報(NORMAL、WARNING、FAILURE等)である。ドライブ番号リスト523は、ノード210に設けられるドライブ214を識別可能な識別情報である。
ドライブ構成管理テーブル530は、ノード210ごとに設けられ、ノード210に設けられるドライブ214に係る構成を示す情報を格納する。より具体的には、ドライブ構成管理テーブル530は、ドライブ番号531と、状態532と、サイズ533(ブロック)とが対応付けられた情報を格納する。
ドライブ番号531は、ドライブ214を識別可能な識別情報である。状態532は、ドライブ214の状態を示す状態情報(NORMAL、WARNING、FAILURE等)である。サイズ533は、ドライブ214の容量を示す情報(例えば、ブロックの数)である。例えば、ブロックは、固定サイズ(512byte等)である。
図6は、ストレージプール管理テーブル412の一例を示す図である。
ストレージプール管理テーブル412は、ストレージプール320が提供するシンプロビジョニング機能のための制御情報を格納する。
ストレージプール管理テーブル412は、ストレージプール情報テーブル610、仮想ボリューム管理テーブル620、およびページマッピングテーブル630を含んで構成される。
ストレージプール情報テーブル610は、ストレージプール320に係る情報を格納する。より具体的には、ストレージプール情報テーブル610は、ストレージプール番号611と、総容量612(ブロック)と、消費容量613(ブロック)とが対応付けられた情報を格納する。
ストレージプール番号611は、ストレージプール320を識別可能な識別情報である。総容量612は、ストレージプール320の総容量を示す情報(例えば、ブロックの数)である。消費容量613は、ストレージプール320で消費されている容量を示す情報(例えば、ブロックの数)である。
仮想ボリューム管理テーブル620は、仮想ボリューム330に係る情報(仮想ボリューム330と仮想ボリューム330を割り当てたストレージプール320との対応関係を示す情報等)を格納する。より具体的には、仮想ボリューム管理テーブル620は、仮想ボリューム番号621、サイズ622(ブロック)、およびストレージプール番号623が対応付けられた情報を格納する。
仮想ボリューム番号621は、仮想ボリューム330を識別可能な識別情報である。サイズ622(ブロック)は、仮想ボリューム330の容量を示す情報(例えば、ブロックの数)である。ストレージプール番号623は、仮想ボリューム330が属するストレージプール320を識別可能な識別情報である。
ページマッピングテーブル630は、仮想ボリューム330に割り当てたページ331に係る情報(ページ331と論理チャンク321との対応関係を示す情報等)を格納する。より具体的には、ページマッピングテーブル630は、ページ番号631、仮想ボリューム番号632、LBA(Logical Block Address)633、サイズ634(ブロック)、論理チャンク番号635、およびLBA636が対応付けられた情報を格納する。
ページ番号631は、ページ331を識別可能な識別情報である。仮想ボリューム番号632は、ページ331が割り当てられている仮想ボリューム330を識別可能な識別情報である。LBA633は、仮想ボリューム330におけるページ331の位置を特定可能な情報であり、例えば、仮想ボリューム330の最初のページ331から何番目であるかを示す情報である。なお、ページ331は、ストレージプログラム360が仮想ボリューム330にアクセスする単位である。サイズ634(ブロック)は、ページ331の容量を示す情報(ブロックの数)である。論理チャンク番号635は、ページ331に対応する論理チャンク321を識別可能な識別情報である。LBA636は、ストレージプール320における論理チャンク321の位置を特定可能な情報であり、例えば、ストレージプール320の最初の論理チャンク321から何番目であるかを示す情報である。
なお、サイズ634は、全てのページ331で同じであってもよいし、ページ331ごとに異なっていてもよい。
付言するならば、ストレージプログラム360は、仮想ボリューム330のアドレスからストレージプール320のアドレスへの変換を行う際にページマッピングテーブル630を参照する。また、ストレージプログラム360は、新規ライトを受領する度に、ページ331の割当て(ページマッピングテーブル630へのレコードの追加)を行う。
図7は、パリティグループ管理テーブル413の一例を示す図である。
パリティグループ管理テーブル413は、物理チャンク311と複数の物理チャンク311を組み合わせて構成したパリティグループ310(冗長化グループ)の構成を管理するための制御情報を格納する。
パリティグループ管理テーブル413は、論理チャンク管理テーブル710、パリティグループ管理テーブル720、および物理チャンク管理テーブル730を含んで構成される。
論理チャンク管理テーブル710は、パリティグループ310から切り出された論理チャンク321に係る情報(論理チャンク情報)を格納する。より具体的には、論理チャンク管理テーブル710は、論理チャンク番号711と、サイズ712(ブロック)と、パリティグループ番号713とが対応付けられた情報を格納する。
論理チャンク番号711は、パリティグループ310から切り出された論理チャンク321を識別可能な識別情報である。サイズ712は、論理チャンク321の容量を示す情報(例えば、ブロックの数)である。パリティグループ番号713は、論理チャンク321が属するパリティグループ310を識別可能な識別情報である。
パリティグループ管理テーブル720は、パリティグループ310に係る情報(パリティグループ情報)を格納する。より具体的には、パリティグループ管理テーブル720は、パリティグループ番号721と、データ保護設定722と、物理チャンク番号723とが対応付けられた情報を格納する。
パリティグループ番号721は、パリティグループ310を識別可能な識別情報である。データ保護設定722は、パリティグループ310のデータ保護設定である。物理チャンク番号723は、パリティグループ310に割り当てられた物理チャンク311を識別可能な識別情報である。
物理チャンク管理テーブル730は、物理チャンク311に係る情報(開始オフセットからサイズ分だけドライブ214の物理領域を切り出して物理チャンク311として管理するための情報)を格納する。より具体的には、物理チャンク管理テーブル730は、物理チャンク番号731と、開始オフセット732と、サイズ733(ブロック)と、サイト番号/ノード番号/ドライブ番号734とが対応付けられた情報を格納する。
物理チャンク番号731は、物理チャンク311を識別可能な識別情報である。開始オフセット732は、ドライブ214から物理チャンク311を切り出すときの開始位置を示す情報である。サイズ733(ブロック)は、物理チャンク311の容量を示す情報(ブロックの数)である。サイト番号/ノード番号/ドライブ番号734は、物理チャンク311が切り出されている記憶資源を識別可能な識別情報(物理チャンク311がどのサイト201のどのノード210のどのドライブ214から切り出されているかを示す情報)である。
図8は、キャッシュグループ管理テーブル414の一例を示す図である。
キャッシュグループ管理テーブル414は、キャッシュ領域301とキャッシュデータとを管理するためのするための制御情報を格納する。
キャッシュグループ管理テーブル414は、キャッシュ構成管理テーブル810、フリーキャッシュ管理テーブル820、およびキャッシュ情報管理テーブル830を含んで構成される。
キャッシュ構成管理テーブル810は、キャッシュ領域301を構成する記憶デバイス(本例では、メモリ212またはドライブ214)の種別とキャッシュグループ300に割り当てる物理領域とを管理するための情報(キャッシュ領域情報)を格納する。なお、キャッシュ構成管理テーブル810に登録された物理領域は、キャッシュグループ300に属する領域となる。より具体的には、キャッシュ構成管理テーブル810は、キャッシュ領域番号811と、タイプ812と、サイズ813(ブロック)と、デバイス番号814と、開始オフセット815とが対応付けられた情報を格納する。
キャッシュ領域番号811は、キャッシュ領域301を識別可能な識別情報である。タイプ812は、キャッシュ領域301が割り当てられる記憶領域を備える記憶デバイスの種別を識別するための識別情報である。キャッシュ領域301がメモリ212の物理領域である場合、「メモリ」が格納され、キャッシュ領域301がドライブ214の物理領域である場合、「ドライブ」が格納される。サイズ813は、キャッシュ領域301の容量を示す情報(例えば、ブロックの数)である。デバイス番号814は、キャッシュ領域301が割り当てられる記憶領域を備える記憶デバイスを識別可能な識別情報である。なお、本例では、メモリ212が1つである例であるため、「Null」を格納している。開始オフセット815は、キャッシュ領域301を割り当てるときの記憶デバイスにおける開始位置を示す情報である。
フリーキャッシュ管理テーブル820は、各キャッシュ領域301の未使用の物理領域を管理するための情報を格納する。キャッシュ領域301は、所定のサイズの物理領域(エントリ)から構成されている。より具体的には、フリーキャッシュ管理テーブル820は、キャッシュ領域番号821と、フリーエントリ822とが対応付けられた情報を格納する。なお、キャッシュ領域301にデータが書き込まれる際、フリーキャッシュ管理テーブル820が参照されて未使用のエントリが確保される。
キャッシュ領域番号821は、キャッシュ領域301を識別可能な識別情報である。フリーエントリ822は、キャッシュ領域301のうち未使用のエントリを特定可能な情報である。フリーエントリ822には、未使用のエントリ毎にエントリ情報(本例では、オフセットおよびサイズ)が含まれる。なお、エントリのサイズ(容量)は、一定であってもよいし、エントリ毎に異なっていてもよい。例えば、複数種類のサイズが設けられる場合は、サイズごとにフリーエントリ822が設けられてもよい。
キャッシュ情報管理テーブル830は、キャッシュデータの情報を管理するための情報を格納する。例えば、キャッシュ情報管理テーブル830は、仮想ボリューム330のどの領域のデータをキャッシュしているかを示す情報と、当該データが記憶されているキャッシュ領域301を示す情報を格納する。より具体的には、キャッシュ情報管理テーブル830は、仮想ボリューム番号831と、LBA832と、キャッシュ領域番号833と、エントリ情報834とが対応付けられた情報を格納する。
仮想ボリューム番号831は、仮想ボリューム330を識別可能な識別情報である。LBA832は、仮想ボリューム330におけるデータの位置を特定可能な情報(例えば、アドレス)である。キャッシュ領域番号833は、キャッシュ領域301を識別可能な識別情報であり、仮想ボリューム330のデータが記憶されているキャッシュ領域301を特定可能な情報である。エントリ情報834は、仮想ボリューム330のデータがキャッシュ領域301において記憶されているエントリを特定可能な情報である。
仮想ボリューム330のデータがキャッシュされているか否かの判定では、キャッシュ情報管理テーブル830が参照され、当該データの仮想ボリューム番号およびLABに対応するレコードが登録されているか否かが確認される。この点、レコードを検索する際、キャッシュ情報管理テーブル830のレコードを最初から確認していては時間を要するため、仮想ボリューム番号831およびLBA832をキーとしたハッシュテーブルでエントリ情報834を管理してもよい。ハッシュテーブルによれば、エントリ情報834の検索を高速化することができる。
図9は、モニタ管理テーブル415の一例を示す図である。
モニタ管理テーブル415は、仮想ボリューム330のページ331に対するアクセス頻度を管理するためのするための制御情報を格納する。
モニタ管理テーブル415は、長周期モニタ情報テーブル910、短周期モニタ情報テーブル920、および度数分布テーブル930を含んで構成される。
長周期モニタ情報テーブル910は、長周期のページ331へのアクセス頻度の情報を格納する。より具体的には、長周期モニタ情報テーブル910は、ページ番号911と、リードカウンタ912と、ライトカウンタ913と、モニタ開始時刻914と、アクセス頻度確定値915とが対応付けられた情報を格納する。
ページ番号911は、仮想ボリューム330におけるページ331を識別可能な識別情報である。リードカウンタ912は、当該ページ331がリードされた回数を管理するための情報である。ライトカウンタ913は、当該ページ331に対してライトされた回数を管理するための情報である。モニタ開始時刻914は、当該ページ331に対するアクセスの監視が開始された時間を示す情報である。アクセス頻度確定値915は、当該ページ331に対するアクセス頻度の確定値(長周期モニタ確定値)を示す情報である。長周期モニタ確定値は、例えば、下記の(式1)により算出される。
(式1)
長周期モニタ確定値
=(リードカウント+ライトカウント)/(モニタ確定時刻-モニタ開始時刻)
短周期モニタ情報テーブル920は、短周期のページ331へのアクセス頻度の情報を格納する。より具体的には、短周期モニタ情報テーブル920は、ページ番号921と、リードカウンタ922と、ライトカウンタ923と、モニタ開始時刻924と、最終アクセス時刻925と、アクセス頻度確定値926とが対応付けられた情報を格納する。
ページ番号921は、仮想ボリューム330におけるページ331を識別可能な識別情報である。リードカウンタ922は、当該ページ331がリードされた回数を管理するための情報である。ライトカウンタ923は、当該ページ331に対してライトされた回数を管理するための情報である。モニタ開始時刻924は、当該ページ331に対するアクセスの監視が開始された時間を示す情報である。最終アクセス時刻925は、当該ページ331に対して最後にアクセスされた時間を示す情報である。
アクセス頻度確定値926は、当該ページ331に対するアクセス頻度の確定値(短周期モニタ確定値)を示す情報である。短周期モニタ確定値は、例えば、上記の(式1)により算出されてもよいし、下記の(式2)により算出されてもよい。下記の(式2)により算出される場合は、アクセスの回数(例えば、リードカウントとライトカウントとの合計)が所定の値(モニタ確定のカウンタ値)に達したときに算出が行われる。
(式2)
短周期モニタ確定値
=(モニタ確定のカウンタ値)/(モニタ確定時刻-モニタ終了時刻)
なお、長周期モニタ情報テーブル910において最終アクセス時刻を管理するように構成し、長周期モニタ確定値についても(式2)により算出されるようにしてもよい。
度数分布テーブル930は、長周期モニタ確定値および短周期モニタ確定値に従ってアクセス頻度の高い順にページ331を並べ替えた情報を格納する。度数分布テーブル930に従ってリビルドの優先順位が決定される。より具体的には、度数分布テーブル930は、プール番号931と、負荷レベル932(IOPS:Input / Output Per Second)と、ページ数933と、ページ番号リスト934とが対応付けられた情報を格納する。
プール番号931は、ストレージプール320を識別可能な識別情報である。負荷レベル932は、アクセス頻度を分類するための情報であり、例えば、設計時に設定されるパラメタである。ページ数933は、負荷レベル932に属するページ331の数を示す情報である。ページ番号リスト934は、負荷レベル932に属するページ331を識別可能な識別情報である。
図10は、リビルド管理テーブル416の一例を示す図である。
リビルド管理テーブル416は、リビルドの進捗とリビルドの順序とを管理するためのするための制御情報を格納する。
リビルド管理テーブル416は、リビルド進捗管理テーブル1010およびリビルド順序管理テーブル1020を含んで構成される。
リビルド進捗管理テーブル1010は、障害が発生(例えば、破損)しているドライブ214の物理領域について、リビルドが完了したかどうかを示す情報(リビルド進捗情報)を格納する。リビルド進捗情報は、例えば、ビットマップ表で管理される。より具体的には、リビルド進捗管理テーブル1010は、サイト番号1011と、ノード番号1012と、ドライブ番号1013と、リビルド進捗情報1014とが対応付けられた情報を格納する。
サイト番号1011は、リビルド対象のサイト201を識別可能な識別情報である。ノード番号1012は、リビルド対象のノード210を識別可能な識別情報である。ドライブ番号1013は、リビルド対象のドライブ214を識別可能な識別情報である。リビルド進捗情報1014は、リビルド対象のドライブ214においてリビルド管理単位(リビルド対象領域毎)にリビルドが完了したか否かを示す情報である。本実施の形態では、ビットマップ形式で進捗情報が管理される。ビットマップは、先頭のビットがリビルド対象のドライブ214の先頭のリビルド対象領域に対応し、1ビットで1つのリビルド対象領域のリビルドの進捗が示される。本例では、ビット値「1」は、リビルドが未完了であることを示している。
リビルド順序管理テーブル1020は、優先レベル毎に、リビルド順序キュー1022の情報を格納する。リビルド時は、優先度の高いリビルド順序キュー1022の先頭から順にリビルドが進められる。より具体的には、リビルド順序管理テーブル1020は、優先レベル1021とリビルド順序キュー1022とが対応付けられた情報を格納する。
優先レベル1021は、リビルドの優先度を示す情報である。なお、優先レベル1021は、アクセス頻度と、ユーザにより指定された対象とが加味されて決定される。リビルド順序キュー1022は、リビルドの順序を決定するための情報である。リビルド順序キュー1022では、リビルド領域情報(リビルド対象のサイト番号1011、リビルド対象のノード番号1012、リビルド対象のドライブ番号1013、リビルド対象領域の位置を示すオフセット)がリスト形式で管理されている。
なお、リビルド領域情報については、検索を高速化するため、ハッシュテーブルを使い管理することもできる。
次に、ストレージシステム101が実行する処理について説明する。
図11は、リード処理に係るフローチャートの一例を示す図である。リード処理では、アプリケーション351からのデータのリード処理要求を受けて、自ノード210のドライブ214からデータが読み出される。なお、リード処理要求では、リード先(例えば、LUN(Logical Unit Number)のような仮想ボリューム番号、LBAのようなアドレス等)が指定されている。アクセス先(ドライブ214等)が障害状態である場合、冗長データからリード対象のデータが修復されて応答される。以下、詳細について説明する。
ステップS1101では、リード処理プログラム421は、アプリケーション351からリード理要求を受信する。
ステップS1102では、リード処理プログラム421は、リード処理要求のデータについて、ストレージプール320にページ331が未割当てであるか否かを判定する。リード処理プログラム421は、未割当てであると判定した場合、ステップS1103に処理を移し、未割当てでないと判定した場合、ステップS1104に処理を移す。
ステップS1103では、リード処理プログラム421は、データがないことを示す0データをアプリケーション351に返却し、リード処理を終了する。
ステップS1104では、リード処理プログラム421は、アクセス先(割当先)のアドレスを取得する。
ステップS1105では、リード処理プログラム421は、排他取得を行う。排他取得では、アクセス先のLBAに対して、ミューテクス等の排他アルゴリズムを用いて、複数の処理が同時に同じ領域へアクセスしないように制御する。以降の排他処理についても同様の処理を行う。
ステップS1106では、リード処理プログラム421は、アクセス先のドライブ214が障害状態であるか否かを判定する。リード処理プログラム421は、アクセス先のドライブ214が障害状態であると判定した場合、ステップS1107に処理を移し、アクセス先のドライブ214が障害状態でないと判定した場合、ステップS1122に処理を移す。
ステップS1107では、リード処理プログラム421は、モニタ処理プログラム424に短周期モニタ更新処理を行うように指示する。短周期モニタ更新処理では、例えば、リードカウンタ922またはライトカウンタ923が更新される。なお、短周期モニタ更新処理については、図13Aを用いて後述する。
ステップS1108では、リード処理プログラム421は、モニタ処理プログラム424に短周期モニタ確定処理を行うように指示する。短周期モニタ確定処理では、例えば、アクセス頻度確定値926が更新され得る。なお、短周期モニタ確定処理については、図13Bを用いて後述する。
ステップS1109では、リード処理プログラム421は、キャッシュ処理プログラム423にキャッシュ判定処理を行うように指示する。キャッシュ判定処理では、例えば、リード処理要求のデータがキャッシュ領域301に格納されているか否かの判定が行われ、リード処理要求のデータがキャッシュ領域301に格納されていると判定れた場合、キャッシュヒットが応答される。なお、キャッシュ判定処理については、図14Aを用いて後述する。
ステップS1110では、リード処理プログラム421は、キャッシュ判定処理の結果がキャッシュヒットであるか否かを判定する。リード処理プログラム421は、キャッシュ判定処理の結果がキャッシュヒットであると判定した場合、ステップS1123に処理を移し、キャッシュ判定処理の結果がキャッシュヒットでないと判定した場合、ステップS1111に処理を移す。
ステップS1111では、リード処理プログラム421は、リード処理要求のデータのパリティを有する冗長化先のノード210にデータの修復を行う要求(データ修復要求)を送信する。
ステップS1112では、冗長化先のノード210のリード処理プログラム421(冗長化先リード処理プログラム)は、データ修復要求を受信する。
ステップS1113では、冗長化先リード処理プログラムは、排他取得を行う。
ステップS1114では、冗長化先リード処理プログラムは、修復に必要なデータのリード要求を送信する。なお、図示は省略しているが、ここでノード210間の通信を発生させて、修復が必要なデータ(障害データ)と同じストライプを組むデータを有する他のノード210から当該データを読み出す。
ステップS1115では、冗長化先リード処理プログラムは、修復に必要なパリティを読み出す。
ステップS1116では、冗長化先リード処理プログラムは、修復に必要なデータを受信する。
ステップS1117では、冗長化先リード処理プログラムは、データとパリティとから障害データを修復する(修復データを生成する)。
ステップS1118では、冗長化先リード処理プログラムは、修復データを、データ修復要求の送信元のリード処理プログラム421に送信する。
ステップS1119では、冗長化先リード処理プログラムは、排他解除を行う。
ステップS1120では、リード処理プログラム421は、修復データを受信する。
ステップS1121では、リード処理プログラム421は、キャッシュ処理プログラム423にキャッシュ登録処理を行うように指示する。キャッシュ登録処理では、例えば、修復データのキャッシュ領域301への登録が行われる。なお、キャッシュ登録処理については、図14Bを用いて後述する。
ステップS1122では、リード処理プログラム421は、自ノード210のドライブ214(ローカルドライブ)からデータを読み出す。
ステップS1123では、リード処理プログラム421は、排他解放を行う。
ステップS1124では、リード処理プログラム421は、リード処理要求のデータを要求元に応答(アプリケーション351、ライト処理プログラム422等に送信)する。
ステップS1125では、リード処理プログラム421は、リード対象のページ331に対して長期モニタ更新処理を行うようにキャッシュ処理プログラム423に指示し、リード処理を終了する。長期モニタ更新処理では、例えば、リード対象のページ331のリードカウンタ912またはライトカウンタ913が更新される。なお、長期モニタ更新処理については、図13Cを用いて後述する。
図12は、ライト処理に係るフローチャートの一例を示す図である。ライト処理では、アプリケーション351からのライト処理要求を受けて、自ノード210のドライブ214にデータが書き込まれ、さらに他ノード210のドライブ214に冗長データ(パリティ)が書き込まれる。なお、ライト処理要求では、ライト先(例えば、LUNのような仮想ボリューム番号、LBAのようなアドレス等)が指定されている。以下、詳細について説明する。
ステップS1201では、ライト処理プログラム422は、アプリケーション351からライト処理要求を受信する。
ステップS1202では、ライト処理プログラム422は、ライト処理要求のデータについて、ストレージプール320にページ331が未割当てであるか否かを判定する。ライト処理プログラム422は、未割当てであると判定した場合、ステップS1203に処理を移し、未割当てでないと判定した場合、ステップS1204に処理を移す。
ステップS1203では、ライト処理プログラム422は、自ノード210のドライブ214の物理チャンク311が関連付けられている論理チャンク321(自系プールボリューム)にページ331を割り当てる。
ステップS1204では、ライト処理プログラム422は、アクセス先(割当先)のアドレスを取得する。
ステップS1205では、ライト処理プログラム422は、排他取得を行う。
ステップS1206では、ライト処理プログラム422は、書込み前のデータ(旧データ)を読み込む(より具体的には、旧データについて図11に示すリード処理が行われる)。
ステップS1207では、ライト処理プログラム422は、中間データを生成する。中間データは、データを部分的に更新するときに作成する一時的なデータであり、新旧の差分を示すデータである。例えば、旧データのストライプが「A1-A2-AP」である場合、中間データは、次のように求められる。
AP(旧パリティ)=A1(旧データ) XOR A2(旧データ)
A1(新データ) XOR A1(旧データ)=M(中間データ)
なお、新パリティについては、次のように求められる。
AP(旧パリティ) XOR M(中間データ)=AP(新パリティ)
ステップS1208では、ライト処理プログラム422は、冗長化先のノード210に中間データ(パリティ更新要求)を送信する。なお、ライト処理プログラム422は、冗長度に応じて(冗長度が2以上である場合、2以上のノード210に)中間データを転送する。
ステップS1209では、冗長化先のノード210のライト処理プログラム422(冗長化先ライト処理プログラム)は、中間データを受信する。
ステップS1210では、冗長化先ライト処理プログラムは、排他取得を行う。
ステップS1211では、冗長化先ライト処理プログラムは、アクセス先のドライブ214が障害状態であり、かつ、リビルドが実行前であるか否かを判定する。冗長化先ライト処理プログラムは、アクセス先のドライブ214が障害状態であり、かつ、リビルドが実行前であると判定した場合、ステップS1215に処理を移し、アクセス先のドライブ214が障害状態でない、または、リビルドが実行前でないと判定した場合、ステップS1212に処理を移す。
ステップS1212では、冗長化先ライト処理プログラムは、自ノード210のドライブ214から旧パリティを読み出す。
ステップS1213では、冗長化先ライト処理プログラムは、中間データと旧パリティとから新パリティを計算する。
ステップS1214では、冗長化先ライト処理プログラムは、自ノード210のドライブ214に新パリティを書き込む。
ステップS1215では、冗長化先ライト処理プログラムは、排他解放を行う。
ステップS1216では、冗長化先ライト処理プログラムは、パリティ更新要求元のライト処理プログラム422に書込み応答を送信する。
ステップS1217では、ライト処理プログラム422は、アクセス先のドライブ214が障害状態であり、かつ、リビルドが実行前であるか否かを判定する。ライト処理プログラム422は、アクセス先のドライブ214が障害状態であり、かつ、リビルドが実行前であると判定した場合、ステップS1218に処理を移し、アクセス先のドライブ214が障害状態でない、または、リビルドが実行前でないと判定した場合、ステップS1219に処理を移す。
ステップS1218では、ライト処理プログラム422は、キャッシュ処理プログラム423にキャッシュ登録処理を行うように指示する。キャッシュ登録処理では、例えば、ライト処理要求のデータ(新データ)のキャッシュ領域301への登録が行われる。なお、キャッシュ登録処理については、図14Bを用いて後述する。
ステップS1219では、ライト処理プログラム422は、自ノード210のドライブ214に新データを書き込む。
ステップS1220では、ライト処理プログラム422は、冗長化先のノード210から書込み応答を受信する。
ステップS1221では、ライト処理プログラム422は、排他解放を行う。
ステップS1222では、ライト処理プログラム422は、要求元に応答(例えば、アプリケーション351に書込みが完了したこと示す情報を送信)する。
図13Aは、短周期モニタ更新処理に係るフローチャートの一例を示す図である。
ステップS1301では、モニタ処理プログラム424は、アクセス対象のページ331(アクセス対象領域)に係るカウント値が「0」であるか否かを判定する。アクセス対象領域は、リード処理要求に起因して短周期モニタ更新処理が行われる場合は、リード対象のページ331であり、ライト処理要求に起因して短周期モニタ更新処理が行われる場合は、ライト対象のページ331である。アクセス対象領域に係るカウント値は、例えば、アクセス対象領域のリードカウンタ922とライトカウンタ923とを加算した値である。なお、後述するように長周期モード1811または短周期モード1812がOFFに設定された場合には、該当するモニタの更新と確定に関する処理は実行せず、スキップする。図13Bにおいても同様である。モニタ処理プログラム424は、カウント値が「0」であると判定した場合、ステップS1302に処理を移し、カウント値が「0」でないと判定した場合、ステップS1303に処理を移す。
ステップS1302では、モニタ処理プログラム424は、モニタ開始時刻924を更新(例えば、現在の時刻を設定)する。
ステップS1303では、モニタ処理プログラム424は、アクセス対象領域のアクセスカウンタを加算する。より具体的には、モニタ処理プログラム424は、リード処理要求に起因して短周期モニタ更新処理が行われる場合は、リード対象のページ331のリードカウンタ922を加算し、ライト処理要求に起因して短周期モニタ更新処理が行われる場合は、ライト対象のページ331のライトカウンタ923を加算する。
ステップS1304では、モニタ処理プログラム424は、アクセス対象領域の最終アクセス時刻925を更新(例えば、現在の時刻を設定)し、短周期モニタ更新処理を終了する。
図13Bは、短周期モニタ確定処理に係るフローチャートの一例を示す図である。
ステップS1311では、モニタ処理プログラム424は、カウント値がモニタ確定のカウンタ値(短周期確定閾値)を超過しているか否かを判定する。モニタ処理プログラム424は、カウント値が短周期確定閾値を超過していると判定した場合、ステップS1312に処理を移し、カウント値が短周期確定閾値を超過していないと判定した場合、短周期モニタ確定処理を終了する。
ステップS1312では、モニタ処理プログラム424は、上述した(式2)を用いて短周期モニタ確定値を算出する。
ステップS1313では、モニタ処理プログラム424は、算出した短周期モニタ確定値を記録(アクセス頻度確定値926に設定)する。
ステップS1314では、モニタ処理プログラム424は、アクセス対象領域のカウント値を「0」に更新する。例えば、モニタ処理プログラム424は、アクセス対象領域のリードカウンタ922とライトカウンタ923との値をそれぞれ「0」に更新する。
ステップS1315では、モニタ処理プログラム424は、短周期リオーダ処理を行う。短周期リオーダ処理では、例えば、リビルドの順序が更新され得る。なお、短周期リオーダ処理については、図16Cを用いて後述する。
図13Cは、長周期モニタ更新処理に係るフローチャートの一例を示す図である。
ステップS1321では、モニタ処理プログラム424は、アクセス対象のページ331(アクセス対象領域)のアクセスカウンタを加算し、長周期モニタ更新処理する。アクセス対象領域は、リード処理要求に起因して長周期モニタ更新処理が行われる場合は、リード対象のページ331であり、ライト処理要求に起因して長周期モニタ更新処理が行われる場合は、ライト対象のページ331である。図13Dにおいても同様である。換言するならば、モニタ処理プログラム424は、リード処理要求に起因して長周期モニタ更新処理が行われる場合は、リード対象のページ331のリードカウンタ912を加算し、ライト処理要求に起因して長周期モニタ更新処理が行われる場合は、ライト対象のページ331のライトカウンタ913を加算する。
図13Dは、長周期モニタ確定処理に係るフローチャートの一例を示す図である。
ステップS1331では、モニタ処理プログラム424は、モニタ期間(現在の時刻からモニタ開始時刻914を減算した値)が長周期確定閾値(予め設定された値であって、1日、1週間等)を超過しているか否かを判定する。モニタ処理プログラム424は、モニタ期間が長周期確定閾値を超過していると判定した場合、ステップS1332に処理を移し、モニタ期間が長周期確定閾値を超過していないと判定した場合、長周期モニタ確定処理を終了する。
ステップS1332では、モニタ処理プログラム424は、現在の時刻をモニタ終了時刻として取得する。
ステップS1333では、モニタ処理プログラム424は、上述した(式1)を用いて長周期モニタ確定値を算出する。
ステップS1334では、モニタ処理プログラム424は、算出した長周期モニタ確定値を記録(アクセス頻度確定値915に設定)する。
ステップS1335では、モニタ処理プログラム424は、アクセス対象領域のアクセスカウンタの値(カウント値)を「0」に更新する。例えば、モニタ処理プログラム424は、アクセス対象領域のリードカウンタ912とライトカウンタ913との値をそれぞれ「0」に更新する。
ステップS1336では、モニタ処理プログラム424は、リビルド順序管理テーブル1020を参照し、リビルドが実行中であるか否かを判定する。モニタ処理プログラム424は、リビルドが実行中であると判定した場合、ステップS1337に処理を移し、リビルドが実行中でないと判定した場合、ステップS1338に処理を移す。
ステップS1337では、モニタ処理プログラム424は、長周期リオーダ処理を行う。長周期リオーダ処理では、例えば、リビルドの順序が更新され得る。なお、長周期リオーダ処理については、図16Dを用いて後述する。
ステップS1338では、モニタ処理プログラム424は、モニタ開始時刻914を更新(現在の時刻に設定)し、長周期モニタ確定処理を終了する。
図14Aは、キャッシュ判定処理に係るフローチャートの一例を示す図である。
ステップS1401では、キャッシュ処理プログラム423は、キャッシュ情報管理テーブル830を参照し、判定対象データ(例えば、リード処理要求のデータ、後述のリビルド対象領域のデータ)がキャッシュ領域301に登録済みであるか否かを判定する。キャッシュ処理プログラム423は、判定対象データがキャッシュ領域301に登録済みであると判定した場合、ステップS1402に処理を移し、判定対象データがキャッシュ領域301に登録済みでないと判定した場合、ステップS1406に処理を移す。
ステップS1402では、キャッシュ処理プログラム423は、キャッシュ構成管理テーブル810およびキャッシュ情報管理テーブル830を参照し、判定対象データがメモリ212のキャッシュ領域301(メモリキャッシュ領域)に存在するか否かを判定する。キャッシュ処理プログラム423は、判定対象データがメモリキャッシュ領域に存在すると判定した場合、ステップS1403に処理を移し、判定対象データがメモリキャッシュ領域に存在しないと判定した場合、ステップS1404に処理を移す。
ステップS1403では、キャッシュ処理プログラム423は、メモリキャッシュ領域からデータをコピーする。
ステップS1404では、キャッシュ処理プログラム423は、ドライブ214のキャッシュ領域301(ドライブキャッシュ領域)からデータを読み出す。
ステップS1405では、キャッシュ処理プログラム423は、呼出元(リード処理プログラム421またはリビルド処理プログラム425)にキャッシュヒットを応答し、キャッシュ判定処理を終了する。
ステップS1406では、キャッシュ処理プログラム423は、呼出元(リード処理プログラム421またはリビルド処理プログラム425)にキャッシュミスを応答し、キャッシュ判定処理を終了する。
図14Bは、キャッシュ登録処理に係るフローチャートの一例を示す図である。キャッシュ登録処理では、リード処理要求のデータまたはライト処理要求のデータがキャッシュ領域301に未登録である場合に登録される。以下では、キャッシュ領域301に登録する対象となるリード処理要求のデータまたはライト処理要求のデータを「登録対象データ」と記し、登録対象データに対応する前のデータがキャッシュ領域301に登録されている場合、当該データを「登録済みデータ」と記す。以下、詳細について説明する。
ステップS1411では、キャッシュ処理プログラム423は、登録対象データに係る仮想ボリューム番号およびLBAでキャッシュ情報管理テーブル830を検索することにより、登録対象データがキャッシュ領域301に登録済みであるか否かを判定する。キャッシュ処理プログラム423は、登録対象データがキャッシュ領域301に登録済みであると判定した場合、ステップS1412に処理を移し、登録対象データがキャッシュ領域301に登録済みでないと判定した場合、ステップS1414に処理を移す。
ステップS1412では、キャッシュ処理プログラム423は、登録対象データと登録済みデータとが同値であるか否かを判定する。キャッシュ処理プログラム423は、登録対象データと登録済みデータとが同値であると判定した場合、キャッシュ登録処理を終了し、登録対象データと登録済みデータとが同値でないと判定した場合、ステップS1413に処理を移す。例えば、登録対象データについて、既に読込みが行われていた場合に、今回も読込みが行われるときには、登録対象データと登録済みデータとが同値となり、今回は書込みが行われるときには、登録対象データと登録済みデータとが同値とならない。
ステップS1413では、キャッシュ処理プログラム423は、キャッシュ領域301の登録済みデータを登録対象データに更新(キャッシュエントリを更新)し、キャッシュ登録処理を終了する。
ステップS1414では、キャッシュ処理プログラム423は、キャッシュ構成管理テーブル810およびフリーキャッシュ管理テーブル820を参照し、登録対象データを登録可能な空き容量がメモリ212のキャッシュ領域301にあるか否か(メモリキャッシュ領域に空きがあるか否か)を判定する。キャッシュ処理プログラム423は、メモリキャッシュ領域に空きがあると判定した場合、ステップS1415に処理を移し、メモリキャッシュ領域に空きがないと判定した場合、ステップS1416に処理を移す。
ステップS1415では、キャッシュ処理プログラム423は、メモリ212のキャッシュ領域301を確保する。より具体的には、キャッシュ処理プログラム423は、登録対象データの登録に必要な容量分のメモリ212のフリーエントリ822のエントリ情報をキャッシュ情報管理テーブル830に登録し、当該エントリ情報をフリーキャッシュ管理テーブル820から削除する。
ステップS1416では、キャッシュ処理プログラム423は、キャッシュ構成管理テーブル810およびフリーキャッシュ管理テーブル820を参照し、登録対象データを登録可能な空き容量がドライブ214のキャッシュ領域301にあるか否か(ドライブキャッシュ領域に空きがあるか否か)を判定する。キャッシュ処理プログラム423は、ドライブキャッシュ領域に空きがあると判定した場合、ステップS1417に処理を移し、ドライブキャッシュ領域に空きがないと判定した場合、ステップS1418に処理を移す。
ステップS1417では、キャッシュ処理プログラム423は、ドライブ214のキャッシュ領域301を確保する。より具体的には、キャッシュ処理プログラム423は、登録対象データの登録に必要な容量分のドライブ214のフリーエントリ822のエントリ情報をキャッシュ情報管理テーブル830に登録し、当該エントリ情報をフリーキャッシュ管理テーブル820から削除する。
ステップS1418では、キャッシュ処理プログラム423は、ページマッピングテーブル630および度数分布テーブル930を参照し、未処理のページ331のうち最もアクセス頻度が少ないページ331の仮想ボリューム番号632、LBA633およびサイズ634(解除対象データ)を特定し、キャッシュ解除処理を行い、ステップS1411に処理を移す。なお、キャッシュ解除処理については、図14Cを用いて後述する。
図14Cは、キャッシュ解除処理に係るフローチャートの一例を示す図である。
ステップS1421では、キャッシュ処理プログラム423は、キャッシュ情報管理テーブル830を参照し、キャッシュ領域301に解除対象データが登録済みであるか否かを判定する。キャッシュ処理プログラム423は、キャッシュ領域301に解除対象データが登録済みであると判定した場合、ステップS1422に処理を移し、キャッシュ領域301に解除対象データが登録済みでないと判定した場合、キャッシュ解除処理を終了する。
ステップS1422では、キャッシュ処理プログラム423は、キャッシュ領域301に登録されている解除対象データのエントリ情報をフリーエントリ822に登録し、当該エントリ情報のレコードをキャッシュ情報管理テーブル830から削除する。
図15は、リビルド処理に係るフローチャートの一例を示す図である。リビルド処理は、ノード210またはドライブ214の障害が検出された際、実行される。なお、リビルド先は、リビルド後の使用容量、I/O負荷等がノード210またはドライブ214間で平準化されるように決められる。リビルド処理では、優先レベルが高いリビルド順序キュー1022からリビルドが実行されていき、全ての障害部位のリビルドが完了するまで処理が繰り返される。以下、詳細について説明する。
ステップS1501では、リビルド処理プログラム425は、リビルド進捗情報1014を初期化する。リビルド処理プログラム425は、リビルド進捗情報1014を進捗0%に更新する。例えば、リビルド処理プログラム425は、リビルド進捗情報1014のビットマップテーブルを全て「1」(未リビルド状態)に更新する。
ステップS1502では、リビルド処理プログラム425は、リビルド順序初期化処理を行う。リビルド順序初期化処理では、リビルドの順序が初期化される。なお、リビルド順序初期化処理については、図16Aを用いて後述する。
ステップS1503では、リビルド処理プログラム425は、処理する対象の優先レベル1021(対象優先レベル)を最高値(本実施の形態では、「0」)に設定する。
ステップS1504では、リビルド処理プログラム425は、リビルド順序管理テーブル1020を参照し、対象優先レベルにエントリが存在するか否かを判定する。リビルド処理プログラム425は、対象優先レベルにエントリが存在すると判定した場合、ステップS1506に処理を移し、対象優先レベルにエントリが存在しないと判定した場合、ステップS1505に処理を移す。
ステップS1505では、リビルド処理プログラム425は、対象優先レベルを1つ下げ、ステップS1504に処理を移す。
ステップS1506では、リビルド処理プログラム425は、対象優先レベルのリビルド順序キュー1022から、次にリビルドする物理領域(リビルド対象領域)を取得する。
ステップS1507では、リビルド処理プログラム425は、キャッシュ処理プログラム423にキャッシュ判定処理を行うように指示する。キャッシュ判定処理では、リビルド対象領域のデータがキャッシュ領域301に格納されているか否かの判定が行われる。
ステップS1508では、リビルド処理プログラム425は、キャッシュ判定処理の結果がキャッシュヒットであるか否かを判定する。リビルド処理プログラム425は、キャッシュ判定処理の結果がキャッシュヒットであると判定した場合、ステップS1509に処理を移し、キャッシュ判定処理の結果がキャッシュヒットでないと判定した場合、ステップS1511に処理を移す。
ステップS1509では、リビルド処理プログラム425は、キャッシュデータがリビルド管理単位と一致しているか否かを判定する。リビルド処理プログラム425は、キャッシュデータがリビルド管理単位と一致していると判定した場合、ステップS1515に処理を移し、キャッシュデータがリビルド管理単位と一致していないと判定した場合、ステップS1510に処理を移す。
ステップS1510では、リビルド処理プログラム425は、キャッシュデータがないリビルド対象領域の物理領域を修復対象領域に設定し、ステップS1512に処理を移す。
ステップS1511では、リビルド処理プログラム425は、リビルド対象領域全体を修復対象領域に設定する。
ステップS1512では、リビルド処理プログラム425は、修復対象領域についてリード処理を行うようにリード処理プログラム421に指示を行う。リード処理では、修復対象領域のデータ(修復データ)が読み出される。
ステップS1513では、リビルド処理プログラム425は、ステップS1510の処理を行ったか否か(キャッシュヒットルートであるか否か)を判定する。リビルド処理プログラム425は、キャッシュヒットルートであると判定した場合、ステップS1514に処理を移し、キャッシュヒットルートでないと判定した場合、ステップS1515に処理を移す。
ステップS1514では、リビルド処理プログラム425は、キャッシュデータと修復データとをマージし、リビルド対象領域の修復データとする。
ステップS1515では、リビルド処理プログラム425は、リビルド先に修復データを書き込む。
ステップS1516では、リビルド処理プログラム425は、リビルド進捗情報1014を更新する。
ステップS1517では、リビルド処理プログラム425は、リビルド進捗情報1014を参照し、障害が発生した全てのドライブ214のデータ(障害データ)のリビルドが完了したか否かを判定する。リビルド処理プログラム425は、障害データのリビルドが完了したと判定した場合、リビルド処理を終了し、障害データのリビルドが完了していないと判定した場合、ステップS1503に処理を移す。
なお、リビルド処理を高速化するため、リビルド処理を複数、並列に動作させてもよい。
図16Aは、リビルド順序初期化処理に係るフローチャートの一例を示す図である。リビルド順序初期化処理では、リビルド順序キュー1022にリビルド領域情報がLBA順に挿入される。その後、ユーザ指定リオーダ処理および長周期モニタ確定処理に従い並べ替えが実行される。以下、詳細について説明する。
ステップS1601では、優先順位変更処理プログラム426は、後述のステップS1602およびステップS1603を行っていない障害状態のドライブ214のドライブ番号(次の障害状態のドライブ番号)を取得する。以下では、ステップS1601で取得されたドライブ番号のドライブ214を「処理対象ドライブ」と記す。
ステップS1602では、優先順位変更処理プログラム426は、リビルド順序キュー1022に登録を行っていない処理対象ドライブにおけるリビルド対象領域のアドレス(次のリビルド対象領域のアドレス)を取得する。以下では、取得したアドレスのリビルド対象領域を「処理対象領域」と記す。
ステップS1603では、優先順位変更処理プログラム426は、リビルド順序キュー1022に処理対象領域の情報(リビルド領域情報)をLBA順に登録する。
ステップS1604では、優先順位変更処理プログラム426は、処理対象ドライブの全てのリビルド対象領域に対してリビルド順序キュー1022への登録が完了したか否かを判定する。優先順位変更処理プログラム426は、登録が完了したと判定した場合、ステップS1605に処理を移し、登録が完了していないと判定した場合、ステップS1602に処理を移す。
ステップS1605では、優先順位変更処理プログラム426は、リビルド対象の全てのドライブ214に対してリビルド順序キュー1022への登録が完了したか否かを判定する。優先順位変更処理プログラム426は、登録が完了したと判定した場合、ステップS1606に処理を移し、登録が完了していないと判定した場合、ステップS1601に処理を移す。
ステップS1606では、優先順位変更処理プログラム426は、ユーザ指定リオーダ処理を行う。
ステップS1607では、優先順位変更処理プログラム426は、長周期モニタ確定処理を行い、リビルド順序初期化処理を終了する。
図16Bは、ユーザ指定リオーダ処理に係るフローチャートの一例を示す図である。ユーザ指定リオーダ処理は、リビルドが未実行である場合、リビルドの開始時(例えば、リビルド順序初期化処理)にて実行され、リビルドの実行中にユーザ指定(例えば、後述の仮想ボリューム設定画面1820による設定)があった場合、即座に実行される。
上述したように、ストレージシステム101では、アクセス頻度の高いデータを優先的に回復するといったようにデータを格納するブロック(例えば、ページ331)へのアクセスの特性に応じて、データを回復する優先度が決定される。しかしながら、一方で、アクセス頻度は低いが、ユーザにとっては重要なデータである場合もある。その場合、ブロックのアクセス特性だけから回復の優先度を判断してしまうと、アクセス頻度は低いがユーザにとっては重要なデータの回復が後回しにされ、データの回復中にさらに障害が生じた場合、それらのデータをロストしてしまう可能性がある。
このため,アクセス頻度にかかわらず、ユーザにとって重要なデータについては、優先的にデータを回復させる必要がある。この課題を解決するため、ブロックへのアクセス特性だけでは判断できない重要データについては、ユーザによりデータが格納される領域を指定してもらうことで、それらのデータを優先的に回復させる。また、ユーザが指定できる回復の優先度には、複数のレベルを設け、ユーザにとっての重要なデータの中でも優先度付けができるようにすることが好ましい。
ステップS1611では、優先順位変更処理プログラム426は、ユーザ指定された優先して回復する仮想ボリューム330(優先回復仮想ボリューム)が存在しているか否かを判定する。優先順位変更処理プログラム426は、優先回復仮想ボリュームが存在していると判定した場合、ステップS1612に処理を移し、優先回復仮想ボリュームが存在していないと判定した場合、ユーザ指定リオーダ処理を終了する。
ステップS1612では、優先順位変更処理プログラム426は、ユーザ指定の優先回復仮想ボリュームの仮想ボリューム番号を取得する。
ステップS1613では、優先順位変更処理プログラム426は、後述の仮想ボリューム設定画面1820で設定されたユーザ指定の優先回復領域を取得する。
ステップS1614では、優先順位変更処理プログラム426は、後述の仮想ボリューム設定画面1820で設定されたユーザ指定の優先レベルに該当するリビルド順序キュー1022を取得する。
ステップS1615では、優先順位変更処理プログラム426は、取得した優先回復領域をLBA順に、取得したリビルド順序キュー1022に挿入する。
図16Cは、短周期リオーダ処理に係るフローチャートの一例を示す図である。
ステップS1621では、優先順位変更処理プログラム426は、短周期モニタ確定処理にて確定されたページ331に係る情報(短周期モニタ確定値、ページ331に係るリビルド対象領域等)を取得する。
ステップS1622では、優先順位変更処理プログラム426は、当該ページ331のアクセス頻度確定値915(長周期モニタ確定値)を取得する。
ステップS1623では、優先順位変更処理プログラム426は、短周期モニタ確定値が長周期モニタ確定値より大きいか否かを判定する。優先順位変更処理プログラム426は、短周期モニタ確定値が長周期モニタ確定値より大きいと判定した場合、ステップS1624に処理を移し、短周期モニタ確定値が長周期モニタ確定値より大きくないと判定した場合、短周期リオーダ処理を終了する。
ステップS1624では、優先順位変更処理プログラム426は、設定された優先レベル1021(対象優先レベル)に該当するリビルド順序キュー1022を取得する。
ステップS1625では、優先順位変更処理プログラム426は、短周期モニタ確定値が高い順に、当該ページ331に係るリビルド対象領域が並ぶように、リビルド対象領域をリビルド順序キュー1022に挿入し、短周期リオーダ処理を終了する。
図16Dは、長周期リオーダ処理に係るフローチャートの一例を示す図である。
ステップS1631では、優先順位変更処理プログラム426は、長周期モニタ確定値が存在しているか否かを判定する。優先順位変更処理プログラム426は、長周期モニタ確定値が存在していると判定した場合、ステップS1632に処理を移し、長周期モニタ確定値が存在していないと判定した場合、長周期リオーダ処理を終了する。
ステップS1632では、優先順位変更処理プログラム426は、設定された優先レベル1021(対象優先レベル)に該当するリビルド順序キュー1022を取得する。
ステップS1633では、優先順位変更処理プログラム426は、長周期モニタ確定値が高い順に、リビルド順序キュー1022のエントリ(リビルド領域情報)を並べ替え、長周期リオーダ処理を終了する。
図17は、リビルドの順序の並べ替えを説明するための図である。
まず、長周期モニタの結果1711に従って度数分布が計算される。例えば、グラフ1710に示すように、ページ331単位で算出した長周期モニタ確定値を高い順に並べて得られる分布が計算される。
次に、短周期モニタの結果1712に従って度数分布が短い周期で(例えば、ホストI/O同期)で更新されていく。例えば、グラフ1720に示すように、得られた短周期モニタ確定値が当該ページ331の長周期モニタ確定値を超過した場合、短周期モニタ確定値に基づいて度数分布が並べ替えられる。
図18Aは、設定画面(GUI)の一例(リビルド設定画面1810)を示す図である。リビルド設定画面1810は、所定の装置(例えば、後述の管理ノード2220等)に出力される。
リビルド設定画面1810は、長周期モード1811、短周期モード1812、優先度決定アルゴリズム1813、モニタ確定のカウンタ値1814、優先付け閾値1815、モニタ対象1816、および優先レベル1817の情報を設定可能に構成される。
長周期モード1811は、長周期モニタ確定値によるリビルドの順序の並べ替え(リオーダ)を行うか否かを設定可能な項目である。短周期モード1812は、短周期モニタ確定値によるリオーダを行うか否かを設定可能な項目である。
短周期モード1812が「ON」である場合、短周期の詳細設定として、優先度決定アルゴリズム1813、モニタ確定のカウンタ値1814および優先付け閾値1815が設定可能である。
優先度決定アルゴリズム1813は、リビルドの順序(優先度)を決定するためのアルゴリズムを選択可能な項目である。本実施の形態では、「モニタ比較モード」が選択された場合について説明している。なお、「アクセス順モード」については、第2の実施の形態で説明し、「ピギーバックモード」については、第3の実施の形態で説明する。
モニタ確定のカウンタ値1814は、モニタ確定のカウンタ値を設定可能な項目である。優先付け閾値1815は、リオーダを行う対象を設定可能な項目である。例えば、優先付け閾値1815としてIOPH「100」が設定された場合、IOPH「100」を超過したページ331だけがリオーダの対象となる。
モニタ対象1816は、モニタの対象とするIOタイプ(Read / Write)を設定可能な項目である。モニタ対象1816によれば、アプリケーション351の特性に合わせてモニタの対象とするIOタイプを設定することができる。優先レベル1817は、自動での優先度付け制御の優先レベルを設定可能な項目である。
図18Bは、設定画面(GUI)の一例(仮想ボリューム設定画面1820)を示す図である。仮想ボリューム設定画面1820は、所定の装置(例えば、後述の管理ノード2220等)に出力される。
仮想ボリューム設定画面1820は、仮想ボリューム330毎の設定が行われる画面である。仮想ボリューム設定画面1820は、優先回復1821、開始オフセット1822、サイズ1823、および優先レベル1824の情報を設定可能に構成される。
優先回復1821は、当該仮想ボリューム330を優先的に回復させるか否かを設定可能な項目である。優先回復1821によれば、ユーザは、仮想ボリューム330単位で優先的に回復させることができる。
優先回復1821が「ON」である場合、当該仮想ボリューム330において優先的に回復させる領域(優先回復領域)の詳細設定として、開始オフセット1822、サイズ1823、および優先レベル1824が設定可能である。開始オフセット1822は、優先回復領域の開始アドレスを設定可能な項目である。サイズ1823は、優先回復領域のサイズを設定可能な項目である。優先レベル1824は、優先回復領域の優先レベルを設定可能な項目である。
優先回復領域については、ユーザは、追加ボタン1825により、任意の数だけ設定することができる。
仮想ボリューム設定画面1820による設定によれば、ストレージシステム101は、指定された仮想ボリューム330を優先的にリビルドすることができる。
更に、ストレージシステム101は、ユーザから指定された仮想ボリューム330の指定領域を優先的にリビルドすることを特徴とする。
更に、ストレージシステム101では、ユーザが任意の仮想ボリューム330の任意の領域に優先回復の属性を設定することができる。
更に、ストレージシステム101は、障害が発生している物理領域の回復の順序を決定するための優先レベルを複数有しており、優先レベルが高く設定された領域から順番にリビルドすることを特徴とする。
更に、ストレージシステム101では、ユーザが任意の仮想ボリューム330毎の任意の領域に優先回復の属性を設定でき、これらの設定に対して、任意の優先レベルを設定することができる。
更に、ストレージシステム101は、当該ストレージシステム101が自動で設定するリビルド処理にユーザが優先レベルを設定でき、当該ストレージシステム101が自動で設定する優先度とユーザが指定した優先度とを比較し、より優先度の高い領域からリビルドすることを特徴とする。
本実施の形態によれば、信頼性の高いストレージシステム101を提供することができる。
(2)第2の実施の形態
第1の実施の形態では、優先度決定アルゴリズム1813として、「モニタ比較モード」が選択されたケースについて説明したが、本実施の形態では、「アクセス順モード」が選択されたケースについて説明する。本実施の形態では、最近にアクセスした領域の同じ優先レベル帯において、最近にアクセスした領域の優先度が最も高くなるように並べ替えられる。このため、アクセスが1回でも生じれば、当該領域のエントリがリビルド順序キューの先頭に移動される。
本実施の形態では、第1の実施の形態と異なる構成(短周期モニタ確定処理および短周期リオーダ処理)について主に説明する。
図19Aは、短周期モニタ確定処理に係るフローチャートの一例を示す図である。
ステップS1901では、モニタ処理プログラム424は、リード処理要求またはライト処理要求によりアクセスされた物理領域が属するリビルド対象領域の情報(サイト番号、ノード番号、ドライブ番号、オフセット等)を取得する。
ステップS1902では、モニタ処理プログラム424は、図19Bに示す短周期リオーダ処理を行い、短周期モニタ確定処理を終了する。
図19Bは、短周期リオーダ処理に係るフローチャートの一例を示す図である。
ステップS1911では、モニタ処理プログラム424は、設定された優先レベル(対象優先レベル)に該当するリビルド順序キュー1022を取得する。
ステップS1912では、モニタ処理プログラム424は、リビルド順序キュー1022からリビルド対象領域に該当するエントリ(リビルド領域情報)を取得する。
ステップS1913では、モニタ処理プログラム424は、取得したエントリをリビルド順序キュー1022の先頭に移動し、短周期リオーダ処理を終了する。
本実施の形態によれば、アクセスの頻度にかかわりなく、アクセスのあった物理領域のリビルドの順序を最も高くすることができる。
(3)第3の実施の形態
第1の実施の形態では、優先度決定アルゴリズム1813として、「モニタ比較モード」が選択されたケースについて説明したが、本実施の形態では、「ピギーバックモード」が選択されたケースについて説明する。本実施の形態では、ホストI/O処理(リード処理またはライト処理)の延長でアクセスの生じた物理領域を含むリビルド対象領域が回復される。
本実施の形態では、第1の実施の形態と異なる構成(リード処理およびライト処理)について主に説明する。
本実施の形態のストレージシステム101では、優先度決定アルゴリズム1813として「ピギーバックモード」が選択されたとき、リード処理またはライト処理が本実施の形態のリード処理またはライト処理に切り替えられる。ただし、「ピギーバックモード」が動作する要件として、リビルドが開始済みであることが要件となる。リビルドの開始前は、第1の実施の形態のリード処理またはライト処理が行われる。
ストレージシステム101は、障害部位にアクセスする場合、アクセス領域がリビルド管理単位と一致しないとき、リビルド管理単位にアクセス領域を拡張してアクセスする。そして、ストレージシステム101は、アプリケーション351に応答後、アクセス時に修復データをリビルド先に書き込み、リビルド進捗情報を更新する。
図20は、リード処理に係るフローチャートの一例を示す図である。第1の実施の形態のリード処理と同じ内容については、同じ符号を付して説明を省略する。
ステップS2001では、リード処理プログラム421は、アクセス対象がリビルド管理単位と一致するか否かを判定する。
リード処理プログラム421は、アクセス対象がリビルド管理単位と一致しないと判定した場合、アクセス先のパラメタをリビルド管理単位まで拡張する(ステップS2002)。リード処理プログラム421は、ステップS1124で要求元にデータを応答する。この時、リード処理プログラム421は、リビルド管理単位まで拡張して読み出した修復データのうち、要求元が要求するデータブロックのみを応答する。
ステップS2003では、リード処理プログラム421は、リビルド先に修復データを書き込む。
ステップS2004では、リード処理プログラム421は、リビルド進捗情報1014を更新する。
図21は、ライト処理に係るフローチャートの一例を示す図である。第1の実施の形態のライト処理と同じ内容については、同じ符号を付して説明を省略する。
ステップS2101では、ライト処理プログラム422は、アクセス対象がリビルド管理単位と一致するか否かを判定する。
ライト処理プログラム422は、アクセス対象がリビルド管理単位と一致しないと判定した場合、アクセス先のパラメタをリビルド管理単位まで拡張する(ステップS2102)。
ステップS2103では、ライト処理プログラム422は、リビルド進捗情報1014を更新する。
本実施の形態によれば、リビルドを所定の順序で実行しつつ、ホストI/O処理の延長でリビルドを実行することで、リビルドを効率よく実行することができる。
(4)第4の実施の形態
本実施の形態では、リビルドの順序の再決定を共有型ストレージシステムに適用した場合について説明する。本実施の形態では、第1の実施の形態と異なる構成について主に説明する。
図22は、本実施の形態の計算機システム2200に係る構成の一例を示す図である。第1の実施の形態と同じ構成については、同じ符号を用いて説明を省略する。
計算機システム2200は、ストレージシステム2210と、管理ノード2220と、ホストノード350とを含んで構成される。ストレージシステム2210と、管理ノード2220と、ホストノード350とは、ネットワーク2230を介して通信可能に接続される。なお、ネットワーク2230は、SAN(Storage Area Network)、Ethernet等により構成される。
ストレージシステム2210は、プロセッサ211、メモリ212等を含む1以上のプロセッサパッケージ213、1以上のドライブ214、1以上のポート215、キャッシュメモリ2211、共有メモリ2212、および管理I/F2213を含んで構成される。各構成要素は、内部バス216を介して接続されている。
キャッシュメモリ2211は、ストレージシステム2210のI/O処理のスループット、レスポンス等を向上させるために、データを一時的なキャッシュデータとして格納するための高速アクセスが可能なメモリである。
共有メモリ2212は、プロセッサ211がリード命令、ライト命令等を処理し、ストレージの機能(仮想ボリューム330のコピー機能等)を実行する上で、必要な制御用の情報を格納するメモリである。また、共有メモリ2212は、複数のプロセッサパッケージ213間のプロセッサ211で共有している情報を格納するメモリである。
管理I/F2213は、ネットワーク2230に接続され、管理ノード2220と通信可能に接続されている。
ストレージシステム2210では、障害からデータを保護するために、複数のドライブ214が使用されてパリティグループ2214が組まれている。
管理ノード2220は、ネットワーク2230を介して、ストレージシステム2210の管理I/F2213またはポート215に接続される。ストレージ管理者が管理ノード2220を用いて、ストレージシステム2210に対して、ストレージシステム2210を運用する上で必要な各種設定、管理のための命令等を送信する。
図23は、リード処理に係るフローチャートの一例を示す図である。第1の実施の形態のリード処理と同じ内容については、同じ符号を付して説明を省略する。
ステップS2301では、リード処理プログラム421は、冗長化先のドライブ214から、修復に必要なデータとパリティとを読み出す。
ステップS2302では、リード処理プログラム421は、読み出したデータとパリティとから障害データを修復する(修復データを生成する)。
なお、本実施の形態のリード処理では、正常時でもキャッシュ制御が動作するため、障害状態かどうかに依存せずキャッシュ判定処理が実施される。これにより、リードのスループットおよび応答の性能を高めることができる。また、本ストレージシステム2210では、キャッシュ領域301としてキャッシュメモリ2211あるいはデータを格納するドライブ214よりも高速等ライブ(図示は省略)が使用される。
図24Aは、フロントエンドライト処理に係るフローチャートの一例を示す図である。第1の実施の形態のライト内容と同じ処理については、同じ符号を付して説明を省略する。
フロントエンドライト処理では、ステップS1201~ステップS1204、ステップS1218およびステップS1222の処理が行われ、書き込むデータがキャッシュメモリ2211に登録され、要求元に応答される。また、ステップS2401では、ライト処理プログラム422は、ライト対象のページ331に対して長期モニタ更新処理を行うようにキャッシュ処理プログラム423に指示し、フロントエンドライト処理を終了する。
図24Bは、バックエンドライト処理に係るフローチャートの一例を示す図である。バックエンドライト処理は、ドライブ214に未反映のデータがキャッシュメモリ2211上にある場合に実行され、未反映のデータがドライブ214に書き込まれる。
ステップS2411では、ライト処理プログラム422は、キャッシュメモリ2211に未反映のデータが存在するか否かを判定する。ライト処理プログラム422は、キャッシュメモリ2211に未反映のデータが存在すると判定した場合、ステップS2412に処理を移し、キャッシュメモリ2211に未反映のデータが存在しないと判定した場合、バックエンドライト処理を終了する。
ステップS2412では、ライト処理プログラム422は、排他取得を行う。
ステップS2413では、ライト処理プログラム422は、書込み前のデータ(旧データ)を読込む(より具体的には、旧データについて図11に示すリード処理が行われる)。
ステップS2414では、ライト処理プログラム422は、中間データを生成する。
ステップS2415では、ライト処理プログラム422は、排他取得を行う。
ステップS2416では、ライト処理プログラム422は、パリティが格納されている物理領域(パリティ領域)が障害状態であり、かつ、リビルドが実行前であるか否かを判定する。ライト処理プログラム422は、パリティ領域が障害状態であり、かつ、リビルドが実行前であると判定した場合、ステップS2420に処理を移し、パリティ領域が障害状態でない、または、リビルドが実行前でないと判定した場合、ステップS2417に処理を移す。
ステップS2417では、ライト処理プログラム422は、ドライブ214から旧パリティを読み出す。
ステップS2418では、ライト処理プログラム422は、中間データと旧パリティとから新パリティを計算する。
ステップS2419では、ライト処理プログラム422は、ドライブ214に新パリティを書き込む。
ステップS2420では、ライト処理プログラム422は、排他解放を行う。
ステップS2421では、ライト処理プログラム422は、データが格納されている物理領域(データ領域)が障害状態であり、かつ、リビルドが実行前であるか否かを判定する。ライト処理プログラム422は、データ領域が障害状態であり、かつ、リビルドが実行前であると判定した場合、ステップS2423に処理を移し、データ領域が障害状態でない、または、リビルドが実行前でないと判定した場合、ステップS2422に処理を移す。
ステップS2422では、ライト処理プログラム422は、ドライブ214に新データを書き込む。
ステップS2423では、ライト処理プログラム422は、排他解放を行い、バックエンドライト処理を終了する。
本実施の形態によれば、物理領域の状態に依存することなく、キャッシュ制御が実施されるので、リードのスループットおよび応答の性能を高めることができる。
(5)他の実施の形態
なお、上述の実施の形態においては、本発明をストレージシステムに適用するようにした場合について述べたが、本発明はこれに限らず、この他種々のシステム、装置、方法、プログラム、プログラムを記録する記録媒体に広く適用することができる。
また、上述の実施の形態においては、ステップS1625では、リビルド対象領域を対象として並べ替える場合について述べたが、本発明はこれに限らず、ステップS1624で取得されたリビルド順序キュー1022の全てのエントリを対象として並べ替えるようにしてもよい。この場合、短周期モニタ確定値と長周期モニタ確定値とを比較して高い方の値をエントリの頻度としてもよい。
また、上述の実施の形態においては、モニタ処理プログラム424がアクセスの監視をする単位をページ331とする場合について述べたが、本発明はこれに限らず、ノード210単位、ドライブ214単位、物理チャンク311単位、リビルド管理単位、アクセス要求に対応するデータのデータ単位等、その他の単位で監視するようにしてもよい。
また、上述の実施の形態において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部または一部が1つのテーブルであってもよい。
また、上述の実施の形態において、説明の便宜上、XXテーブルを用いて各種のデータを説明したが、データ構造は限定されるものではなく、XX情報などと表現してもよい。
また、上記の説明において、各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記憶装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
上述した実施の形態は、例えば、以下の特徴的な構成を有する。
データを記憶する複数の記憶デバイス(例えば、ドライブ214)と、上記記憶デバイスに入出力するデータを処理するコントローラ(例えば、プロセッサ211、プロセッサパッケージ213)と、を備え、上記コントローラは、上記記憶デバイスに障害が発生した場合に、上記障害が発生した記憶デバイスに記憶したデータを、他の複数の記憶デバイスに記憶したデータ及び冗長データに基づいて復元するリビルドを行うストレージシステム(例えば、ストレージシステム101)において、上記コントローラは、アクセス要求(例えば、リード処理要求、ライト処理要求等)があったデータ(例えば、ページ331)を修復して、アクセス要求元に応答するとともに、修復したデータを格納し、アクセス要求のないデータについて、優先度に基づく順序で、リビルド管理単位の記憶領域のリビルドを行い、上記リビルドを行う優先度は、第1の期間でのアクセス頻度(例えば、アクセス頻度確定値915)と、上記第1の期間より短い第2の期間でのアクセス頻度(例えば、アクセス頻度確定値926)と、に基づいて変更するようにしてもよい。
上記構成では、リビルドを行う優先度は、第1の期間でのアクセス頻度と、第1の期間より短い第2の期間でのアクセス頻度と、に基づいて変更されるので、例えば、突発的なI/Oの変化に応じてリビルドの順序を変更してリビルドを実行することができる。このように、リビルドの順序を変更することで、リビルドの順序が適切でないことによりストレージシステムの性能が低下してしまう事態を回避することができる。
上記第1の期間は、上記リビルド開始前の期間を含み(例えば、アクセス先が障害状態である場合もない場合も長周期モニタ更新処理が行われてアクセスカウンタが更新され)、上記第2の期間は、上記リビルド開始後の期間であってもよい(例えば、アクセス先が障害状態である場合に短周期モニタ更新処理が行われてアクセスカウンタが更新される)。
上記第1の期間でのアクセス頻度に基づいて、上記リビルドの順序を決定し、上記第2に期間のアクセス頻度が所定の値を超えた場合に、上記リビルドの順序を変更するようにしてもよい(例えば、リビルド順序初期化処理において、長周期モニタ確定処理(長周期リオーダ処理)が行われ、障害があるときは、短周期モニタ確定処理(短周期リオーダ処理)が行われる)。
上記コントローラは、上記修復したデータをキャッシュ領域(例えば、キャッシュ領域301)に格納し、アクセス要求を受けた場合に、キャッシュ領域のデータを検索し、データが見つからなかった場合に、上記データの修復を行い、上記第2の期間のアクセス頻度は、上記キャッシュ領域のデータへのアクセスを監視したものであってもよい。
上記構成によれば、アクセス要求を受けた場合に、キャッシュ領域のデータを検索するので、例えば、リードのスループットおよび応答の性能を高めることができる。
上記コントローラは、アクセス要求を受けた場合、アクセス要求を受けたデータとともに、当該データと同じリビルド管理単位の記憶領域のデータを修復するようにしてもよい(例えば、図20に示すリード処理、図21に示すライト処理)。
上記構成では、アクセス要求を受けた場合、アクセス要求を受けたデータとともに、当該データと同じリビルド管理単位の記憶領域のデータが修復されるので、リビルドを効率よく実行することができる。また、上記構成では、リビルド管理単位の記憶領域のデータが修復され、デバイスに書き込む回数が減らされるので、例えば、ストレージシステムの性能が低下してしまう事態を回避することができる。
上記記憶デバイスと、上記コントローラを有し、互いにネットワーク(例えば、ネットワーク202、ネットワーク220)で接続されたノード(例えば、ノード210)を備え、上記データを修復するための複数のデータ及び冗長データは、少なくとも二つ以上のノードの記憶デバイスに格納され、上記記憶デバイスの障害は、ノードの障害であり、上記ノードの障害が発生した場合に、障害が発生していないノードのコントローラが、複数のノードからデータ及び冗長データを集めてデータ修復するようにしてもよい。
また上述した構成については、本発明の要旨を超えない範囲において、適宜に、変更したり、組み替えたり、組み合わせたり、省略したりしてもよい。