(57)【要約】  計算機システムは、複数の計算機が通信ネットワークを介して接続されて構成されている。複数の計算機のうちの少なくとも１つの計算機は、ストレージデバイスと、通信デバイスとを有する。その通信デバイスは、通信ネットワークを介するデータの送受信を制御するコントローラと、ストレージデバイスと通信ネットワーク上の他の計算機との間で送受信されるデータを格納する中間メモリとを有する。
2018037510.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機が通信ネットワークを介して接続されて構成されている計算機システムであって、
前記複数の計算機のうちの少なくとも１つの計算機は、ストレージデバイスと、通信デバイスとを有し、
前記通信デバイスは、
前記通信ネットワークを介するデータの送受信を制御するコントローラと、
前記ストレージデバイスと前記通信ネットワーク上の他の計算機との間で送受信されるデータを格納する中間メモリと、を有する
計算機システム。
【請求項２】
前記中間メモリは、前記ストレージデバイスよりもＩ／Ｏ速度の速い不揮発性メモリである
請求項１に記載の計算機システム。
【請求項３】
前記通信デバイスのコントローラは、
他の計算機からライト要求及びライトデータを受領した場合、
前記ライトデータを前記中間メモリに格納し、前記他の計算機に対してライト完了を返信し、
前記中間メモリに格納されたライトデータを所定のタイミングで前記ストレージデバイスに格納する
請求項２に記載の計算機システム。
【請求項４】
前記通信デバイスのコントローラは、
他の計算機からリード要求を受領した場合、
前記リード要求の対象のリードデータが前記中間メモリに格納されているか否かを判定し、
当該判定が肯定的ならば、前記中間メモリに格納されているリードデータを前記他の計算機に対して返信し、
当該判定が否定的ならば、前記リード要求を前記ストレージデバイスに転送する
請求項３に記載の計算機システム。
【請求項５】
前記通信デバイスから転送されたリード要求を受領したストレージデバイスは、前記リード要求に係るリードデータを、前記中間メモリに格納する
請求項４に記載の計算機システム。
【請求項６】
前記通信デバイスは、Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＤＭＡ）コントローラをさらに有し、
前記ＤＭＡコントローラは、前記中間メモリに格納されたリードデータを、前記リード要求の発行元の他の計算機のメモリにＤＭＡ転送する
請求項５に記載の計算機システム。
【請求項７】
前記複数の計算機のうちの少なくとも１つの計算機は、
自分のストレージデバイスと前記通信デバイスを有する他の計算機のストレージデバイスとのうち、Ｉ／Ｏレイテンシの小さい方が高性能なストレージデバイスとして登録されているストレージ性能管理テーブルを有する
請求項２に記載の計算機システム。
【請求項８】
前記複数の計算機のうちの少なくとも１つの計算機は、
前記通信デバイスと、
前記中間メモリよりも低速な第１のストレージデバイスと、前記第１のストレージデバイスよりも低速な第２のストレージデバイスとを有し、
前記通信デバイスは、前記第２のストレージデバイスに対するライトデータを前記中間メモリに格納するか否かを切り替えるための設定を有する
請求項２に記載の計算機システム。
【請求項９】
前記通信ネットワークは、ＰＣＩ−Ｅｘｐｒｅｓｓ（ＰＣＩｅ）に準拠し、
前記ストレージデバイスは、Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）に準拠する
請求項２に記載の計算機システム。
【請求項１０】
通信ネットワークを介するデータの送受信を制御するコントローラと、
内部バスで接続されているストレージデバイスと前記通信ネットワーク上の他の計算機との間で送受信されるデータを格納する中間メモリと、を有し、
前記中間メモリが、前記ストレージデバイスよりもＩ／Ｏ速度の速い不揮発性メモリである
通信デバイス。
【請求項１１】
計算機が、ストレージデバイスと通信デバイスとを備えており、
前記通信デバイスが、コントローラと、前記ストレージデバイスよりもＩ／Ｏ速度の速い不揮発メモリである中間メモリと、を備えており、
前記通信デバイスのコントローラが、
他の計算機からライト要求及びライトデータを受領し、
前記ライトデータを前記中間メモリに格納し、前記他の計算機に対してライト完了を返信し、
所定のタイミングで、前記中間メモリに格納されたライトデータを、前記ストレージデバイスに格納する
記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶制御に関する。
【背景技術】
【０００２】
サーバ装置、ストレージ装置、通信装置、及び管理装置などを１つの筐体に収容した複数の計算機ノード（以下単に「ノード」と呼ぶ）を接続して計算機システムを構築するハイパーコンバージドが注目されている。特許文献１には、ローカル側ノードのファームウェアがＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラを起動すると、ＤＭＡコントローラは、所定のメッセージをリモート側ノードに送信すると共に、リモート側ノードから完了応答を待つことなく、ファームウェアに対する割り込み（完了通知）を実行することが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００６／１１４８２２号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の技術によれば、自ノードのストレージ装置に対するレイテンシを小さくすることができる。しかし、ハイパーコンバージドに係る計算機システムでは、各ノードは、自ノードのストレージ装置だけでなく、他ノードのストレージ装置にも頻繁にアクセスする。他ノードのストレージ装置に対するアクセスは、プロトコル変換やＣＰＵへのアクセス依頼などの発生により、自ノードのストレージ装置に対してアクセスする場合と比較して、レイテンシが大きくなる。これは、ハイパーコンバージドに係る計算機システム全体のＩ／Ｏ性能を低下させる。そこで本発明の目的は、ハイパーコンバージドに係る計算機システム全体のＩ／Ｏ性能を向上させることにある。
【課題を解決するための手段】
【０００５】
一実施例に係る計算機システムは、複数の計算機が通信ネットワークを介して接続されて構成されている。複数の計算機のうちの少なくとも１つの計算機は、ストレージデバイスと、通信デバイスとを有する。その通信デバイスは、通信ネットワークを介するデータの送受信を制御するコントローラと、ストレージデバイスと前記通信ネットワーク上の他の計算機との間で送受信されるデータを格納する中間メモリとを有する。
【発明の効果】
【０００６】
本発明によれば、ハイパーコンバージドに係る計算機システム全体のＩ／Ｏ性能を向上させることができる。
【図面の簡単な説明】
【０００７】
【図１】計算機システムの構成例を示す。
【図２】ＰＣＩｅ（ＰＣＩ−Ｅｘｐｒｅｓｓ）カードの構成例を示す。
【図３】第１ＰＣＩｅカードのＳＣＭ（Ｓｔｏｒａｇｅ  Ｃｌａｓｓ  Ｍｅｍｏｒｙ）にリードデータが存在しない場合の処理例を示すラダーチャートである。
【図４】第１ＰＣＩｅカードのＳＣＭにリードデータが存在する場合の処理例を示すラダーチャートである。
【図５】キャッシュ判定処理の例を示すラダーチャートである。
【図６】ライト要求の対象データを第１ＰＣＩｅカードのＳＣＭに格納する処理例を示すラダーチャートである。
【図７】第１ＰＣＩｅカードのＳＣＭに格納された対象ライトデータを、第１フラッシュメモリに転送するデステージ処理の例を示すラダーチャートである。
【図８】ティア管理テーブルの例を示す。
【図９】ＳＣＭキャッシュモードを説明するための表である。
【発明を実施するための形態】
【０００８】
以下の説明では、「ａａａテーブル」、「ａａａキュー」又は「ａａａリスト」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ａａａテーブル」、「ａａａキュー」又は「ａａａリスト」を「ａａａ情報」と呼ぶことができる。
【０００９】
さらに、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いることがあるが、これらについてはお互いに置換が可能である。
【００１０】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び通信インターフェイスデバイスのうちの少なくとも１つを用いながら行うため、処理の主語が、プロセッサ、そのプロセッサを有する装置とされてもよい。プロセッサが行う処理の一部又は全部が、ハードウェア回路で行われてもよい。コンピュータプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【００１１】
また、以下の説明では、同種の要素を区別して説明する場合には、「ノード１０Ａ」、「ノード１０Ｂ」のように、参照符号を使用し、同種の要素を区別しないで説明する場合には、「ノード１０」のように参照符号のうちの共通番号のみを使用することがある。
【００１２】
図１は、一実施例に係る計算機システムの構成例を示す。
【００１３】
ハイパーコンバージドに係る計算機システム１は、複数のノード１０を有する。複数のノード１０は、ＰＣＩｅに係るスイッチファブリック３に双方向通信可能に接続される。ただし、ＰＣＩｅに係るスイッチファブリック３は、あくまで通信ネットワークの一例であり、例えば、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）及びＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）など、他の通信ネットワークであってもよい。以下、ＰＣＩｅに係るスイッチファブリックを、単に「ファブリック」という。
【００１４】
ノード１０は、ＣＰＵ１２、メモリ１４、フラッシュドライブ１８、ＰＣＩｅカード２２を有する。
【００１５】
メモリ１４は、プログラム及び／又はデータを格納する。メモリ１４の例は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、相変化メモリである。メモリ１４に不揮発メモリを使用した場合は、電源障害などの障害時でもデータが消失しない。
【００１６】
ＣＰＵは、メモリ１４からプログラム及びデータを読み出して処理することにより、ノード１０の有する機能を実現する。
【００１７】
フラッシュドライブ１８は、不揮発性記憶媒体の一例であるフラッシュメモリと、フラッシュメモリ１８に対するデータのリード及びライト等を制御するＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）コントローラ１６とを含む。ＮＶＭｅコントローラ１６は、フラッシュメモリ１８に対するデータのＩ／Ｏ（ライト及びリード）及び消去などを制御する。
【００１８】
ＰＣＩｅカード２２は、通信デバイスの一例であり、ＰＣＩｅプロトコルに従うデータの送受信を制御する。ＰＣＩｅカード２２は、ノード１０間で送受信されるデータが格納（キャッシュ）される中間メモリ（例えばＳＣＭ３０）を有してよい。なお、ＰＣＩｅカード２２の詳細については後述する（図２参照）。
【００１９】
ＳＣＭ内蔵のＰＣＩｅカード２２と、ＣＰＵ１２と、ＮＶＭｅコントローラ１６とは、ＰＣＩｅバス２４で接続されてよい。ＣＰＵ１２とメモリ１４とは、メモリバス２６で接続されてよい。
【００２０】
本実施例の説明において、複数のノード１０のうちの１つのノードを第１ノード１０Ａ、もう１つのノードを第２ノード１０Ｂと呼ぶ。第１ノード１０Ａが有する構成要素を、第１ＣＰＵ１２Ａ、第１メモリ１４Ａ、第１ＮＶＭｅコントローラ１６Ａ、第１フラッシュメモリ１８Ａ、及び、第１ＰＣＩｅカード２２Ａと呼ぶ。第２ノード１０Ｂが有する構成要素を、第２ＣＰＵ１２Ｂ、第２メモリ１４Ｂ、第２ＮＶＭｅコントローラ１６Ｂ、第２フラッシュメモリ１８Ｂ、及び、第２ＰＣＩｅカード２２Ｂと呼ぶ。
【００２１】
本実施例では、第２ノード１０Ｂの第２ＣＰＵ１２Ｂから第１ノード１０Ａに対してリードやライトのコマンドを発行する場合を説明する。この場合、第１ＰＣＩｅカード２２Ａは中間メモリ（例えばＳＣＭ３０）を有している。第２ＰＣＩｅカード２２Ｂは中間メモリを有していてもよく、その場合は汎用的なＰＣＩｅカードとしてふるまう。第２メモリ１４Ｂには、第２ＣＰＵ１２Ｂと、第１ＰＣＩｅカード２２Ａのプロセッサ４２との間で、ＮＶＭｅに係るコマンドをやり取りするためのサブミッションキュー（「第２ＳＱ」という）３０Ｂ及びコンプリーションキュー（「第２ＣＱ」という）３２Ｂが設けられてよい。第１メモリ１４Ａには、第１ＰＣＩｅカード２２のプロセッサ４２と、第１ＮＶＭｅコントローラ１６Ａとの間で、ＮＶＭｅに係るコマンドをやり取りするためのサブミッションキュー（「第１ＳＱ」という）３０Ａ及びコンプリーションキュー（「第１ＣＱ」という）３２Ａが設けられてよい。
【００２２】
図２は、一実施例に係るＰＣＩｅカード２２の構成例を示す。
【００２３】
ＰＣＩｅカード２２は、ＬＳＩ４０、ＳＣＭ３０、ＰＣＩｅ端子３２、及び、ＰＣＩｅスロット用端子３４を有する。ＰＣＩｅ端子３２は、ＰＣＩｅカード２２を通じてノード１０を、ファブリック３に接続するためのＩ／Ｆ（ＩｎｔｅｒＦａｃｅ）である。ＰＣＩｅスロット用端子３４は、ＰＣＩｅカード２２を、ノード１０内のＰＣＩｅバス２４に接続するためのＩ／Ｆである。
【００２４】
ＳＣＭ３０は、不揮発性記憶媒体で構成される記憶デバイスである。ＳＣＭ３０のＩ／Ｏ速度は、ノード１０のメモリ１４よりも遅く、フラッシュメモリ１８よりも速くてよい。ＳＣＭ３０の例は、ＭＲＡＭ、ＦｅＲＡＭ、相変化メモリ等である。なお、ＰＣＩｅカード２２は、ＳＣＭ３０に代えて、ＤＲＡＭなどの揮発性記憶媒体を有してもよい。この場合、ＰＣＩｅカード２２は、冗長性を確保するために、複数の揮発性記憶媒体を有してもよい。
【００２５】
ＬＳＩ４０は、アービター５０、メモリコントローラ４４、ＤＭＡコントローラ４６、キャッシュ判定回路４８、及び、プロセッサ４２を有してよい。これらの構成要素は、所定のスイッチ５２に接続されており、双方向通信可能であってよい。ＬＳＩ４０は、ＡＳＩＣ又はＦＰＧＡ等によって構成されてもよい。
【００２６】
アービター５０は、ＰＣＩｅ端子３２やＰＣＩｅスロット用端子３４を、ＬＳＩ４０に接続するための論理回路である。メモリコントローラ４４は、ＳＣＭ３０をＬＳＩ４０に接続するための論理回路である。ＤＭＡコントローラ４６は、ＤＭＡ転送を制御するための論理回路である。
【００２７】
キャッシュ判定回路４８は、ＰＣＩｅカード２２が受領したリード要求の対象データがＳＣＭ３０に格納（キャッシュ）されているか否かを判定するための論理回路である。なお、プロセッサ４２でこのキャッシュ判定を行う場合、ＬＳＩ４０は、キャッシュ判定回路４８を有さなくてよい。プロセッサ４２は、ＰＣＩｅカード２２が有する機能を実現するための処理を行う論理回路である。プロセッサ４２には、ＳＲＡＭ４３が設けられてよい。
【００２８】
図３及び図４は、第２ノード１０Ｂの第２ＣＰＵ１２Ｂが、第１ノード１０Ａの第１ＮＶＭｅコントローラ１６Ａに対してリード要求を発行した場合の処理例である。
【００２９】
図３は、第１ＰＣＩｅカード２２ＡのＳＣＭ３０にリード要求の対象データが存在しない（キャッシュミスの）場合の処理例を示すラダーチャートである。
【００３０】
第２ＣＰＵ１２Ｂは、第２メモリ１４Ｂの第２ＳＱ３０Ｂに、リード要求コマンドをエンキューする（Ｓ１０２）。
【００３１】
第２ＣＰＵ１２Ｂは、第２ＳＱ３０Ｂのテールポインタをインクリメントする（Ｓ１０４）。
【００３２】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ１０４の第２ＳＱ３０Ｂのテールポインタの更新を検知し、第２ＳＱ３０Ｂからリード要求コマンドをフェッチ（デキュー）する（Ｓ１０６）。このとき、第２ＳＱ３０Ｂのヘッドポインタをインクリメントする。
【００３３】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ１０６でフェッチしたリード要求コマンドの対象データ（「対象リードデータ」という）が、ＳＣＭ３０内のキャッシュデータにヒットするか否かを判定する（Ｓ１０８）。この判定処理を、キャッシュ判定処理という。キャッシュ判定処理の詳細については後述する（図５参照）。以下、当該キャッシュ判定処理の結果が「キャッシュミス」であった場合について述べる。
【００３４】
第１ＰＣＩｅカード２２のプロセッサ４２は、第１メモリ１４Ａの第１ＳＱ３０Ａに、Ｓ１０６でフェッチしたリード要求コマンドをエンキューする（Ｓ１１０）。
【００３５】
第１ＰＣＩｅカード２２のプロセッサ４２は、第１ＳＱ３０Ａのテールポインタをインクリメントする（Ｓ１１２）。
【００３６】
第１ＮＶＭｅコントローラ１６Ａは、Ｓ１１０のテールポインタの更新を検知し、第１ＳＱ３０Ａからリード要求コマンドをフェッチする（Ｓ１１４）。このとき、第１ＳＱ３０Ａのヘッドポインタをインクリメントする。
【００３７】
第１ＮＶＭｅコントローラ１６Ａは、Ｓ１１４のリード要求コマンドに従って、第１フラッシュメモリ１８Ａ内の対象リードデータを、第１ＰＣＩｅカード２２ＡのＳＣＭ３０にＤＭＡ転送する（Ｓ１１６）。
【００３８】
第１ＮＶＭｅコントローラ１６Ａは、Ｓ１１６のＤＭＡ転送が完了すると、第１メモリ１４Ａの第１ＣＱ３２Ａに、リード要求コマンドに対する完了コマンド（「リード完了コマンド」という）をエンキューする（Ｓ１１８）。
【００３９】
第１ＮＶＭｅコントローラ１６Ａは、第１ＰＣＩｅカード２２のプロセッサ４２に、リード完了応答を通知（ＭＳＩ−Ｘ割込を実行）する（Ｓ１２０）。このとき、第１ＣＱ３２Ａのテールポインタをインクリメントする。
【００４０】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ１２０のリード完了応答を受けて、第１ＣＱ３２Ａからリード完了コマンドをフェッチする（Ｓ１２２）。
【００４１】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ１２２のリード完了コマンドを処理する（Ｓ１２４）。
【００４２】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、第１ＣＱ３２Ａのヘッドポインタをインクリメントする（Ｓ１２６）。
【００４３】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、ＳＣＭ３０内のＳ１１６でＤＭＡ転送された対象リードデータを、第２メモリ１４ＢにＤＭＡ転送する（Ｓ１３０）。このＤＭＡ転送は、第１ＰＣＩｅカード２２ＡのＤＭＡコントローラによって実行されてよい。
【００４４】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ１３０のＤＭＡ転送が完了すると、第２メモリ１４Ｂの第２ＣＱ３２Ｂに、Ｓ１２２でフェッチしたリード完了コマンドをエンキューする（Ｓ１３２）。
【００４５】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、第２ＣＰＵ１２Ｂにリード完了応答を通知（ＭＳＩ−Ｘ割込を実行）する（Ｓ１３４）。このとき、第２ＣＱ３２Ｂのテールポインタをインクリメントする。
【００４６】
第２ＣＰＵ１２Ｂは、Ｓ１３４のリード完了応答を受けて、第２ＣＱ３２Ｂからリード完了コマンドをフェッチする（Ｓ１３６）。
【００４７】
第２ＣＰＵ１２Ｂは、Ｓ１３６のリード完了コマンドを処理する（Ｓ１３８）。
【００４８】
第２ＣＰＵ１２Ｂは、第２ＣＱ３２Ｂのヘッドポインタをインクリメントする（Ｓ１４０）。
【００４９】
図４は、第１ＰＣＩｅカード２２ＡのＳＣＭ３０にリード要求の対象データが存在する（キャッシュヒットの）場合の処理例を示すラダーチャートである。
【００５０】
Ｓ２０２〜Ｓ２０６の処理は、図３のＳ１０２〜Ｓ１０６の処理と同じである。よって説明を省略する。
【００５１】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ１０８と同様、キャッシュ判定処理を実行する（Ｓ２０８）。キャッシュ判定処理の詳細については後述する（図５参照）。以下、当該キャッシュ判定処理の結果が「キャッシュヒット」であった場合について述べる。
【００５２】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、ＳＣＭ３０内のキャッシュヒットした対象リードデータを、第２メモリ１４ＢにＤＭＡ転送する（Ｓ２１０）。
【００５３】
Ｓ２１２〜Ｓ２２０の処理は、図３のＳ１３２〜Ｓ１４０の処理と同じである。よって説明を省略する。
【００５４】
Ｉ／Ｏ速度はフラッシュメモリ１８よりもＳＣＭ３０の方が高速なので、図３及び図４の処理によれば、第１ＰＣＩｅカード２２のＳＣＭ３０のキャッシュがヒットした場合において、第２ノード１０Ｂに対する応答時間（レイテンシ）を小さくすることができる。また、ＳＣＭ３０のキャッシュがヒットした場合、第１ノード１０Ａ内におけるＤＭＡ転送（Ｓ１１６）が実行不要となるので、第１ノード１０Ａの内部ＰＣＩｅバス２４Ａの帯域負荷を低減することができる。
【００５５】
図５は、キャッシュ判定処理の例を示すラダーチャートである。本処理は、図３のＳ１０８及び図４のＳ２０８に相当する。
【００５６】
プロセッサ４２は、キャッシュ判定回路４８を起動する（Ｓ５０２）。
【００５７】
キャッシュ判定回路４８は、ＳＲＡＭ４３から、ＳＣＭ３０に格納されているデータに関するメタデータ（例えばインデックス）をリードする（Ｓ５０４）。
【００５８】
キャッシュ判定回路４８は、そのメタデータに基づいて、Ｓ１０８又はＳ２０８の対象リードデータがＳＣＭ３０内に存在するか否かを判定する（Ｓ５０６）。
【００５９】
キャッシュ判定回路４８は、Ｓ５０６の判定結果をプロセッサ４２に通知する（Ｓ５０８）。
【００６０】
なお、上述の処理は一例であり、キャッシュ判定はどのように実行されてもよい。例えば、キャッシュ判定回路４８を使用せず、プロセッサ４２のみでキャッシュ判定を行ってもよい。また、メタデータを使用せず、直接ＳＣＭ３０内を検索してもよい。
【００６１】
図６及び図７は、第２ノード１０Ｂの第２ＣＰＵ１２Ｂが、第１ノード１０Ａの第１ＮＶＭｅコントローラ１６Ａに対してライト要求を発行した場合の処理例である。
【００６２】
図６は、ライト要求の対象データを第１ＰＣＩｅカード２２ＡのＳＣＭ３０に格納する処理例を示すラダーチャートである。
【００６３】
第２ＣＰＵ１２Ｂは、ライト要求の対象データ（「対象ライトデータ」という）を、第２メモリ１４Ｂに格納する。そして、第２ＣＰＵ１２Ｂは、第２メモリ１４Ｂの第２ＳＱ３０Ｂに、ライト要求コマンドをエンキューする（Ｓ３０２）。
【００６４】
第２ＣＰＵ１２Ｂは、第２ＳＱ３０Ｂのテールポインタをインクリメントする（Ｓ３０４）。
【００６５】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ３０４の第２ＳＱ３０Ｂのテールポインタの更新を検知し、第２ＳＱ３０Ｂからライト要求コマンドをフェッチ（デキュー）する（Ｓ３０６）。このとき、第２ＳＱ３０Ｂのヘッドポインタをインクリメントする。
【００６６】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ３０６でフェッチしたライト要求コマンドが指定する第２メモリ１４Ｂ内の対象ライトデータを、ＳＣＭ３０へＤＭＡ転送する（Ｓ３０８）。このとき、ＳＣＭ３０の障害が発生した場合を考慮して、他方のＳＣＭ３０に対象ライトデータをコピーすることによる二重書きを実施してもよい。
【００６７】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ３０８のＤＭＡ転送が完了すると、第２ＣＱ３２Ｂに、Ｓ３０６のライト要求コマンドに対する完了コマンド（「ライト完了コマンド」という）をエンキューする（Ｓ３１０）。
【００６８】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、第２ＣＰＵ１２Ｂに、ライト完了応答を通知（ＭＳＩ−Ｘ割込を実行）する（Ｓ３１２）。このとき、第２ＣＱ３２Ｂのテールポインタをインクリメントする。
【００６９】
第２ＣＰＵ１２Ｂは、Ｓ３１２のライト完了応答を受けて、第２ＣＱ３２Ｂからライト完了コマンドをフェッチする（Ｓ３１４）。
【００７０】
第２ＣＰＵ１２Ｂは、Ｓ３１４のライト完了コマンドを処理する（Ｓ３１６）。
【００７１】
第２ＣＰＵ１２Ｂは、第２ＣＱ３２Ｂのヘッドポインタをインクリメントする（Ｓ３１８）。
【００７２】
以上の処理により、第２ノード１０Ｂから発行されたライトデータが、第１ＰＣＩｅカード２２ＡのＳＣＭ３０に格納される。
【００７３】
図７は、第１ＰＣＩｅカード２２ＡのＳＣＭ３０に格納された対象ライトデータを、第１フラッシュメモリ１８Ａに転送する処理（「デステージ処理」）の例を示すラダーチャートである。
【００７４】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、所定のタイミングで、第１メモリ１４Ａの第１ＳＱ３０Ａに対して、ライト要求コマンドをエンキューする（Ｓ４０２）。所定のタイミングの例は、プロセッサの処理負荷が小さいとき、ＳＣＭ３０のＩ／Ｏ負荷が小さいとき、第１ＣＰＵ１２Ａ若しくは第１ＮＶＭｅコントローラ１６Ａの処理負荷が小さいとき、第１フラッシュメモリ１８ＡのＩ／Ｏ負荷が小さいとき、又は、第１ノード１０Ａの内部ＰＣＩｅバス２４Ａの帯域負荷が小さいときなどである。
【００７５】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、第１ＳＱ３０Ａのテールポインタをインクリメントする（Ｓ４０４）。
【００７６】
第１ＮＶＭｅコントローラ１６Ａは、Ｓ４０４の第１ＳＱ３０Ａのテールポインタの更新を検知し、第１ＳＱ３０Ａからからライト要求コマンドをフェッチ（デキュー）する（Ｓ４０６）。このとき、第１ＳＱ３０Ａのヘッドポインタをインクリメントする。
【００７７】
第１ＮＶＭｅコントローラ１６Ａは、図６のＳ３０８においてＳＣＭ３０に格納された対象ライトデータを、第１フラッシュメモリ１８ＡにＤＭＡ転送する（Ｓ４０８）。この処理を、デステージ処理と呼ぶ。このＤＭＡ転送（デステージ処理）は、第１ＰＣＩｅカード２２ＡのＤＭＡコントローラ４６によって実行されてよい。
【００７８】
第１ＮＶＭｅコントローラ１６Ａは、Ｓ４０８のＤＭＡ転送が完了すると、第１メモリ１４Ａの第１ＣＱ３２Ａに、Ｓ４０６のライト要求コマンドに対する完了コマンドをエンキューする（Ｓ４１０）。
【００７９】
第１ＮＶＭｅコントローラ１６Ａは、第１ＰＣＩｅカード２２Ａのプロセッサ４２に、ライト完了応答を通知（ＭＳＩ−Ｘ割込を実行）する（Ｓ４１２）。このとき、第１ＣＱ３２Ａのテールポインタをインクリメントする。
【００８０】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ４１２のライト完了応答を受けて、第１ＣＱ３２Ａからライト完了コマンドをフェッチする（Ｓ４１４）。
【００８１】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、Ｓ４１４のライト完了コマンドを処理する（Ｓ４１６）。
【００８２】
第１ＰＣＩｅカード２２Ａのプロセッサ４２は、第１ＣＱ３２Ａのヘッドポインタをインクリメントする（Ｓ４１８）。
【００８３】
以上の処理により、第１ＰＣＩｅカード２２ＡのＳＣＭ３０に格納されている対象ライトデータが、第１フラッシュメモリ１８Ａに転送（デステージ）される。
【００８４】
図６及び図７の処理によれば、第１ＰＣＩｅカード２２ＡのＳＣＭ３０に対象ライトデータが格納されたタイミングで、第２ノード１０Ｂにライト完了応答が通知されるので、対象ライトデータを第１ノード１０Ａの第１フラッシュメモリ１８Ａに格納する場合と比較して、第２ノード１０Ｂに対する応答時間（レイテンシ）を小さくすることができる。本実施例では、ライトデータのデステージ先がフラッシュメモリであるが、このデステージ先がＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）であってもよい。この場合、第２ノード１０Ｂに対するレイテンシは著しく小さくなる。
【００８５】
また、第１ＰＣＩｅカード２２Ａのプロセッサ４２は、仮想的に第１ＮＶＭｅコントローラ１６Ａの動作を第２ノード１０Ｂに対して実施しているように見せるため、第２ＣＰＵ１２Ｂは汎用的なＮＶＭｅドライバであってもよい。同様に、第１ＰＣＩｅカード２２Ａのプロセッサ４２は、仮想的に第２ＣＰＵ１２Ｂの動作を第１ＮＶＭｅコントローラ１６Ａに対して実施しているように見せるため、第１ＮＶＭｅコントローラ１６Ａは汎用的なＮＶＭｅコントローラであってもよい。
【００８６】
さらに、ＳＣＭ３０に対して、ある一定基準以上のライトデータが格納された場合や、第１ノード１０Ａの処理負荷が小さいときに、ＳＣＭ３０に格納されているライトデータを第１フラッシュメモリ１８Ａにデステージすることにより、第１ノード１０Ａの処理負荷及び内部ＰＣＩバス２４Ａの帯域負荷を平準化することができる。
【００８７】
図８は、ティア管理テーブル１００の例を示す。
【００８８】
ストレージデバイスのＩ／Ｏ速度に応じて、ストレージデバイスを階層的に区分する。例えば、最高速の階層を「ティア１」、次に高速な階層を「ティア２」、最も低速な階層を「ティア３」とする。典型的にはＩ／Ｏ速度は、速い順に、ＳＣＭ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＨＤＤである。この場合、従来であれば、ティア１にＳＣＭが、ティア２にＳＳＤが、ティア３にＨＤＤが属する。
【００８９】
しかし本実施例の場合、或るノード１０は、内部のＳＳＤ又はＨＤＤに対してＩ／Ｏ要求（例えばライト要求／リード要求）を発行するよりも、ＳＣＭ３０を内蔵するＰＣＩｅカード２２を有する他のノード１０のＳＳＤ又はＨＤＤに対してＩ／Ｏ要求を発行した方が、ファブリック３の遅延を含めても、レイテンシが小さくなる場合がある。ＰＣＩｅカード２２がＳＣＭ３０にデータを格納した時点で完了応答を返すからである。
【００９０】
そこで本実施例では、自ノード及び他ノードのストレージデバイスがどのティアに属するかを、実際のレイテンシに基づいて決定する。
【００９１】
図８は、第１ノード１０Ａが、ＳＳＤ及びＨＤＤと、ＳＣＭ３０を内蔵するＰＣＩｅカード２２とを有する場合において、第２ノード１０Ｂが決定したティアに関する情報と、第３ノード１０Ｃが決定したティアに関する情報とが格納されているティア管理テーブル１００の例である。すなわち、ティア管理テーブル１００は、ストレージの性能を管理するテーブルの一例である。
【００９２】
図８の例のように、第１計算機システムでは、第２ノード１０Ｂは、第２ノード１０Ｂ自身が有するＳＳＤに対するレイテンシよりも、他ノードである第１ノード１０Ａが有するＳＳＤに対するレイテンシの方が小さい場合、第１ノード１０ＡのＳＳＤをティア１とし、第２ノード１０ＢのＳＳＤをティア２としてよい。
【００９３】
第２計算機システムでは、第２ノード１０Ｂは、第２ノード１０Ｂ自身が有するＳＳＤに対するレイテンシの方が、他ノードである第１ノード１０Ａが有するＳＳＤに対するレイテンシよりも小さい場合、第２ノード１０ＢのＳＳＤをティア１とし、第１ノード１０ＡのＳＳＤをティア２としてよい。例えば、通信ネットワークのトラフィックがボトルネックとなる場合や、図７のデステージ処理が大量に発生する場合などは、他ノードである第１ノード１０ＡがＳＣＭ３０を内蔵するＰＣＩｅカード２２を有していたとしても、第２ノード１０Ｂ自身のＳＳＤに対するレイテンシの方が小さくなる可能性が高い。
【００９４】
ティア管理テーブル１００は、各ノード１０に保持されても良いし、各ノード１０が共通にアクセス可能な所定のノードに保持されても良い。
【００９５】
これにより、各ノード１０は、比較的高速なＩ／Ｏが要求されるデータを、実際にレイテンシの小さいストレージデバイスに格納することができる。すなわち、計算機システム１全体のＩ／Ｏのパフォーマンスが向上し得る。
【００９６】
図９は、ＳＣＭキャッシュモードを説明するための表である。
【００９７】
ＳＣＭ３０を内蔵するＰＣＩｅカード２２は、ノード１０内において当該ＰＣＩｅカード２２と内部バスで接続されているＨＤＤに対するライトデータをＳＣＭ３０に格納（キャッシュ）するか否かを切り替えるための設定を有してよい。この設定を、ＳＣＭキャッシュモードと呼ぶ。
【００９８】
図９の表１２０に示すように、ＳＣＭキャッシュモードがＯＮ１２６の場合、ＰＣＩｅカード２２は、内部バスで接続されているＨＤＤ及びＳＳＤの何れに対するライトデータも、ＳＣＭ３０に格納（キャッシュ）する。この場合、ＨＤＤへのライト要求のレイテンシは著しく小さくなるが、ＳＣＭ３０からＨＤＤへのデステージの回数が多くなるため、ＳＳＤへのリード要求に対するＳＣＭ３０のキャッシュのヒット率が低下する。よって、ＳＳＤへのリード要求の平均レイテンシは、下記のＳＣＭキャッシュモードがＯＦＦ１２４の場合と比較して大きくなる。
【００９９】
ＳＣＭキャッシュモードがＯＦＦ１２４の場合、ＰＣＩｅカード２２は、内部バスで接続されているＳＳＤへのライトデータについてはＳＣＭ３０に格納（キャッシュ）するが、ＨＤＤへのライトデータについてはＳＣＭ３０に格納（キャッシュ）しない。この場合、ＳＳＤへのリード要求の平均レイテンシは、上記のＳＣＭキャッシュモードがＯＮ１２６の場合よりも小さくなるが、ＨＤＤへのライト要求のレイテンシは著しく大きくなる。
【０１００】
なお、ＨＤＤがＳＡＳによって接続されている場合、ＰＣＩｅカード２２は、ＮＶＭｅに加えて、ＳＡＳもサポートする必要がある。
【０１０１】
ＳＣＭキャッシュモードのＯＮ及びＯＦＦの何れが適切かであるかは、アプリケーションのデータのリード及びライトの特性によって異なる。
【０１０２】
上述した実施例は、本発明の説明のための例示であり、本発明の範囲を実施例にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【符号の説明】
【０１０３】
１：計算機システム  １０：ノード  １２：ＣＰＵ  １４：メモリ  １６：ＮＶＭｅコントローラ  １８：フラッシュメモリ  ２２：ＰＣＩｅカード  ３０：ＳＣＭ
【図１】
2018037510.tif 000003
【図２】
2018037510.tif 000004
【図３】
2018037510.tif 000005
【図４】
2018037510.tif 000006
【図５】
2018037510.tif 000007
【図６】
2018037510.tif 000008
【図７】
2018037510.tif 000009
【図８】
2018037510.tif 000010
【図９】
2018037510.tif 000011
【国際調査報告】
2018037510.tif 000012
2018037510.tif 000013