本発明は、ストレージ装置及びストレージ装置のライトアクセス処理方法に関する。
ストレージ装置は、例えば、ハードディスクドライブ等のディスクドライブをアレイ状に配設し、RAID(Redundant Arrays of Inexpensive Disks)に基づく記憶領域を提供する。ホストコンピュータ(以下、「ホスト」)は、ストレージ装置により提供される論理的な記憶領域にアクセスし、データの読み書きを行う。
ストレージ装置は、ホストから受信したライトデータを、キャッシュメモリを介してディスクドライブに記憶させる。また、例えば、ストレージ装置は、ホストから要求されたデータがキャッシュメモリに記憶されていない場合、ホストから要求されたデータをディスクドライブから読出してキャッシュメモリに格納し、キャッシュメモリを介してホストにデータを提供する。
このように、ホストから書込みを要求されたライトデータは、キャッシュメモリに保持された後、所定のディスクドライブに書き込まれる。キャッシュメモリからディスクドライブにデータを書き込む方式としては、大きく2種類に大別可能である。
一つの方式は、例えば、ライトスルー方式と呼ばれるもので、ライトデータのキャッシュメモリへの書込みと、ライトデータのディスクドライブへの書込みとを、ほぼ同時期に実行する方式である。他の一つの方式は、例えば、コピーバック方式またはアフターライト方式と呼ばれるもので、ライトデータをキャッシュメモリにのみ記憶させ、その後所定のタイミングで、キャッシュメモリ上のライトデータをディスクドライブに書き込む方式である(特許文献1)。
ライトスルー方式の場合は、ライトデータをディスクドライブに書き込んだ後で、ホストに書込み完了を報告する。アフターライト方式の場合は、ライトデータをキャッシュメモリに格納した時点で、ホストに書込み完了を報告する。従って、アフターライト方式の方が、ライトスルー方式よりも応答時間を短縮することができる。
特開平6−309232号公報
従来のストレージ装置では、ライトスルー方式とアフターライト方式との両方式をストレージ装置全体で切り換えることはできるが、例えば、論理ボリューム毎にそれぞれ異なる方式を適用する等のように、ユーザの希望する単位毎に個別に方式を設定することはできず、使い勝手が低い。
そこで、本発明の一つの目的は、所定の単位毎に、複数のライトアクセス用の処理モードのうちいずれか一つの処理モードをそれぞれ個別に適用可能なストレージ装置及びストレージ装置のライトアクセス処理方法を提供することにある。本発明の一つの目的は、所定の単位毎にライトアクセス用の処理モードをそれぞれ個別に設定することができ、互いの関連性のある所定の単位同士に同一の処理モードを適用させるストレージ装置及びストレージ装置のライトアクセス処理方法を提供することにある。本発明の一つの目的は、他のストレージ装置の状況に応じて、設定済みの処理モードを変更可能なストレージ装置及びストレージ装置のライトアクセス処理方法を提供することにある。本発明の更なる目的は、後述する実施形態の記載から明らかになるであろう。
上記課題を解決すべく、本発明に係るストレージ装置は、上位装置及び記憶デバイス群との間のデータ授受をそれぞれ制御するためのコントローラと、コントローラにより使用され、上位装置から受信したライトデータを非冗長記憶または冗長記憶するキャッシュメモリと、を備える。そして、コントローラは、上位装置からのライトコマンドを受け付けた場合の処理モードとして、(1)ライトデータをキャッシュメモリに冗長記憶させた場合に上位装置に処理完了を通知し、キャッシュメモリに冗長記憶されたライトデータを所定のタイミングで記憶デバイス群に書き込む第1処理モードと、(2)キャッシュメモリに非冗長記憶されたライトデータを記憶デバイス群に書き込んだ場合に、上位装置に処理完了を通知する第2処理モードと、(3)ライトデータをキャッシュメモリに非冗長記憶させた場合に上位装置に処理完了を通知し、キャッシュメモリに非冗長記憶されたライトデータを所定のタイミングで記憶デバイス群に書き込む第3処理モードと、を予め備えており、コントローラは、予め設定された所定の単位毎に、各処理モードのうちいずれか一つの処理モードを実行可能となっている。
ここで、所定の単位としては、例えば、記憶デバイス群の物理的な記憶領域の集合体上に設定される論理ボリューム、記憶デバイス群の物理的な記憶領域の集合体上に設定される論理ボリュームに対応付けられる論理ユニット(LU)、記憶デバイス群の物理的な記憶領域の集合体、記憶デバイスの種別、記憶デバイス群及びキャッシュメモリを論理的に分割して生成される仮想筐体、のいずれか又はこれらの組合せを採用可能である。
また、冗長記憶とは、データロスを防止するために、本来のデータ以外の他のデータを合わせて記憶することを意味し、例えば、ライトデータを複数のキャッシュ領域にそれぞれ保持させる場合や、パリティデータ等を用いてデータを復元可能に保持する場合を挙げることができる。これに対し、非冗長記憶とは、本来のデータのみをそのまま記憶することを意味する。従って、キャッシュメモリに冗長記憶されたデータは、データロスに対する耐性が高い。
コントローラは、第1処理モードを優先的に実行し、キャッシュメモリがライトデータを冗長記憶できない場合に、第2処理モードまたは第3処理モードのいずれか一つを実行することができる。
コントローラは、第1処理モードを優先的に実行し、キャッシュメモリがライトデータを冗長記憶できない場合に、予め設定されたモード選択情報に基づいて、第2処理モードまたは第3処理モードのいずれか一つを実行することもできる。
コントローラは、キャッシュメモリがライトデータを冗長記憶可能な場合は第1処理モードを優先的に実行し、キャッシュメモリがライトデータを冗長記憶できない場合は第2処理モードを優先的に実行し、キャッシュメモリがライトデータを冗長記憶できない場合であって、かつ、モード選択情報により第3処理モードが選択されている場合は、第3処理モードを実行することができる。
コントローラは、外部からの指示に基づいて、各処理モードの優先順位を予め設定するためのモード選択情報を各所定の単位毎にそれぞれ対応付けて管理可能である。
コントローラは、各所定の単位のうち関連性のある所定の単位同士にそれぞれ同一の処理モードを適用することもできる。
コントローラは、ライトデータを受領して記憶する他のストレージ装置の状況を考慮して、各処理モードのうちいずれか一つの処理モードを前記所定の単位毎にそれぞれ設定することもできる。
コントローラは、ライトデータを受領して記憶する他のストレージ装置に障害が発生した場合には、第3処理モードに設定されている所定の単位を、第2処理モードまたは第1処理モードのいずれかに変更することもできる。
本発明の他の観点に従うストレージ装置のライトアクセス処理方法は、(1)ライトデータをキャッシュメモリに冗長記憶させた場合に上位装置に処理完了を通知し、キャッシュメモリに冗長記憶されたライトデータを所定のタイミングで記憶デバイス群に書き込む第1処理モードと、(2)キャッシュメモリに非冗長記憶されたライトデータを記憶デバイス群に書き込んだ場合に、上位装置に処理完了を通知する第2処理モードと、(3)ライトデータをキャッシュメモリに非冗長記憶させた場合に上位装置に処理完了を通知し、キャッシュメモリに非冗長記憶されたライトデータを所定のタイミングで記憶デバイス群に書き込む第3処理モードと、を備えており、所定の単位毎にそれぞれモード選択情報を設定するステップと、上位装置からライトデータを受信するステップと、キャッシュメモリが冗長記憶可能か否かを判定するステップと、キャッシュメモリが冗長記憶可能であると判定された場合は、第1処理モードを実行させるステップと、キャッシュメモリが冗長記憶不能であると判定された場合は、設定されたモード選択情報により第2処理モードが選択されているか否かを判定するステップと、モード選択情報により第2処理モードが選択されていると判定された場合は、第2処理モードを実行させるステップと、モード選択情報により第2処理モードが選択されていないと判定された場合は、第3処理モードを実行させるステップと、を含んで構成可能である。
本発明の手段、機能、ステップの少なくとも一部は、マイクロコンピュータにより読み込まれて実行されるコンピュータプログラムとして構成できる場合がある。このようなコンピュータプログラムは、例えば、ハードディスクや光ディスク等のような記憶媒体に固定して流通させることができる。または、インターネット等のような通信ネットワークを介して、コンピュータプログラムを供給することもできる。
以下、図面に基づき、本発明の実施の形態を説明する。図1は、本実施形態の全体概念を示す説明図である。本実施形態のストレージシステムは、ホスト1と、ストレージ装置2とを含んで構成される。ストレージ装置2は、コントローラ3と、複数の論理ボリューム(以下、「ボリューム」と省略する場合もある)6A,6Bを備える。そして、コントローラ3は、ストレージ装置2の動作を制御するもので、第1キャッシュ領域4及び第2キャッシュ領域5を有するキャッシュメモリを備えている。
以下に述べるように、コントローラ3は、ホスト1からのライトアクセスを処理するモードを3種類備えており、各ボリューム6A,6B毎に、適用する処理モードを予め設定可能となっている。
図1(a)は、キャッシュメモリが正常な場合の第1のライトアクセス処理を示す。コントローラ3は、ホスト1からのライトコマンドを受信すると(S1a)、ホスト1から受信したライトデータを、各キャッシュ領域4,5にそれぞれ書き込み、ライトデータを冗長記憶させる(S2a)。そして、コントローラ3は、各キャッシュ領域4,5にライトデータをそれぞれ書き込んだ直後に、ホスト1に対して、ライトコマンドの処理完了を通知する(S3a)。その後、コントローラ3は、キャッシュ領域4,5に書き込まれたライトデータのいずれかを、所定のボリューム6Aに書き込む(S4a)。この例では、ボリューム6Aにライトデータを書き込む場合を例示するが、他方のボリューム6Bにライトデータを書き込んでもよく、あるいは、両方のボリューム6A,6Bにそれぞれライトデータを書き込んでもよい。
図1(a)に示すように、キャッシュメモリが正常に動作しており、ライトデータを冗長記憶できる場合は、ホスト1へ書込み完了を報告する時期と、ボリューム6Aまたは6Bへライトデータを書込む時期とが一致せず、両時期は非同期で実施される。
図1(b)は、キャッシュメモリに異常が発生して冗長記憶が不能となった場合の第2ライトアクセス処理を示す。例えば、いずれか一方のキャッシュ領域に不具合を生じて、そのキャッシュ領域を閉塞処理した場合において、ホスト1から受け付けたライトアクセスを処理する様子を示している。ここでは、第2キャッシュ領域5に障害が発生し、第1キャッシュ領域4のみを正常に使用可能な場合を例に挙げる。
コントローラ3は、ホスト1からライトコマンドを受信すると(S1b)、ホスト1から受信したライトデータを正常な方のキャッシュ領域4に記憶させる(S2b)。そして、コントローラ3は、キャッシュ領域4に記憶させたライトデータを直ちに所定のボリューム6Aに書き込む(S3b)。コントローラ3は、ボリューム6Aへのライトデータの書込み完了を確認すると、ホスト1に書込み完了を報告する(S4b)。
このように、キャッシュメモリに障害が発生した場合の一つの例として、ホスト1から受信したライトデータを直ちに所定のボリューム6Aに書き込んで、ホスト1に書込み完了を報告する。
図1(c)は、キャッシュメモリに異常が発生して冗長記憶が不能となった場合の第3ライトアクセス処理を示す。この場合、コントローラ3は、ホスト1からのライトコマンドを受信すると(S1c)、ホスト1から受信したライトデータを正常なキャッシュ領域4に書込む(S2c)。コントローラ3は、ライトデータを正常なキャッシュ領域4に書き込むと直ちに、ホスト1に対して書込み完了を報告する(S3c)。そして、コントローラ3は、書込み完了を報告した後で、キャッシュ領域4に記憶されているライトデータを所定のボリューム6Aに書き込む(S4c)。
このように、キャッシュメモリに障害が発生した場合の他の例として、ホスト1から受信したライトデータを正常なキャッシュ領域4に書き込んだ時点で、直ちにホスト1に書込み完了を報告し、その後、ライトデータを所定のボリューム6Aに書き込む。
本実施形態では、各ボリューム6A,6B毎に、ライトアクセス時の処理モードを予め設定することができる。一つの例として、キャッシュメモリが正常な場合は、図1(a)に示すアフターライト方式で各ボリューム6A,6Bへのライトアクセスを処理することができる。そして、キャッシュメモリに異常が生じた場合は、図1(b)に示すライトスルー方式または図1(c)に示す非冗長記憶型ライトアフター方式のうち、事前に選択されている方式で、各ボリューム6A,6Bへのライトアクセスを処理可能である。
即ち、例えば、ボリューム6Aについて図1(c)に示す方式が選択されている場合、このボリューム6Aに対するライトアクセスは、キャッシュメモリが正常なときは、図1(a)に示すアフターライト方式で処理されるが、キャッシュメモリに異常が生じたときは、図1(c)に示す非冗長記憶型アフターライト方式で処理される。また、例えば、他のボリューム6Bについて図1(b)に示す方式が選択されている場合、このボリューム6Bに対するライトアクセスは、キャッシュメモリが正常なときは、図1(a)に示すアフターライト方式で処理され、キャッシュメモリに異常が生じたときは、図1(b)に示すライトスルー方式で処理される。
このように、本実施例では、各ボリューム6A,6B毎に、ライトアクセス時の処理モードを違えることができる。詳細は後述するが、処理モードの指定は、ユーザが各ボリューム毎にそれぞれ手動で行ってもよいし、予め設定されたポリシーに基づいてコントローラ3が自動的に行ってもよい。また、ユーザによる手動指定をコントローラ3が補うことにより、各ボリューム毎にそれぞれ適切な処理モードを設定することもできる。
これにより、ストレージシステムの構成や運用形態等に応じて、各所定の単位毎に適切な処理モードをそれぞれ設定することができ、使い勝手が向上する。例えば、重要なデータを記憶するボリュームについては、データの安全性を最優先して、キャッシュメモリ異常時の処理モードをライトスルー方式に設定し、逆に、重要性の低いデータを記憶するボリュームについては、アクセス性能の維持を優先して、キャッシュメモリ異常時の処理モードを非冗長記憶型アフターライト方式に設定することができる。
なお、後述の実施例からも明らかなように、ライトアクセス時の処理モードは、ボリューム単位に限らず、論理ユニット単位、RAIDグループ単位等のように、種々の論理的または物理的な組織単位毎にそれぞれ設定することができる。
図2は、ストレージシステムのブロック図を示す。このストレージシステムは、例えば、少なくとも一つ以上のホスト10と、少なくとも一つ以上のストレージ装置100と、ホスト10とストレージ装置100との通信ネットワークを構成するためのスイッチ20と、管理端末30とを備えて構成することができる。後述のように、ストレージシステムは、複数のストレージ装置100,200を含んで構成することができる。
ホスト10は、例えば、いわゆるオープン系ホストとメインフレーム系ホストとに大別できる。オープン系ホストとしては、例えば、Windows(登録商標)やUNIX(登録商標)等の汎用的なOS(Operating System)を搭載し、FC(Fibre Channel)、iSCSI(Internet SCSI)、TCP/IP(Transmission Control Protocol/Internet Protocol)等の比較的汎用性のある通信プロトコルを介してストレージ装置100にアクセスするサーバマシンを挙げることができる。メインフレーム系ホストとしては、例えば、FICON(Fibre Connection:登録商標)、ESCON(Enterprise System Connection:登録商標)、ACONARC(Advanced Connection Architecture:登録商標)、FIBARC(Fibre Connection Architecture:登録商標)等の通信プロトコルを介してストレージ装置100にアクセスするメインフレームマシンを挙げることができる。
ホスト10は、例えば、メタルケーブルや光ファイバケーブル、スイッチ20等を含むことができる通信ネットワークCN1を介して、ストレージ装置100に接続される。先に、図3を参照して、ホスト10の構成を説明すると、ホスト10は、例えば、一つまたは複数のHBA(Host Bus Adapter)11と、パス制御部12と、アプリケーションプログラム13とを備えて構成可能である。HBA11は、所定のプロトコルに基づいてデータの送受信を行う。パス制御部12は、例えば、負荷分散や障害回避等を行うもので、いずれのパスを用いてデータ授受を行うか等を制御する。アプリケーションプログラム13は、例えば、電子メール処理プログラムやデータベース管理ソフトウェア等のようなプログラムであり、図外のクライアント端末に対し、情報処理サービスを提供する。
図2に戻る。管理端末30は、後述のサービスプロセッサ(SVP)170を介して、ストレージ装置100の各種情報を収集したり、ストレージ装置100に必要な指令を与えるための装置である。管理端末30は、例えば、LAN(Local Area Network)等の通信ネットワークCN2を介して、SVP170に接続されている。管理端末30は、例えば、ウェブブラウザをベースとしたGUI(Graphical User Interface)を備えており、SVP170が提供するWWW(World Wide Web)サーバにログインすることにより、各種情報の収集と指令の入力とを行う。
ストレージ装置100は、例えば、複数のCHA110と、複数のDKA120と、キャッシュメモリ130と、共有メモリ140と、接続制御部150と、記憶部160と、SVP170とを備えて構成することができる。
ストレージ装置100には、複数のCHA110を設けることができる。各CHA110は、各ホスト10との間のデータ転送を制御するためのパッケージである。各CHA110は、複数の通信ポート111(図2参照)を備えており、少なくとも一つ以上のホスト10と接続可能である。各CHA110は、ホスト10との間のデータ転送をそれぞれ個別に制御する。
ストレージ装置100には、複数のDKA120を設けることができる。各DKA120は、記憶部160とのデータ転送をそれぞれ制御するものである。各DKA120は、例えば、ホスト10から指定された論理ブロックアドレス(LBA)を物理ディスクのアドレスに変換等することにより、各ディスクドライブ161にアクセスし、データの読出しまたはデータの書込みを行う。
キャッシュメモリ130は、ホスト10から書き込まれたライトデータや、ホスト10に読み出されたリードデータを記憶するものである。キャッシュメモリ130は、例えば、揮発または不揮発のメモリから構成可能である。キャッシュメモリ130が揮発性メモリを含んで構成される場合、図示せぬバッテリ電源等によりメモリバックアップを行うことが好ましい。
キャッシュメモリ130は、例えば、リードキャッシュ領域とライトキャッシュ領域との2つの領域から構成することができる。ライトキャッシュ領域は、例えば、キャッシュ面131とNVS(Non-volatile Storage)面132とを含んで構成することができる。これにより、ライトキャッシュ領域に格納されたデータは、多重記憶(冗長記憶)することができる。つまり、同一のデータがディスクドライブ161にも存在するリードデータは、仮に失われたとしても再びディスクドライブ161から読み出せば足りるので、多重化する必要はない。これに対し、ライトデータは、ストレージ装置100内においては、キャッシュメモリ130にのみ存在するため、原則として、多重化記憶させるのが信頼性の点で好ましい。
共有メモリ(あるいは制御メモリとも呼ばれる)140は、例えば、不揮発メモリから構成可能であるが、揮発メモリから構成してもよい。共有メモリ140には、例えば、制御情報や管理情報等が記憶される。これらの制御情報等の情報は、複数のメモリ140により多重管理することができる。
共有メモリ140及びキャッシュメモリ130は、それぞれ別々のメモリパッケージとして構成することもできるし、同一のメモリパッケージ内にキャッシュメモリ130及び共有メモリ140を設けてもよい。また、メモリの一部をキャッシュ領域として使用し、他の一部を制御領域として使用することもできる。つまり、共有メモリとキャッシュメモリとは、同一のメモリまたはメモリ群として構成することもできる。
接続制御部150は、各CHA110と、各DKA120と、キャッシュメモリ130と、共有メモリ140とをそれぞれ相互に接続するものである。これにより、全てのCHA110,DKA120は、キャッシュメモリ130及び共有メモリ140にそれぞれ個別にアクセス可能である。接続制御部150は、例えば、超高速クロスバスイッチ等として構成することができる。
なお、CHA110,DKA120,キャッシュメモリ130及び共有メモリ140を一つまたは複数のコントローラに集約することもできる。
記憶部160は、多数のディスクドライブ161を備えて構成される。記憶部160は、各CHA110及び各DKA120等のコントローラ部分と共に同一の筐体内に設けることもできるし、コントローラ部分とは別の筐体内に設けることもできる。
記憶部160は、例えば、複数種類のディスクドライブ161を混在させて構成することができる。ディスクドライブ161としては、例えば、FCディスク(ファイバチャネルディスク)、SCSI(Small Computer System Interface)ディスク、SATA(Serial AT Attachment)ディスク等を用いることができる。なお、ディスクの種類は、上記のものに限定されず、例示したディスクドライブと同等の記憶デバイスまたは将来開発されるであろう記憶デバイスを利用可能な場合もある。
ここで、一般的には、FCディスク、SCSIディスク、SATAディスクの順番で、データ処理性能が低下する。現在最もデータ処理性能が高いのは、FCディスクである。データ処理性能には、例えば、IOPS(input/output per second)性能やMB/秒性能、データへのアクセス時間等を含めることができる。例えば、高性能で信頼性の高いFCディスクは、ミッションクリティカルなデータに高速にアクセスする必要がある場合に使用され、FCディスクほど高性能ではないSATAディスクは、高速アクセス等が要求されないアーカイブデータの保存等に使用される。
記憶部160には、複数のパリティグループ(RAIDグループとも呼ばれる)162を設けることができる。各パリティグループ162は、同一種類の物理ディスク161からそれぞれ構成される。即ち、あるパリティグループ162は、FCディスクのみから構成され、他のパリティグループ162は、SATAディスクのみから構成される。また、あるパリティグループ162は、SCSIディスクのみから構成される。
そして、詳細はさらに後述するが、各パリティグループ162がそれぞれ提供する論理的な記憶領域には、少なくとも一つ以上の論理ボリューム(LDEVとも呼ぶ)163を設けることができる。この論理ボリューム163をLU(Logical Unit)164に対応付けることにより、オープン系のホスト10は、物理的な記憶デバイスとして認識し、利用することができる。なお、オープン系ホスト10のアクセス対象ボリュームはLUであるが、メインフレーム系ホストのアクセス対象は、論理ボリューム(LDEV)となる。
ところで、ストレージ装置100が使用する記憶資源は、全てストレージ装置100内に存在する必要はない。ストレージ装置100は、ストレージ装置100の外部に存在する記憶資源を、あたかも自己の記憶資源であるかのように取り込んで、利用することもできる。即ち、例えば、ストレージ装置100は、ホスト10を介さずに、外部に設置された自社の又は他社のストレージ装置(不図示)とSAN(Storage Area Network)等を介して直接的に接続することができる。そして、ストレージ装置100は、外部のストレージ装置が有する論理ボリュームを、自己のLUやLDEVあるいは中間ボリュームにマッピングすることにより、外部の論理ボリュームを取り込むことができる。
SVP170は、LAN等の内部ネットワークCN3を介して、各CHA110及び各DKA120とそれぞれ接続されている。SVP170は、ストレージ装置100内部の各種状態を収集し、そのままで又は加工して、管理端末30に提供する。
図3は、複数のストレージ装置100,200を含むストレージシステムの概略構成を示す説明図である。他のストレージ装置200は、例えば、ストレージ装置100と同様に構成することができ、コントローラ201,LDEV263,SVP270等を備え、コントローラ201は、キャッシュ面231及びNVS面232を備える。
ホスト10は、各ストレージ装置100,200に対し、それぞれ同一のライトデータを書き込んで保持させることができる。この場合は、一方のストレージ装置100のキャッシュメモリ130に異常が発生し、冗長記憶が不能となった場合でも、他方のストレージ装置200に同一のライトデータが保持される。
従って、ストレージシステム全体としてライトデータの冗長性が確保されており、ストレージ装置100のキャッシュメモリ異常時のライトアクセスをアフターライト方式で処理しても、信頼性は低下しない。
図4は、ストレージ装置100の記憶構造に着目した構成説明図である。ストレージ装置100の記憶構造は、物理的なディスクであるPDEV(Physical Device)161と、グループ化された複数のPDEV161が提供する仮想的な記憶領域であるVDEV(Virtual Device)162と、このVDEV162に設定されたLDEV(Logical Device)163とから構成することができる。ここで、PDEV161は、図2中のディスクドライブ161に対応し、VDEV162は、図2中のパリティグループ162に対応する。
ここで、幾つかの論理ボリューム(LDEV)には、LUN(Logical Unit Number )がそれぞれ割り当てられており、オープン系ホスト10からLU164として認識される。オープン系ホスト10は、ターゲットポート111を介して、アクセス権限のある論理ボリューム(LU164)にそれぞれアクセスする。ターゲットポート111は、図2中の各CHA110が提供する通信ポートである。
図4及び図5に示すように、パリティグループ(VDEV)の提供する記憶領域上には、それぞれ複数のLDEVを設けることができる。そして、図4中の左側に示すように、一つのLDEVを一つのLUに対応付けることもできるし、図4中の右側に示すように、複数のLDEVを一つのLUに対応付けることもできる。なお、図4では、一つの種類のPDEV161Aと他の種類のPDEV161Bとが混在し、それぞれのパリティグループからLDEVが形成される様子が示されている。
さらに、図5の右側に示すように、それぞれ別々のパリティグループに所属する複数のLDEVを一つのLUに対応付けることもできる。また、図5に示すように、各LU「#0」,「LU#12」には、それぞれライトスルーフラグが対応付けられている。詳細は後述するが、疑似スルーフラグとは、キャッシュ異常時におけるライトアクセスの処理モードを予め指定する情報であり、所定の単位毎にそれぞれ異なる値を設定可能である。LU単位でライトスルーフラグを設定する実施例については、後述する。
図6は、LDEV制御テーブルT1の一例を示す説明図である。LDEV制御テーブルT1は、図6(b)に例えばT1a〜T1cとして示すように、各LDEV毎にそれぞれ設けられる。LDEV制御テーブルT1は、例えば、そのLDEVのRAIDレベル、スロットサイズ(記憶容量)等の属性情報と、上述のライトスルーフラグとを含んで構成可能である。
ライトスルーフラグは、各LDEV毎にそれぞれ個別に設定される。各LDEV毎に設定されたライトスルーフラグをそれぞれ抽出すると、図6(b)に示すようなライトスルーフラグ管理テーブルT2を得ることができる。
図7は、LDEV番号変換テーブルT3及びパリティグループ−LDEV対応テーブルT4の一例を示す説明図である。LDEV番号テーブルT3は、例えば、ポート番号と、LUN(Logical Unit Number)と、LDEV番号とを対応付けることにより、構成可能である。このLDEV番号変換テーブルT3を参照することにより、いずれのLDEVを対象するアクセスであるかを判別することができる。
パリティグループ−LDEV対応テーブルT4は、LDEV番号と、そのLDEVが所属するパリティグループ番号とを対応付けることにより、構成可能である。これにより、あるパリティグループに属する全てのLDEVを抽出したり、あるLDEVがいずれのパリティグループに所属するのか調べることができる。
図8は、各LDEV毎にライトスルーフラグを設定するためのライトスルーフラグ設定処理の概要を示すフローチャートである。この処理は、例えば、SVP170により実行することができる。
例えば、システム管理者等のユーザは、管理端末30のウェブヴラウザを介してSVP170の提供するウェブサーバにログインし(S11)、パリティグループ管理画面を呼び出す(S12)。そして、ユーザは、パリティグループ管理画面を見ながら、所望する一つまたは複数のLDEVについて、ライトスルーフラグを個別にセットする(S13)。ユーザによるライトスルーフラグのセットが完了すると、SVP170は、共有メモリ140に格納されているLDEV制御テーブルT1を更新する(S14)。また、SVP170は、更新されたLDEV制御テーブルT1の情報を各CHA110に転送させる(S15)。そして、各CHA110は、共有メモリ140に記憶されたLDEV制御テーブルT1の更新結果に基づいて、ローカルメモリ(不図示)に記憶されているLDEV制御テーブルT1を更新させる。
図9は、ライトスルーフラグを設定する画面の様子を示す説明図である。ユーザは、図9(a)に示すようなパリティグループ管理画面を呼び出し、所望のLDEVが所属するパリティグループを選択し、ディステージボタンB1を押す。すると、図9(b)に示すように、そのパリティグループに属する全てのLDEVのライトスルーフラグ設定状態を示す一覧表が画面に表示される。ここで、ライトスルーフラグが「オン」に設定されている場合は、ライトスルー(ライトスルー)方式でライトアクセスが処理され、ライトスルーフラグが「オフ」に設定されている場合は、ライトスルーは行われず、ライトアフター方式でライトアクセスが処理される。但し、ライトスルーフラグは、キャッシュメモリ130が冗長記憶できない異常時に参照される情報であり、キャッシュメモリ130が正常に動作している場合は、ライトスルーフラグの設定内容に拘わらず、ライトアフター方式でライトアクセスが処理される。
さて、次に、ユーザは、一覧表示された中から、所望のLDEVを一つまたは複数選択し、変更ボタンB2を押す。これにより、図9(c)に示すように、選択されたLDEVのライトスルーフラグは、オンからオフに、あるいは、オフからオンに変化する。即ち、変更ボタンB2を操作すると、既に設定されているライトスルーフラグの値が反転する。なお、ライトスルーフラグの初期値は、オンに設定されている。これにより、キャッシュメモリ130の異常時には、ライトスルーフラグがオフに設定されていない限り、そのLDEVを対象とするライトアクセスは、ライトスルー方式で処理される。即ち、キャッシュメモリ130の片方のライトキャッシュに記憶されたライトデータは、直ちにLDEVにも書き込まれ、LDEVへの書込みを完了した後で、ホスト10に書込み完了が報告される。
図10は、ライトコマンド処理の全体概要を示すフローチャートである。この処理には、以下に述べるように、3種類のライトアクセス処理モードが含まれている。この処理は、CHA110またはDKA120のいずれか又は双方により実行される。
まず、CHA110がホスト10からのライトコマンドを受信すると、CHA110は、ライトコマンドに含まれているポート番号やLUNに基づいてLDEV番号変換テーブルT3を参照することにより、目的のLDEV番号に変換する(S21)。
次に、CHA110は、キャッシュメモリ130のキャッシュ面131及びNVS面132の両方が正常に使用可能であるか否かを判定する(S22)。両面とも正常な場合は(S22:YES)、両方の面131,132にそれぞれライトデータ格納用の記憶領域を設定し、ホスト10から受信したライトデータをそれぞれ記憶させる(S23)。CHA110は、キャッシュ面131及びNVS面132の両方でそれぞれライトデータを保持させた後、直ちに、ホスト10に対して書込み完了を報告する(S24)。
キャッシュ面131及びNVS面132のそれぞれにライトデータが格納されたことは、例えば、共有メモリ140を介してDKA120に通知される。DKA120は、キャッシュ面131からライトデータを読み取り、そのライトデータが書き込まれるべきLDEVを構成する所定のディスクドライブ161に、ライトデータを書き込む(S25)。以上のS23〜S25の処理は、キャッシュメモリ130が正常な場合(冗長記憶可能な場合)においてライトアクセスを処理するための第1処理モード(アフターライト方式)に該当する。
一方、キャッシュメモリ130に異常が発生し、ライトキャッシュの片面が閉塞されたような場合(S22:NO)、CHA110は、ライトアクセスの対象となっているLDEVに設定されているライトスルーフラグを参照し、ライトスルーフラグがオフにセットされているか否かを判定する(S26)。
ライトスルーフラグがオフに設定されていない場合(S26:NO)、即ち、そのLDEVのライトスルーフラグがオンに設定されている場合、CHA110は、DKA120によって、ホスト10から受信したライトデータを直ちにそのLDEVに書き込ませる(S27)。DKA120がそのLDEVを構成するディスクドライブ161への書込みを完了すると、CHA110は、ホスト10に対して、書込み完了を報告する(S28)。以上述べたS26及びS27の処理は、キャッシュメモリ130が異常な場合(冗長記憶できない場合)においてライトアクセスを処理するための第2処理モード(ライトスルーモード)に該当する。
キャッシュメモリに異常が発生している場合において、ライトアクセスの対象となっているLDEVのライトスルーフラグが「オフ」に設定されている場合(S26:YES)、CHA110は、正常なライトキャッシュにライトデータを書き込んだ後(S29)、直ちにホスト10に対して書込み完了を報告する(S30)。そして、DKA120は、第1処理モードと同様に、ホスト10への書込み完了報告と非同期に、ライトデータを所定のLDEVに書き込む(S31)。以上のS29〜S31の処理は、キャッシュメモリが異常な場合においてライトアクセスを処理するための第3処理モードに該当する。
以下、各処理モードの詳細を説明する。図11は、第1処理モードの動作を示すフローチャートである。まず、CHA110は、ホスト10からライトコマンドを受信すると(S41)、このライトコマンドを解析し(S42)、書込みを要求されたLDEV番号を検出する。次に、書込みを要求されたデータがキャッシュメモリ130上に存在するか否かを判定する(S43)。通常の場合、ここではキャッシュミスと判定され(S43:YES)、CHA110は、キャッシュメモリ130のキャッシュ面131及びNVS面132の両方に、それぞれ必要な量だけキャッシュスロットを割り当てる(S44)。このキャッシュスロットは、ライトデータを格納するための記憶領域である。
CHA110は、キャッシュスロットの割当によってライトデータの受信準備が完了すると、ホスト10からライトデータを受信して各面131,132にそれぞれ記憶させる(S45)。CHA110は、ライトデータを各面131,132にそれぞれ記憶させた後、ホスト10に対して書込み完了を報告する(S46)。そして、CHA110は、ライトデータを格納したキャッシュスロットを、ダーティキューに登録する(S47)。キャッシュスロットの状態は、例えば、共有メモリ140に記憶されているキャッシュスロット管理テーブルT6により管理される。キャッシュスロット管理テーブルT6は、例えば、キャッシュスロット番号と、各キャッシュスロットの状態(ダーティ状態、クリーン状態、フリー状態)とを対応付けることにより、構成することができる。
ここで、ダーティキューとは、ディスクドライブ161にデータが書き込まれていない状態のキャッシュスロットを管理するためのキューである。なお、このほかに、例えば、ディスクドライブ161にデータを反映済みのキャッシュスロットを管理するクリーンキュー、未使用のキャッシュスロットを管理するフリーキューがある。
キャッシュスロットのステータスは、ダーティキューに登録されたダーティ状態と、クリーンキューに登録されたクリーン状態と、フリーキューに繋がれたフリー状態との間で遷移する。例えば、ダーティキューに繋がれたキャッシュスロットのデータがディスクドライブ161に書き込まれると、そのキャッシュスロットはクリーンキューに再登録され、クリーン状態に遷移する。そして、そのキャッシュスロットを開放するとフリー状態に遷移する。フリー状態のキャッシュスロットは、他のライトアクセスまたはリードアクセスのために確保されて再使用される。
DKA120は、共有メモリ140を随時参照しており、ダーティキュー内に未処理のキャッシュスロットを発見すると(S51:YES)、ディステージ処理を開始する。ディステージ処理とは、キャッシュメモリ130に記憶されているデータを所定のディスクドライブ161に書き込む処理である。まず、DKA120は、ディステージすべきライトデータがキャッシュメモリ130に記憶されているか否かを判定する(S52)。ここでは、通常、キャッシュヒットと判定されるが、万が一キャッシュミスと判定された場合は(S52:YES)、本処理を異常終了する。
処理すべきライトデータを発見した場合(S52:NO)、DKA120は、そのライトデータに対応付けられた論理アドレスを物理アドレスに変換し(S53)、転送用のスクリプトを生成する(S54)。この転送用のスクリプトは、ホスト10から受信したライトデータを所定のディスクドライブ161に書き込ませるためのプログラムである。
転送用スクリプトによって、ライトデータのディスクドライブ161への書込みが開始される(S55)。ディスクドライブ161への書込みが完了すると(S56:YES)、DKA120は、キャッシュ面131及びNVS面132の両方で管理されているライトデータうち、NVS面132を破棄する(S57)。これにより、そのライトデータのステータスは、冗長記憶されるダーティ状態から非冗長記憶されるクリーン状態に遷移する。
そして、DKA120は、キャッシュ面131に記憶されているキャッシュスロットについて、ステージングビットマップ(不図示)を設定し、処理を終了する(S58)。ここで、ステージングビットマップとは、キャッシュメモリ130上に置かれているデータであることを示す管理用の情報であり、このステージングビットマップを参照することにより、ホスト10からのリードアクセスに速やかに応答することができる。
図12は、第2処理モードの動作を示すフローチャートである。CHA110は、ホスト10からライトコマンドを受信すると(S61)、ライトコマンドを解析してLDEV番号を検出し(S62)、キャッシュミスか否かを判定する(S63)。
キャッシュミスと判定された場合(S63:YES)、CHA110は、キャッシュ面131のみに、必要な量だけキャッシュスロットを割り当て(S64)、ホスト10からのライトデータを受信してキャッシュ面131に記憶させる(S65)。CHA110は、ライトデータをキャッシュ面131に記憶させた後、DKA120に対して、ディステージ処理を要求する(S66)。
そして、CHA110は、DKA120からディステージ処理の完了が報告されるのを待ち(S67)、ディステージ処理の完了を確認した後で(S67:YES)、ホスト10に対して書込み完了を報告する(S68)。
DKA120は、CHA110からディステージ要求が発行されると(S71:YES)、ディステージ処理を開始する。即ち、第2処理モードでは、ディステージ処理の開始とホスト10への書込み完了報告とが同期している。
まず、DKA120は、キャッシュミスの判定を行い(S72)、処理すべきライトデータを発見した場合(S72:NO)、DKA120は、そのライトデータの論理アドレスを物理アドレスに変換し(S73)、転送用スクリプトを生成する(S74)。
転送用スクリプトにより、ライトデータのディスクドライブ161への書込みが開始され(S75)、ディスクドライブ161への書込みが完了すると(S76:YES)、DKA120は、キャッシュ面131に記憶されているキャッシュスロットについて、ステージングビットマップを設定する(S77)。そして、DKA120は、ディステージ処理が完了した旨をCHA110に報告する(S78)。
図13は、第3処理モードの動作を示すフローチャートである。第3処理モードは、第1処理モードと同様の処理を行う。しかし、第3処理モードは、片面のライトキャッシュにのみライトデータを保持した時点で、ホスト10に書込み完了を報告するため、第1処理モードとは幾つかのステップが相違する。
CHA110は、ホスト10からライトコマンドを受信すると(S81)、このライトコマンドを解析し(S82)、書込みを要求されたLDEV番号を検出する。次に、CHA110は、キャッシュミスか否かの判定を行った後(S83)、キャッシュ面131にのみ、必要な量だけキャッシュスロットを割り当てる(S84)。
CHA110は、ホスト10からライトデータを受信してキャッシュ面131に記憶させた後(S85)、ホスト10に対して書込み完了を報告する(S86)。そして、CHA110は、ライトデータを格納したキャッシュスロットを、ダーティキューに登録する(S87)。
DKA120は、ダーティキュー内に未処理のキャッシュスロットを発見すると(S91:YES)、ディステージ処理を開始する。DKA120は、ディステージすべきライトデータがキャッシュメモリ130に記憶されているか否かを判定し(S92)、処理すべきライトデータを発見した場合(S92:NO)、そのライトデータに対応付けられた論理アドレスを物理アドレスに変換し(S93)、転送用スクリプトを生成する(S94)。
転送用スクリプトによって、ライトデータのディスクドライブ161への書込みが開始される(S95)。ディスクドライブ161への書込みが完了すると(S96:YES)、DKA120は、キャッシュ面131に記憶されているキャッシュスロットについて、ステージングビットマップを設定し、処理を終了する(S97)。
図14は、ホスト10からリードアクセスがあった場合の処理を示すフローチャートである。まず、CHA110は、ホスト10からリードコマンドを受信すると(S101)、このリードコマンドを解析し(S102)、ステージングビットマップを参照することにより、読出しを要求されたデータがキャッシュメモリ130上に存在するか否かを判定する(S103)。
要求されたデータが既にキャッシュメモリ130に記憶されている場合(S103:NO)、CHA110は、そのデータを読出してホスト10に送信する(S107)。要求されたデータがキャッシュメモリ130に記憶されていない場合(S103:YES)、CHA110は、ディスクドライブ161から読み出されたデータを格納するために、キャッシュ面131にキャッシュスロットを割り当て(S104)、DKA120にステージング処理の開始を要求する(S105)。ステージング処理とは、ディスクドライブ161から所定のデータを読出してキャッシュメモリ130に記憶させる処理である。
CHA110は、DKA120からのステージング処理の完了報告を待ち(S106)、ステージング処理の完了を確認すると(S106:YES)、キャッシュ面131に記憶されたデータを読出して、ホスト10に送信する(S107)。
一方、DKA120は、CHA110からのステージング要求を受信すると(S111:YES)、要求されたリードデータがキャッシュメモリ130上に存在するか否かを判定する(S112)。キャッシュメモリ130上にリードデータが存在しない場合(S112:YES)、DKA120は、要求されたリードデータの論理アドレスを物理アドレスに変換し(S113)、データ読出し用の転送スクリプトを生成する(S114)。この転送スクリプトに基づいて、所定のディスクドライブ161からリードデータが読み出され(S115)、読み出されたデータはキャッシュ面131に記憶される。要求されたリードデータの読出しを完了すると(S116:YES)、DKA120は、ステージング処理が完了した旨をCHA110に報告する(S117)。
本実施例は上述のように構成されるので、以下の効果を奏する。各LDEV毎に、それぞれ異なるライトアクセス時の処理モードを個別に設定できるため、例えば、各LDEVの利用形態や運用方針等に従って柔軟な処理を行うことができ、使い勝手が向上する。
また、キャッシュメモリ130が正常な場合は、全てのLDEVについて第1処理モードをそれぞれ適用し、キャッシュメモリ130に異常状態が発生した場合は、ライトスルーフラグに基づいて、第2処理モードまたは第3処理モードのいずれかを適用する構成を採用した。従って、キャッシュメモリ130が正常な場合は、データロスの耐久性とアクセス性とを両立させ、キャッシュメモリ130の異常時には、データロスの耐久性を高めるか、それともライトアクセスの性能維持を図るかのいずれかを、ユーザが適宜自由に選択することができ、使い勝手が向上する。
さらに、ライトスルーフラグの初期値として第2処理モードを選択するようにしたので、ユーザが明示の選択を行わない限り、データロスの発生を回避することができ、信頼性が向上する。例えば、データマイグレーションやボリュームコピー等のような属性の移行を伴わないデータ移動イベントが発生した場合に、そのボリューム(LDEV)のライトスルーフラグを初期値に設定することにより、信頼性を高めることができる。
図15〜図17に基づいて、本発明の第2実施例を説明する。以下に述べる各実施例は、第1実施例の変形例に相当する。本実施例の特徴は、一つのLUを構成する複数のLDEVのうち、いずれかのLDEVについて処理モードが変更された場合は、他のLDEVの処理モードも自動的に変更させる点にある。
図15のLDEV番号変換テーブルT3に示すように、例えば、LDEV「#0」とLDEV「#10」との2つのLDEVから一つのLU「#0」を構成することができる。図16は、ライトスルーフラグの設定処理及び補正処理を示すフローチャートである。本実施例では、SVP170によって所望のLDEVのライトスルーフラグを変更すると、このLDEVに関連する他のLDEVのライトスルーフラグがCHA110によって自動的に変更される。
S11〜S15の処理は既に述べたので説明を省略するが、この処理では、ユーザは、所望のLDEVについてライトスルーフラグを設定する。所定のCHA110は、同一のLUを構成するLDEVを検出する(S121)。CHA110は、関連するLDEV同士のライトスルーフラグを検出し(S122)、関連するLDEV同士のライトスルーフラグが一致しているか否かを判定する(S123)。
例えば、同一のLUを構成するLDEV群のうちいずれか一つのLDEVに設定されているライトスルーフラグが、他のLDEVに設定されているライトスルーフラグと異なる場合(S123:NO)、他のLDEVのライトスルーフラグを変更させることにより、関連するLDEV群のライトスルーフラグを一致させる(S124)。例えば、ライトスルーフラグの変更が行われた時期に基づいて、最新のライトスルーフラグを優先し、他のライトスルーフラグを最新のライトスルーフラグと同一の値となるように補正する。関連するLDEV群のライトスルーフラグが一致する場合(S123:YES)、S124の補正処理はスキップされる。そして、CHA110は、共有メモリ140及びローカルメモリに記憶されたLDEV制御テーブルT1をそれぞれ更新させる(S125)。
図17は、CHA110によって関連するLDEVのライトスルーフラグが補正される様子を示す説明図である。図17の左側に示すように、ユーザがSVP170を介してLDEV「#0」のライトスルーフラグを「オン」に設定した場合、CHA110は、図17の右側に示すように、このLDEV「#0」と共に同一のLUを構成する他のLDEV「#10」のライトスルーフラグを「オン」に設定する。
本実施例によれば、同一のLUに属する複数のLDEVのうちいずれか一つのLDEVについて、ユーザがライトスルーフラグを変更した場合でも、そのLDEVと共に同一のLUを構成する他のLDEVのライトスルーフラグを自動的に変更する構成とした。従って、キャッシュメモリ130の異常時に、同一のLUに属する各LDEVを同一の処理モードで運用することができる。また、ユーザは、LUの構成を意識することなく、自由にLDEV単位でライトスルーフラグを設定することができ、使い勝手が向上する。
図18は、本発明の第3実施例に係るライトスルーフラグ設定処理を示すフローチャートである。本実施例では、SVP170において、ライトスルーフラグの設定及び補正の両方を実行する。
即ち、ユーザは、管理端末30を介してSVP170にログインし(S131)、パリティグループ管理画面を呼び出して(S132)、所望のLDEVについてライトスルーフラグを個別に設定する(S133)。
SVP170は、ユーザによるライトスルーフラグの設定が完了すると、同一のLUに属するLDEVを検出し(S134)、これら互いに関連するLDEV群のライトスルーフラグが一致するか否かを検査する(S135)。関連するLDEV群のライトスルーフラグが一致しない場合(S136:NO)、SVP170は、先の実施例で述べたと同様の方法で、ライトスルーフラグを一致させる(S137)。そして、第1実施例で述べたように、SVP170は、LDEV制御テーブルT1を更新し(S138)、更新された情報を各CHA110にそれぞれ転送させる(S139)。
図19及び図20に基づいて第4実施例を説明する。本実施例では、各LU毎にそれぞれライトアクセス用の処理モードを個別に設定する。
ユーザは、管理端末30を介してSVP170にログインし(S141)、図20の上側に示すようなライトスルーフラグ設定画面を呼び出して、所望のLUについてライトスルーフラグを設定する(S142)。
SVP170は、例えば、LDEV番号変換テーブルT3を参照することにより、ユーザによってライトスルーフラグが設定(変更)されたLUに所属するLDEVをそれぞれ検出する(S143)。SVP170は、例えば、図20の下側にライトスルーフラグ管理テーブルT2として示すように、そのLUに属する全てのLDEVのライトスルーフラグを変更させる(S144)。なお、ライトスルーフラグ管理テーブルT2は、説明の便宜上使用されるもので、SVP170は、そのLUに属する各LDEVを管理する各LDEV制御テーブルT1中のライトスルーフラグを直接変更することができる(S145)。そして、SVP170は、更新された情報を各CHA110にそれぞれ転送させる(S146)。
図21は、第5実施例に係るライトスルーフラグ設定処理のフローチャートを示す。本実施例では、ユーザは、SVP170によってLU毎に処理モードを設定し、CHA110によってそのLUに属する各LDEVのライトスルーフラグが変更される。
ユーザは、管理端末30を介してSVP170にログインし(S151)、所望のLUについてライトスルーフラグを個別に設定する(S152)。SVP170は、更新された情報を各CHA110にそれぞれ転送させる(S153)。
各CHA110のうち所定の一つのCHA110は、ライトスルーフラグが変更されたLUに所属するLDEVを検出し(S161)、検出された各LDEVのライトスルーフラグを変更し(S162)、LDEV制御テーブルT1を更新させる(S163)。
このように、見かけ上はLU単位でライトスルーフラグを個別に設定するが、実際には、そのLUに属する各LDEVのライトスルーフラグを変更する。そして、見かけ上のライトスルーフラグの設定単位と実際の設定単位とを階層化することにより、より使い勝手が向上する。
図22及び図23に基づいて、第6実施例を説明する。本実施例では、あるLDEVについてライトスルーフラグを変更した場合に、そのLDEVと同一のパリティグループに所属する他のLDEVのライトスルーフラグを自動的に変更して一致させる。
ユーザは、管理端末30を介してSVP170にログインし(S171)、所望のLDEVについてライトスルーフラグを設定(変更)する(S172)。SVP170は、LDEV制御テーブルT1を更新し(S173)、更新された情報を各CHA110にそれぞれ転送させる(S174)。
所定のCHA110は、LDEV制御テーブルT1が更新されたことを検知すると、ライトスルーフラグが更新されたLDEVと同一のパリティグループに属する全てのLDEVを検出する(S181)。CHA110は、同一のパリティグループに属する各LDEVのライトスルーフラグを検出し、これら各フラグが一致するか否かを判定し(S183)、各フラグが一致しない場合は(S183:NO)、図23に示すように、同一パリティグループ内の各ライトスルーフラグを一致させる(S184)。そして、CHA110は、LDEV制御テーブルT1を更新させて処理を終了する(S185)。
図23には、LDEV「#0」〜「#3」がそれぞれ同一のパリティグループに所属している場合に、LDEV「#0」のライトスルーフラグが「オン」に設定された場合は、他のLDEV「#1」〜「#3」の全てのライトスルーフラグも「オン」に設定される様子が示されている。
図24に基づいて第7実施例を説明する。本実施例では、SVP170内において、同一のパリティグループに属する各LDEVのライトスルーフラグを一致させる。
ユーザは、管理端末30を介してSVP170にログインし(S191)、パリティグループ管理画面を呼び出して(S192)、所望のLDEVについてライトスルーフラグを設定(変更)する(S193)。そして、SVP170は、ライトスルーフラグが更新されたLDEVと同一のパリティグループに属する全てのLDEVを検出し(S194)、それらに設定されたライトスルーフラグをそれぞれ検出する(S195)。
SVP170は、検出された各ライトスルーフラグが一致するか否かを判定し(S196)、各フラグが一致しない場合は(S196:NO)、同一パリティグループ内の各ライトスルーフラグを一致させる(S197)。SVP170は、LDEV制御テーブルT1を更新し(S198)、更新された情報を各CHA110にそれぞれ転送させる(S199)。
図25及び図26に基づいて第8実施例を説明する。本実施例では、パリティグループ単位でライトアクセス用の処理モードをそれぞれ個別に設定可能としている。図25は、本実施例によるライトスルーフラグ設定処理を示すフローチャートである。
ユーザは、管理端末30を介してSVP170にログインし(S201)、図26の上側に示すようなライトスルーフラグ設定画面を呼び出して、所望のパリティグループについてライトスルーフラグを設定する(S202)。
SVP170は、例えば、パリティグループ−LDEV対応テーブルT4を参照することにより、ユーザによってライトスルーフラグが設定(変更)されたパリティグループに所属する全てのLDEVをそれぞれ検出する(S203)。
SVP170は、例えば、図26の下側にライトスルーフラグ管理テーブルT2として示すように、そのパリティグループに属する全てのLDEVのライトスルーフラグを変更させる(S204)。SVP170は、そのパリティグループに属する各LDEVを管理する各LDEV制御テーブルT1中のライトスルーフラグを更新し(S205)、更新された情報を各CHA110にそれぞれ転送させる(S206)。
図27は、第9実施例に係るライトスルーフラグ設定処理のフローチャートを示す。本実施例では、ユーザは、SVP170によってパリティグループ毎に処理モードを設定し、CHA110によってそのパリティグループに属する各LDEVのライトスルーフラグがそれぞれ変更される。
ユーザは、管理端末30を介してSVP170にログインし(S211)、所望のパリティグループについてライトスルーフラグを個別に設定する(S212)。SVP170は、更新された情報を各CHA110にそれぞれ転送させる(S213)。
所定のCHA110は、ライトスルーフラグが変更されたパリティグループに所属するLDEVを検出し(S221)、検出された各LDEVのライトスルーフラグを変更し(S222)、LDEV制御テーブルT1を更新させる(S223)。
図28及び図29に基づいて第10実施例を説明する。本実施例では、ディスクドライブ161の種別毎にライトアクセス用の処理モードをそれぞれ個別に設定できるようにしている。図28は、ライトスルーフラグ設定処理を示すフローチャートである。
ユーザは、管理端末30を介してSVP170にログインし(S231)、図29の上側に示すようなライトスルーフラグ設定画面を呼び出して、所望のディスク種別についてライトスルーフラグを設定する(S232)。
SVP170は、例えば、共有メモリ140に記憶されているパリティグループ管理テーブルT5を参照することにより、ユーザによってライトスルーフラグが設定(変更)されたディスク種別のディスクドライブ161を用いるパリティグループをそれぞれ検出する(S233)。ここで、パリティグループ管理テーブルT5は、例えば、パリティグループ番号と、そのRAIDレベルと、ドライブタイプとをそれぞれ対応付けることにより、構成することができる。さらにドライブタイプには、例えば、ディスク種別と、記憶容量と、ディスクドライブの供給者名とを含めることができる。
そして、SVP170は、パリティグループ−LDEV対応テーブルT4を参照することにより、検出された各パリティグループにそれぞれ属するLDEVを全て検出し(S234)、例えば、図29の下側にライトスルーフラグ管理テーブルT2として示すように、そのパリティグループに属する全てのLDEVのライトスルーフラグをそれぞれ変更させる(S235)。SVP170は、そのパリティグループに属する各LDEVを管理する各LDEV制御テーブルT1中のライトスルーフラグを更新し(S236)、更新された情報を各CHA110にそれぞれ転送させる(S237)。
これにより、例えば、ディスクの種別に応じて、キャッシュメモリ130に異常が発生した場合のライトアクセスを処理することができる。
図30に基づいて第11実施例を説明する。本実施例では、SVP170とCHA110との協働により、ディスクドライブ161の種別毎にライトアクセス用の処理モードをそれぞれ個別に設定する。
図30は、ライトスルーフラグ設定処理を示すフローチャートである。ユーザは、管理端末30を介してSVP170にログインし(S241)所望のディスク種別についてライトスルーフラグを設定する(S242)。SVP170は、更新された情報を各CHA110にそれぞれ転送させる(S243)。
所定のCHA110は、ライトスルーフラグが設定されたディスク種別のディスクドライブ161を用いるパリティグループをそれぞれ検出し(S251)、検出された各パリティグループにそれぞれ属するLDEVを全て検出し(S252)、そのパリティグループに属する全てのLDEVのライトスルーフラグをそれぞれ変更させる(S253)。CHA110は、そのパリティグループに属する各LDEVを管理する各LDEV制御テーブルT1中のライトスルーフラグをそれぞれ更新する(S254)。
図31及び図32に基づいて第12実施例を説明する。本実施例では、RAIDレベル毎にライトアクセス用の処理モードをそれぞれ個別に設定できるようにしている。図31は、ライトスルーフラグ設定処理を示すフローチャートである。
ユーザは、管理端末30を介してSVP170にログインし(S261)、図32の上側に示すようなライトスルーフラグ設定画面を呼び出して、所望のRAIDレベルについてライトスルーフラグを設定する(S262)。SVP170は、ライトスルーフラグが設定されたRAIDレベルのパリティグループをそれぞれ検出する(S263)。
SVP170は、パリティグループ−LDEV対応テーブルT4を参照することにより、検出された各パリティグループにそれぞれ属するLDEVを全て検出し(S264)、例えば、図32の下側にライトスルーフラグ管理テーブルT2として示すように、そのパリティグループに属する全てのLDEVのライトスルーフラグをそれぞれ変更させる(S265)。SVP170は、そのパリティグループに属する各LDEVを管理する各LDEV制御テーブルT1中のライトスルーフラグを更新し(S266)、更新された情報を各CHA110にそれぞれ転送させる(S267)。
これにより、例えば、RAIDレベルに応じて、キャッシュメモリ130に異常が発生した場合のライトアクセスを処理することができる。例えば、RAID0の場合は、単に記憶容量を結合させているだけであり、ライトスルー動作を行っても、処理時間はそれほどかからない。即ち、ライトペナルティは小さい。また、RAID1の場合は、ミラーリングを行うだけで複雑な演算等は必要としないため、ライトペナルティは小さい。従って、例えば、RAID0やRAID1については、ライトスルーフラグをオンに設定し、ライトスルーでライトアクセスを処理することができる。また、RAID5のようなパリティ計算を必要するRAIDレベルの場合は、旧データ及び旧パリティを読出した後、パリティを再計算し、新データ及び新パリティを書込む必要があり、ライトペナルティが大きい。そこで、RAID5等の場合は、ライトスルーフラグをオフに設定して、応答性の維持を図ることができる。
図33に基づいて第13実施例を説明する。本実施例では、SVP170とCHA110との協働により、ディスクドライブ161の種別毎にライトアクセス用の処理モードをそれぞれ個別に設定する。
図33は、ライトスルーフラグ設定処理を示すフローチャートである。ユーザは、管理端末30を介してSVP170にログインし(S271)所望のRAIDレベルについてライトスルーフラグを設定する(S272)。SVP170は、更新された情報を各CHA110にそれぞれ転送させる(S273)。
所定のCHA110は、ライトスルーフラグが設定されたRAIDレベルのパリティグループをそれぞれ検出する(S281)。CHA110は、検出された各パリティグループにそれぞれ属するLDEVを全て検出し(S282)、そのパリティグループに属する全てのLDEVのライトスルーフラグをそれぞれ変更させる(S283)。CHA110は、そのパリティグループに属する各LDEVを管理する各LDEV制御テーブルT1中のライトスルーフラグをそれぞれ更新する(S284)。
図34〜図36に基づいて第14実施例を説明する。本実施例では、ストレージ装置100内に設けられた仮想筐体(SLPR)毎に、キャッシュメモリ異常時のライトアクセス用の処理モードをそれぞれ設定可能としている。
図34は、ストレージシステムの構成を簡略化して示す説明図である。ストレージ装置100には、複数のSLPRを設けることができる。SLPRとは、ストレージ装置100のキャッシュメモリやボリューム等の資源を論理的に分割して形成されるもので、各SLPRは、一つのストレージ装置100内に存在する独立した仮想的なストレージ装置のように振る舞う。
各SLPR1,2は、仮想的なコントローラ101A,101Bと、仮想的なキャッシュメモリと、ボリューム163A,163Bとをそれぞれ有する。SLPR1は、ライトキャッシュとしてキャッシュ面131A及びNVS面132Aを備え、同様に、SLPR2は、ライトキャッシュとしてキャッシュ面131B及びNVS面132Bを備えている。但し、これらのコントローラ101A,101Bやライトキャッシュ等は、その物理的存在が別々に形成されているわけではなく、ストレージ装置100の有する制御機能やキャッシュメモリが論理的に分割されて構成されている。
図35は、ライトスルーフラグ設定処理を示すフローチャートである。ユーザは、管理端末30を介してSVP170にログインし(S291)、図36の上側に示すようなライトスルーフラグ設定画面を呼び出して、所望のSLPRについてライトスルーフラグを設定する(S292)。SVP170は、ライトスルーフラグが設定されたSLPR内のパリティグループをそれぞれ検出する(S293)。
SVP170は、パリティグループ番号とSLPR番号とを対応付けて管理するSLPR管理テーブルT7及びパリティグループ−LDEV対応管理テーブルT4を参照することにより、検出された各パリティグループにそれぞれ属するLDEVを全て検出する(S294)。SVP170は、例えば、図36の下側にライトスルーフラグ管理テーブルT2として示すように、そのパリティグループに属する全てのLDEVのライトスルーフラグをそれぞれ変更させる(S295)。SVP170は、そのパリティグループに属する各LDEVを管理する各LDEV制御テーブルT1中のライトスルーフラグを更新し(S296)、更新された情報を各CHA110にそれぞれ転送させる(S297)。
図37及び図38に基づいて第15実施例を説明する。本実施例では、同一のデータをそれぞれ記憶する複数のストレージ装置100,200において、一方のストレージ装置に障害が発生した場合は、他方のストレージ装置のキャッシュメモリ異常時におけるライトアクセス用処理モードを変更する。
図37は、本実施例によるストレージシステムの全体構成を示す。このストレージシステムには、2つのストレージ装置100,200が含まれている。ストレージ装置200は、ストレージ装置100と同様に構成することができ、例えば、コントローラ201,LDEV263,SVP270等を備える。なお、各ストレージ装置100,200は、同一の構成を備える必要はない。
ホスト10は、ストレージ装置100のLDEV163とストレージ装置200のLDEV263との両方にそれぞれ同一のデータを書き込む。ストレージ装置100は、ホスト10からのライトデータをキャッシュ面131,NVS面132の両方に記憶させた後、書込み完了を報告する。同様に、ストレージ装置200も、ホスト10からのライトデータをキャッシュ面231,NVS面232の両方に記憶させた後、書込み完了を報告する。
ここで、例えば、ストレージ装置100のキャッシュメモリ130に障害が発生した場合、このストレージ装置100は、上述のように第2処理モードまたは第3処理モードのいずれかに従ってライトアクセスを処理する。他方のストレージ装置200が正常に稼働している場合、同一のライトデータがストレージ装置200にも記憶されるため、ストレージ装置100においては、第3処理モードをより多く用いることができる。
ストレージ装置100のキャッシュメモリ130のみに記憶されたライトデータが仮に失われたとしても、このライトデータと同一のデータは、ストレージ装置200に記憶されている。
しかし、ストレージ装置200に障害が発生してシステムダウンしたような場合は、ストレージ装置100のみがライトデータを保持することになり、ストレージシステムにおけるストレージ装置100の重要性が高まる。同様に、先にストレージ装置200がシステムダウンした場合も、残されたストレージ装置100のみがライトデータを保持することになる。そこで、本実施例では、相手方のストレージ装置200に障害が発生した場合に、ストレージ装置100のライトアクセス用処理モードを変更する。
図38は、ライトスルーフラグ変更処理を示すフローチャートである。ストレージ装置100で実行される場合を例に挙げて説明すると、ストレージ装置100のSVP170とストレージ装置200のSVP270とは、LAN等の通信ネットワークCN4を介して互いに作動状況を監視している(S301)。
SVP170は、相手方のストレージ装置200に異常が発生したことを検知すると(S302:YES)、所定の単位(例えば、LDEV、LU、パリティグループ、ディスク種別等)毎にそれぞれ設定されているライトスルーフラグをオンに変更する(S303)。SVP170は、LDEV制御テーブルを更新し(S304)、更新された情報を各CHA110に転送させる(S305)。
このように、本実施例では、ストレージシステム全体としての冗長度が低下した場合は、ストレージ装置単体での冗長度を高めることにより、ストレージシステムの信頼性を維持する。
なお、本発明は、上述した実施の形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。例えば、ライトデータをライトキャッシュにより二重記憶させる場合に限らず、RAID5等のようにパリティとデータとに分解して冗長記憶させる構成でもよい。
本発明の実施形態の概念を示す説明図である。
ストレージ装置のハードウェア構成に着目したブロック図である。
ライトアクセスの処理に着目したストレージシステムの概略構成図である。
ストレージ装置の論理的構成に着目した説明図である。
パリティグループと論理ボリューム(LDEV)と論理ユニット(LU)との対応関係を示す説明図である。
(a)はLDEV制御テーブルを、(b)は各LDEV制御テーブルに設定されたライトスルーフラグを抽出して一覧形式で示すライトスルーフラグ管理テーブルを、それぞれ示す説明図である。
LDEV番号変換テーブルとパリティグループ−LDEV対応テーブルとの関係を示す説明図である。
ライトスルーフラグ設定処理を示すフローチャートである。
各LDEV単位でライトスルーフラグを設定する画面例を示す説明図である。
ライトアクセス処理の全体概要を示すフローチャートである。
キャッシュメモリが正常な場合のライトアクセス処理を示すフローチャートである。
キャッシュメモリに異常を生じた場合のライトアクセス処理を示すフローチャートである。
キャッシュメモリに異常を生じた場合の別のライトアクセス処理を示すフローチャートである。
リードアクセス処理を示すフローチャートである。
第2実施例で用いられるLDEV番号変換テーブルを示す説明図である。
ライトスルーフラグの設定及び補正を行うフローチャートである。
関連するライトスルーフラグ同士が補正される様子を示す説明図である。
第3実施例で用いられるライトスルーフラグ設定処理を示すフローチャートである。
第4実施例で用いられるライトスルーフラグ設定処理を示すフローチャートである。
LU単位でライトスルーフラグを設定する画面例を示す説明図である。
第5実施例で用いられるライトスルーフラグの指定処理及び設定処理を示すフローチャートである。
第6実施例で用いられるライトスルーフラグの設定処理及び補正処理を示すフローチャートである。
互いに関連するライトスルーフラグ同士が補正される様子を示す説明図である。
第7実施例で用いられるライトスルーフラグ設定処理のフローチャートである。
第8実施例で用いられるライトスルーフラグ設定処理のフローチャートである。
パリティグループ単位でライトスルーフラグを設定する画面例を示す説明図である。
第9実施例で用いられるライトスルーフラグ設定処理のフローチャートである。
第10実施例で用いられるライトスルーフラグ設定処理のフローチャートである。
ディスク種別毎にライトスルーフラグを設定する画面例を示す説明図である。
第11実施例で用いられるライトスルーフラグの指定処理及び設定処理を示すフローチャートである。
第12実施例で用いられるライトスルーフラグ設定処理のフローチャートである。
RAIDレベル毎にライトスルーフラグを設定する画面例を示す説明図である。
第13実施例で用いられるライトスルーフラグの指定処理及び設定処理を示すフローチャートである。
第14実施例のストレージシステムの概要を示す説明図である。
ライトスルーフラグ設定処理を示すフローチャートである。
SLPR(仮想筐体)毎にライトスルーフラグを設定する画面例を示す説明図である。
第15実施例のストレージシステムの概要を示す説明図である。
ライトスルーフラグ変更処理を示すフローチャートである。
符号の説明
1…ホスト、2…ストレージ装置、3…コントローラ、4,5…キャッシュ領域、6A,6B…ボリューム、10…ホスト、12…パス制御部、13…アプリケーションプログラム、20…スイッチ、30…管理端末、100,200…ストレージ装置、101,101A,101B,201…コントローラ、111…通信ポート、130…キャッシュメモリ、131,231…キャッシュ面、132,232…NVS面、140…共有メモリ、150…接続制御部、160…記憶部、161…ディスクドライブ(PDEV)、162…パリティグループ(VDEV)、163,263…論理ボリューム(LDEV)、164…論理ユニット(LU)、170,270…SVP、CN1〜CN4…通信ネットワーク、T1〜T7…テーブル