(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024124097
(43)【公開日】2024-09-12
(54)【発明の名称】ストレージシステム及びデータ保護方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20240905BHJP
G06F 11/20 20060101ALI20240905BHJP
G06F 12/0866 20160101ALI20240905BHJP
G06F 12/0868 20160101ALI20240905BHJP
【FI】
G06F3/06 304E
G06F3/06 301Y
G06F3/06 302A
G06F11/20 669
G06F12/0866 100
G06F12/0868 105
【審査請求】有
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2023032035
(22)【出願日】2023-03-02
(71)【出願人】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】杉本 定広
(72)【発明者】
【氏名】下薗 紀夫
(72)【発明者】
【氏名】吉原 朋宏
(72)【発明者】
【氏名】伊藤 晋太郎
【テーマコード(参考)】
5B034
5B205
【Fターム(参考)】
5B034BB16
5B034CC06
5B205MM11
(57)【要約】
【課題】高性能と高信頼を兼ね備えたストレージシステム及びデータ保護方法を実現する。
【解決手段】不揮発性の記憶デバイスと、記憶デバイスへの読み書きを制御する複数のストレージコントローラと、を備えたストレージシステムであって、複数のストレージコントローラは、それぞれがプロセッサとメモリとを有し、ストレージコントローラは、記憶デバイスに対するホストからのライト要求をメモリにキャッシュデータとして格納し、第1のメモリ保護方式又は第2のメモリ保護方式でキャッシュデータを保護した後に、ホストに対してライト完了応答を返し、当該ライト応答完了後にキャッシュデータを記憶ドライブにデステージするものであり、ストレージコントローラは、他のストレージコントローラの動作状態に応じて第1のメモリ保護方式と第2のメモリ保護方式のいずれを用いるかを切り替えることを特徴とする。
【選択図】
図3
【特許請求の範囲】
【請求項1】
不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きを制御する複数のストレージコントローラと、を備えたストレージシステムであって、
前記記憶デバイスは、ユーザデータ格納用ドライブであり、
前記複数のストレージコントローラは、それぞれがプロセッサとメモリとを有し、
前記ストレージコントローラは、前記メモリ上のデータを対応するストレージコントローラのメモリ上に複製するメモリ複製方式の第1のメモリ保護方式と、前記メモリ上のデータの更新に関するログを生成して不揮発性の媒体に書き出すログ退避方式の第2のメモリ保護方式とを備え、
前記ストレージコントローラは、前記記憶デバイスに対するホストからのライト要求を前記メモリにキャッシュデータとして格納し、前記第1のメモリ保護方式又は第2のメモリ保護方式で前記キャッシュデータを保護した後に、前記ホストに対してライト完了応答を返し、当該ライト応答完了後に前記キャッシュデータを前記記憶ドライブにデステージするものであり、
前記ストレージコントローラは、他のストレージコントローラの動作状態に応じて前記第1のメモリ保護方式と前記第2のメモリ保護方式のいずれを用いるかを切り替える
ことを特徴とするストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記ストレージコントローラは他のストレージコントローラに対応付けられて冗長構成を成し、前記第1のメモリ保護方式として用い、前記対応するストレージコントローラが閉塞している場合には前記第2のメモリ保護方式として用いることを特徴とするストレージシステム。
【請求項3】
請求項2に記載のストレージシステムであって、
前記ログの書き出し先である前記不揮発性の媒体を、前記ストレージコントローラの内部に備えたことを特徴とするストレージシステム。
【請求項4】
請求項2に記載のストレージシステムであって、
前記ログの書き出し先である前記不揮発性の媒体として、前記不揮発性の記憶デバイスの一部を用いることを特徴とするストレージシステム。
【請求項5】
請求項1に記載のストレージシステムであって、
前記デステージでは、前記ストレージシステムが提供するストレージ機能を用いて、前記データを前記記憶ドライブの最終格納領域に格納することを特徴とするストレージシステム。
【請求項6】
請求項2に記載のストレージシステムであって、
前記ストレージコントローラは、
前記対応するストレージコントローラの閉塞を検知した場合に前記メモリ複製方式から前記ログ退避方式への動作切替えを行ない、動作切替え前のキャッシュデータである切替前キャッシュデータを前記記憶デバイスに優先的にデステージし、動作切替え後のキャッシュデータである切替後キャッシュデータは前記切替前キャッシュデータを全てデステージした後にデステージし、
前記対応するストレージコントローラの閉塞からの回復を検知した場合に、前記メモリ上のデータを前記対応するストレージコントローラのメモリ上に複製し、前記ログを削除して、前記ログ退避方式から前記メモリ複製方式への動作切替えを行なうことを特徴とするストレージシステム。
【請求項7】
不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きを制御する複数のストレージコントローラと、を備えたストレージシステムのデータ保護方法であって、
前記記憶デバイスは、ユーザデータ格納用ドライブであり、
前記複数のストレージコントローラは、それぞれがプロセッサとメモリとを有し、
前記ストレージコントローラは、前記メモリ上のデータを対応するストレージコントローラのメモリ上に複製するメモリ複製方式の第1のメモリ保護方式と、前記メモリ上のデータの更新に関するログを生成して不揮発性の媒体に書き出すログ退避方式の第2のメモリ保護方式とを備え、
前記ストレージコントローラが、前記記憶デバイスに対するホストからのライト要求を前記メモリにキャッシュデータとして格納するステップと、
前記ストレージコントローラが、前記第1のメモリ保護方式又は第2のメモリ保護方式で前記キャッシュデータを保護するステップと、
前記ストレージコントローラが、前記ホストに対してライト完了応答を返すステップと、
前記ストレージコントローラが、前記ライト応答完了後に前記キャッシュデータを前記記憶ドライブにデステージするステップとを含み、
前記ストレージコントローラが、他のストレージコントローラの動作状態に応じて前記第1のメモリ保護方式と前記第2のメモリ保護方式のいずれを用いるかを切り替えるステップをさらに含む
ことを特徴とするデータ保護方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム及びデータ保護方法に関する。
【背景技術】
【0002】
ストレージシステムは、ホストから受信したライトデータを、キャッシュメモリ(以下、キャッシュ)を介してドライブに記録する。すなわち、ホストから書き込みを要求されたライトデータは、一旦キャッシュに保持された後、所定のドライブに書き込まれる。キャッシュからドライブにデータを書き込む方式としては、大きく2種類に分けることができる。
【0003】
一つの方式は、例えばライトスルー方式と呼ばれるものであり、ライト要求に対する応答をホストに返す前に、ライトデータをドライブに書き込む方式である。もう一つの方式は、例えばライトバック方式あるいはライトアフター方式と呼ばれるものであり、ライトデータをキャッシュに格納した時点でライト要求に対する応答をホストに返す方式である。ライトバック方式の場合、ライトデータのドライブへの書き込みは、ライトデータをキャッシュに格納した後に所定のタイミングで行われる。
【0004】
したがって、ライトバック方式の場合はドライブへの書き込み完了を待つことなくホストへ応答を返すことができるため、ライトスルー方式に比べて応答時間を短縮することができる。一方で、ライトバック方式の場合はホストからのライトが完了したデータが一時的にキャッシュ上にのみ存在することになる。そのためキャッシュ上のライトデータを適切に保護する必要があり、例えばストレージシステムは複数のコントローラで冗長構成をとり、あるコントローラで受信したライトデータを他のコントローラのキャッシュにコピーすることでライトデータの冗長性を確保する。また、停電や電源の故障に備えるため、例えばキャッシュはバッテリーで保護される。
【0005】
ストレージシステムには高信頼と高性能の両立が求められる。そのためにストレージシステムは上記のライトスルー方式やライトバック方式を状況に応じて使い分けることができ、特許文献1に書かれているように、キャッシュが適切に保護できる状態においてはライトバック方式で動作し、キャッシュが保護できない状況になったらライトスルー方式に切り替える、といった使い分け方法が知られている。こうすることで、通常時はライトバック方式により高速に応答を返すことができ、また例えばコントローラが故障してキャッシュの冗長性が失われた場合でもライトスルー方式により信頼性を確保することができる。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし上記の従来方式では、コントローラ故障等によりライトスルー方式で動作する場合の性能が、ライトバック方式で動作する通常時の性能に比べて大きく低下するのが課題である。特に近年のストレージシステムではRAID6方式などのデータ保護方式が一般化しており、ライトデータをドライブに格納するために、複数のデータ(旧データおよび例えばパリティデータなどの複数の保護データ)をドライブから読み出し、パリティデータを更新したうえで、ライトデータおよび複数のパリティデータをドライブに書き込む必要が生じる。この複数回のドライブアクセスを待つことにより、ライトの応答時間はライトバック方式に比べて大きく悪化する。
【0008】
本発明は、ストレージシステムにおいて高い信頼性を確保しつつ、コントローラ故障などによりキャッシュの冗長性が失われた際の性能を、ライトスルー方式に比べて高めることを課題とする。
【課題を解決するための手段】
【0009】
上記課題を解決するために、本発明に係るストレージシステムは、不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きを制御する複数のストレージコントローラと、を備えたストレージシステムであって、前記記憶デバイスは、ユーザデータ格納用ドライブであり、前記複数のストレージコントローラは、それぞれがプロセッサとメモリとを有し、前記ストレージコントローラは、前記メモリ上のデータを対応するストレージコントローラのメモリ上に複製するメモリ複製方式の第1のメモリ保護方式と、前記メモリ上のデータの更新に関するログを生成して不揮発性の媒体に書き出すログ退避方式の第2のメモリ保護方式とを備え、前記ストレージコントローラは、前記記憶デバイスに対するホストからのライト要求を前記メモリにキャッシュデータとして格納し、前記第1のメモリ保護方式又は第2のメモリ保護方式で前記キャッシュデータを保護した後に、前記ホストに対してライト完了応答を返し、当該ライト応答完了後に前記キャッシュデータを前記記憶ドライブにデステージするものであり、前記ストレージコントローラは、他のストレージコントローラの動作状態に応じて前記第1のメモリ保護方式と前記第2のメモリ保護方式のいずれを用いるかを切り替えることを特徴とする。
また、本発明に係るデータ保護方法は、不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きを制御する複数のストレージコントローラと、を備えたストレージシステムのデータ保護方法であって、前記記憶デバイスは、ユーザデータ格納用ドライブであり、前記複数のストレージコントローラは、それぞれがプロセッサとメモリとを有し、前記ストレージコントローラは、前記メモリ上のデータを対応するストレージコントローラのメモリ上に複製するメモリ複製方式の第1のメモリ保護方式と、前記メモリ上のデータの更新に関するログを生成して不揮発性の媒体に書き出すログ退避方式の第2のメモリ保護方式とを備え、前記ストレージコントローラが、前記記憶デバイスに対するホストからのライト要求を前記メモリにキャッシュデータとして格納するステップと、前記ストレージコントローラが、前記第1のメモリ保護方式又は第2のメモリ保護方式で前記キャッシュデータを保護するステップと、前記ストレージコントローラが、前記ホストに対してライト完了応答を返すステップと、前記ストレージコントローラが、前記ライト応答完了後に前記キャッシュデータを前記記憶ドライブにデステージするステップとを含み、前記ストレージコントローラが、他のストレージコントローラの動作状態に応じて前記第1のメモリ保護方式と前記第2のメモリ保護方式のいずれを用いるかを切り替えるステップをさらに含むことを特徴とする。
【発明の効果】
【0010】
本発明によれば、高性能と高信頼を兼ね備えたストレージシステム及びデータ保護方法を実現することができる。
【図面の簡単な説明】
【0011】
【
図2】両コントローラ正常時のライト動作の概要を示す図
【
図3】片コントローラ閉塞時のライト動作の概要を示す図
【
図5】ストレージコントローラのメモリの内容を示す図
【
図7】片コントローラ故障時のメモリ保護方式切替え処理のフローチャート
【
図8】コントローラ回復時のメモリ保護方式切替え処理のフローチャート
【
図10】デステージ対象ダーティ選択処理のフローチャート
【
図12】キャッシュデータ更新処理のフローチャート
【発明を実施するための形態】
【0012】
以下、図面に基づいて、本発明の実施の形態を説明する。実施の形態は、例えば、複数のストレージコントローラを備えるストレージシステムに関するものである。
【実施例0013】
図1は本発明の本実施例に係るストレージシステムの構成例を示す図である。本実施例のストレージシステム100は、複数のコントローラ(Controller)103と、記憶デバイスであるドライブ(Drive)110を含む。コントローラ103は、データを読み書きする対象となるボリュームをホストコンピュータ(Host Computer。以下、ホストと表記)に対して提供する機能を持つ装置である。コントローラ103はCPU106と、メモリ105、メモリバックアップドライブ(Memory Backup Drive)107、フロントエンドインターフェース(FE I/F)104、バックエンドインターフェース(BE I/F)108を含む。ドライブは例えばフラッシュメモリを記憶媒体とするSSD(Solid State Drive)や、磁気ディスクを記憶媒体とするHDD(Hard Disk Drive)などである。メモリは例えばDRAMなどの半導体メモリである。メモリバックアップドライブは、例えばSSDなどのドライブであり、例えば外部電源喪失時などにメモリの内容を退避するために用いられる。FE I/Fは例えばFibre Channel HBA(Host Bus Adapter)あるいはNIC(Network Interface Controller)である。BE I/Fは例えばSAS HBAあるいはPCI Express(以下、PCIe)アダプターまたはNICである。各コントローラとドライブは例えばスイッチ(BE Switch)109により接続される。また、複数のコントローラのCPUどうしは例えばPCIeなどのインターコネクトで接続される。なおCPUとCPUとは例えばPCIeスイッチを介して接続してもよい。ストレージシステムは例えばFibre ChannelあるいはEthernetなどのストレージエリアネットワーク(SAN)101に接続され、またホスト102もSAN101に接続される。SAN101にはスイッチなどを含んでよい。また複数台のホストがSAN101に接続されてもよい。
【0014】
図2は両コントローラ正常時のライト動作の概要を示す図である。本実施形態のコントローラ103のCPU106は、ホスト102からのライト要求を受けて、ホストからデータを受信し、そのデータ201を自コントローラ内のメモリ105および他コントローラのメモリ105に書き込む。またCPU106はメモリ内の制御情報(Metadata)200を更新する。それからCPU106はホスト102にライト完了応答を返す。また、図では省略してあるが、CPU106はメモリ上に書かれたライトデータを所定のタイミングでドライブに書き込む。
このライト動作においては、メモリ上のライトデータおよび制御情報をコントローラ間で二重化することにより、コントローラ故障に備えている。
【0015】
図3は、本実施例のストレージシステムの片コントローラ閉塞時のライト動作概要を示す図である。本実施形態のコントローラ103のCPU106は、ホスト102からのライト要求を受けて、ホストからデータを受信し、そのデータ201を自コントローラ内のメモリ105に書き込む。またCPU106はメモリ内の制御情報(Metadata)200を更新する。さらにCPU106はデータの更新内容をログとしてメモリバックアップドライブ107に書き込み、また制御情報の更新内容をログとしてメモリバックアップドライブ107に書き込む(ログ退避)。それからCPU106はホスト102にライト完了応答を返す。また、図では省略してあるが、CPU106はメモリ上に書かれたライトデータを所定のタイミングでドライブに書き込む(デステージ)。なお本実施例においては、データや制御情報のログはメモリバックアップドライブ107に格納するものとして説明するが、これらのログは例えばユーザデータ格納用ドライブに記録してもよいし、別のログ格納用ドライブに記録してもよい。
【0016】
このライト動作においては、メモリ上のライトデータおよび制御情報をログとしてメモリバックアップドライブに書き込むことにより、万一残りのコントローラが故障した場合に備えている。もし残りのコントローラが故障した場合には一旦ストレージシステムが停止する(システムダウン)ことになるが、コントローラを保守交換したうえでメモリバックアップドライブに書かれたログを用いてメモリ上のライトデータおよび制御情報を復旧することにより、データロストを防ぐことができる。
以降の説明において混同を防ぐため、ここでデステージとログ退避の違いを明らかにしておく。デステージとは、キャッシュ上のダーティデータを最終記憶媒体であるユーザデータ格納用ドライブの最終格納領域に書き込むことである。ユーザデータ格納用ドライブには、ストレージシステム(主にコントローラ)が提供するストレージ機能により、データ保護や容量効率やI/O性能などを強化して格納される。例えばデータ保護では、RAID6などの方式により保護され、その場合デステージ処理においてパリティデータが生成され、パリティデータもまたドライブに書き込まれる。デステージが完了したデータは、メモリ上とドライブ上のデータが一致した状態(クリーン)になるため、当該データはメモリ上から失われても差し支えない。
一方でログ退避とは、万一のコントローラ故障に備えてメモリ上のデータや制御情報の更新内容をメモリバックアップドライブなど不揮発性の記憶媒体(ドライブ)へ一時的に書き込むことを指す。ログとしてドライブに書き込まれたダーティデータは、先述のとおり、当該ダーティデータのデステージが完了すると、メモリ上から失われても問題なくなるため、当該ログはデステージが完了した時点でドライブから削除できる。
【0017】
なお、本実施例においてメモリバックアップドライブ107をログ格納用とする場合、両コントローラ正常時にメモリの内容を退避するために割当ててある領域を、片コントローラ閉塞時にはログを格納する領域として用いてもよい。こうすることで、ログ格納用に追加のドライブ・追加の記憶容量を必要としないため、ユーザデータ用ドライブにログを格納する場合やログ格納用ドライブを別途搭載する場合に比べて、コスト面で有利となる。
【0018】
ところで、キャッシュデータの更新内容を含むログ(キャッシュデータログ)は、一般的にホストから書き込まれるデータが例えば512Byteや4KiBなどのブロック単位で扱われるため、比較的粒度が大きいのに対して、制御情報はByte単位なので制御情報の更新内容を含むログ(制御情報ログ)は比較的粒度が小さくなる。また、メモリ全体に占めるキャッシュデータ領域の割合は比較的大きい。そこで、制御情報ログに関しては、定期的に制御情報を格納したメモリ領域全体(ベースイメージ)をドライブに書き込み、それ以前に書き込まれたログを全て破棄して、当該ログが書かれていた領域を空き領域として回収する。この方式をベースイメージ退避方式と呼ぶ。一方でキャッシュデータログに関しては、ログのうち最新ではない不要なログを識別し、不要なログを破棄(無効化)する。こうするとログ領域に飛び飛びの空き領域ができるようになるため、所定のタイミングで有効なログのみを別領域に前詰めで書き移すことにより、連続した空き領域を回収する。この方式はガベージコレクション方式と呼ぶ。これらの両方式を使い分けることにより、ベースイメージ退避用の容量消費を抑えつつ、空き領域管理のための管理情報を小さくでき、かつ空き領域回収のためのオーバヘッドを小さくすることができる。
【0019】
図4は、本実施例のストレージシステムにおけるダーティデータの区別の概要を示す図である。
ストレージシステム運用中に片方のコントローラが故障した場合、ドライブ未格納のライトデータ(ダーティデータ)がメモリ上に残った状態で更に残り一つのコントローラも故障してしまうと、このダーティデータは失われてしまう。これはつまりストレージシステムに書き込みが完了した(ライト完了応答済みの)データが失われることになり、高信頼が求められるストレージシステムにおいて重大な問題となる。したがって、片方のコントローラが故障した場合には、メモリ上のダーティデータをなるべく短い時間で記憶デバイスに書き込むことが、ストレージシステムとしての信頼性を高めるために重要である。しかし、ダーティデータをログとして格納する記憶デバイスの性能がボトルネックとなって、ダーティデータの書き込みに長い時間を要する可能性がある。これは特に、ログを少数の記憶デバイスに格納するような構成のストレージシステムにおいて課題となりうる。
そこで、本発明に係るストレージシステムでは、片方のコントローラが故障した時点でメモリ上に存在するダーティデータ(既存ダーティ)と、片方のコントローラが故障した後にできたダーティデータ(新規ダーティ)とを区別し、新規ダーティはログ格納用記憶デバイスにログとして書き込む一方で、既存ダーティはユーザデータ用ドライブに書き込む。こうすることでログ格納用デバイスのボトルネックを回避ないしは緩和して、ダーティデータの退避に要する時間を短縮し、データロストの発生確率を減らして信頼性を高めることができる。
具体的には、本実施例では、ログ保護対象ダーティキュー400とログ保護対象外ダーティキュー401の2種類のダーティキューをメモリ内に設け、新規ダーティをログ保護対象ダーティキューに、既存ダーティをログ保護対象外ダーティキューに接続する。
【0020】
ログ保護対象ダーティキューに接続されるダーティデータは、ホスト応答前にログとしてメモリバックアップドライブ107に格納されるので、ダーティデータをユーザデータ用ドライブに書き込むデステージ処理においては、ログ保護対象外ダーティキューに接続されたダーティデータを優先的にデステージ対象として選択し、ドライブに書き込む。このデステージ処理の内容はフローチャートを用いて後述する。
【0021】
なお本実施例では2種類のダーティキューを用いて各ダーティデータを区別する方式を例示したが、ダーティキューの種別はもっと多くてもよい。また、ダーティデータの区別方法は複数のダーティキューを用いる方式に限らず、例えばリストなどのデータ構造を用いて管理してもよいし、キャッシュの制御情報内にフラグなどの識別情報を持つことでダーティデータを区別する方式などを用いてもよい。
【0022】
図5は本実施例のストレージシステムのメモリの内容を示す図である。
メモリ105には、ストレージ制御プログラム500と、制御情報200、キャッシュデータ501、制御情報ログバッファ502、キャッシュデータログバッファ503が含まれる。
【0023】
ストレージ制御プログラム500は、ストレージシステムを制御するプログラムであり、CPU106で実行される。後述するライト処理などの各処理はこのストレージ制御プログラムの内容に含まれる。
【0024】
制御情報200は、ストレージ制御プログラム500が、プログラムの実行を制御するために用いるデータである。制御情報200には、例えばキャッシュデータのアドレスとボリューム内の論理アドレス(LBA)との対応関係やキャッシュデータの状態(ダーティ・クリーン)などを含むキャッシュ制御情報や、ドライブの種別・容量やRAIDグループの種別・構成などを含む構成情報や、各コントローラの状態(正常・閉塞など)等が含まれる。先に述べたダーティキューもこの制御情報200のうちキャッシュ制御情報に属する。
【0025】
ところで、片コントローラ閉塞時にメモリ内の制御情報やキャッシュデータを更新する際に、その内容に係るログを必ずしも一つ一つ個別にドライブ(メモリバックアップドライブ107)へ書き込まなくてもよく、ドライブ(メモリバックアップドライブ107)上の連続した領域に纏めて書き込んでもよい。ただし、例えばホストにライト完了応答を返す前には、当該ライトの処理によって更新されたキャッシュデータおよび制御情報がドライブ(メモリバックアップドライブ107)に書き込まれるようにすることで、ライト完了したデータがコントローラ故障によって失われることを防ぐ。制御情報ログバッファ502およびキャッシュデータログバッファ503は、このようにログをメモリ上に一時的に溜めておくためのバッファであり、それぞれ制御情報ログ、キャッシュデータログが一時的に格納される。
【0026】
図6は、本実施例のストレージシステムにおけるライト処理のフローチャートであり、CPU106がこの処理を実行する。
CPU106はまずキャッシュ割り当てを行う(600)。キャッシュ割り当てとは、メモリのうちキャッシュデータを格納する領域の一部を、I/O処理などのために割り当てることをいう。ここではホストから送信されてくるライトデータを格納するために、当該データを格納するのに十分なサイズの領域を割り当てる。
【0027】
続いてCPU106はキャッシュデータ更新処理を行う(601)。キャッシュデータ更新処理の内容については後で述べるが、端的にいうと、ホストからデータを受信して、先ほど割り当てたキャッシュ領域に当該データを格納する処理である。
【0028】
次にCPU106は、もう片方のコントローラが閉塞しているか否かの判定を行う(602)。もし閉塞している場合(Yes)はキャッシュデータ二重化処理をスキップし、閉塞していない場合(No)、すなわち両方のコントローラが動作している場合にはキャッシュデータ二重化を行う(603)。キャッシュデータ二重化とは、ホストから受信したデータをもう片方のコントローラのメモリにコピーする処理であり、例えばCPU106に内蔵されたDMAを用いて、自コントローラのメモリから他コントローラのメモリへデータをコピーする。
【0029】
次にCPU106は制御情報更新処理を行う(604)。制御情報更新処理の内容は後で述べる。
【0030】
次にCPU106は、ログ退避モードか否かの判定を行う(605)。ログ退避モードの場合(Yes)はログ退避処理を行い(606)、ログ退避モードでない場合(No)はログ退避処理をスキップする。ログ退避処理の内容については後で述べる。
以上の処理を終えたCPU106は、ライト処理が完了した旨をホストへ応答する(607)。以上でライト処理が完了となる。
【0031】
図7は、本実施例のストレージシステムにおける片コントローラ故障時のメモリ保護方式切替え処理のフローチャートである。この処理は、他のコントローラが故障等により閉塞したことを検知したときに、メモリ保護方式をコントローラ間の二重化からログによる保護に切り替えるために実行される。
【0032】
まずCPU106は、システム内に残った正常なコントローラが1つ(すなわち自コントローラのみ)であるか否かを判定する(700)。残りのコントローラの数が1つ(Yes)の場合はステップ701に進み、1つでない(No)の場合は残りのステップを全てスキップして本処理を終了する。
【0033】
次にCPU106は緊急デステージ中フラグをONにセットする(701)。これによって、後述のデステージ処理の動作が変更されることになる。また、緊急デステージ中フラグがONの間、なるべく早くダーティデータをドライブに格納するために、CPU106はデステージ処理の実行頻度を高める。
【0034】
次にCPU106はログ退避モードフラグをONにセットする(702)。これによって、CPU106はメモリを更新する際にログを作成するようになる。
最後にCPU106はベースイメージ退避処理を実行する(703)。その内容は後で述べる。以上で片コントローラ故障時のメモリ保護方式切替え処理が完了となる。
【0035】
図8は、本実施例のストレージシステムにおけるコントローラ回復時のメモリ保護方式切替え処理のフローチャートである。この処理は、他のコントローラが保守交換などにより回復して正常に動作できる状態になったことを検出したときに、メモリ保護方式をログによる保護からコントローラ間の二重化に切り替える(戻す)ために実行される。
【0036】
まずCPU106は、制御情報二重化処理を行う(800)。これはメモリ上の制御情報を、回復したコントローラのメモリにコピーする処理である。全ての制御情報をコピーし終えたら完了となる。
【0037】
次にCPU106は、ダーティデータの二重化処理を行う(801)。これはメモリ上のダーティデータを、回復したコントローラのメモリにコピーする処理である。また、各ダーティデータをコピーするたびに、当該ダーティデータに関するキャッシュ制御情報を更新する。全てのダーティデータをコピーし終えたら完了となる。なお、本実施例のようにダーティデータを他のコントローラにコピーする代わりに、ドライブにデステージすることでダーティデータを保護する方式を採ってもよい。
【0038】
次にCPU106は、ログ退避モードフラグをOFFにセットする(802)。こうすることで、以降のメモリ更新はログとしてドライブに退避されなくなる。
【0039】
最後にCPU106は、ログ削除処理を行う(803)。これは、ログ格納用ドライブ(メモリバックアップドライブ107)に書かれたログおよびログバッファ上のログを全て削除する処理である。例えばドライブやメモリに格納されたログをオールゼロなどの無効なデータで全て上書きしてもよいし、全ログヘッダの有効フラグをOFFにすることで全てのログを無効化してもよい。
以上でコントローラ回復時のメモリ保護方式切替え処理が完了となる。
【0040】
図9は、本実施例のストレージシステムにおけるデステージ処理のフローチャートである。
このデステージ処理は、メモリ上にダーティデータが存在する場合に、所定のタイミングで起動される。デステージ処理の起動頻度はダーティデータの量や、ストレージシステムの状態によって調整される。例えばダーティデータが多くなるほど起動頻度は高くなる。また、片方のコントローラが閉塞しており、ドライブに格納されていないログ保護対象外のダーティデータが存在する場合には、デステージ処理は特に高頻度で起動される。
【0041】
デステージ処理において、CPU106はまずデステージ対象データ選択900を行う。その処理内容は後で述べる。デステージ対象データが決まったら、次にCPU106は全ストライプライトを実行できるか否かを判定する(901)。これは例えば、RAID5やRAID6などのデータ保護方式における1ストライプ分のデータが全てキャッシュ上に存在するか否かの判定である。1ストライプ分のデータがキャッシュ上に揃っている場合は、旧データや旧パリティデータをドライブから読みだすことなく、新しいパリティデータを生成することができる。したがって、全ストライプライト実行可能でない場合(No)は、CPU106はパリティ更新に必要な旧データや旧パリティデータをドライブから読み出し(902)、全ストライプライト実行可能な場合(Yes)は、CPU106はこの処理をスキップする。
【0042】
次にCPU106は新しいパリティデータを生成し(903)、ドライブにデータとパリティデータを書き込む(904)。
続いてCPU106は、キャッシュを削除する制御情報更新処理を行う(905)。この処理では、キャッシュ制御情報を更新して、デステージが完了したキャッシュデータのメモリ割り当てを解除する。もしくはダーティ状態を示すフラグなどの識別情報をOFFにして、クリーンな(ドライブ上のデータと内容が一致した)キャッシュデータとしてメモリ上に残しておいてもよい。制御情報更新処理の内容については後で述べる。
【0043】
次に、CPU106は、ログ保護対象外ダーティキューがなくなっていたら緊急デステージフラグをOFFにセットする(906)。
最後にCPU106はデステージしたダーティデータに関するユーザデータキャッシュログを無効化する(907)。以上でデステージ処理は完了となる。
【0044】
図10は、本実施例のストレージシステムにおけるデステージ対象ダーティ選択処理のフローチャートである。
まずCPU106はシステムがログ退避モードであるか否かを判定する(1000)。ログ退避モードを示す情報は例えばフラグとしてメモリ内の制御情報中に保持されており、CPU106はこの情報を参照してモードの判定を行う。ログ退避モードであれば(Yes)ステップ1001に、ログ退避モードでなければ(No)ステップ1003に進む。ステップ1001では、緊急デステージ中か否かを判定する。緊急デステージ中を示す情報も例えばフラグとしてメモリ内の制御情報に保持されている。緊急デステージ中の場合(Yes)、CPU106はステップ1003に進み、緊急デステージ中でなければ(No)、CPU106はステップ1002に進む。ステップ1002では、CPU106はログ保護対象ダーティキューからデステージ対象のダーティデータを選択する。具体的には例えば、ダーティキューの先頭からダーティデータを取り出して(デキュー)、当該ダーティデータをデステージ対象とする。一方ステップ1003では、CPU106はログ保護対象外ダーティキューからデステージ対象のダーティデータを選択する。
【0045】
図11は、本実施例のストレージシステムにおける制御情報更新処理のフローチャートである。
まずCPU106はメモリ内の制御情報を更新する(1100)。次にCPU106は不揮発化の要否を判定する(1101)。不揮発化が必要な場合(Yes)は、ログ作成処理を行い(1102)、不要な場合(No)は当該処理をスキップする。ログ作成処理の内容は後で述べる。以上で制御情報更新処理は完了となる。
【0046】
図12は、本実施例のストレージシステムにおけるキャッシュデータ更新処理のフローチャートである。
まずCPU106はメモリ内のキャッシュデータを更新する(1200)。具体的には例えば、ホストから受信したデータを、メモリ内に割り当て済みのキャッシュ領域に書き込む。
次にCPU106は不揮発化の要否を判定する(1201)。不揮発化が必要な場合(Yes)はステップ1202に進み、不要な場合(No)は以降の処理をスキップしてキャッシュデータ更新処理を終える。ステップ1202はログ作成処理である。これは更新したキャッシュデータに関するログを作成する処理であり、内容は後で述べる。
【0047】
次にCPU106は今回のキャッシュデータ更新が上書きであるか否かを判定する(1203)。これはすなわち、今回更新されたキャッシュ領域の範囲内に含まれるアドレス範囲のキャッシュデータ更新に関するログ(これを「同アドレスのログ」と呼ぶ)が既存のログの中に存在するか否かを調べ、存在する場合は上書きであると判断する。上書きの場合(Yes)は、ログヘッダテーブル内に書かれた同アドレスのログを無効化し(1204)、上書きでない場合(No)はこの処理をスキップする。
最後にCPU106はログヘッダテーブルを更新する(1205)。以上でキャッシュデータ更新処理は完了となる。
【0048】
図13は、本実施例のストレージシステムにおけるログ作成処理のフローチャートである。
まずCPU106はシーケンス番号を確保する(1300)。シーケンス番号はログの作成された順番を示す番号であり、新しいログを作成するたびに1つずつ値を増やしていく。
【0049】
次にCPU106はログを一時的に格納するためのログバッファを確保する(1301)。具体的には、ログに格納するデータが制御情報の場合には制御情報ログバッファの中から、キャッシュデータの場合にはキャッシュデータログバッファの中から、作成対象のログを格納するために必要なサイズの領域を割り当てる。
【0050】
続いてCPU106はログヘッダを作成する(1302)。ログヘッダにはシーケンス番号や、対象データのメモリ上のアドレス、対象データのサイズなどが含まれる。次にCPU106はログバッファにログデータを格納する(1303)。
【0051】
最後にCPU106は作成したログの有効化処理を行う(1304)。具体的には例えば、ログヘッダに当該ログの有効・無効を表すフラグが含まれ、このフラグをONにすることで当該ログを有効化する。以上でログ作成処理は完了となる。
【0052】
図14は、本実施例のストレージシステムにおけるログ退避処理のフローチャートである。
ログ退避処理は、ログバッファに溜まったログをドライブに書き込む処理であり、先述のライト処理フローチャートにおいてホスト応答前にコールされていたように、ログのドライブへの書き込みが必要な契機でコールされる。
【0053】
まずCPU106は未退避ログすなわちまだログ格納用ドライブに書き込まれていないログを、メモリ105のログバッファから取り出す(1400)。
次にCPU106は当該ログをログ格納用ドライブ(メモリバックアップドライブ107)に書き込む(1401)。
書き込みが完了したら、CPU106は書いたログをログバッファから削除する(1402)。以上でログ退避処理は完了となる。
【0054】
図15は、本実施例のストレージシステムにおけるベースイメージ退避処理のフローチャートである。
先に述べたとおりベースイメージ処理は保護対象のメモリ領域全体をドライブに書き込む処理であり、本実施例においては制御情報の保護に用いられ、例えばドライブ上の制御情報ログが一定量以上溜まったときなど、所定のタイミングで実行される。
【0055】
まずCPU106はシーケンス番号を参照し、現時点における最新のシーケンス番号を記憶する(1500)。
次にCPU106はメモリのベースイメージ全体をドライブに書き込む(1501)。この処理が完了すると古いログは不要となるので、次にCPU106はステップ1500で確保(記憶)したシーケンス番号以前のログを全て無効化する(1502)。以上でベースイメージ退避処理は完了となる。
【0056】
図16は、本実施例のストレージシステムにおけるログ回復処理のフローチャートである。
本処理は、両コントローラ閉塞によるシステムダウン後に、コントローラなどの保守交換作業が行われた後、システムを起動する処理の中で実行され、これによってシステムダウン前のメモリに格納されていた制御情報およびダーティデータを回復させるものである。本処理はI/Oの受け付けを再開する前に、システム内の所定のコントローラのCPU106にて実行される。
【0057】
まずCPU106はログ格納用ドライブ上のベースイメージ領域からベースイメージを読み出し、メモリ上の制御情報領域に格納する(1600)。
次にCPU106は制御情報ログとキャッシュデータログをログ格納用ドライブから読み出し、シーケンス番号に従って古い順にソートする(1601)。そして、最も古いログから最も新しいログまでの内容を、その順番どおりにメモリ上の制御情報およびキャッシュデータのそれぞれの領域に、ログヘッダに書かれたアドレス情報に従って反映させる(1602)。以上でログ回復処理は完了する。
なお本実施例のコントローラは、実施例1のコントローラと同様にCPUやメモリ、メモリバックアップドライブ、フロントエンドインターフェース、バックエンドインターフェースを含むが、図面上では省略してある。
また本図面では1つのコントローラエンクロージャに2つのコントローラが搭載される構成を例として挙げたが、本発明を実施するための構成としては、必ずしもこの構成に限定されない。例えば1コントローラずつ独立した筐体となっていてもよいし、3台以上のコントローラが1つのコントローラエンクロージャに搭載されていてもよい。
また、本図面では1つのストレージシステムに4台のコントローラを含む構成を例示したが、本実施例においてコントローラの台数は3台以上であればよく、必ずしも4台の構成に限定されない。
ストレージシステムは例えばFibre ChannelあるいはEthernetなどのストレージエリアネットワーク(SAN)101に接続され、またホストコンピュータ(以下、ホストと表記)102もSAN101に接続される。SAN101にはスイッチなどを含んでよい。また複数台のホストがSAN101に接続されてもよい。
上述してきたように、開示のストレージシステムは、不揮発性の記憶デバイスであるドライブ110と、前記記憶デバイスへの読み書きを制御する複数のストレージコントローラ103と、を備えたストレージシステムであって、前記記憶デバイスは、ユーザデータ格納用ドライブであり、前記複数のストレージコントローラ103は、それぞれがプロセッサ(CPU106)とメモリ105を有し、前記ストレージコントローラ103は、前記メモリ上のデータを対応するストレージコントローラのメモリ上に複製するメモリ複製方式の第1のメモリ保護方式と、前記メモリ上のデータの更新に関するログを生成して不揮発性の媒体に書き出すログ退避方式の第2のメモリ保護方式とを備え、前記ストレージコントローラは、前記記憶デバイスに対するホストからのライト要求を前記メモリにキャッシュデータとして格納し、前記第1のメモリ保護方式又は第2のメモリ保護方式で前記キャッシュデータを保護した後に、前記ホストに対してライト完了応答を返し、当該ライト応答完了後に前記キャッシュデータを前記記憶ドライブにデステージするものであり、前記ストレージコントローラは、他のストレージコントローラの動作状態に応じて前記第1のメモリ保護方式と前記第2のメモリ保護方式のいずれを用いるかを切り替える。
また、前記ストレージコントローラは他のストレージコントローラに対応付けられて冗長構成を成し、前記第1のメモリ保護方式として用い、前記対応するストレージコントローラが閉塞している場合には記第2のメモリ保護方式として用いる。
このように、ストレージコントローラは、システム内の他のコントローラの状態を認識し、他のコントローラが正常な場合にはライトバック方式で動作する。また、他のコントローラが故障など異常な状態にある場合には、前記ストレージコントローラは、前記読み書きに際して、メモリ内容の更新に関するログを生成して、そのログを記憶デバイスに書き込む。こうすることにより、ライトスルー方式に比べて、ホスト応答前に必要なドライブアクセス回数を減らすことができ、そのため応答性能を高めることができるので、高性能と高信頼を兼ね備えたストレージシステム及びデータ保護方法を実現できる。
また、前記ストレージコントローラ103は、対応するストレージコントローラの閉塞を検知した場合に前記メモリ複製方式から前記ログ退避方式への動作切替えを行ない、動作切替え前のキャッシュデータである切替前キャッシュデータ(ログ保護対象外ダーティキュー401)を前記記憶デバイスに優先的にデステージし、動作切替え後のキャッシュデータである切替後キャッシュデータ(ログ保護対象ダーティキュー)は前記切替前キャッシュデータを全てデステージした後にデステージする。その後、ストレージコントローラ103は、前記対応するストレージコントローラの閉塞からの回復を検知した場合に、前記メモリ上のデータを前記対応するストレージコントローラのメモリ上に複製し、前記ログを削除して、前記ログ退避方式から前記メモリ複製方式への動作切替えを行なう。
このため、メモリ複製方式による保護がされていない切替前キャッシュデータを早期にデステージし、データロストのリスクを低減することができる。
なお、本発明は上記の実施例に限定されるものではなく、様々な変形例が含まれる。上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、かかる構成の削除に限らず、構成の置き換えや追加も可能である。例えば、コントローラが故障した場合で説明したが、消費電力低減を目的にコントローラの一つを休止させる場合に適用してもよい。