(57)【要約】【課題】信頼性及びＩＯ処理性能が高いストレージシステムを実現する。【解決手段】複数のコントローラと、複数の記憶ドライブと、を備えるストレージシステムであって、メモリに、第１キャッシュ領域と、第２キャッシュ領域とが設定されており、複数の記憶ドライブは、キャッシュ領域書き込み可否属性として、第１キャッシュ領域と第２キャッシュ領域のうち、一方にデータ書き込みが許可されて、他方にデータ書き込みが禁止されており、複数のコントローラは、そのキャッシュ領域に格納したデータを他のコントローラのキャッシュ領域に複製し冗長化させる場合、当該データが第１キャッシュ領域へ格納されている場合は他のコントローラの第２キャッシュ領域に冗長化させ、当該データが第２キャッシュ領域へ格納されている場合は他のコントローラの第１キャッシュ領域に冗長化させる。【選択図】図１
2020161029.tif 000002
【特許請求の範囲】
【請求項１】
演算装置、前記演算装置に接続され、キャッシュ領域が設定されるメモリ、及び前記演算装置に接続されるインタフェースを有する複数のコントローラと、
複数の記憶ドライブと、
を備えるストレージシステムであって、
前記メモリに、第１キャッシュ領域と、第２キャッシュ領域とが設定されており、
前記複数の記憶ドライブは、キャッシュ領域書き込み可否属性として、前記第１キャッシュ領域と前記第２キャッシュ領域のうち、一方にデータ書き込みが許可されて、他方にデータ書き込みが禁止されており、
前記複数のコントローラは、そのキャッシュ領域に格納したデータを他のコントローラのキャッシュ領域に複製し冗長化させる場合、当該データが第１キャッシュ領域へ格納されている場合は前記他のコントローラの第２キャッシュ領域に冗長化させ、当該データが第２キャッシュ領域へ格納されている場合は前記他のコントローラの第１キャッシュ領域に冗長化させることを特徴とするストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記複数のコントローラは、
前記記憶ドライブに格納される読出データを送信するための読出要求を受信した場合、前記記憶ドライブに前記キャッシュ領域書き込み可否属性により書き込み可能な前記メモリのキャッシュ領域への前記読出データの書込みを指示し、
前記記憶ドライブによって前記キャッシュ領域に書き込まれたデータを、前記読出要求の要求元に送信することを特徴とするストレージシステム。
【請求項３】
請求項１に記載のストレージシステムであって、
前記複数のコントローラは、第１コントローラ及び第２コントローラを含み、
前記第１コントローラは、
書込要求を受信した場合、前記第１キャッシュ領域及び前記第２キャッシュ領域の空き容量に基づいて、書込データを書き込むキャッシュ領域を決定し、
前記決定されたキャッシュ領域に前記書込データを書き込み、
前記決定されたキャッシュ領域の情報とともに前記書込データを前記第２コントローラに送信し、
前記第２コントローラは、前記書込データを受信した場合、前記第１コントローラが前記書込データを書き込んだキャッシュ領域とはは前記キャッシュ領域書き込み可否属性が異なるキャッシュ領域に前記書込データを書き込むことを特徴とするストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
前記複数のコントローラは、前記複数の記憶ドライブの各々に対して、前記第１キャッシュ領域及び前記第２キャッシュ領域を設定し、前記記憶ドライブのキャッシュ領域書き込み可否属性を決定することを特徴とするストレージシステム。
【請求項５】
請求項４に記載のストレージシステムであって、
前記複数のコントローラは、前記記憶ドライブと、前記第１キャッシュ領域及び前記第２キャッシュ領域のアドレスとの対応関係を管理する情報を生成することを特徴とするストレージシステム。
【請求項６】
演算装置、前記演算装置に接続され、キャッシュ領域が設定されるメモリ、及び前記演算装置に接続されるインタフェースを有する複数のコントローラと、複数の記憶ドライブとを備えるストレージシステムの制御方法であって、
前記メモリに、第１キャッシュ領域と、第２キャッシュ領域とが設定されており、
前記複数の記憶ドライブは、キャッシュ領域書き込み可否属性として、前記第１キャッシュ領域と前記第２キャッシュ領域のうち、一方にデータ書き込みが許可されて、他方にデータ書き込みが禁止されており、
前記ストレージシステムの制御方法は、
前記複数のコントローラが、そのキャッシュ領域に格納したデータを他のコントローラのキャッシュ領域に複製し冗長化させる場合、当該データが第１キャッシュ領域へ格納されている場合は前記他のコントローラの第２キャッシュ領域に冗長化させ、当該データが第２キャッシュ領域へ格納されている場合は前記他のコントローラの第１キャッシュ領域に冗長化させるステップを含むことを特徴とするストレージシステムの制御方法。
【請求項７】
請求項６に記載のストレージシステムの制御方法であって、
前記複数のコントローラが、前記記憶ドライブに格納される読出データを送信するための読出要求を受信した場合、前記記憶ドライブに前記キャッシュ領域書き込み可否属性により書き込み可能な前記メモリのキャッシュ領域への前記読出データの書込みを指示するステップと、
前記複数のコントローラが、前記記憶ドライブによって前記キャッシュ領域に書き込まれたデータを、前記読出要求の要求元に送信するステップと、を含むことを特徴とするストレージシステムの制御方法。
【請求項８】
請求項６に記載のストレージシステムの制御方法であって、
前記複数のコントローラは、第１コントローラ及び第２コントローラを含み、
前記データを冗長化するステップは、
前記第１コントローラが、書込要求を受信した場合、前記第１キャッシュ領域及び前記第２キャッシュ領域の空き容量に基づいて、書込データを書き込むキャッシュ領域を決定するステップと、
前記第１コントローラが、前記決定されたキャッシュ領域に前記書込データを書き込むステップと、
前記第１コントローラが、前記決定されたキャッシュ領域の情報とともに前記書込データを前記第２コントローラに送信するステップと、
前記第２コントローラが、前記書込データを受信した場合、前記第１コントローラが前記書込データを書き込んだキャッシュ領域とは前記キャッシュ領域書き込み可否属性が異なるキャッシュ領域に前記書込データを書き込むステップと、を含むことを特徴とするストレージシステムの制御方法。
【請求項９】
請求項６に記載のストレージシステムの制御方法であって、
前記データを冗長化するステップは、
前記複数のコントローラが、前記複数の記憶ドライブの各々に対して、前記第１キャッシュ領域及び前記第２キャッシュ領域を設定するステップと、
前記複数のコントローラが、前記記憶ドライブのキャッシュ領域書き込み可否属性を決定するステップと、を含むことを特徴とするストレージシステムの制御方法。
【請求項１０】
請求項９に記載のストレージシステムの制御方法であって、
前記データを冗長化するステップは、前記複数のコントローラが、前記記憶ドライブと、前記第１キャッシュ領域及び前記第２キャッシュ領域のアドレスとの対応関係を管理する情報を生成するステップを含むことを特徴とするストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＯＭＭＵを用いてＩＯ処理を制御するストレージシステムに関する。
【背景技術】
【０００２】
ストレージシステムは、コントローラと複数の記憶ドライブを有する。コントローラは、バックエンドスイッチを介して複数の記憶ドライブと接続される。コントローラ及び記憶ドライブとの間の通信規格としては、一般的に、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）が用いられる。ＳＡＳの通信路には、各プロトコルの通信処理を行う専用のインタフェースが必要となる。ＳＡＳの通信路を有するストレージシステムは、不正なデータの書込み等を防止できるため、高い信頼性を実現できる。
【０００３】
近年、新たな通信規格の一つとして、Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）が用いられている。ＮＶＭｅを採用したストレージシステムでは、コントローラと記憶ドライブとがＰＣＩ  Ｅｘｐｒｅｓｓバス（ＰＣＩｅバス）を介して接続される。記憶ドライブはコントローラに含まれるメモリに直接アクセスできる。ＮＶＭｅを用いることによってＳＡＳプロトコルの処理が不要になるため、ＩＯ処理の性能を向上させることが期待できる。
【０００４】
ＮＶＭｅを採用したストレージシステムでは、ＳＡＳプロトコルのような信頼性を確保するための制御が行われないため、記憶ドライブからの不正データの転送を抑止することができない。これに対して、特許文献１に記載の技術が知られている。
【０００５】
特許文献１には、キャッシュ領域に対する不正なデータの書込みによるデータの破壊を回避するために、必要に応じてＩＯページテーブルを書き換えて記憶ドライブからのアクセスを制御する方法が記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１７／１９５３２４号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の処理のように、ＩＯページテーブルの書換えを伴うＩＯ処理はＩＯ性能が劣化するという問題がある。また、コントローラに障害が発生した場合、キャッシュ領域に格納されたダーティ状態のデータが失われるという問題がある。
【０００８】
本発明は、信頼性及びＩＯ性能が高いストレージシステム及びストレージシステムの制御方法を実現することを目的とする。
【課題を解決するための手段】
【０００９】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、演算装置、前記演算装置に接続され、キャッシュ領域が設定されるメモリ、及び前記演算装置に接続されるインタフェースを有する複数のコントローラと、複数の記憶ドライブと、を備えるストレージシステムであって、前記メモリに、第１キャッシュ領域と、第２キャッシュ領域とが設定されており、前記複数の記憶ドライブは、キャッシュ領域書き込み可否属性として、前記第１キャッシュ領域と前記第２キャッシュ領域のうち、一方にデータ書き込みが許可されて、他方にデータ書き込みが禁止されており、前記複数のコントローラは、そのキャッシュ領域に格納したデータを他のコントローラのキャッシュ領域に複製し冗長化させる場合、当該データが第１キャッシュ領域へ格納されている場合は前記他のコントローラの第２キャッシュ領域に冗長化させ、当該データが第２キャッシュ領域へ格納されている場合は前記他のコントローラの第１キャッシュ領域に冗長化させる。
【発明の効果】
【００１０】
本発明によれば、信頼性及びＩＯ処理性能が高いストレージシステムを実現できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１１】
【図１】実施例１の計算機システムの構成の一例を示す図である。
【図２】実施例１のコントローラが管理する物理アドレス空間を示す図である。
【図３】実施例１の制御情報に含まれる記憶ドライブ対応情報の一例を示す図である。
【図４】実施例１の制御情報に含まれる領域割当管理情報の一例を示す図である。
【図５】実施例１のＩＯページテーブルの一例を示す図である。
【図６】実施例１のストレージシステムが実行する初期設定処理の一例を説明するフローチャートである。
【図７Ａ】実施例１のストレージシステムが実行するＩＯページテーブル生成処理の一例を説明するフローチャートである。
【図７Ｂ】実施例１のストレージシステムが実行するＩＯページテーブル生成処理の一例を説明するフローチャートである。
【図７Ｃ】実施例１のストレージシステムが実行するＩＯページテーブル生成処理の一例を説明するフローチャートである。
【図８】実施例１のストレージシステムが実行する設定更新処理の一例を説明するフローチャートである。
【図９】実施例１のストレージシステムが実行するＩＯページテーブル更新処理（追加）の一例を説明するフローチャートである。
【図１０】実施例１のストレージシステムが実行するＩＯページテーブル更新処理（停止）の一例を説明するフローチャートである。
【図１１】実施例１のストレージシステムが実行するＩＯページテーブル登録処理の一例を説明するフローチャートである。
【図１２】実施例１のストレージシステムがＷｒｉｔｅ要求を受信した場合に実行するＩＯ処理を説明するフローチャートである。
【図１３】実施例１のストレージシステムが実行する格納先判定処理の一例を説明するフローチャートである。
【図１４Ａ】実施例１のストレージシステムが実行する冗長化処理の一例を説明するフローチャートである。
【図１４Ｂ】実施例１のストレージシステムが実行する冗長化処理の一例を説明するフローチャートである。
【図１５Ａ】実施例１のストレージシステムがＲｅａｄ要求を受信した場合に実行するＩＯ処理を説明するフローチャートである。
【図１５Ｂ】実施例１のストレージシステムがＲｅａｄ要求を受信した場合に実行するＩＯ処理を説明するフローチャートである。
【図１５Ｃ】実施例１のストレージシステムがＲｅａｄ要求を受信した場合に実行するＩＯ処理を説明するフローチャートである。
【図１６】実施例１のＷｒｉｔｅ要求を受信した場合に実行するＩＯ処理の特徴及び効果を説明する図である。
【図１７】実施例１のＷｒｉｔｅ要求を受信した場合に実行するＩＯ処理の特徴及び効果を説明する図である。
【図１８】実施例１のＲｅａｄ要求を受信した場合に実行するＩＯ処理の特徴及び効果を説明する図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施例の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００１３】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【００１４】
本明細書等における「第１」、「第２」、「第３」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【実施例１】
【００１５】
図１は、実施例１の計算機システムの構成の一例を示す図である。
【００１６】
計算機システムは、複数のストレージシステム１００、複数のドライブボックス１０１、及びホスト端末１０４から構成される。複数のストレージシステム１００は、ネットワーク１０２を介して互いに接続される。また、ホスト端末１０４は、ネットワーク１０３を介して少なくとも一つのストレージシステム１００と接続される。
【００１７】
なお、図１に示す計算機システムの構成は一例であって、これに限定されない。例えば、ストレージシステム１００及びドライブボックス１０１が一体となったストレージシステムでもよい。
【００１８】
ネットワーク１０２、１０３は、例えば、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、及びＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）である。ネットワーク１０２、１０３の接続方式は無線及び有線のいずれでもよい。
【００１９】
ホスト端末１０４は、ストレージシステムが提供する記憶領域にデータを書き込み、また、記憶領域からデータを読み出す計算機である。ホスト端末１０４は、図示しない、ＣＰＵ、メモリ、及びインタフェースを有する。
【００２０】
ドライブボックス１０１は、複数の記憶ドライブ１５１を収容する装置である。ドライブボックス１０１は、スイッチ１５０及び複数の記憶ドライブ１５１を有する。なお、複数の記憶ドライブ１５１を用いてＲＡＩＤグループが構成されてもよい。また、ストレージシステム１００は、ＲＡＩＤグループ上に、ホスト端末１０４に提供する記憶領域としてＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）を生成してもよい。
【００２１】
スイッチ１５０は、コントローラ１２０に含まれるＣＰＵ１３０及び記憶ドライブ１５１を接続する。実施例１では、ＣＰＵ１３０及びスイッチ１５０の間、並びに、記憶ドライブ１５１及びスイッチ１５０の間は、ＰＣＩｅバスを介して接続される。スイッチ１５０は、記憶ドライブ１５１と接続するポートを複数有する。
【００２２】
記憶ドライブ１５１は、ホスト端末１０４が使用する記憶領域を提供する装置である。実施例１の記憶ドライブ１５１は、ＮＶＭｅのプロトコルに準拠した処理を行うＮＶＭｅドライブである。なお、記憶ドライブ１５１にはＳＡＴＡドライブ等が含まれてもよい。また、２つのＣＴＬと接続しているＰＣＩＥｘｐｒｅｓｓ  Ｓｗｉｔｃｈに接続したシングルポート  ＮＶＭｅ  ＳＳＤでもよい。図１では、可用性が高いデュアルポート  ＮＶＭｅ  ＳＳＤを記憶ドライブ１５１の一例として示している。
【００２３】
ストレージシステム１００は、ホスト端末１０４に記憶領域を提供する。ストレージシステム１００は、複数のノード１１０を含み、また、ドライブボックス１０１と接続する。
【００２４】
ノード１１０は、ストレージシステム１００の制御を行うハードウェアであって、複数のコントローラ１２０を有する。コントローラ１２０は、ＣＰＵ１３０、メモリ１３１、ノードインタフェース１３２、及びホストインタフェース１３３を有する。
【００２５】
ＣＰＵ１３０は、各種演算を行うハードウェアであり、複数のコア１４０及びＩＯＭＭＵ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）１４１を有する。ＣＰＵ１３０は、メモリ１３１に格納されるプログラムを実行する。ＣＰＵ１３０がプログラムにしたがって処理を実行することによって、特定の機能を実現する機能部（モジュール）として動作する。以下の説明では、機能部を主語に処理を説明する場合、ＣＰＵ１３０が当該機能部を実現するプログラムを実行していることを示す。
【００２６】
コア１４０は、演算処理を実行するハードウェアである。ＩＯＭＭＵ１４１は、ＩＯページテーブル２２３（図２参照）に基づいて、ＰＣＩｅバスを介してＣＰＵ１３０と接続される記憶ドライブ１５１によるメモリ１３１へのアクセスを制御する。
【００２７】
メモリ１３１は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の揮発性の記憶素子、並びに、ＮＡＮＤ  Ｆｌａｓｈ、ＳＴＴ−ＲＡＭ（Ｓｐｉｎ  Ｔｒａｎｓｆｅｒ  Ｔｏｒｑｕｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）及びＰＣＭ（Ｐｈａｓｅ−ｃｈａｎｇｅ  ｍｅｍｏｒｙ）等の不揮発性の記憶素子の少なくともいずれかから構成される記憶装置である。メモリ１３１には、ＣＰＵ１３０が実行するプログラム及び各種情報を格納する記憶領域、及びデータを一時的に格納する記憶領域が設定される。
【００２８】
ノードインタフェース１３２は、ノード１１０と接続するためのインタフェースである。ノードインタフェース１３２は、例えば、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌアダプタである。
【００２９】
ホストインタフェース１３３は、ホスト端末１０４と接続するためのインタフェースである。ホストインタフェース１３３は、Ｅｔｈｅｒｎｅｔアダプタ（Ｅｔｈｅｒｎｅｔは登録商標）、ＩｎｆｉｎｉＢａｎｄ、Ｈｏｓｔ  Ｂｕｓアダプタ、及びＰＣＩ  Ｅｘｐｒｅｓｓブリッジ等である。
【００３０】
図２は、実施例１のコントローラ１２０が管理する物理アドレス空間を示す図である。
【００３１】
物理アドレス空間は、ＤＲＡＭ空間２０１、予約空間２０２、及びＭＭＩＯ空間２０３を含む。
【００３２】
予約空間２０２は、アクセスできないアドレス空間である。ＭＭＩＯ空間２０３は、ＩＩＯデバイスにアクセスするために使用されるアドレス空間である。コントローラ１２０は、記憶ドライブ１５１からの予約空間２０２及びＭＭＩＯ空間２０３へのアクセス（書込み）を禁止するように管理する。
【００３３】
ＤＲＡＭ空間２０１は、メモリ１３１にアクセスするために使用されるアドレス空間である。ＤＲＡＭ空間２０１は、メモリ１３１のコントロールデータ領域２１１、バッファ領域２１２、及びキャッシュ領域２１３がマップされたアドレス空間を含む。
【００３４】
コントロールデータ領域２１１は、ストレージシステム１００を制御するためのプログラム及び情報を格納する記憶領域である。コントロールデータ領域２１１には、制御プログラム２２１、制御情報２２２、及びＩＯページテーブル２２３等が格納される。
【００３５】
制御プログラム２２１は、ストレージシステム１００の制御機能（ストレージ制御部）を実現するプログラムである。
【００３６】
制御情報２２２は、ストレージシステム１００を制御するための情報である。制御情報２２２は、例えば、キャッシュディレクトリ、バッファデータ２３１を管理するためのデータ、キャッシュデータ２４１を管理するためのデータ、各種デバイスを制御するためのコマンド、及びコントローラ１２０間で共有されるデータ等を含む。また、制御情報２２２は、ＲＡＩＤ構成を管理するためのデータ、ホスト端末１０４に提供する記憶領域と記憶ドライブ１５１との対応関係を管理するための情報を含む。
【００３７】
なお、実施例１のキャッシュディレクトリは、サイズが６４ｋＢであるセグメントと呼ばれる単位で管理される。具体的には、セグメントの状態、ＬＲＵ情報、ＭＲＵ情報、ダーティ状態又はクリーン状態のいずれであるかを示すビットマップ、メモリ１３１の物理アドレス等のリストとして管理される。
【００３８】
ＩＯページテーブル２２３は、ＩＯＭＭＵ１４１が記憶ドライブ１５１によるメモリ１３１へのアクセスを制御するために使用するテーブルである。実施例１では各ＮＶＭｅドライブに対して一つのＩＯページテーブル２２３が生成される。複数のＩＯページテーブル２２３は、ＩＯページテーブル管理情報５００（図５参照）にて管理される。ＩＯページテーブル管理情報５００及びＩＯページテーブル２２３の詳細は図５を用いて説明する。
【００３９】
コア１４０は、ＩＯＭＭＵ１４１の設定及び更新を行うことができる。また、コア１４０は、ＩＯＭＭＵ１４１のレジスタを操作することによってＩＯＭＭＵ１４１が保持するＩＯページテーブル２２３を無効化し、また、ＩＯページテーブル２２３をキャッシュすることができる。
【００４０】
バッファ領域２１２は、バッファデータ２３１を格納する記憶領域である。バッファデータ２３１は、ＩＯ処理が完了した後に破棄される。コントローラ１２０は、記憶ドライブ１５１からのバッファ領域２１２へのアクセス（書込み）を許可するように管理する。
【００４１】
キャッシュ領域２１３は、キャッシュデータ２４１を格納する記憶領域である。キャッシュデータ２４１には、ダーティ状態のキャッシュデータ２４１と、クリーン状態のキャッシュデータ２４１とが存在する。
【００４２】
ダーティ状態のキャッシュデータ２４１は、メモリ１３１にのみ存在するデータである。クリーン状態のキャッシュデータ２４１は、記憶ドライブ１５１にデステージされたデータである。ダーティ状態のキャッシュデータ２４１は、記憶ドライブ１５１にデステージされた場合、クリーン状態のキャッシュデータ２４１として管理される。
【００４３】
ストレージシステム１００のコントローラに障害が発生した場合、クリーン状態のキャッシュデータ２４１は、記憶ドライブ１５１から読み出すことによって復元できるが、ダーティ状態のキャッシュデータ２４１を障害が発生したコントローラから復元することは困難である。したがって、ダーティ状態のキャッシュデータ２４１は、複数のコントローラ１２０間で冗長化されている。ダーティ状態のキャッシュデータ２４１は、記憶ドライブ１５１にデステージされた後、冗長化構成を解除し、ダーティ状態からクリーン状態に遷移させることができる。
【００４４】
実施例１では、各ＮＶＭｅドライブに対してアクセス属性が異なる複数のキャッシュ領域２１３が設定される。具体的には、一つの記憶ドライブ１５１に対して、データの書込みが可能なキャッシュ領域２１３と、データの書込みができないキャッシュ領域２１３とが設定される。以下の説明では、データの書込みが可能なキャッシュ領域２１３を許可キャッシュ領域２１３と記載し、データの書込みができないキャッシュ領域２１３を不許可キャッシュ領域２１３と記載する。
【００４５】
これによって、ＮＶＭｅドライブからの不正データの書込みによるデータの破壊を抑止することができる。また、各ＮＶＭｅドライブに設定される許可キャッシュ領域２１３が分散するように設定することによって、他のＮＶＭｅドライブからの不正データの書込みによるデータの破壊を抑止することができる。
【００４６】
次に、図３から図５を用いてストレージシステム１００が管理する情報について説明する。
【００４７】
図３は、実施例１の制御情報２２２に含まれる記憶ドライブ対応情報３００の一例を示す図である。
【００４８】
実施例１では、柔軟なＲＡＩＤグループの構成及び記憶ドライブ１５１の保守（挿入及び抜去）を実現するために、記憶ドライブ１５１は、仮想的な記憶ドライブ（仮想記憶ドライブ）として管理される。
【００４９】
記憶ドライブ対応情報３００は、記憶ドライブ１５１及び仮想的な記憶ドライブの識別情報の対応関係を管理するための情報である。記憶ドライブ対応情報３００は、物理ドライブＩＤ３０１及び仮想ドライブＩＤ３０２から構成されるエントリを含む。一つの記憶ドライブ１５１に対して一つのエントリが存在する。
【００５０】
物理ドライブＩＤ３０１は、記憶ドライブ１５１の識別情報を格納するフィールドである。仮想ドライブＩＤ３０２は、仮想記憶ドライブの識別情報を格納するフィールドである。コントローラ１２０は、仮想ドライブＩＤ３０２に格納される識別情報を用いて各種制御を行う。
【００５１】
なお、説明の簡単のために、記憶ドライブ１５１及び仮想記憶ドライブの識別情報として数字を用いているが、一般的に、記憶ドライブ１５１及び仮想記憶ドライブの識別情報は、ＰＣＩバス番号、デバイス番号、及びファンクション番号から構成される。
【００５２】
図４は、実施例１の制御情報２２２に含まれる領域割当管理情報４００の一例を示す図である。
【００５３】
領域割当管理情報４００は、記憶ドライブ１５１に割り当てられた、許可キャッシュ領域２１３を管理するための情報である。領域割当管理情報４００は、仮想ドライブＩＤ４０１及びキャッシュ領域番号４０２から構成されるエントリを含む。一つの記憶ドライブ１５１に対して一つのエントリが存在する。
【００５４】
仮想ドライブＩＤ４０１は、記憶ドライブ１５１に対応する仮想記憶ドライブの識別情報を格納するフィールドである。キャッシュ領域番号４０２は、仮想ドライブＩＤ４０１に対応する仮想記憶ドライブがデータを直接書き込むことができるキャッシュ領域２１３（許可キャッシュ領域２１３）の識別情報を格納するフィールドである。
【００５５】
図５は、実施例１のＩＯページテーブル２２３のデータ構造の一例を示す図である。
【００５６】
ＩＯページテーブル管理情報５００は、ドライブＩＤ５０１、物理アドレス５０２、ページサイズ５０３、及びメモリアクセス属性５０４から構成されるエントリを含む。一つのエントリが一つのＩＯページテーブル２２３に対応する。実施例１では、一つの記憶ドライブ１５１（仮想記憶ドライブ）に対して一つのＩＯページテーブル２２３が存在する。
【００５７】
また、一つのエントリには、所定のサイズの記憶領域（ページ）に対するアクセス制御に関する情報が設定された行を含む。以下の説明では、当該行をページテーブルエントリと記載する。
【００５８】
ドライブＩＤ５０１は、記憶ドライブ１５１に対応する仮想記憶ドライブの識別情報を格納するフィールドである。
【００５９】
物理アドレス５０２は、アクセス対象の記憶領域（ページ）の開始物理アドレスを格納するフィールドである。ページサイズ５０３は、アクセス対象の記憶領域（ページ）のサイズを格納する。なお、サイズは、４ｋＢ、２ＭＢ、及び１ＧＢ等、システムに応じて様々な値を設定できる。
【００６０】
メモリアクセス属性５０４は、アクセス対象の記憶領域（ページ）に対するアクセス属性を格納するフィールド群である。メモリアクセス属性５０４は、Ｒｅａｄ５０５及びＷｒｉｔｅ５０６を含む。
【００６１】
Ｒｅａｄ５０５は、アクセス対象の記憶領域（ページ）に対するデータの読出しに関する属性を格納するフィールドである。Ｒｅａｄ５０５には、読出しが可能であることを示す「Ａｌｌｏｗｅｄ」及び読出しが不可能であることを示す「Ｄｉｓａｌｌｏｗｅｄ」のいずれかが格納される。
【００６２】
Ｗｒｉｔｅ５０６は、アクセス対象の記憶領域（ページ）に対するデータの書込みに関する属性を格納するフィールドである。Ｗｒｉｔｅ５０６には、書込みが可能であることを示す「Ａｌｌｏｗｅｄ」及び書込みが不可能であることを示す「Ｄｉｓａｌｌｏｗｅｄ」のいずれかが格納される。
【００６３】
なお、ＮＶＭｅドライブを搭載しないストレージシステム１００の場合、一つのＩＯページテーブル２２３のみが生成される。この場合、エントリのドライブＩＤ５０１は空欄となる。
【００６４】
次に、計算機システムにおいて実行される処理の詳細について説明する。まず、図６から図１１を用いて、ＩＯページテーブル２２３の登録及び更新に関する処理について説明する。
【００６５】
図６は、実施例１のストレージシステム１００が実行する初期設定処理の一例を説明するフローチャートである。
【００６６】
ストレージシステム１００の起動時又は再起動時に図６に示す初期設定処理が実行される。初期設定処理は、少なくとも一つのコントローラ１２０のコア１４０によって実行される。なお、必要に応じて、複数のコントローラ１２０のコア１４０が連携してもよい。
【００６７】
コア１４０は、ＰＣＩｅデバイスの初期化を行うためのＰＣＩｅデバイスコンフィグ処理を実行する（ステップＳ１０１）。ＰＣＩｅデバイスコンフィグ処理は公知の技術であるため、詳細な説明は省略する。なお、ストレージシステム１００のその他のハードウェアの初期化処理は省略している。
【００６８】
次に、コア１４０は、制御プログラム起動処理を実行する（ステップＳ１０２）。制御プログラム起動処理は、いわゆる、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の起動処理である。当該処理の後は、制御プログラムにより処理が実行される。なお、制御プログラム起動処理は公知の技術であるため、詳細な説明は省略する。
【００６９】
次に、コア１４０は、記憶ドライブ対応情報３００を生成する（ステップＳ１０３）。
【００７０】
具体的には、コア１４０は、記憶ドライブ対応情報３００に、記憶ドライブ１５１の数だけエントリを追加し、各エントリの物理ドライブＩＤ３０１に記憶ドライブ１５１の識別情報を設定する。コア１４０は、記憶ドライブ１５１及び仮想記憶ドライブの対応づけを行い、当該結果に基づいて、各エントリの仮想ドライブＩＤ３０２に仮想記憶ドライブの識別情報を設定する。
【００７１】
次に、コア１４０は、ＣＰＵ１３０がＩＯＭＭＵ１４１を搭載しているか否かを判定する（ステップＳ１０４）。
【００７２】
ＣＰＵ１３０がＩＯＭＭＵ１４１を搭載していないと判定された場合、コア１４０は、メモリ１３１に一つのキャッシュ領域２１３を設定する（ステップＳ１１０）。その後、コア１４０は、初期設定処理を終了する。このとき、コア１４０は、バッファ領域２１２も設定する。
【００７３】
ＣＰＵ１３０がＩＯＭＭＵ１４１を搭載していると判定された場合、コア１４０は、ＮＶＭｅドライブを搭載するか否かを判定する（ステップＳ１０５）。
【００７４】
ＮＶＭｅドライブを搭載しないと判定された場合、コア１４０は、各コントローラ１２０のメモリ１３１に一つのキャッシュ領域２１３を設定する（ステップＳ１０９）。このとき、コア１４０は、各コントローラ１２０にバッファ領域２１２も設定する。その後、コア１４０はステップＳ１０７に進む。
【００７５】
ＮＶＭｅドライブを搭載していると判定された場合、コア１４０は、各コントローラ１２０のメモリ１３１に複数のキャッシュ領域２１３を設定する（ステップＳ１０６）。このとき、コア１４０は、各コントローラ１２０にバッファ領域２１２も設定する。その後、コア１４０はステップＳ１０７に進む。
【００７６】
ステップＳ１０７では、コア１４０は、ＩＯページテーブル生成処理を実行する（ステップＳ１０７）。ＩＯページテーブル生成処理の詳細は図７Ａ、図７Ｂ、及び図７Ｃを用いて説明する。
【００７７】
次に、コア１４０は、ＩＯページテーブル登録処理を実行する（ステップＳ１０８）。その後、コア１４０は初期設定処理を終了する。ＩＯページテーブル登録処理の詳細は図１１を用いて説明する。
【００７８】
図７Ａ、図７Ｂ、及び図７Ｃは、実施例１のストレージシステム１００が実行するＩＯページテーブル生成処理の一例を説明するフローチャートである。
【００７９】
ＩＯページテーブル生成処理はコントローラ１２０毎に実行される。
【００８０】
コア１４０は、ＮＶＭｅドライブが設定対象であるか否かを判定する（ステップＳ２０１）。すなわち、ステップＳ１０６又はステップＳ１０９のいずれの処理の後に実行されるＩＯページテーブル生成処理であるか否かが判定される。
【００８１】
ＮＶＭｅドライブが設定対象でないと判定された場合、コア１４０は、ＤＲＡＭ空間２０１から対象となる領域（コントロールデータ領域２１１、バッファ領域２１２、又はキャッシュ領域２１３）を選択する（ステップＳ２１１）。このとき、コア１４０は、ＩＯページテーブル管理情報５００にエントリを追加する。なお、ドライブＩＤ５０１は空欄のままである。
【００８２】
次に、コア１４０は、対象となるページの先頭アドレスを設定し、ページサイズを選択する（ステップＳ２１２）。
【００８３】
次に、コア１４０は、ＩＯページテーブル２２３にページテーブルエントリを追加する（ステップＳ２１３）。具体的には、以下のような処理が実行される。
【００８４】
（Ａ１）コア１４０は、対象のページがコントロールデータ領域２１１に含まれるページである場合、ＩＯページテーブル管理情報５００に追加されたエントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５及びＷｒｉｔｅ５０６のそれぞれに「Ｄｉｓａｌｌｏｗｅｄ」を設定する。
【００８５】
（Ａ２）コア１４０は、対象のページがバッファ領域２１２に含まれるページである場合、ＩＯページテーブル管理情報５００に追加されたエントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５及びＷｒｉｔｅ５０６のそれぞれに「Ａｌｌｏｗｅｄ」を設定する。
【００８６】
（Ａ３）コア１４０は、対象のページがキャッシュ領域２１３に含まれるページである場合、ＩＯページテーブル管理情報５００に追加されたエントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５に「Ａｌｌｏｗｅｄ」を設定し、Ｗｒｉｔｅ５０６に「Ｄｉｓａｌｌｏｗｅｄ」を設定する。
【００８７】
以上がステップＳ２１３の処理の説明である。
【００８８】
次に、コア１４０は、選択された領域の全てのページの設定が完了したか否かを判定する（ステップＳ２１４）。
【００８９】
選択された領域の全てのページの設定が完了していないと判定された場合、コア１４０は、ステップＳ２１２に戻り、同様の処理を実行する。
【００９０】
選択された領域の全てのページの設定が完了したと判定された場合、コア１４０は、ＤＲＡＭ空間２０１の全ての領域の設定が完了したか否かを判定する（ステップＳ２１５）。
【００９１】
ＤＲＡＭ空間２０１の全ての領域の設定が完了していないと判定された場合、コア１４０は、ステップＳ２１１に戻り、同様の処理を実行する。
【００９２】
ＤＲＡＭ空間２０１の全ての領域の設定が完了したと判定された場合、コア１４０はＩＯページテーブル生成処理を終了する。
【００９３】
ステップＳ２０１において、ＮＶＭｅドライブが設定対象であると判定された場合、コア１４０は、対象のＮＶＭｅドライブを選択する（ステップＳ２０２）。このとき、コア１４０は、ＩＯページテーブル管理情報５００にエントリを追加し、追加されたエントリのドライブＩＤ５０１に、ＮＶＭｅドライブの識別情報を設定する。
【００９４】
次に、コア１４０は、ＤＲＡＭ空間２０１から対象となるキャッシュ領域２１３を選択する（ステップＳ２０３）。
【００９５】
次に、コア１４０は、選択されたキャッシュ領域２１３が許可キャッシュ領域２１３であるか否かを判定する（ステップＳ２０４）。
【００９６】
具体的には、コア１４０は、領域割当管理情報４００を参照し、仮想ドライブＩＤ４０１に選択されたＮＶＭｅドライブに対応する仮想記憶ドライブの識別情報が設定されたエントリを検索する。コア１４０は、検索されたエントリのキャッシュ領域番号４０２に設定された識別情報と、選択されたキャッシュ領域２１３の識別情報とが一致するか否かを判定する。二つのキャッシュ領域２１３の識別情報が一致する場合、コア１４０は、選択されたキャッシュ領域２１３が許可キャッシュ領域２１３である判定する。
【００９７】
選択されたキャッシュ領域２１３が許可キャッシュ領域２１３であると判定された場合、コア１４０は、対象となるページの先頭アドレスを設定し、ページサイズを選択する（ステップＳ２０５）。
【００９８】
次に、コア１４０は、ＩＯページテーブル２２３にページテーブルエントリを追加する（ステップＳ２０６）。
【００９９】
具体的には、コア１４０は、ＩＯページテーブル管理情報５００に追加されたエントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５及びＷｒｉｔｅ５０６のそれぞれに「Ａｌｌｏｗｅｄ」を設定する。
【０１００】
次に、コア１４０は、選択されたキャッシュ領域２１３の全てのページの設定が完了したか否かを判定する（ステップＳ２０７）。
【０１０１】
選択されたキャッシュ領域２１３の全てのページの設定が完了していないと判定された場合、コア１４０は、ステップＳ２０５に戻り、同様の処理を実行する。
【０１０２】
選択されたキャッシュ領域２１３の全てのページの設定が完了したと判定された場合、コア１４０はステップＳ２１６に進む。
【０１０３】
ステップＳ２０４において、選択されたキャッシュ領域２１３が許可キャッシュ領域２１３ではないと判定された場合、コア１４０は、対象となるページの先頭アドレスを設定し、ページサイズを選択する（ステップＳ２０８）。
【０１０４】
次に、コア１４０は、ＩＯページテーブル２２３にページテーブルエントリを追加する（ステップＳ２０９）。
【０１０５】
具体的には、コア１４０は、ＩＯページテーブル管理情報５００に追加されたエントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５に「Ａｌｌｏｗｅｄ」を設定し、Ｗｒｉｔｅ５０６に「Ｄｉｓａｌｌｏｗｅｄ」を設定する。
【０１０６】
次に、コア１４０は、選択されたキャッシュ領域２１３の全てのページの設定が完了したか否かを判定する（ステップＳ２１０）。
【０１０７】
選択されたキャッシュ領域２１３の全てのページの設定が完了していないと判定された場合、コア１４０は、ステップＳ２０８に戻り、同様の処理を実行する。
【０１０８】
選択されたキャッシュ領域２１３の全てのページの設定が完了したと判定された場合、コア１４０はステップＳ２１６に進む。
【０１０９】
ステップＳ２１６では、コア１４０は、ＤＲＡＭ空間２０１のキャッシュ領域２１３以外の領域の中から対象の領域（コントロールデータ領域２１１又はバッファ領域２１２）を選択する（ステップＳ２１６）。
【０１１０】
次に、コア１４０は、対象となるページの先頭アドレスを設定し、ページサイズを選択する（ステップＳ２１７）。
【０１１１】
次に、コア１４０は、ＩＯページテーブル２２３にページテーブルエントリを追加する（ステップＳ２１８）。具体的には、以下のような処理が実行される。
【０１１２】
（Ｂ１）コア１４０は、対象のページがコントロールデータ領域２１１に含まれるページである場合、ＩＯページテーブル管理情報５００に追加されたエントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５及びＷｒｉｔｅ５０６のそれぞれに「Ｄｉｓａｌｌｏｗｅｄ」を設定する。
【０１１３】
（Ｂ２）コア１４０は、対象のページがバッファ領域２１２に含まれるページである場合、ＩＯページテーブル管理情報５００に追加されたエントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５及びＷｒｉｔｅ５０６のそれぞれに「Ａｌｌｏｗｅｄ」を設定する。
【０１１４】
以上がステップＳ２１８の処理の説明である。
【０１１５】
次に、コア１４０は、選択された領域の全てのページの設定が完了したか否かを判定する（ステップＳ２１９）。
【０１１６】
選択された領域の全てのページの設定が完了していないと判定された場合、コア１４０は、ステップＳ２１７に戻り、同様の処理を実行する。
【０１１７】
選択された領域の全てのページの設定が完了したと判定された場合、コア１４０は、ＤＲＡＭ空間２０１の全ての領域の設定が完了したか否かを判定する（ステップＳ２２０）。
【０１１８】
ＤＲＡＭ空間２０１の全ての領域の設定が完了していないと判定された場合、コア１４０は、ステップＳ２１６に戻り、同様の処理を実行する。
【０１１９】
ＤＲＡＭ空間２０１の全ての領域の設定が完了したと判定された場合、コア１４０は、全てのＮＶＭｅドライブについて設定が完了したか否かを判定する。
【０１２０】
全てのＮＶＭｅドライブについて設定が完了していないと判定された場合、コア１４０は、ステップＳ２０２に戻り、同様の処理を実行する。
【０１２１】
全てのＮＶＭｅドライブについて設定が完了したと判定された場合、コア１４０は、ＩＯページテーブル生成処理を終了する。
【０１２２】
以上で説明したように、ストレージシステム１００にＮＶＭｅドライブが搭載される場合、ストレージシステム１００は、ＮＶＭｅドライブ毎にＩＯページテーブル２２３を生成する。
【０１２３】
図８は、実施例１のストレージシステム１００が実行する設定更新処理の一例を説明するフローチャートである。
【０１２４】
コア１４０は、記憶ドライブ１５１の追加又は停止のいずれであるかを判定する（ステップＳ３０１）。
【０１２５】
記憶ドライブ１５１の追加であると判定された場合、コア１４０は、制御情報２２２を更新する（ステップＳ３０２）。具体的には、以下のような処理が実行される。
【０１２６】
コア１４０は、記憶ドライブ１５１に仮想記憶ドライブを対応づける。記憶ドライブ１５１がＮＶＭｅドライブである場合、コア１４０は、ＮＶＭｅドライブに割り当てる許可キャッシュ領域２１３を決定する。
【０１２７】
コア１４０は、記憶ドライブ対応情報３００にエントリを追加し、追加されたエントリの物理ドライブＩＤ３０１にＮＶＭｅドライブの識別情報を設定し、仮想ドライブＩＤ３０２に仮想記憶ドライブの識別情報を設定する。
【０１２８】
また、記憶ドライブ１５１がＮＶＭｅドライブである場合、コア１４０は、領域割当管理情報４００にエントリを追加し、追加されたエントリの仮想ドライブＩＤ４０１に仮想記憶ドライブの識別情報を設定し、キャッシュ領域番号４０２に決定された許可キャッシュ領域２１３の識別情報を設定する。以上がステップＳ３０２の処理の説明である。
【０１２９】
次に、コア１４０は、ＩＯページテーブル更新処理（追加）を実行する（ステップＳ３０３）。その後、コア１４０はステップＳ３０６に進む。ＩＯページテーブル更新処理（追加）の詳細は図９を用いて説明する。
【０１３０】
ステップＳ３０１において、記憶ドライブ１５１の停止であると判定された場合、コア１４０は、制御情報２２２を更新する（ステップＳ３０４）。具体的には、以下のような処理が実行される。
【０１３１】
コア１４０は、記憶ドライブ対応情報３００を参照し、仮想ドライブＩＤ３０２に停止した記憶ドライブ１５１に対応する仮想記憶ドライブの識別情報が設定されたエントリを検索する。コア１４０は、検索されたエントリを削除する。
【０１３２】
また、記憶ドライブ１５１がＮＶＭｅドライブである場合、コア１４０は、領域割当管理情報４００を参照し、仮想ドライブＩＤ４０１に停止した記憶ドライブ１５１に対応する仮想記憶ドライブの識別情報が設定されたエントリを検索し、当該エントリを削除する。以上がステップＳ３０４の処理の説明である。
【０１３３】
次に、コア１４０は、ＩＯページテーブル更新処理（停止）を実行する（ステップＳ３０５）。その後、コア１４０はステップＳ３０６に進む。ＩＯページテーブル更新処理（停止）の詳細は図１０を用いて説明する。
【０１３４】
ステップＳ３０６では、コア１４０はＩＯページテーブル登録処理を実行する（ステップＳ３０６）。その後、コア１４０は設定更新処理を終了する。ＩＯページテーブル登録処理の詳細は図１１を用いて説明する。
【０１３５】
図９は、実施例１のストレージシステム１００が実行するＩＯページテーブル更新処理（追加）の一例を説明するフローチャートである。
【０１３６】
ＩＯページテーブル更新処理（追加）はコントローラ１２０毎に実行される。
【０１３７】
コア１４０は、追加された記憶ドライブ１５１がＮＶＭｅドライブであるか否かを判定する（ステップＳ４０１）。
【０１３８】
追加された記憶ドライブ１５１がＮＶＭｅドライブではないと判定された場合、コア１４０はＩＯページテーブル更新処理（追加）を終了する。
【０１３９】
追加された記憶ドライブ１５１がＮＶＭｅドライブであると判定された場合、コア１４０は、追加されたＮＶＭｅドライブに対応する仮想記憶ドライブの識別情報を取得する（ステップＳ４０２）。
【０１４０】
次に、コア１４０は、対象となるキャッシュ領域２１３を選択し（ステップＳ４０３）、選択されたキャッシュ領域２１３が追加されたＮＶＭｅドライブの許可キャッシュ領域２１３に一致するか否かを判定する（ステップＳ４０４）。
【０１４１】
具体的には、コア１４０は、領域割当管理情報４００を参照し、仮想ドライブＩＤ４０１に取得した仮想記憶ドライブの識別情報が設定されたエントリを検索する。コア１４０は、検索されたエントリのキャッシュ領域番号４０２に設定された識別情報と、選択されたキャッシュ領域２１３の識別情報とが一致するか否かを判定する。二つのキャッシュ領域２１３の識別情報が一致する場合、コア１４０は、選択されたキャッシュ領域２１３が追加されたＮＶＭｅドライブの許可キャッシュ領域２１３に一致すると判定する。
【０１４２】
選択されたキャッシュ領域２１３が追加されたＮＶＭｅドライブの許可キャッシュ領域２１３に一致すると判定された場合、コア１４０は、対象となるページの先頭アドレスを設定し、ページサイズを選択する（ステップＳ４０５）。
【０１４３】
次に、コア１４０は、ページに対応するページテーブルエントリを生成する（ステップＳ４０６）。具体的には、以下のような処理が実行される。
【０１４４】
コア１４０は、ＩＯページテーブル２２３に対応するエントリを生成する。コア１４０は、生成されたエントリのドライブＩＤ５０１に追加されたＮＶＭｅドライブに対応する仮想記憶ドライブの識別情報を設定する。すでに、エントリが生成されている場合、当該処理は実行されない。
【０１４５】
コア１４０は、エントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５及びＷｒｉｔｅ５０６のそれぞれに「Ａｌｌｏｗｅｄ」を設定する。以上が、ステップＳ４０６の処理の説明である。
【０１４６】
次に、コア１４０は、選択されたキャッシュ領域２１３の全てのページの設定が完了したか否かを判定する（ステップＳ４０７）。
【０１４７】
選択されたキャッシュ領域２１３の全てのページの設定が完了していないと判定された場合、コア１４０は、ステップＳ４０５に戻り、同様の処理を実行する。
【０１４８】
選択されたキャッシュ領域２１３の全てのページの設定が完了したと判定された場合、コア１４０はステップＳ４１１に進む。
【０１４９】
ステップＳ４０４において、選択されたキャッシュ領域２１３が追加されたＮＶＭｅドライブの許可キャッシュ領域２１３ではないと判定された場合、コア１４０は、対象となるページの先頭アドレスを設定し、ページサイズを選択する（ステップＳ４０８）。
【０１５０】
次に、コア１４０は、ページに対応するページテーブルエントリを生成する（ステップＳ４０９）。具体的には、以下のような処理が実行される。
【０１５１】
コア１４０は、ＩＯページテーブル２２３に対応するエントリを生成する。コア１４０は、生成されたエントリのドライブＩＤ５０１に追加されたＮＶＭｅドライブに対応する仮想記憶ドライブの識別情報を設定する。すでに、エントリが生成されている場合、当該処理は実行されない。
【０１５２】
コア１４０は、エントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５に「Ａｌｌｏｗｅｄ」を設定し、Ｗｒｉｔｅ５０６に「Ｄｉｓａｌｌｏｗｅｄ」を設定する。以上が、ステップＳ４０９の処理の説明である。
【０１５３】
次に、コア１４０は、選択されたキャッシュ領域２１３の全てのページの設定が完了したか否かを判定する（ステップＳ４１０）。
【０１５４】
選択されたキャッシュ領域２１３の全てのページの設定が完了していないと判定された場合、コア１４０は、ステップＳ４０８に戻り、同様の処理を実行する。
【０１５５】
選択されたキャッシュ領域２１３の全てのページの設定が完了したと判定された場合、コア１４０はステップＳ４１１に進む。
【０１５６】
ステップＳ４１１では、全てのキャッシュ領域２１３の設定が完了したか否かを判定する（ステップＳ４１１）。
【０１５７】
全てのキャッシュ領域２１３の設定が完了していないと判定された場合、コア１４０は、ステップＳ４０３に戻り、同様の処理を実行する。
【０１５８】
全てのキャッシュ領域２１３の設定が完了したと判定された場合、コア１４０は、キャッシュ領域２１３以外の領域のページを設定し（ステップＳ４１２）、その後、ＩＯページテーブル更新処理（追加）を終了する。具体的には、各領域に対して、ステップＳ２１１からステップＳ２１４までの処理が実行される。
【０１５９】
以上の処理によって新たなＩＯページテーブル２２３が生成される。なお、ステップＳ４１２の処理は実行されなくてもよい。
【０１６０】
図１０は、実施例１のストレージシステム１００が実行するＩＯページテーブル更新処理（停止）の一例を説明するフローチャートである。
【０１６１】
ＩＯページテーブル更新処理（停止）はコントローラ１２０毎に実行される。
【０１６２】
コア１４０は、停止した記憶ドライブ１５１がＮＶＭｅドライブであるか否かを判定する（ステップＳ５０１）。
【０１６３】
停止した記憶ドライブ１５１がＮＶＭｅドライブではないと判定された場合、コア１４０はＩＯページテーブル更新処理（停止）を終了する。
【０１６４】
停止した記憶ドライブ１５１がＮＶＭｅドライブであると判定された場合、コア１４０は、停止したＮＶＭｅドライブに対応する仮想記憶ドライブの識別情報を取得する（ステップＳ５０２）。
【０１６５】
次に、コア１４０は、対象となるキャッシュ領域２１３を選択する（ステップＳ５０３）。
【０１６６】
次に、コア１４０は、対象となるページの先頭アドレスを設定し、ページサイズを選択する（ステップＳ５０４）。
【０１６７】
次に、コア１４０は、ページに対応するページテーブルエントリを生成する（ステップＳ５０５）。具体的には、以下のような処理が実行される。
【０１６８】
コア１４０は、ＩＯページテーブル２２３に対応するエントリを生成する。コア１４０は、生成されたエントリのドライブＩＤ５０１に停止されたＮＶＭｅドライブに対応する仮想記憶ドライブの識別情報を設定する。すでに、エントリが生成されている場合、当該処理は実行されない。
【０１６９】
コア１４０は、エントリに行を追加し、物理アドレス５０２にページの先頭アドレスを設定し、ページサイズ５０３に選択したページサイズを設定する。また、コア１４０は、Ｒｅａｄ５０５及びＷｒｉｔｅ５０６のそれぞれに「Ｄｉｓａｌｌｏｗｅｄ」を設定する。以上が、ステップＳ５０５の処理の説明である。
【０１７０】
次に、コア１４０は、選択されたキャッシュ領域２１３の全てのページの設定が完了したか否かを判定する（ステップＳ５０６）。
【０１７１】
選択されたキャッシュ領域２１３の全てのページの設定が完了していないと判定された場合、コア１４０は、ステップＳ５０４に戻り、同様の処理を実行する。
【０１７２】
選択されたキャッシュ領域２１３の全てのページの設定が完了したと判定された場合、コア１４０は、全てのキャッシュ領域２１３の設定が完了したか否かを判定する（ステップＳ５０７）。
【０１７３】
全てのキャッシュ領域の設定が完了していないと判定された場合、コア１４０は、ステップＳ５０３に戻り、同様の処理を実行する。
【０１７４】
全てのキャッシュ領域の設定が完了したと判定された場合、コア１４０は、キャッシュ領域２１３以外の領域のページを設定し（ステップＳ５０８）、その後、ＩＯページテーブル更新処理（停止）を終了する。具体的には、各領域に対して、ステップＳ２１１からステップＳ２１４までの処理が実行される。
【０１７５】
なお、ステップＳ５０８の処理は実行されなくてもよい。
【０１７６】
図１１は、実施例１のストレージシステム１００が実行するＩＯページテーブル登録処理の一例を説明するフローチャートである。
【０１７７】
ＩＯページテーブル登録処理はコントローラ１２０毎に実行される。
【０１７８】
コア１４０は、処理種別がＩＯページテーブル２２３の登録又は更新のいずれであるかを判定する（ステップＳ６０１）。
【０１７９】
処理種別がＩＯページテーブル２２３の登録であると判定された場合、コア１４０は、ＩＯＭＭＵレジスタにＩＯページテーブル２２３のポインタを設定する（ステップＳ６０２）。すなわち、ＩＯＭＭＵ１４１がＩＯページテーブル２２３を読み出すための設定が行われる。
【０１８０】
次に、コア１４０は、ＩＯＭＭＵレジスタを操作して、メモリアクセス属性（メモリアクセス権）の設定を有効化する（ステップＳ６０３）。その後、コア１４０はＩＯページテーブル登録処理を終了する。
【０１８１】
具体的には、コア１４０は、ＩＯＭＭＵ１４１にＩＯページテーブル２２３を読み込ませる。
【０１８２】
ステップＳ６０１において、処理種別がＩＯページテーブル２２３の更新であると判定された場合、コア１４０は、複数のＩＯページテーブル２２３の更新であるか否かを判定する（ステップＳ６０４）。
【０１８３】
複数のＩＯページテーブル２２３の更新であると判定された場合、コア１４０は、新たなＩＯページテーブル２２３のＩＯＭＭＵレジスタにＩＯページテーブル２２３のポインタを設定する（ステップＳ６０５）。
【０１８４】
次に、コア１４０は、ＩＯＭＭＵレジスタを操作して、現在使用しているＩＯページテーブル２２３を無効化する（ステップＳ６０６）。このとき、新たなＩＯページテーブル２２３がＩＯＭＭＵレジスタに読み込まれる。その後、コア１４０はＩＯページテーブル登録処理を終了する。
【０１８５】
複数のＩＯページテーブル２２３の更新ではないと判定された場合、コア１４０は、ＩＯページテーブル２２３を更新するためのコマンドを生成する（ステップＳ６０７）。
【０１８６】
当該コマンドには、ＮＶＭｅドライブの識別情報、更新するＩＯページテーブル２２３のポインタ、及び更新対象の範囲等を示す情報が含まれる。
【０１８７】
コア１４０は、ＩＯＭＭＵレジスタを操作して、ＩＯＭＭＵ１４１に生成したコマンドを実行させることによって、特定のＩＯページテーブル２２３を更新する（ステップＳ６０８）。その後、コア１４０はＩＯページテーブル登録処理を終了する。
【０１８８】
なお、ページテーブルエントリ単位で更新することもできる。この場合、以下のような処理が実行される。
【０１８９】
コア１４０は、ＮＶＭｅドライブの識別情報に基づいて、更新対象のＩＯページテーブル２２３を特定する。コア１４０は、特定されたＩＯページテーブル２２３のキャッシュ領域２１３に対応するページテーブルエントリを更新するためのコマンドを生成する。コア１４０は、ＩＯＭＭＵレジスタを操作して、ＩＯＭＭＵ１４１に生成したコマンドを実行させる。
【０１９０】
次に、図１２から図１５を用いてＩＯ処理について説明する。なお、ＩＯ処理の対象となる記憶ドライブ１５１はＮＶＭｅドライブであるものとする。
【０１９１】
図１２は、実施例１のストレージシステム１００がＷｒｉｔｅ要求を受信した場合に実行するＩＯ処理を説明するフローチャートである。
【０１９２】
一つのコントローラ１２０のコア１４０は、ホスト端末１０４からＷｒｉｔｅ要求を受信した場合（ステップＳ７０１）、キャッシュヒットしたか否かを判定する（ステップＳ７０２）。
【０１９３】
具体的には、コア１４０は、キャッシュディレクトリを参照して、Ｗｒｉｔｅ要求の対象となるデータがキャッシュ領域２１３に存在するか否かを判定する。
【０１９４】
なお、Ｗｒｉｔｅ要求には、データ長及びデータを書き込む記憶領域（ＬＵ）の識別情報等が含まれる。コア１４０は、制御情報２２２及びＷｒｉｔｅ要求に含まれる情報に基づいてデータを書き込むＮＶＭｅドライブを特定できる。
【０１９５】
キャッシュヒットしたと判定された場合、コア１４０はステップＳ７０４に進む。
【０１９６】
キャッシュヒットしていないと判定された場合、コア１４０は、格納先判定処理を実行し（ステップＳ７０３）、その後、ステップＳ７０４に進む。格納先判定処理の詳細は図１３を用いて説明する。
【０１９７】
ステップＳ７０４では、コア１４０は、書込データの受信準備が完了した旨を通知するための応答をホスト端末１０４に送信する（ステップＳ７０４）。
【０１９８】
次に、コア１４０は、ホスト端末１０４から書込データを受信した場合（ステップＳ７０５）、冗長化処理を実行する（ステップＳ７０６）。冗長化処理では、メモリ１３１上に冗長化された状態で書込データが格納される。冗長化処理の詳細は図１４Ａ及び図１４Ｂを用いて説明する。
【０１９９】
次に、コア１４０は、書込データの受領が完了した旨を通知するための応答をホスト端末１０４に送信する（ステップＳ７０７）。
【０２００】
次に、コア１４０は、ＮＶＭｅドライブ（記憶ドライブ１５１）に書込データを書き込み（ステップＳ７０８）、その後、ＩＯ処理を終了する。
【０２０１】
例えば、コア１４０を含むコントローラ１２０の許可キャッシュ領域２１３に書込データが格納されている場合、当該コア１４０がＮＶＭｅドライブへ書込データを書き込む。コア１４０を含むコントローラ１２０の不許可キャッシュ領域２１３に書込データが格納されている場合、当該コア１４０は、他のコントローラ１２０にデータの書込要求を送信する。
【０２０２】
図１３は、実施例１のストレージシステム１００が実行する格納先判定処理の一例を説明するフローチャートである。
【０２０３】
格納先判定処理は、Ｗｒｉｔｅ要求を受信したコントローラ１２０のコア１４０によって実行される。
【０２０４】
コア１４０は、制御情報２２２及びＷｒｉｔｅ要求に含まれる情報に基づいて、書込データの書込先のＮＶＭｅドライブを特定する（ステップＳ８０１）。
【０２０５】
次に、コア１４０は、特定されたＮＶＭｅドライブに割り当てられている許可キャッシュ領域２１３を特定する（ステップＳ８０２）。
【０２０６】
具体的には、コア１４０は、領域割当管理情報４００を参照し、仮想ドライブＩＤ４０１に特定されたＮＶＭｅドライブに対応する仮想記憶ドライブの識別情報が設定されたエントリを検索する。コア１４０は、検索されたエントリのキャッシュ領域番号４０２を取得する。
【０２０７】
次に、コア１４０は、特定された許可キャッシュ領域２１３に、書込データを格納するためのセグメントを確保できるか否かを判定する（ステップＳ８０３）。
【０２０８】
特定された許可キャッシュ領域２１３に、書込データを格納するためのセグメントを確保できると判定された場合、コア１４０は、特定された許可キャッシュ領域２１３にセグメントを確保し（ステップＳ８０４）、その後、格納先判定処理を終了する。なお、コア１４０は、既存のキャッシュ制御アルゴリズムに基づいて、許可キャッシュ領域２１３にセグメントを確保する。
【０２０９】
特定された許可キャッシュ領域２１３に、書込データを格納するためのセグメントを確保できないと判定された場合、コア１４０は、不許可キャッシュ領域２１３にセグメントを確保し（ステップＳ８０５）、その後、格納先判定処理を終了する。なお、コア１４０は、既存のキャッシュ制御アルゴリズムに基づいて、許可キャッシュ領域２１３にセグメントを確保する。
【０２１０】
図１４Ａ及び図１４Ｂは、実施例１のストレージシステム１００が実行する冗長化処理の一例を説明するフローチャートである。
【０２１１】
図１４Ａに示す冗長化処理は、Ｗｒｉｔｅ要求を受信したコントローラ１２０のコア１４０によって実行される。図１４Ｂに示す冗長化処理は、Ｗｒｉｔｅ要求を受信したコントローラ１２０とは異なるコントローラ１２０のコア１４０によって実行される。まず、図１４Ａに示す冗長化処理について説明する。
【０２１２】
コア１４０は、確保されたセグメントに書込データを格納し（ステップＳ９０１）、他のコントローラ１２０にデータ転送要求を送信する（ステップＳ９０２）。データ転送要求にはセグメントが確保されたキャッシュ領域２１３の情報が含まれる。
【０２１３】
コア１４０は、他のコントローラ１２０からデータ転送の準備が完了した旨（Ｒｅａｄｙ）を通知するための応答を受信した場合（ステップＳ９０３）、他のコントローラ１２０にデータを転送する（ステップＳ９０４）。データ転送手段として、ノードインタフェース１３２でもよいし、コントローラのＣＰＵコア１４０やＣＰＵに内蔵されているＤＭＡ（図面未記載）でもよいし、記憶ドライブ１５１が持つＤＭＡ（図面未記載）を利用してもよい。
【０２１４】
コア１４０は、他のコントローラ１２０から転送完了を通知するための応答を受信した場合（ステップＳ９０５）、冗長化処理を終了する。
【０２１５】
なお、セグメントに書込データを格納するタイミングは任意に設定できる。例えば、コア１４０は、Ｒｅａｄｙを通知するための応答を受信した場合、又は、他のコントローラ１２０にデータを転送する場合、セグメントに書込データを格納する。
【０２１６】
次に、図１４Ｂに示す冗長化処理について説明する。
【０２１７】
コア１４０は、他のコントローラ１２０からデータ転送要求を受信した場合（ステップＳ９５１）、他のコントローラ１２０がセグメントを確保したキャッシュ領域２１３が許可キャッシュ領域２１３であるか否かを判定する（ステップＳ９５２）。
【０２１８】
他のコントローラ１２０がセグメントを確保したキャッシュ領域２１３が許可キャッシュ領域２１３であると判定された場合、コア１４０は、不許可キャッシュ領域２１３にセグメントを確保し（ステップＳ９５３）、その後、ステップＳ９５５に進む。なお、コア１４０は、既存のキャッシュ制御アルゴリズムに基づいて、不許可キャッシュ領域２１３にセグメントを確保する。
【０２１９】
他のコントローラ１２０がセグメントを確保したキャッシュ領域２１３が許可キャッシュ領域２１３でないと判定された場合、コア１４０は、許可キャッシュ領域２１３にセグメントを確保し（ステップＳ９５４）、その後、ステップＳ９５５に進む。なお、コア１４０は、既存のキャッシュ制御アルゴリズムに基づいて、許可キャッシュ領域２１３にセグメントを確保する。
【０２２０】
ステップＳ９５５では、コア１４０は、他のコントローラ１２０にＲｅａｄｙを通知するための応答を送信する（ステップＳ９５５）。
【０２２１】
次に、コア１４０は、他のコントローラ１２０から書込データを受信し（ステップＳ９５６）、確保されたセグメントに書込データを格納する（ステップＳ９５７）。
【０２２２】
次に、コア１４０は、他のコントローラ１２０に転送完了を通知するための応答を送信する（ステップＳ９５８）。その後、コア１４０は冗長化処理を終了する。
【０２２３】
なお、セグメントに書込データを格納するタイミングは任意に設定できる。例えば、コア１４０は、転送完了を通知する応答を送信した後に、セグメントに書込データを格納する。
【０２２４】
図１５Ａ、図１５Ｂ、及び図１５Ｃは、実施例１のストレージシステム１００がＲｅａｄ要求を受信した場合に実行するＩＯ処理を説明するフローチャートである。
【０２２５】
一つのコントローラ１２０のコア１４０は、ホスト端末１０４からＲｅａｄ要求を受信する（ステップＳ１００１）。このとき、コア１４０は、制御情報２２２及びＲｅａｄ要求に含まれる情報に基づいて、読出データを格納するＮＶＭｅドライブを特定する。
【０２２６】
なお、Ｒｅａｄ要求には、データ長、読出データを格納する記憶領域（ＬＵ）の識別情報等が含まれる。
【０２２７】
次に、コア１４０は、キャッシュ領域２１３を利用するか否かを判定する（ステップＳ１００２）。
【０２２８】
例えば、コア１４０は、読出データの読出頻度に基づいて、当該データをキャッシュ領域２１３に格納するか否かを判定する。読出頻度が高い場合、読出データをキャッシュ領域２１３に格納することによってＩＯ処理の性能が向上することが期待できる。そのため、コア１４０は、読出頻度が閾値より大きい場合、キャッシュ領域２１３を利用すると判定する。なお、前述の判定方法は一例であってこれに限定されない。
【０２２９】
キャッシュ領域２１３を利用しないと判定された場合、コア１４０は、バッファ領域２１２にセグメントを確保し（ステップＳ１００８）、当該セグメントへの読出データの転送をＮＶＭｅドライブに指示する（ステップＳ１００９）。当該指示には、読出データを読み出すための情報及びセグメントの情報等が含まれる。ＮＶＭｅドライブは、当該指示にしたがって、バッファ領域２１２のセグメントに読出データを書き込む。
【０２３０】
データ転送の指示を出力する方法は、ＮＶＭｅドライブの設計等に応じて様々な形式が考えられる。例えば、コア１４０は、ＮＶＭｅドライブのコントローラのレジスタを操作することによって、読出データの転送の指示を行う。また、コア１４０は、ＮＶＭｅドライブのコントローラがポーリングを行うメモリ１３１上の領域に読出データの転送指示のコマンドを書き込むことによって、読出データの転送の指示を行う。
【０２３１】
次に、コア１４０は、バッファ領域２１２及びキャッシュ領域２１３を介して、ホスト端末１０４に読出データを送信する（ステップＳ１０１０）。その後、コア１４０はＩＯ処理を終了する。
【０２３２】
具体的には、コア１４０は、ＮＶＭｅドライブによってバッファ領域２１２に書き込まれた読出データをキャッシュ領域２１３に書き込み、その後、ホスト端末１０４に読出データを送信する。
【０２３３】
ステップＳ１００２において、キャッシュ領域２１３を利用すると判定された場合、コア１４０は、ストレージシステム１００内のキャッシュ領域２１３にセグメントを確保できるか否かを判定する（ステップＳ１００３）。すなわち、キャッシュ領域２１３に読出データを格納するための未使用の記憶領域が存在するか否かが判定される。
【０２３４】
具体的には、コア１４０は、ストレージシステム１００の各メモリ１３１のキャッシュ領域２１３の空き容量に基づいてセグメントを確保できるか否かを判定する。
【０２３５】
ストレージシステム１００内のキャッシュ領域２１３にセグメントを確保できると判定された場合、コア１４０は、当該コア１４０を含むコントローラ１２０に設定された、読出データを格納するＮＶＭｅドライブに割り当てられている許可キャッシュ領域２１３にセグメントを確保できるか否かを判定する（ステップＳ１００４）。
【０２３６】
具体的には、コア１４０は、領域割当管理情報４００を参照して、仮想ドライブＩＤ４０１に読出データを格納するＮＶＭｅドライブに対応する仮想記憶ドライブの識別情報が設定されたエントリを検索する。コア１４０は、検索されたエントリのキャッシュ領域番号４０２に対応するキャッシュ領域２１３の空き容量に基づいてセグメントを確保できるか否かを判定する。
【０２３７】
コア１４０を含むコントローラ１２０に設定された、読出データを格納するＮＶＭｅドライブに割り当てられている許可キャッシュ領域２１３にセグメントを確保できると判定された場合、コア１４０は、当該許可キャッシュ領域２１３にセグメントを確保し（ステップＳ１００５）、当該セグメントへの読出データの転送をＮＶＭｅドライブに指示する（ステップＳ１００６）。当該指示には、読出データを読み出すための情報及びセグメントの情報等が含まれる。なお、コア１４０は、既存のキャッシュ制御アルゴリズムに基づいて、許可キャッシュ領域２１３にセグメントを確保する。
【０２３８】
次に、コア１４０は、ホスト端末１０４に、ＮＶＭｅドライブによって許可キャッシュ領域２１３に書き込まれた読出データを送信する（ステップＳ１００７）。その後、コア１４０はＩＯ処理を終了する。
【０２３９】
ステップＳ１００４において、コア１４０を含むコントローラ１２０に設定された、読出データを格納するＮＶＭｅドライブに割り当てられている許可キャッシュ領域２１３にセグメントを確保できないと判定された場合、コア１４０は、バッファ領域２１２にセグメントを確保し（ステップＳ１０１７）、当該セグメントへの読出データの転送をＮＶＭｅドライブに指示する（ステップＳ１０１８）。当該指示には、読出データを読み出すための情報及びセグメントの情報等が含まれる。
【０２４０】
コア１４０は、同一ストレージシステム１００内の他のコントローラ１２０に、許可キャッシュ領域２１３へのセグメント確保要求を送信する（ステップＳ１０１９）。
【０２４１】
当該要求を受け付けた他のコントローラ１２０のコア１４０は、ＮＶＭｅドライブに割り当てられた許可キャッシュ領域２１３にセグメントを確保する。なお、コア１４０は、既存のキャッシュ制御アルゴリズムに基づいて、許可キャッシュ領域２１３にセグメントを確保する。他のコントローラ１２０のコア１４０は、セグメントを確保した後、Ｒｅａｄｙを通知するための応答を送信する。
【０２４２】
コア１４０は、他のコントローラ１２０からＲｅａｄｙを通知するための応答を受信した場合（ステップＳ１０２０）、他のコントローラ１２０にデータを転送する（ステップＳ１０２１）。
【０２４３】
なお、他のコントローラ１２０のコア１４０は、データを受信した後、セグメントへの読出データの転送をＮＶＭｅドライブに指示する。
【０２４４】
次に、コア１４０は、他のコントローラ１２０にデータ送信要求を送信し（ステップＳ１０２２）、その後、ＩＯ処理を終了する。この場合、他のコントローラ１２０のコア１４０は、ホスト端末１０４に、ＮＶＭｅドライブによって許可キャッシュ領域２１３に書き込まれた読出データを送信する。
【０２４５】
ステップＳ１００３において、ストレージシステム１００内のキャッシュ領域２１３にセグメントを確保できないと判定された場合、コア１４０は、バッファ領域２１２にセグメントを確保し（ステップＳ１０１１）、当該セグメントへの読出データの転送をＮＶＭｅドライブに指示する（ステップＳ１０１２）。当該指示には、読出データを読み出すための情報及びセグメントの情報等が含まれる。
【０２４６】
次に、コア１４０は、他のストレージシステム１００に、許可キャッシュ領域２１３へのセグメント確保要求を送信する（ステップＳ１０１３）。
【０２４７】
当該要求を受け付けた他のストレージシステム１００のコア１４０は、ＮＶＭｅドライブに割り当てられた許可キャッシュ領域２１３にセグメントを確保する。なお、コア１４０は、既存のキャッシュ制御アルゴリズムに基づいて、許可キャッシュ領域２１３にセグメントを確保する。他のストレージシステム１００のコア１４０は、セグメントを確保した後、Ｒｅａｄｙを通知するための応答を送信する。
【０２４８】
コア１４０は、他のストレージシステム１００からＲｅａｄｙを通知するための応答を受信した場合（ステップＳ１０１４）、他のストレージシステム１００にデータを転送する（ステップＳ１０１５）。
【０２４９】
次に、コア１４０は、他のストレージシステム１００にデータ送信要求を送信し（ステップＳ１０１６）、その後、ＩＯ処理を終了する。この場合、他のストレージシステム１００に含まれるコントローラ１２０のコア１４０は、ホスト端末１０４に、ＮＶＭｅドライブによって許可キャッシュ領域２１３に書き込まれた読出データを送信する。
【０２５０】
次に、実施例１のＩＯ処理の特徴について説明する。
【０２５１】
図１６及び図１７は、実施例１のＷｒｉｔｅ要求を受信した場合に実行するＩＯ処理の特徴及び効果を説明する図である。図１８は、実施例１のＲｅａｄ要求を受信した場合に実行するＩＯ処理の特徴及び効果を説明する図である。
【０２５２】
図１６に示すように、コア１４０は、ホスト端末１０４から書込データ（ユーザデータ）を受信した場合、ＩＯページテーブル２２３の書換えを行うことなく、ＮＶＭｅドライブのアクセス属性が異なる二つのキャッシュ領域２１３にデータを書き込むことができる。したがって、高速にデータの冗長化を実現できる。これによって、コントローラ１２０の故障によるダーティ状態のデータの損失を回避することができるため、ストレージシステム１００のＩＯ性能を維持しつつ、信頼性を向上できる。
【０２５３】
図１７に示すように、ＮＶＭｅドライブは、許可キャッシュ領域２１３にデータを書き込むことができるが、不許可キャッシュ領域２１３にはデータを書き込むことができない。これによって、故障等が発生したＮＶＭｅドライブによる不正データの書込みが発生した場合でも、キャッシュ領域２１３のデータの破壊を回避することができるため、ストレージシステム１００の信頼性を向上できる。
【０２５４】
図１８に示すように、従来のデータの読出処理では、ＮＶＭｅドライブがバッファ領域２１２に読出データを書き込み、コア１４０が、バッファ領域２１２からキャッシュ領域２１３に読出データを書き込んだ後、ホスト端末１０４に読出データが送信されていた。しかし、実施例１では、ＮＶＭｅドライブが、ＩＯページテーブル２２３の書換えを行うことなく許可キャッシュ領域２１３に読出データを書き込み、コア１４０が、ホスト端末１０４に当該読出データを送信する。これによって、ＩＯ性能を向上させることができる。
【０２５５】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【０２５６】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【０２５７】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｐｙｔｈｏｎ、Ｊａｖａ（登録商標）等の広範囲のプログラム又はスクリプト言語で実装できる。
【０２５８】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【０２５９】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【０２６０】
１００  ストレージシステム
１０１  ドライブボックス
１０２、１０３  ネットワーク
１０４  ホスト端末
１１０  ノード
１２０  コントローラ
１３０  ＣＰＵ
１３１  メモリ
１３２  ノードインタフェース
１３３  ホストインタフェース
１４０  コア
１４１  ＩＯＭＭＵ
１５０  スイッチ
１５１  記憶ドライブ
２０１  ＤＲＡＭ空間
２０２  予約空間
２０３  ＭＭＩＯ空間
２１１  コントロールデータ領域
２１２  バッファ領域
２１３  キャッシュ領域
２２１  制御プログラム
２２２  制御情報
２２３  ＩＯページテーブル
２３１  バッファデータ
２４１  キャッシュデータ
３００  記憶ドライブ対応情報
４００  領域割当管理情報
５００  ＩＯページテーブル管理情報
【図１】
2020161029.tif 000003
【図２】
2020161029.tif 000004
【図３】
2020161029.tif 000005
【図４】
2020161029.tif 000006
【図５】
2020161029.tif 000007
【図６】
2020161029.tif 000008
【図７Ａ】
2020161029.tif 000009
【図７Ｂ】
2020161029.tif 000010
【図７Ｃ】
2020161029.tif 000011
【図８】
2020161029.tif 000012
【図９】
2020161029.tif 000013
【図１０】
2020161029.tif 000014
【図１１】
2020161029.tif 000015
【図１２】
2020161029.tif 000016
【図１３】
2020161029.tif 000017
【図１４Ａ】
2020161029.tif 000018
【図１４Ｂ】
2020161029.tif 000019
【図１５Ａ】
2020161029.tif 000020
【図１５Ｂ】
2020161029.tif 000021
【図１５Ｃ】
2020161029.tif 000022
【図１６】
2020161029.tif 000023
【図１７】
2020161029.tif 000024
【図１８】
2020161029.tif 000025