(57)【要約】  ＳＳＤドライブによるデータ破壊のリスクを防ぎ、そのための処理時間の増大を抑え、Ｄｕａｌ  ｐｏｒｔ  ＮＶＭｅ  ＳＳＤで構成したストレージ装置の高信頼化及び高性能化を両立させる。ストレージ装置は、２以上のクラスタと、クラスタそれぞれに接続される記憶ドライブと、クラスタそれぞれに属しＩＯ要求に係るデータを格納する主記憶と、クラスタそれぞれに属し主記憶に対するアクセスを制御するプロセッサとを備え、主記憶は、記憶ドライブからの書き込みを許可する第１の領域と、該書き込みを禁止する第２の領域とを含み、プロセッサは、ＩＯ要求が第１の要求である場合に、ＩＯ要求に係るデータの記憶ドライブからの転送先として第１の領域を選択し、ＩＯ要求が第２の要求である場合に、ＩＯ要求に係るデータの記憶ドライブからの転送先として第２の領域を選択すると共に第２の領域に対する書き込みを許可する。
2017195324.tif 000002
【特許請求の範囲】
【請求項１】
２以上のクラスタと、前記クラスタそれぞれに接続される記憶ドライブと、前記クラスタそれぞれに属しＩＯ要求に係るデータを格納する主記憶と、前記クラスタそれぞれに属し前記主記憶に対するアクセスを制御するプロセッサとを備え、
前記主記憶は、前記記憶ドライブからの書き込みを許可する第１の領域と、該書き込みを禁止する第２の領域とを含み、
前記プロセッサは、前記ＩＯ要求が第１の要求である場合に、前記ＩＯ要求に係るデータの前記記憶ドライブからの転送先として前記第１の領域を選択し、前記ＩＯ要求が第２の要求である場合に、前記ＩＯ要求に係るデータの前記記憶ドライブからの転送先として前記第２の領域を選択すると共に前記第２の領域に対する書き込みを許可する
ことを特徴とするストレージ装置。
【請求項２】
請求項１に記載のストレージ装置であって、
前記プロセッサは、書き込みを許可した前記第２の領域への書き込みが終了すると、当該第２の領域に対する前記記憶ドライブからの書き込みを禁止する
ことを特徴とするストレージ装置。
【請求項３】
請求項１又は２に記載のストレージ装置であって、
前記プロセッサは、前記ＩＯ要求が読み出し処理であり、該読み出し処理の対象データが前記主記憶に設けたデータキャッシュ上に存在しない場合、または、前記ＩＯ要求がランダムアクセスの書き込み処理であり、該書き込み処理に伴う前記記憶ドライブからのデータ読み出しが必要な場合に、前記第１の要求か前記第２の要求かの選択を行う
ことを特徴とするストレージ装置。
【請求項４】
請求項１〜３のいずれか１項に記載のストレージ装置であって、
前記プロセッサは、前記第１の要求か前記第２の要求かの選択を、条件判定用ビットマップテーブルに基づいて判断する
ことを特徴とするストレージ装置。
【請求項５】
記憶ドライブからの書き込みを許可する第１の領域及び該書き込みを禁止する第２の領域を含む主記憶に対し、
ＩＯ要求が第１の要求であるか第２の要求であるかを判断する第１のステップと
前記ＩＯ要求が第１の要求である場合に、前記ＩＯ要求に係るデータの前記記憶ドライブからの転送先として前記第１の領域を選択する第２のステップと、
前記ＩＯ要求が第２の要求である場合に、前記ＩＯ要求に係るデータの前記記憶ドライブからの転送先として前記第２の領域を選択すると共に前記第２の領域に対する書き込みを許可する第３のステップと
を有するＩＯ要求処理方法。
【請求項６】
請求項５に記載のＩＯ要求処理方法であって、
前記第３のステップに続いて、書き込みを許可した前記第２の領域への書き込みが終了すると当該第２の領域に対する前記記憶ドライブからの書き込みを禁止する第４のステップ
を有するＩＯ要求処理方法。
【請求項７】
請求項５又は６に記載のＩＯ要求処理方法であって、
前記第１のステップは、前記ＩＯ要求が読み出し処理であり、該読み出し処理の対象データが前記主記憶に設けたデータキャッシュ上に存在しない場合、または、前記ＩＯ要求がランダムアクセスの書き込み処理であり、該書き込み処理に伴う前記記憶ドライブからのデータ読み出しが必要な場合に、実行されるステップ
であるＩＯ要求処理方法。
【請求項８】
請求項５〜７のいずれか１項に記載のＩＯ要求処理方法であって、
前記第１のステップは、当該ＩＯ要求処理を実行するプロセッサが条件判定用ビットマップテーブルに基づいて判断するステップ
であるＩＯ要求処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＳＤで構成したストレージ装置に関する。
【背景技術】
【０００２】
従来は、ＳＡＳ  プロトコルＩ／Ｆを持つデバイスコントローラ（以下、「ＳＡＳ  ＣＴＬ」という）を使ってＳＡＳ  ドライブとの通信を実現していた。ＳＡＳ  ＣＴＬは、ＳＡＳデータ転送をコマンドの内容に従ってメモリライトに変換し実行する。そのため、ＳＡＳ  ＣＴＬは、コマンドの内容に従ったＳＡＳデータ転送しか受け付けず、ＳＡＳデータ転送に誤りがあればメモリライトは実行しない。よって、ＳＡＳ  ＣＴＬは、両ＣＴＬのユーザーデータにアクセスできず、ドライブ障害により両ＣＴＬのユーザーデータを破壊する可能性は比較的小さいものであった。
一方、ＮＶＭ  Ｅｘｐｒｅｓｓ  （以下、「ＮＶＭｅ」という）Ｉ／Ｆを２つ持つドライブは、高可用性を実現するために、ストレージクラスタが冗長化されたストレージ装置の両プロセッサとＰＣＩｅで接続し、両ストレージクラスタの主記憶に直接アクセスすることができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２６９１６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
Ｄｕａｌ  ｐｏｒｔ  ＮＶＭｅ  ＳＳＤ  Ｄｒｉｖｅ（以下、ＳＳＤは、特に明記しない限りＤｕａｌ  ｐｏｒｔ構成を前提とする）で構成したストレージ装置は、両ストレージクラスタにＳＳＤが直接接続されているところ、プロセッサとドライブの間に不正データ転送を検出するＳＡＳ  Ｄｒｉｖｅコントローラが無い。これにより、ストレージクラスタは、ＳＳＤドライブによる不正データの転送を抑止することができない。また、ＳＳＤが故障等で制御不能になり、ＳＳＤが両ストレージクラスタに不正なデータ転送を実行すると、ストレージクラスタはデータ転送を抑止できない。その結果、不正なデータ転送により、両ストレージクラスタの主記憶に格納されているホストデータが破壊される可能性があり、ＳＳＤドライブによるデータ破壊のリスクが増大し信頼性の低下を招くことになる。【０００５】
このデータ破壊のリスクが増大することに対し、ＩＯデバイスのデータ転送を制御する仕組みとして、ＩＯＭＭＵ（ＩＯＭＭＵについては、後述）を使ったデータ転送制御方法が存在する。この制御方法は、制御プログラムが作成した、物理アドレスと仮想アドレスを変換するＩＯページテーブルの情報をＩＯＭＭＵに読み込ませ、ＩＯＭＭＵにどのデバイスがどのようなデータ転送を実施してよいか判断させることで、制御プログラムはＩＯデバイスのデータ転送を制御することができる。例えば、ＳＳＤからストレージクラスタの主記憶へのデータ転送を実現したい場合、制御プログラムがＩＯページテーブルを操作し、ＩＯページテーブルに記述された特定のアドレスに対するメモリアクセス権の属性を書き換える。これにより、制御プログラムが、ＳＳＤからストレージクラスタの主記憶に対するメモリライトを受け付けないようにすることで、ドライブの意図しないデータ転送による主記憶上のデータの破壊を防ぐことが可能となる。【０００６】
しかし、プログラムによってＩＯＭＭＵのＩＯページテーブルを操作しかつ変更内容を反映にかかるためには、そのプログラムによる処理時間は大きくなり、１回のＩＯの処理に必要な時間が大幅に増大してしまう。そのため、単純に各ＩＯ処理にＩＯＭＭＵを適用しただけでは、高性能化の実現が困難である。
よって、Ｄｕａｌ  ｐｏｒｔ  ＮＶＭｅ  ＳＳＤで構成したストレージ装置の高信頼化及び高性能化を両立させることが課題である。
【課題を解決するための手段】
【０００７】
本発明に係るストレージ装置は、２以上のクラスタと、クラスタそれぞれに接続される記憶ドライブと、クラスタそれぞれに属しＩＯ要求に係るデータを格納する主記憶と、クラスタそれぞれに属し主記憶に対するアクセスを制御するプロセッサとを備え、主記憶は、記憶ドライブからの書き込みを許可する第１の領域と、該書き込みを禁止する第２の領域とを含み、プロセッサは、ＩＯ要求が第１の要求である場合に、ＩＯ要求に係るデータの記憶ドライブからの転送先として第１の領域を選択し、ＩＯ要求が第２の要求である場合に、ＩＯ要求に係るデータの記憶ドライブからの転送先として第２の領域を選択すると共に第２の領域に対する書き込みを許可することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、両ストレージクラスタのダーティデータ破壊を防ぐことができ、装置の信頼性が向上する。すなわち、ドライブ障害により両系に対し不正メモリライトが発行されても、装置性能を維持しつつ両ストレージクラスタの主記憶上のキャッシュ領域のダーティデータが同時に破壊されることを防ぐことができる。また、ホスト要求内容を判断することによって、必要な時にのみＩＯページテーブルを操作するため、ストレージ装置のＩＯ処理性能への影響を最小限にすることができる。その結果、Ｄｕａｌ  ｐｏｒｔ  ＮＶＭｅ  ＳＳＤで構成したストレージ装置の高信頼化及び高性能化の両立を図ることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、ストレージ装置全体のハードウェア構成を示す図である。
【図２】図２は、ストレージコントローラのシステム物理アドレス空間及び主記憶に格納されているデータ種別並びにそのアドレスとの対応関係を示す図である。
【図３】図３は、ＩＯページテーブルのデータ構造を示す図である。
【図４】図４は、メモリアクセス権切替判断処理のフローチャートを示す図である。
【図５】図５は、ドライブから主記憶へのデータ転送経路を示す図である。
【発明を実施するための形態】
【００１０】
本発明の実施形態を、実施例１として図を参照しながら以下に説明する
【実施例１】
【００１１】
図１は、本発明の実施例１に係るストレージ装置全体のハードウェア構成を示す図である。
２０１は、ストレージ装置のストレージコントローラを表す。ストレージ装置は、他のコンピュータから転送されるデータを永続的に格納する。ストレージ装置の高可用化を実現するため、ストレージコントローラは、２つまたは２つ以上のストレージクラスタで冗長構成を採用する。実施例１では、ストレージクラスタを２つ設けた例を示す。【００１２】
３０１（４０１）は、ストレージ装置のストレージクラスタを表す。ストレージクラスタは、ホストＩ／Ｆ、主記憶及びプロセッサで構成され、図示しないホストからの要求を受け付け、データの入出力処理を行う。【００１３】
３１１（４１１）は、ホストＩ／Ｆを表し、他のコンピュータ（例えば、ホスト）とストレージクラスタ間の通信を実現するインタフェース（Ｉ／Ｆ）である。ホストＩ／Ｆは、典型的には、プロセッサとＰＣＩ  Ｅｘｐｒｅｓｓで接続するＦｉｂｒｅ  Ｃｈａｎｎｅｌ  Ｉ／Ｆであり、ストレージクラスタとホストとの通信を実現する。ホストＩ／Ｆは、Ｅｔｈｅｒｎｅｔアダプタ、ＩｎｆｉｎｉＢａｎｄ  Ｈｏｓｔ  Ｂｕｓ  アダプタ、ＰＣＩ  Ｅｘｐｒｅｓｓ  ブリッジ等の各種Ｉ／Ｆでもよく、またそれらが混在してもよい。【００１４】
３２１（４２１）は、プロセッサを表し、ホストＩ／Ｆとドライブボックス内のドライブとのデータ通信を実現する。プロセッサは、ストレージ制御プログラムに従って動作する。典型的には、ストレージクラスタの冗長化のため、プロセッサは、他ストレージクラスタのプロセッサとＰＣＩ  Ｅｘｐｒｅｓｓ等のＩ／Ｆで接続し、他プロセッサの主記憶にアクセスすることを可能にしている。ただし、プロセッサは、他方のプロセッサと接続せず、ホストＩ／Ｆを経由してストレージクラスタ間の通信を実現してもよい。また、後述するドライブボックス内のスイッチ間にストレージクラスタ間通信に用いるデータ転送バスを設けて、通信を実現してもよい。また、１つのストレージクラスタに２つ以上のプロセッサを搭載してもよい。【００１５】
３２２（４２２）は、プロセッサコアを表し、プロセッサを構成する機能部位の一つである。プロセッサコアは、プロセッサにつき１つ以上存在する。
３２３（４２３）は、ＩＯ  Ｍｅｍｏｒｙ  Ｍａｐｐｉｎｇ  Ｕｎｉｔ（以下、「ＩＯＭＭＵ」という）を表し、プロセッサを構成する機能部位の一つである。ＩＯＭＭＵは、ＩＯページテーブルの記載内容に従って、プロセッサに接続するＰＣＩｅ  デバイスによる主記憶のリードライトの可否及びアドレス変換を制御する。例えば、アドレス変換テーブル（ＩＯページテーブル）を保持（キャッシュ）し、アドレス変換の切り替えを制御する。【００１６】
３３１（４３１）は、プロセッサの主記憶を表し（以下では、単に「主記憶」という場合がある）、典型的にＤＲＡＭ等の揮発媒体で構成される。ただし、プロセッサの主記憶の一部または全てが、ＮＡＮＤ  Ｆｌａｓｈ、ＳＴＴ−ＲＡＭ、ＰＣＭ等の不揮発媒体で構成されてもよい。
Ｄ１１１（Ｄ２１１）は、制御データ領域を表し、主記憶３３１（４３１）にあるストレージ装置の動作を司る制御データが格納されている領域である。詳細については後述する。【００１７】
Ｄ１２１（Ｄ２２１）は、バッファデータ領域を表し、一時データを格納ための主記憶３３１（４３１）上の領域である。詳細については後述する。
Ｄ１３１（Ｄ２３１）は、キャッシュデータ領域を表し、ホストデータを格納するための主記憶３３１（４３１）上の領域である。詳細については後述する。【００１８】
５００は、ドライブボックスを表し、複数のドライブを搭載する。ドライブボックスは、内部にスイッチ、ドライブを搭載する。典型的には、保存できるデータ容量を拡張するため、複数のドライブボックスがシステムに接続できるように、スイッチ部に拡張用のポートを設けている。ドライブボックスは、ドライブボックス拡張用の接続Ｉ／Ｆを持たなくてもよい。また、ドライブボックスは、ストレージ装置の筐体と一体となってもよい。【００１９】
６００は、ドライブボックス内のスイッチを表し、複数のドライブを搭載するためのスイッチである。典型的には、スイッチは、ストレージクラスタのプロセッサ、ドライブボックス内のドライブ及び他のドライブボックスとＰＣＩ  ｅｘｐｒｅｓｓで接続する。また、図では、１つのストレージクラスタと接続しているが、２つのストレージクラスタのプロセッサと接続してもよい。【００２０】
７００は、ドライブを表す。ドライブは、典型的にはＰＣＩ  ｅｘｐｒｅｓｓでスイッチ６００と接続し、ＮＶＭ  ｅｘｐｒｅｓｓプロトコルでプロセッサとドライブ間の通信を実現する。また、ドライブは、２つのＰＣＩ  ｅｘｐｒｅｓｓ  Ｉ／Ｆを持ち、２つのストレージクラスタ双方からドライブにアクセスすることを可能にし、ドライブの可用性を向上させる。【００２１】
図２は、ストレージコントローラのシステム物理アドレス空間及び該空間に配置されている主記憶のデータ種別並びにそのアドレスとの対応関係を示す図である。
Ｄ００１は、物理アドレス空間を表す。物理アドレス空間の大きさは、プロセッサが管理できるアドレス空間の大きさで決まる。【００２２】
Ｄ１０１は、ＤＲＡＭ空間を表し、物理アドレス空間にマッピングされたものである。ＤＲＡＭ空間は、典型的には、プロセッサの主記憶のアドレスと対応し、ＤＲＡＭ空間に配置されたデータは主記憶に格納される。主記憶の一部またはすべてが不揮発媒体で構成されている場合、不揮発媒体内のアドレスがＤＲＡＭ空間にマッピングされてもよい。また、ＤＲＡＭ空間の一部またはすべてが不揮発媒体内のアドレスと対応していてもよい。【００２３】
Ｄ１０２は、予約領域を表し、物理アドレス上で資源として割り当てられていない領域である。制御プログラムは、予約領域の開始アドレス及び終端アドレスを自由に変えることができる。【００２４】
Ｄ１０３は、ＭＭＩＯ空間を表し、制御プログラムがＰＣＩデバイスに対しデータの入出力を行うためのＩ／Ｆとなる空間である。予約領域と同様に、制御プログラムは、ＭＭＩＯ空間の大きさも自由に変えることができる。【００２５】
Ｄ１１１は、制御データ領域を表し、ＤＲＡＭ空間に配置される。制御データ領域には、ストレージ装置を制御するためのプログラムデータ、その制御に必要な制御データ及びＩＯＭＭＵのメモリアクセス権やアドレス変換を行うためのＩＯページテーブルを格納する。制御データ領域はストレージ装置の制御を司ることから、典型的には、特定の１つまたは１つ以上のプロセッサコア及びソフトウェアのみに、制御データ領域上のデータへのアクセスが許可される。【００２６】
Ｄ１１２は、制御プログラムを表し、ストレージ装置を制御するためのプログラムデータである。制御プログラムは、典型的には、ストレージ装置のオペレーティングシステム（ＯＳ）である。具体的に、制御プログラムは、ホストＩ／Ｆやドライブへのデータ転送指示、後述する制御データを管理及び操作する。また、制御プログラムは、ハイパーバイザ―及びハイパーバイザ―上で動作する仮想マシンでもよく、仮想マシンは複数存在していてもよい。さらに、複数の仮想マシンが実装された場合、ストレージ装置を制御する仮想マシンが最低１つ存在していれば、他の仮想マシンはストレージ装置の動作に関係の無いアプリケーションを動作させてもよい。【００２７】
Ｄ１１３は、制御データを表し、ストレージ装置の制御に必要なデータである。制御データは、典型的には、前述したキャッシュデータを管理するキャッシュディレクトリ、バッファデータ領域を管理するテーブル、ドライブデータを管理するためのボリューム管理情報、デバイスを制御するためのコマンドデータ及びストレージクラスタ間で共有する共有データ等である。【００２８】
制御データの中で、キャッシュディレクトリに関して、ストレージ装置は、キャッシュディレクトリをセグメントと呼ばれる６４ｋＢで１つの管理単位により管理する。具体的には、セグメントの状態、ＬＲＵ情報（デステージ処理の対象になるかどうかの判定を行う際の判断材料となる）、ＭＲＵ情報、セグメント内の５２０Ｂの各サブブロックについて、ダーティ状態かクリーン状態かを示すビットマップ及びデータを格納する物理アドレスなどの情報を保持するリストにより管理する。【００２９】
また、バッファデータ領域を管理するテーブルに関して、ストレージ装置は、後述する性能特化ＩＯ処理における参照すべきデータ量や処理量を小さくするために、ホストＩＯ処理を行う処理ＩＤ、ボリューム情報、転送元のドライブ情報及び領域占有情報などＩＯ処理に必要最低限の情報を格納するテーブルによりバッファデータ領域を管理する。【００３０】
Ｄ１１４は、ＩＯページテーブルを表し、ＩＯＭＭＵがプロセッサに接続するデバイスに対しアドレス変換、メモリアクセス権制御機能を提供するために必要なテーブルである。ＩＯページテーブルは、図３に示すデータ構造を持つ。ＩＯＭＭＵは、ＩＯページテーブルを参照し、どのデバイスがどのアドレスに対し入出力できるかを判断し制御する。プロセッサコアは、ＩＯページテーブルの内容を書き換えることができる。また、プロセッサコアは、ＩＯＭＭＵのレジスタを操作することでＩＯＭＭＵにキャッシュされているＩＯページテーブルを無効化し、書き換え後の新しいＩＯページテーブルをフェッチさせることができる。この操作により、プロセッサコアは、必要に応じて特定のデバイスに対するメモリアクセス権の制御を変更及びその反映をすることができる。【００３１】
Ｄ１２１は、バッファデータ領域を表し、ストレージ装置とホストとの間でＩＯを行う際に一時データであるバッファデータを格納する領域である。バッファデータは、キャッシュ制御による管理の対象とならない。そのため、バッファ領域を使ったデータ転送は後述するキャッシュデータ領域を経由したデータ転送より処理時間が短く、高性能が要求されるデータ転送処理に利用されることがある。【００３２】
Ｄ１２２は、一時データを表し、バッファデータ領域Ｄ１２１に一時的に格納されるデータである。一時データは、ホスト要求処理が完了すると速やかに破棄されることにより、次のホスト要求処理でバッファデータ領域が利用できるようになる。【００３３】
Ｄ１３１は、キャッシュデータ領域を表し、ホストデータを格納するための主記憶上の領域である。キャッシュデータ領域にホストデータを格納できるようにすることにより、ストレージ装置のデータ入出力性能を向上させることを狙う。ストレージ装置は、キャッシュデータ領域上のキャッシュデータをストレージ装置のキャッシュ制御の対象とし、制御データＤ１１３内にあるキャッシュディレクトリによりキャッシュ領域上のホストデータを管理する。【００３４】
Ｄ１３２は、ダーティデータを表し、キャッシュデータ領域Ｄ１３１内に格納されるホストデータで、ストレージ装置のドライブにデステージされていないデータである。ダーティデータは、主記憶上にのみ存在するホストデータであるため、主記憶の揮発が生じれば消失する。そのため、ダーティデータは、通常クラスタ間で冗長化され、デステージが発生するまで冗長化された状態が維持される。障害ドライブの不正データ転送によるダーティデータ消失を回避するために、ダーティデータが格納されている物理アドレス領域は、ＩＯページテーブルのエントリのメモリアクセス権の設定によって、常にドライブによるメモリライトを不可とする。ただし、ドライブによるメモリリードについては、データが破壊される可能性が小さいため、メモリアクセス権を可としてもよい。ただし、ドライブがユーザーデータの信頼性をチェックできない低機能低価格のドライブである場合、データを誤ったドライブ内アドレスに転送することによるドライブ内のデータ破壊から保護するために、ダーティデータのメモリアクセス権を不可とする。【００３５】
Ｄ１３３は、クリーンデータを表し、キャッシュデータ領域Ｄ１３１内に格納されるホストデータで、ストレージ装置のドライブにデステージされたデータである。クリーンデータは、主記憶とドライブの両方に存在するホストデータであるため、主記憶の揮発が生じてクリーンデータが消失しても、ドライブからステージングすることにより復元することができる。このように、クリーンデータは、回復が可能であるため、クラスタ間で冗長化されていなくてもよい。障害ドライブの不正データ転送によってクリーンデータが消失しても、ドライブから再度ステージングすることによって回復できる。そのため、クリーンデータが格納されている物理アドレス領域は、ＩＯページテーブルにエントリされているメモリアクセス権の設定によって、ドライブによるメモリライトは可としてもよい。また、同様にドライブによるメモリリードについては、データが破壊される可能性が小さいため、メモリアクセス権を可としてもよい。【００３６】
Ｄ１３４は、キャッシュデータ領域Ｄ１３１内の未割当領域を表す。制御プログラムがホストＩ／Ｆまたはドライブに主記憶からデータを転送させようとする際に、制御プログラムがキャッシュディレクトリを参照し、ホストＩ／Ｆまたはドライブのデータ転送先となるセグメントを選択する。この際、キャッシュデータ領域に未割当領域が存在すれば、制御プログラムは、未割当領域をデータ転送先として排他的に利用する。もし未割当領域が存在しなければ、制御プログラムは、ＬＲＵまたはＭＲＵで、クリーンデータが格納されたセグメントを選択して未割当状態に遷移させるか、または、ダーティデータをデステージしてダーティ状態からクリーン状態に遷移させることにより、未割当状態に遷移させて、データ転送先として排他的に利用する。データ転送の完了後、制御プログラムは、キャッシュディレクトリを更新し、当該セグメントは未割当状態からダーティ状態またはクリーン状態に遷移する。【００３７】
図３は、ＩＯページテーブルのデータ構造を示す図である。
ＩＯページテーブルは、制御対象デバイス情報Ｔ１０１を格納するフィールド、メモリアクセス制御対象領域の開始物理アドレスＴ１０２を格納するフィールド、メモリアクセス制御対象領域の大きさを表すページサイズＴ１０３を格納するフィールド、制御対象デバイスのメモリアクセス権Ｔ１０４の情報を格納するフィールドを含む。ＩＯページテーブルは、これ以外のフィールドを含んでいてもよい。【００３８】
制御対象デバイス情報Ｔ１０１は、メモリアクセス制御の対象となるＰＣＩデバイスを指定する識別子を表す。この識別子は、典型的にはＰＣＩのバス番号、デバイス番号及びファンクション番号の３つとなる。ファンクション番号は、ヴァーチャルファンクション番号を用いてもよい。バス単位、デバイス単位またはファンクション単位で、デバイスのメモリアクセス権を制御できる。【００３９】
メモリアクセス制御対象領域の開始物理アドレスＴ１０２は、制御対象デバイスのメモリアクセスに対する物理アドレスの開始アドレスを指定する。
ページサイズＴ１０３は、典型的には、４ｋＢ、２ＭＢ、１ＧＢといったサイズが指定できるところ、設計によってこの大きさを変えることもできる。【００４０】
メモリアクセス権Ｔ１０４は、制御対象デバイスのメモリアクセス、すなわちメモリリードとメモリライトの可否を決定する可否情報を格納する。これにより、当該デバイスのメモリアクセス権を制御する。
このＩＯページテーブルは、典型的には主記憶に格納されているところ、ＩＯページテーブルの複製の一部または全てをドライブ内のバッファに格納してもよい。【００４１】
図４は、メモリアクセス権切替え判定処理のフローチャートを示す図である。
メモリアクセス権切替え判定処理は、ストレージ装置がホストからのＩＯ要求を受けてから、このＩＯ要求に対応したストレージ装置が行うべき処理内容に応じて、ストレージ装置がドライブによるメモリライトを許可または禁止するための処理を切り替える判定処理である。この判定処理において、ストレージ装置がホストからのＩＯ要求を受領した以降の処理の主体は、ストレージ装置のプロセッサコアである（以下では、「コア」と略す）。【００４２】
ステップＳ００１は、コアがホスト要求を受領し要求を解釈するステップである。ホストＩ／Ｆが、ホスト−ストレージ装置間のプロトコルをＳＣＳＩコマンドに変換し、ホストＩ／Ｆが主記憶にライトする。コアが、主記憶上のＳＣＳＩコマンドに変換されたホスト要求を読み取り、内容を解釈する。ホスト要求には、データ転送長、ストレージ装置に対するＲｅａｄ処理またはＷｒｉｔｅ処理等の処理種別を表すＩＯ処理種別、データが格納されているＬＵＮ等のボリューム管理情報、データ格納元のアドレスを表すＬＢＡが記述されている。コアは、ホスト要求の内容に応じてストレージ装置が次に行う処理の内容を決定する。【００４３】
ステップＳ００２は、コアがホスト要求の内容を解釈し、Ｒｅａｄ要求か否かの判定する条件分岐のステップである。ホスト要求種別が、Ｒｅａｄ要求、すなわちストレージ装置からホストへのデータ転送要求である場合（ＹＥＳ）は、ステップＳ００３に進む。それ以外の要求種別、ここではＷｒｉｔｅ要求、すなわちホストからストレージ装置へのデータ転送要求である場合（ＮＯ）は、ステップＳ００５に進む。【００４４】
まず始めに、Ｗｒｉｔｅ要求（ステップＳ００２の判定結果がＮＯ）の場合の後続する処理を説明する。
ステップＳ００５は、コアがホストのＷｒｉｔｅ要求のＩＯパターンを分析し、ランダムアクセス処理をすべきかどうかを判定するステップである。ホスト要求のＩＯパターンは、典型的にはデータ転送長が５１２Ｂ〜数十ｋＢと小さく、Ｗｒｉｔｅデータの格納先となるアクセス範囲が大きくかつ局所性が小さいランダムアクセスと、データ転送長が数十ｋＢ〜１ＭＢと大きくかつアクセス先が連続性をもつシーケンシャルアクセス、の２つに大別される。【００４５】
判定の結果、シーケンシャルライトである場合（ＮＯ）、コアはホストから受領したデータのみを用いてパリティを生成し冗長化する処理を行うため、既にドライブに格納されている旧データをドライブから読み込む処理は行わない。よって、アクセスパターンがシーケンシャルライトだった場合、コアは、ドライブからの読み込み処理（以下、「ドライブリード処理」という）時のドライブによるメモリライトの許可禁止切替え処理を不要と判断し、メモリアクセス権切替え判定処理を終了する。他方、ランダムライトである場合（ＹＥＳ）、後述するステップＳ００６へ進む。【００４６】
ステップＳ００３は、ストレージ装置のＲｅａｄ処理におけるキャッシュヒットを判定するステップである。ストレージ装置は、プロセッサの主記憶をデータキャッシュとして用いることで、ストレージ装置の入出力性能を向上させる。コアは、キャッシュヒット判定処理を実行し、ホストが要求するデータがキャッシュ領域上に存在するかどうかを確認する。具体的には、コアが制御データ領域に格納されているキャッシュディレクトリを参照し、ホストが要求するデータがキャッシュディレクトリに登録されているかどうかを確認する。【００４７】
ステップＳ００４は、ステップＳ００３のキャッシュヒット判定処理によるキャッシュミスを判定するステップである。キャッシュディレクトリに要求するデータが登録済みで、キャッシュ領域上に要求するデータが存在すると確認できた場合（ＮＯ）は、キャッシュヒットと判定される。キャッシュディレクトリに要求するデータが登録されておらず、キャッシュ領域上に要求するデータが存在しないと確認できた場合（ＹＥＳ）は、キャッシュミスと判定される。キャッシュミス時には、コアはキャッシュミスに対応した処理（Ｒｅａｄ  Ｍｉｓｓ処理）を実施する【００４８】
キャッシュミスと判定された場合（ＹＥＳ）、ホストにデータ転送するために、コアは、ドライブから要求するデータを主記憶にステージングする必要があるので、ステップＳ００７に進む。
キャッシュヒットと判定された場合（ＮＯ）、コアは、キャッシュ領域上のホストデータを読み出してホストにデータ転送することができる。よって、ドライブリード処理を行う必要が無く、コアはメモリアクセス権切替え判定処理を終了する。【００４９】
一方で、ステップＳ００６は、ランダムライト処理におけるデステージ処理で生じる、ドライブリード処理を実行するステップである。アクセスパターンがランダムだった場合、キャッシュデータの管理単位より小さいデータ長でキャッシュデータの更新が発生し、デステージの際に古いパリティデータを更新する必要がある。管理単位より小さいデータ長でキャッシュデータの更新が発生するため、１つのキャッシュデータ内に新データと旧データが混在する形となる。そのため、コアは、ホストから受領したデータのみでパリティを生成するなどにより、データを冗長化することができず、ストレージ装置のドライブに格納されている旧データを用いて、新たな冗長データ（新パリティ）を演算し生成する必要がある。そのため、コアは、新パリティを演算する際に、ドライブから旧データを読み出す処理を行う。よって、ランダムライト処理でドライブリード処理が発生することになる。ランダムライト処理におけるデステージ処理は、非同期で行われる。キャッシュ領域上のダーティデータ量が閾値を超えること等を契機として、コアが、ランダムライト処理におけるデステージ処理を開始した場合、ドライブリード処理の性能特化ＩＯ処理の判定を行うため、ステップＳ００７に進む。【００５０】
ステップＳ００７は、ストレージ装置のドライブリード処理方法を判断する条件分岐のステップである。ホスト要求とストレージ装置の状態が特定の条件に合致した場合に、ストレージ装置によるホスト要求の処理量を増加させる、または、できるだけホスト要求処理時間を短縮させるために、コアがホスト要求を特別な方法で処理する場合がある。以降、この処理を「性能特化ＩＯ処理」と呼ぶ。【００５１】
ステップＳ００７で、コアは、特定の処理条件に合致しない通常ＩＯ処理を実施するか、特定の処理条件に合致する性能特化ＩＯ処理を実施するかを判断する。コアが、通常ＩＯ処理を実施すると判断すれば（ＮＯ）、ステップＳ００８に進み、性能特化ＩＯ処理を実施すると判断すれば（ＹＥＳ）、ステップＳ０１４に進む。具体的な判断方法については、以下のいずれの方法であってもよい。例えば、コアが、主記憶上に用意された、ＩＯ要求処理方法判断に使う条件判定用ビットマップテーブルを読み込み、バッファデータ領域が利用可能でキャッシュ制御処理を省略できると判断し高性能処理の実施を指示するビットが１になっている状態を契機として、性能特化ＩＯ処理の実施を判断してもよい。また、特定のホストからの要求、または特定のドライブのボリュームに対する要求を受領したことを契機として、性能特化ＩＯ処理の実施を判断してもよい。さらには、ストレージ装置のプロセッサコア稼働率（コアの動作時間に対してコアが演算処理している時間の比）が、定められた閾値、例えば５０％を上回り、かつ、主記憶のキャッシュデータ領域に格納されているダーティデータの全体に占める割合が、定められた閾値、例えば６０％を上回る場合において、性能特化ＩＯ処理の実施を判断してもよい。【００５２】
ステップＳ００８は、通常ＩＯ処理として、コアが、主記憶の転送先キャッシュデータ領域上にホストへのデータ転送用作業領域を特定し、排他的に利用するためのステップである。コアは、ホスト要求の内容を解釈し、ホストが要求するデータが格納されているＮＶＭｅドライブ内のＬＢＡを特定する。ＬＢＡに対応するホストデータがキャッシュ領域に存在するかどうか確かめるため、コアはキャッシュディレクトリを参照する。参照の結果キャッシュミスした場合、コアはキャッシュデータ領域上のデータ転送先セグメントを探索する。【００５３】
探索の結果、未割当領域があれば、コアは、制御データ領域に格納するキャッシュ制御デーブルを操作し、他のコアやデバイスが操作できないよう排他処理を行う。これは、ホストＩＯ処理が完了するまでの間、主記憶上のキャッシュ領域が他の処理による干渉を受けないようにするためである。【００５４】
探索の結果、未割当領域がなければ、コアは、クリーンデータを格納したセグメントの内容を破棄して未割当領域に状態遷移させるか、または、ダーティデータをデステージしてセグメントの内容をダーティ状態からクリーン状態に遷移させることで未割当領域に状態遷移させてから、前述した排他処理を行う。この際、対象となるセグメントは、典型的には、ホストの要求を受け付けたストレージクラスタ側の主記憶に格納されるセグメントを選択する。これに限らず、他方のストレージクラスタ側の主記憶に格納されるセグメントを選択してもよい。【００５５】
ステップＳ００９は、コアが、ドライブにデータ転送要求の指示を出すための命令（ドライブからの読み込みコマンド、以下「ドライブリードコマンド」という）を主記憶上に作成するステップである。ＮＶＭｅドライブへの指示形式は、ＮＶＭ  ｅｘｐｒｅｓｓのリードコマンドフォーマットに準ずる。【００５６】
ステップＳ０１０は、コアが、転送先キャッシュデータ領域に対応するＩＯページテーブルを操作し、ドライブからの転送先キャッシュデータ領域へのデータ転送を許可するステップである。コアは、図３に示すＩＯページテーブルを操作し、転送先領域に該当するＩＯページテーブルのメモリアクセス権を「Ｒｅａｄ許可、Ｗｒｉｔｅ禁止」から「Ｒｅａｄ許可、Ｗｒｉｔｅ許可」に切り替える処理を行う。コアによる切り替え処理として以下の処理を行う。始めに、転送指示をするＮＶＭｅドライブを特定する。次に、転送処理先領域に対応する物理アドレスを特定し、操作すべきＩＯページテーブルを特定する。最後に、そのテーブルのビットを操作し、メモリアクセス権の切り替えを実施する。【００５７】
メモリアクセス権の切り替えを確定させるため、コアは、ＩＯＭＭＵのレジスタを操作し、ＩＯＭＭＵ内部にキャッシュされているＩＯページテーブルの無効化処理を行う。ステップＳ０１０では、メモリアクセス権変更済みのＩＯページテーブルを再度ＩＯＭＭＵにキャッシュさせることで、メモリアクセス権変更の適用を確定させる。【００５８】
ステップＳ０１１は、コアが、ドライブに対しドライブリード処理の実行を指示するステップである。ドライブリード処理の実行の指示方法は、ドライブの設計、実装に依存するところ、ドライブ内のメディアコントローラのレジスタを操作し直接指示を出すか、または、コアまたはコア以外のデバイスが主記憶上に実行指示（メモリライト）しドライブにポーリングさせて間接的に指示を出すようにしてもよい。【００５９】
ステップＳ０１２は、コアが、ドライブの処理応答完了の受領を確認するステップである。ドライブが、ドライブ内媒体からプロセッサ主記憶へのデータ転送を完了させると、主記憶上の完了応答受領用のキューに完了通知のメモリライトを実施する。コアが、この完了通知を読み取ることで完了の確認を行う。また、処理応答完了の方法は別手段でもよい。例えば、ドライブのＭＳＩを１つまたは１つ以上のコアに発行し、割り込みによって完了を通知してもよい。その他、例えば、ホストＩ／Ｆ等、プロセッサに接続する外部デバイスのレジスタに対し、直接ライトを発行することで通知してもよい。【００６０】
ステップＳ０１３は、コアが、転送先キャッシュデータ領域に対応するＩＯページテーブルを操作し、ドライブの転送先キャッシュデータ領域へのデータ転送を許可するステップである。コアは、図３に示すＩＯページテーブルを操作し、転送先領域に該当するＩＯページテーブルのメモリアクセス権を「Ｒｅａｄ許可、Ｗｒｉｔｅ許可」から「Ｒｅａｄ許可、Ｗｒｉｔｅ禁止」に切り替える処理を行う。コアによる切り替え処理として以下の処理を行う。始めに、転送指示をするＮＶＭｅドライブを特定する。次に、転送処理先領域に対応する物理アドレスを特定し、操作すべきＩＯページテーブルを特定する。最後に、テーブルのビットを操作し、メモリアクセス権の切り替えを実施する。【００６１】
メモリアクセス権の切り替えを確定させるため、コアは、ＩＯＭＭＵのレジスタを操作し、ＩＯＭＭＵ内部にキャッシュされているＩＯページテーブルの無効化処理を行う。ステップＳ０１３では、メモリアクセス権変更済みのＩＯページテーブルを再度ＩＯＭＭＵにキャッシュさせることで、メモリアクセス権変更の適用を確定させる。【００６２】
次に、ステップＳ００７でコアが性能特化ＩＯ処理の実施と判断した場合について説明する。ステップＳ０１４は、コアが、性能特化ＩＯ処理として転送先の一時領域を特定するステップである。キャッシュ制御を行わないことにより、転送先領域を占有するための処理量が少なくて済む。これにより、通常ＩＯ処理と比較して小さい処理時間で、性能特化ＩＯ処理で用いるバッファ領域を選択することが可能となる。
ステップＳ０１４に続く、ステップＳ００９、ステップＳ０１１及びステップＳ０１２については、前述と同様である。【００６３】
以上の処理を実行後、ホスト要求がＲｅａｄ処理である場合、コアは、ホストＩ／Ｆが主記憶からホストへユーザーデータを転送することを指示し、ホストＩ／Ｆに主記憶上のホストデータを転送させ、ホストからデータ受領完了応答を受領し、その応答受領を認識した時点で、ホスト要求の処理を終了する。また、ホスト要求がＷｒｉｔｅ要求でランダムライト処理である場合、コアは、ＲＭＷ（Ｒｅａｄ−Ｍｏｄｉｆｙ−Ｗｒｉｔｅ）処理で生成した新データ、新パリティをデステージし、デステージの完了を以てデステージ処理を終了する。【００６４】
図５は、ストレージ装置のドライブからプロセッサの主記憶に対するデータ転送の経路を示す図である。転送経路としては、以下のＰ１１、Ｐ１２、Ｐ２１及びＰ２２の４つとなる。Ｐ１１及びＰ１２は、ストレージクラスタ３０１のプロセッサ３２１がドライブ７００にデータ転送を要求し、ドライブ７００がプロセッサの主記憶３３１にデータを転送する時のデータ転送経路である。Ｐ２１及びＰ２２は、同様に、ストレージクラスタ４０１のプロセッサ４２１がドライブ７００にデータ転送を要求し、ドライブ７００がプロセッサの主記憶４３１にデータを転送する時のデータ転送経路である。Ｐ１１及びＰ１２とＰ２１及びＰ２２は、転送経路及び動作がストレージクラスタ３０１及び４０１からすれば対称であるため、ストレージクラスタ３０１側のＰ１１及びＰ１２の方を対象にして説明する。【００６５】
Ｐ１１は、図示しないホストからの要求（以下、「ホスト要求」という）を受け付けたコア３２２が、ストレージクラスタ３０１の制御プログラムを実行し、図４に示すステップＳ００７の結果、通常ＩＯ処理の実施と判断し、データ転送用キャッシュとして用いるセグメントを、ストレージクラスタ３０１側の主記憶３３１に確保した場合のデータ転送経路である。図４に示すステップＳ００７の結果、通常ＩＯ処理の実施と判断した場合、ステップＳ００８で、コア３２２は、ストレージクラスタ３０１の主記憶３３１のキャッシュデータ領域Ｄ１３１に対して、ドライブ７００からのデータ転送先としてセグメントを確保し、排他処理を行う。コア３２２は、ドライブ７００に対し、排他処理を行ったセグメントをデータ転送先としてドライブリード処理（ドライブから主記憶方向へのデータ転送）の要求を行う。ドライブ７００は、この要求に従って、ホスト要求を受け付けた側のストレージクラスタ３０１の主記憶３３１のキャッシュデータ領域Ｄ１３１に対し、データ転送を実施する。【００６６】
Ｐ１２は、ホスト要求を受け付けたコア３２２が、ストレージクラスタ３０１の制御プログラムを実行し、図４に示すステップ００７の結果、性能特化ＩＯ処理の実施と判断し、データ転送用バッファとして用いるバッファ領域を、ストレージクラスタ３０１側の主記憶３３１に確保した場合のデータ転送経路である。図４に示すステップＳ００７の結果、性能特化ＩＯ処理の実施と判断した場合、ステップＳ０１４で、コア３２２は、ストレージクラスタ３０１の主記憶３３１のバッファデータ領域Ｄ１２１をドライブのデータ転送先として選択し、バッファデータ領域Ｄ１２１の一部の領域に対し排他処理を行う。コア３２２は、ドライブ７００に対し、排他処理を行ったバッファデータ領域Ｄ１２１を、データ転送先としてドライブリード処理（ドライブから主記憶方向へのデータ転送）の要求を行う。ドライブ７００は、主記憶３３１のバッファデータ領域Ｄ１２１に対し、データ転送を実施する。【００６７】
例外として、ホスト要求に対するキャッシュヒット率の向上を目的として、ストレージクラスタ３０１側の制御プログラムがクラスタ４０１側の主記憶にデータ転送用のセグメントを確保する場合がある。その場合、コア３２２は、ストレージクラスタ３０１の制御プログラムの実行により、クラスタ間通信を介してコア４２２（ストレージクラスタ４０１の制御プログラム）に対し、ドライブへのデータ転送指示を依頼する。依頼を受けたコア４２２は、ストレージクラスタ４０１の制御プログラムの実行により、ドライブ７００にデータ転送を要求元のストレージクラスタ４０１側の主記憶４３１へ行うことを要求する。その要求を受け取ったドライブ７００は、Ｐ２１の経路に従って要求元のストレージクラスタ４０１へデータ転送を行う。【００６８】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【００６９】
２０１…ストレージコントローラ  ３０１、４０１…ストレージクラスタ
３１１、４１１…ホストＩ／Ｆ  ３２１、４２１…プロセッサ
３２２、４２２…プロセッサコア（コア）  ３２３，４２３…ＩＯＭＭＵ
３３１、４３１…プロセッサの主記憶（主記憶）
５００…ドライブボックス  ６００…スイッチ  ７００…ドライブ
Ｄ１１１、Ｄ２１１…制御データ領域
Ｄ１２１、Ｄ２２１…バッファデータ領域
Ｄ１３１、Ｄ２３１…キャッシュデータ領域
【図１】
2017195324.tif 000003
【図２】
2017195324.tif 000004
【図３】
2017195324.tif 000005
【図４】
2017195324.tif 000006
【図５】
2017195324.tif 000007
【国際調査報告】
2017195324.tif 000008
2017195324.tif 000009