(57)【特許請求の範囲】
【請求項１】
複数のノードを有し、
前記複数のノードの各々は、１以上のストリップで構成された論理的な記憶領域であるノード領域を有し、
前記複数のノードは、２以上の前記ノード領域から冗長構成領域を構成し、
前記冗長構成領域は、前記２以上のノード領域がそれぞれ有する２以上のストリップから構成されるストライプを含む分散ストレージシステムにおいて前記ノード間でのライト対象データの転送を行うコンピュータプログラムであって、
前記コンピュータプログラムは前記複数のノードのうちのいずれかのノードである第１ノードで実行され、
前記第１ノードが、
前記複数のノードそれぞれの前記ノード領域にライトされるデータセットを記憶するキャッシュメモリと、
前記複数のノードのうち前記第１ノード以外の複数の第２ノードそれぞれの前記ノード領域におけるストリップがライト先となる、前記キャッシュメモリに記憶されたデータセットである転送対象データセットの前記第１ノードでの有無を管理するノード管理情報と、を保持し、
前記コンピュータプログラムが、前記第１ノードに、
（Ａ）当該１つの前記第２ノードのノード領域における２以上のストリップがそれぞれライト先となる２以上の転送対象データセットがあることを前記ノード管理情報を基に特定した場合、当該２以上の転送対象データセットのキャッシュストリップを前記ノード管理情報を基に特定し、
（Ｂ）前記特定した前記キャッシュストリップに対応する２以上のノード内位置にそれぞれ存在する２以上の転送対象データセットを転送対象とした１つの転送用コマンドを当該第２ノードに送信する、
を実行させることで１つの転送用コマンドで２以上のライト対象データを当該第２ノードに送信するコンピュータプログラム。
【請求項２】
前記第１ノードに、前記各第２ノードについて、（Ｂ）において、
（ｂ１）前記２以上の転送対象データセットをそれぞれ格納する２以上のキャッシュストリップを含む、当該第２ノードに対応した複数のキャッシュストリップをロックし、
（ｂ２）前記ロックした複数のキャッシュストリップにおける前記２以上の転送対象データセットの前記転送用コマンドを当該第２ノードに送信する、
を実行させる請求項１記載のコンピュータプログラム。
【請求項３】
前記第１ノードに、ログストラクチャード方式で、前記第１ノードにおける前記キャッシュメモリにデータセットを書き込ませるようになっており、
（ｂ１）において、ロック対象の前記複数のキャッシュストリップは、連続した前記２以上のキャッシュストリップである、
請求項２記載のコンピュータプログラム。
【請求項４】
前記第１ノードに、ログストラクチャード方式で、前記第１ノードにおける前記キャッシュメモリにデータセットを書き込ませるようになっており、
（ｂ１）において、ロック対象の前記複数のキャッシュストリップは、連続しており、非連続の前記２以上のキャッシュストリップを含む、
請求項２記載のコンピュータプログラム。
【請求項５】
前記ノード管理情報が、ノード毎のサブノード管理情報を含み、
前記サブノード管理情報が管理する各ノード内位置は、当該情報に対応したノードに対応したキャッシュストリップであって、転送対象データセットのライト先ストリップに対応したキャッシュストリップであり、
各ノードについて、前記第１ノードがロック可能なキャッシュストリップの最大数は、当該ノードに対応したサブノード管理情報のサイズに依存し、
各ノードについて、サブノード管理情報のサイズは、前記第１ノードが転送可能なデータセットの総量である最大転送長に依存する、
請求項２記載のコンピュータプログラム。
【請求項６】
前記第１ノードにおいて、前記複数のノードの少なくとも１つについて、前記最大転送長は、下記のうちの少なくとも１つに基づく、
（ｐ１）当該ノードについて目標とされるＩ／Ｏ処理性能、
（ｐ２）当該ノードのネットワーク帯域、
（ｐ３）Ｉ／Ｏ処理の多重度、及び、
（ｐ４）前記冗長構成領域を構成する複数のノード領域を提供するノードの数、
請求項５記載のコンピュータプログラム。
【請求項７】
（ｐ１）が採用される場合、Ｉ／Ｏ処理性能が比較的高い場合、最大転送長は比較的小さい、
（ｐ２）が採用される場合、ネットワーク帯域が比較的小さい場合、最大転送長は比較的小さい、
（ｐ３）が採用される場合、Ｉ／Ｏ処理の多重度が比較的大きい場合、最大転送長は比較的小さい、
（ｐ４）が採用される場合、ノード数が比較的大きい場合、最大転送長は比較的小さい、
請求項６記載のコンピュータプログラム。
【請求項８】
前記第１ノードの稼働後、前記第１ノードにおいて、前記複数のノードの少なくとも１つについて、前記最大転送長を、前記第１ノードに、下記のうちの少なくとも１つに基づいて変更させる、
（ｑ１）前記第１ノードの計算リソースの性能値、及び、
（ｑ２）前記第１ノードで実行されるプログラムであって前記コンピュータプログラム以外のいずれか１以上のプログラムである１以上の外部プログラムの稼働状況、
請求項５記載のコンピュータプログラム。
【請求項９】
（ｑ１）が採用されている場合、前記第１ノードの計算リソースの性能値に基づく帯域限界値の予測値を基に、最大転送長を変更し、
（ｑ２）が採用されている場合、１又は複数の外部プログラムが新たに稼働することに応じて、最大転送長を比較的小さくし、１又は複数の外部プログラムが新たに停止することに応じて、最大転送長を比較的大きくする、
を、前記第１ノードに実行させる請求項６記載のコンピュータプログラム。
【請求項１０】
前記第１ノードに、前記各第２ノードについて、（Ｂ）において、
（ｂ３）前記転送対象データセットの数に従うストリップ数と同数のキャッシュストリップを当該第２ノードのキャッシュメモリからロックすることの要求であるロック要求を、前記第２ノードに送信し、
（ｂ１）及び（ｂ３）の完了後に、（ｂ２）を実行する、
を実行させる請求項１記載のコンピュータプログラム。
【請求項１１】
前記ノード管理情報が、ノード毎のサブノード管理情報を含み、
各ノードについて、サブノード管理情報のサイズは、前記第１ノードが転送可能なデータセットの総量である最大転送長に依存する、
請求項１記載のコンピュータプログラム。
【請求項１２】
複数のノードを有し、
前記複数のノードの各々は、１以上のストリップで構成された論理的な記憶領域であるノード領域を有し、
前記複数のノードは、２以上の前記ノード領域から冗長構成領域を構成し、
前記冗長構成領域は、前記２以上のノード領域がそれぞれ有する２以上のストリップから構成されるストライプを含み、前記ノード間でのライト対象データの転送を行う分散ストレージシステムにおいて、
前記複数のノードのうちのいずれかのノードである第１ノードが、
前記複数のノードの各々の前記ノード領域にライトされるデータセットを記憶するキャッシュメモリと、
前記複数のノードのうち前記第１ノード以外の複数の第２ノードそれぞれの前記ノード領域におけるストリップがライト先となる、前記キャッシュメモリに記憶されたデータセットである転送対象データセットの前記第１ノードでの有無を管理するノード管理情報と、を保持し、
前記第１ノードは、
（Ａ）１つの前記第２ノードのノード領域における２以上のストリップがそれぞれライト先となる２以上の転送対象データセットがあることを前記ノード管理情報を基に特定した場合、当該２以上の転送対象データセットのキャッシュストリップを前記ノード管理情報を基に特定し、
（Ｂ）前記特定した前記キャッシュストリップに対応する２以上のノード内位置にそれぞれ存在する２以上の転送対象データセットを転送対象とした１つの転送用コマンドを当該第２ノードに送信する、
ことで１つの転送用コマンドで２以上のライト対象データを当該第２ノードに送信する分散ストレージシステム。
【請求項１３】
複数のノードを有し、
前記複数のノードの各々は、１以上のストリップで構成された論理的な記憶領域であるノード領域を有し、
前記複数のノードは、２以上の前記ノード領域から冗長構成領域を構成し、
前記冗長構成領域は、前記２以上のノード領域がそれぞれ有する２以上のストリップから構成されるストライプを含み、前記ノード間でのライト対象データの転送を行う分散ストレージシステムの制御方法において、
前記複数のノードのうちのいずれかのノードである第１ノードが、
前記複数のノードの各々の前記ノード領域にライトされるデータセットを記憶するキャッシュメモリと、
前記複数のノードのうち前記第１ノード以外の複数の第２ノードそれぞれの前記ノード領域におけるストリップがライト先となる、前記キャッシュメモリに記憶されたデータセットである転送対象データセットの前記第１ノードでの有無を管理するノード管理情報と、を保持し、
前記第１ノードに、
（Ａ）１つの前記第２ノードのノード領域における２以上のストリップがそれぞれライト先となる２以上の転送対象データセットがあることを前記ノード管理情報を基に特定した場合、当該２以上の転送対象データセットのキャッシュストリップを前記ノード管理情報を基に特定させ、
（Ｂ）前記特定した前記キャッシュストリップに対応する２以上のノード内位置にそれぞれ存在する２以上の転送対象データセットを転送対象とした１つの転送用コマンドを当該第２ノードに送信させる、
ことで１つの転送用コマンドで２以上のライト対象データを当該第２ノードに送信する分散ストレージ制御方法。
【請求項１４】
請求項１に記載のコンピュータプログラムであって、
前記第１ノードの前記キャッシュメモリは、
複数の前記キャッシュストリップを含むキャッシュストリップ列を複数有し、
それぞれの前記キャッシュストリップ列には、互いに異なる前記ノードへの転送対象データセットを記憶し、
１つの前記キャッシュストリップ列に含まれる複数の前記転送対象データセットを、前記１つの転送用コマンドで、前記キャッシュストリップ列に対応する前記ノード（単数）に転送するコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、分散ストレージシステムでの記憶制御に関する。
【背景技術】
【０００２】
分散ストレージに関する技術として、例えば、特許文献１及び２に開示の技術が知られている。【０００３】
特許文献１は、例えば次のことを開示する。すなわち、ＳＤＳ（Software Defined Storage）グリッドを構成する複数のサーバのうち、第１サーバが、ホストコンピュータからＩ／Ｏ（Input/Output）要求を受信する。第１サーバが、ＳＤＳグリッドによって管理されるすべてのデータの場所を示すローカルグリッドデータマップを基に、そのＩ／Ｏ要求を第２サーバが処理することを識別した場合、そのＩ／Ｏ要求を第２サーバに転送する。【０００４】
特許文献２は、例えば次のことを開示する。ストレージシステムに複数の記憶デバイスが接続されている。複数の記憶デバイスの各々が、複数の記憶ブロックを有する。ストレージシステムが、複数の書込み要求をバッファリングし、定義された記憶ブロックのグループに、データを書き込む。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】US2016/0173598
【特許文献２】特開２０１０−０７９９２８号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
以下の説明では、分散ストレージシステムの要素としての計算機を「ノード」と言うことがある。プロセッサやメモリや通信インターフェースデバイスといった計算リソースを有するいずれの計算機もノードになることができてよい。ノードは、物理的な計算機（例えば、汎用計算機又は物理的なストレージ装置）であってもよいし、物理的な計算機の少なくとも一部の計算リソースを基に動作する仮想的な計算機であってもよい。１つの物理的な計算機が、Ｉ／Ｏ要求を発行するホストのような仮想的な計算機と、Ｉ／Ｏ要求を受信し処理するストレージ装置のような仮想的な計算機（例えばＳＤＳ）とを実行してもよい。【０００７】
また、以下の説明では、複数のノードで冗長構成グループを形成する。冗長構成の例としては、Erasure Coding、ＲＡＩＮ（Redundant Array of Independent Nodes）、ノード間ミラーリング、ノードを１つのドライブとみなしたＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）などがあり、いずれでもよい。その他の方式（ノード間で冗長構成グループを構成する方式）が採用されてもよい。【０００８】
従って、以下の説明では、「冗長構成グループ」は、２以上のノードがそれぞれ提供する２以上の記憶領域で構成されデータを記憶するグループでよい。【０００９】
また、以下の説明における複数種類の記憶領域の各々の定義は、下記の通りである。
・「冗長構成領域」とは、冗長構成グループが提供する論理記憶領域である。
・「ノード領域」とは、複数のノードの各々が提供する論理記憶領域である。複数のノードがそれぞれ提供する複数のノード領域が、冗長構成領域を構成する。
・「ストリップ」とは、ノード領域の一部である。ストリップは、ユーザデータセット又はパリティを格納する。ユーザデータセットが格納されるストリップを「ユーザストリップ」と言うことができ、パリティが格納されるストリップを「パリティストリップ」と言うことができる。なお、「ユーザデータセット」は、ライト要求に従うユーザデータ（ライト対象データ）の少なくとも一部としてのユーザデータユニットの一部である。「ユーザデータユニット」は、ストライプに対応した全ユーザデータセットの集合である。「パリティ」は、ユーザデータユニットに基づき生成されるデータセットである。「データセット」とは、１つのストリップに格納されるデータであり、以下の説明では、ユーザデータセット又はパリティである。つまり、データセットとは、ストリップ単位のデータである。
・「ストライプ」とは、冗長構成領域における２以上のノード領域にそれぞれ存在する２以上のストリップ（例えば同一論理アドレスの２以上のストリップ）で構成された記憶領域である。【００１０】
分散ストレージシステム（例えば、スケールアウト型のストレージシステム）において、各ノードは、更新後のデータセットのライト先ストリップが、そのノードにおけるストリップでなければ、ノード間転送を行う、すなわち、そのライト先ストリップを有するノードに更新後のデータセットを転送する。【００１１】
ノード間転送は、ストリップ単位で行われる。このため、各ノードは、Ｎ個（Ｎは自然数）の更新後のデータセットにそれぞれ対応したＮ個のライト先ストリップが、いずれも、当該ノードに無い場合、Ｎ個のライト先ストリップの各々について、ノード間転送を行う。つまり、Ｎ回のノード間転送が行われる。ノード間転送は、通信のオーバーヘッドのため、分散ストレージシステムの性能（例えばＩ／Ｏ性能）を低下させる原因の１つである。
【課題を解決するための手段】
【００１２】
複数のノードのうちのいずれかのノードである第１ノードが、ノード毎に当該ノードのノード領域におけるストリップがライト先となるデータセットである転送対象データセットの第１ノードでの有無を管理するノード管理情報を保持する。第１ノードは、複数のノードのうちの第１ノード以外の各ノードである各第２ノードについて、
（Ａ）当該第２ノードのノード領域における２以上のストリップ（すなわち、２以上のストライプのうち、当該第２ノードに対応した２以上のストリップ）がそれぞれライト先となる２以上の転送対象データセットがあることをノード管理情報を基に特定した場合、当該２以上の転送対象データセットにそれぞれ対応した２以上のノード内位置をノード管理情報を基に特定し、
（Ｂ）特定した２以上のノード内位置にそれぞれ存在する２以上の転送対象データセットを転送対象とした１つの転送用コマンドを当該第２ノードに送信する。
【発明の効果】
【００１３】
分散ストレージシステムの性能低下を低減することができる。
【図面の簡単な説明】
【００１４】
【図１】実施形態の概要を示す。
【図２】分散ストレージシステムを含むシステム全体の物理構成を示す。
【図３】分散ストレージシステムを含むシステム全体の論理構成を示す。
【図４】ノードの論理構成を示す。
【図５】ホストライト処理の流れを示す。
【図６】ログストラクチャードライトの一例を示す。
【図７】非同期転送処理の流れを示す。
【図８】最大転送長制御処理の流れを示す。
【発明を実施するための形態】
【００１５】
以下、一実施形態を説明する。
【００１６】
なお、以下の説明では、「インターフェース部」は、１以上のインターフェースを含む。１以上のインターフェースは、１以上の同種のインターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種のインターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１７】
また、以下の説明では、「記憶部」は、メモリ部及びＰＤＥＶ部のうちの少なくともメモリ部を含む。ＰＤＥＶ部は、１以上のＰＤＥＶを含む。メモリ部は、１以上のメモリを含む。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。記憶部は、主に、プロセッサ部による処理の際に使用される。
【００１８】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサを含む。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）である。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１９】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００２０】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central Processing Unit））によって実行されることで、定められた処理を、適宜に記憶部（例えばメモリ）及び／又はインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主語が、プロセッサ（或いは、そのプロセッサを有する装置又はシステム）とされてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な（例えば非一時的な）記録媒体であってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２１】
また、以下の説明では、「ＰＤＥＶ」は、物理的な記憶デバイスを意味し、典型的には、不揮発性の記憶デバイス（例えば補助記憶デバイス）、例えばＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。
【００２２】
また、複数種類の記憶領域の各々の定義は、更に、下記の通りである。
・「キャッシュストリップ」は、ストリップに対応した記憶領域であってＣＭ（キャッシュメモリ）上の記憶領域である。なお、キャッシュストリップもストリップも一定サイズでよい。
・「キャッシュストライプ」は、ストライプに対応した記憶領域であってＣＭ上の記憶領域である。キャッシュストライプは、そのキャッシュストライプに対応するストライプを構成する２以上のストリップにそれぞれ対応した２以上のキャッシュストリップで構成されている。キャッシュストリップ内のデータセット（ユーザデータセット又はパリティ）が、そのキャッシュストリップに対応したストリップを有するノード領域に書き込まれる。
・「キャッシュノード領域」は、ノード領域に対応した記憶領域であってＣＭ上の記憶領域である。キャッシュノード領域は、そのキャッシュノード領域に対応するノード領域を構成する２以上のストリップにそれぞれ対応した２以上のキャッシュストリップで構成されている。
・「ＶＯＬ」は、論理ボリュームの略であり、ホストに提供される論理的な記憶領域である。ＶＯＬは、実体的なＶＯＬ（ＲＶＯＬ）であってもよいし、仮想的なＶＯＬ（ＶＶＯＬ）であってもよい。「ＲＶＯＬ」は、そのＲＶＯＬを提供するストレージシステムが有する物理的な記憶資源（例えば、１以上のＰＤＥＶ）に基づくＶＯＬでよい。「ＶＶＯＬ」は、複数の仮想領域（仮想的な記憶領域）で構成されており容量仮想化技術（典型的にはThin Provisioning）に従うＶＯＬでよい。
【００２３】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号を使用し、同種の要素を区別して説明する場合は、要素のＩＤ（例えば識別番号）を使用することがある。例えば、ノードを特に区別しないで説明する場合には、「ノード１０１」と記載し、個々のノードを区別して説明する場合には、「ノード０」、「ノード１」のように記載することがある。また、以下の説明では、ノードｎ（ｎは０以上の整数）内の要素の名称にｎを付加することで、いずれのノードの要素であるか（或いは、いずれのノードに対応する要素であるか）を区別することができる。
【００２４】
図１は、実施形態の概要を示す。
【００２５】
分散ストレージシステム１００が、複数のノード１０１、例えばノード０〜４を有する。各ノード１０１は、ノード領域５２を提供する。ノード領域０〜４が、冗長構成領域５３を構成する。また、ノード領域０〜４が、ノード０〜４が提供するＶＯＬ５４に関連付けられている。
【００２６】
各ノード１０１は、ＣＭ（キャッシュメモリ）５１を有する。ＣＭ５１は、１以上のメモリであってもよいし、１以上のメモリの一部領域でもよい。ＣＭ５１に、例えば、ライト要求に従うライト対象のユーザデータセット、リード要求に従うリード対象のユーザデータセット、パリティ、及び、他ノードからの転送用コマンドに従うデータセットが一時的に格納される。ＣＭ５１の記憶容量は、典型的には、ノード領域５２の記憶容量より小さい。ＣＭ５１の少なくとも一部は、論理的には、マトリクス状の複数のキャッシュストリップ（以下、キャッシュストリップマトリクス）である。複数のキャッシュストリップ行は、複数のキャッシュストライプ５６である（すなわち、複数のキャッシュストリップ行はそれぞれ複数のストライプに対応している）。複数のキャッシュストリップ列は、複数のキャッシュノード領域５７である（すなわち、複数のキャッシュストリップ列はそれぞれ複数のノード１０１に対応している）。なお、ＣＭ５１における領域のアドレスとストリップのアドレスとの対応関係は動的に変わる。例えば、キャッシュノード領域０において、２番目のキャッシュストリップと３番目のキャッシュストリップは連続しているが、ノード領域０において、２番目のキャッシュストリップに対応したストリップと、３番目のキャッシュストリップに対応したストリップとが連続しているとは限らない。
【００２７】
各ノード１０１は、コントローラ６０を有する。コントローラ６０は、１以上のコンピュータプログラムが実行されることにより発揮される機能の一例である。コントローラ６０は、データセットの入出力等を制御する。
【００２８】
各ノード１０１において、コントローラ６０が、ノード管理ビットマップ１０２を管理する。コントローラ６０が、ＣＭ５１の更新に応じて、ノード管理ビットマップ１０２を更新する。ノード管理ビットマップ１０２は、転送対象のデータセットが存在するノード内位置をノード毎に管理するノード管理情報の一例である。ノード管理ビットマップ１０２は、複数のノードにそれぞれ対応した複数のサブビットマップ７０で構成されている。サブビットマップ７０は、サブノード管理情報の一例である。複数のサブビットマップ７０は、それぞれ、複数のキャッシュノード領域５７に対応している。各サブビットマップ７０について、２以上のビットは、そのサブビットマップ７０に対応するキャッシュノード領域５７を構成する２以上のキャッシュストリップにそれぞれ対応している。ビット“０”は、そのビットに対応するキャッシュストリップ内のデータセットが非転送対象であることを意味する。ビット“１”は、そのビットに対応するキャッシュストリップ内のデータセットが転送対象であることを意味する。転送対象のデータセットが格納されているキャッシュストリップを「転送対象キャッシュストリップ」と言うことができる。また、ノードｎに対応するサブビットマップ７０を、「サブビットマップｎ」と言い、ノードｎに対応するキャッシュノード領域５７を、「キャッシュノード領域ｎ」と言うことができる。なお、後に詳述するように、サブビットマップ７０の長さ（言い換えれば、サブビットマップを構成するビットの数）は変更可能である。サブビットマップ７０の長さが、最大転送長に相当する。「最大転送長」は、転送可能なデータセットの総量でよい。また、本実施形態では、ＣＭ５１には、後述のログストラクチャード方式でデータセットが書き込まれるため、各ノードについて、２以上の転送対象キャッシュストリップが連続する傾向にあることが期待できる。
【００２９】
以下、説明を分かり易くするため、各ノード１０１の説明として、主にノード０を例に取る。すなわち、以下の説明では、ノード０が第１ノード（又は自ノード）の一例であり、ノード１〜３の各々が第２ノード（又は他ノード）の一例である。
【００３０】
本実施形態によれば、ノード０が、転送対象キャッシュストリップの位置をノード毎に管理するノード管理ビットマップ１０２を有する。コントローラ０が、ノード管理ビットマップ０を参照することにより、キャッシュノード領域０〜３の各々について、全ての転送対象キャッシュストリップを特定できる。
【００３１】
コントローラ０は、ノード１〜３の各々に、１回のノード間転送で（言い換えれば、１つの転送用コマンド（ノード間転送用のコマンド）で）、その特定した全ての転送対象キャッシュストリップにおける全ての転送対象データセットを、その特定した全ての転送対象キャッシュストリップが連続したキャッシュストリップであるか否かに関わらず、転送することができる。すなわち、ノード間転送の回数（言い換えれば、発行する転送用コマンドの数）を削減することができる。別の言い方をすれば、複数回のノード間転送を１回のノード間転送にまとめることができる。以って、分散ストレージシステム１００の性能低下を低減することができる。
【００３２】
具体的には、例えば、コントローラ０は、サブビットマップ１における連続した３つのビット“１”（１番目のビット〜３番目のビット）にそれぞれ対応した、キャッシュノード領域１における連続した３つのキャッシュストリップを、３つの転送対象キャッシュストリップとして特定する。コントローラ０は、連続した３つの転送対象キャッシュストリップ内の３つのデータセットＤ１を転送対象（ライト対象）とした１つの転送用コマンド（例えば、ノード領域１の先頭のライト先ストリップのアドレスと転送長とを指定したコマンド）をノード１に転送する。なお、「転送長」は、最大転送長以下の長さである。上述したように、転送対象キャッシュストリップが連続する傾向にあることが期待でき、以って、２以上の転送対象データセットを１つの転送コマンドで転送することが容易である。具体的には、１つの転送用コマンドで、先頭のアドレスと転送長とを指定すればよい。
【００３３】
同様に、例えば、コントローラ０は、サブビットマップ２における連続した３つのビット“１”（２番目のビット〜４番目のビット）にそれぞれ対応した、キャッシュノード領域２における連続した３つのキャッシュストリップを、３つの転送対象キャッシュストリップとして特定する。コントローラ０は、連続した３つの転送対象キャッシュストリップ内の３つのデータセットＤ２を転送対象とした１つの転送用コマンドをノード２に転送する。
【００３４】
上述したように、１つのノードに対する１つの転送用コマンドで転送対象とする２以上のデータセット（２以上のストリップをそれぞれライト先とする２以上のデータセット）は、連続した２以上のキャッシュストリップ内の２以上のデータセットに限らず、非連続の２以上のキャッシュストリップ内の２以上のデータセットでもよい。その場合、スキャッタギャザーリスト（ＳＧＬ）の手法を適用すること（非転送対象のデータセットについてのアドレスを転送用コマンドで指定すること）ができる。具体的には、例えば、コントローラ０は、サブビットマップ３における非連続の２つのビット“１”（１番目のビット及び４番目のビット）にそれぞれ対応した、キャッシュノード領域３における非連続の２つのキャッシュストリップを、２つの転送対象キャッシュストリップとして特定する。コントローラ０は、非連続の２つの転送対象キャッシュストリップ内の２つのデータセットＤ３を転送対象とした１つの転送用コマンド（例えば、ノード領域３の先頭のライト先ストリップのアドレス及び転送長と、非ライト先ストリップの先頭アドレス及びデータ長（オフセット）とを指定したコマンド）をノード３に転送する。すなわち、転送対象キャッシュストリップが非連続のケースは、転送対象キャッシュストリップが連続のケースに比べて、１つの転送用コマンドで２以上の転送対象データセットを転送するために指定するパラメータの数が増えるが、転送対象キャッシュストリップが非連続でも、１つの転送用コマンドで２以上の転送対象データセットを転送することができる。
【００３５】
また、コントローラ０は、ノード領域０に対しても、１回の書込みで（すなわち、１つのライトコマンドで）、２以上のストリップに２以上のデータセットを書き込むことができる。具体的には、例えば、コントローラ０は、サブビットマップ０における連続した２つのビット“１”（２番目のビット及び３番目のビット）にそれぞれ対応した、キャッシュノード領域０における連続した２つのキャッシュストリップを、２つのライト対象キャッシュストリップとして特定する。コントローラ０は、連続した２つのライト対象キャッシュストリップ内の２つのデータセットＤ０をライト対象とした１つのライトコマンドを発行する。それにより、２つのデータセットＤ０がノード領域０における２つのストリップに書き込まれる。
【００３６】
以下、本実施形態を詳細に説明する。
【００３７】
図２は、分散ストレージシステム１００を含むシステム全体の物理構成を示す。
【００３８】
１以上のホスト２０１、管理システム２０３及び分散ストレージシステム１００が、ネットワーク２４０に接続される。ネットワーク２４０は、例えば、ＦＣ（Fibre Channel）ネットワークとＩＰ（Internet Protocol）ネットワークとのうちの少なくとも１つを含んでよい。
【００３９】
ホスト２０１は、ユーザデータのＩ／Ｏ要求を発行する。ホスト２０１は、物理的な計算機であってもよいし、物理的な計算機で実行される仮想的な計算機であってもよい。仮想的な計算機としてのホスト２０１は、ノード１０１において実行されてもよい。具体的には、例えば、同一のノード１０１において、ホスト２０１としての仮想的な計算機と、ホスト２０１からＩ／Ｏ要求を受信して処理するストレージ（コントローラ６０）としての仮想的な計算機（例えばＳＤＳ（Software Defined Storage））とが実行されてもよい。
【００４０】
管理システム２０３は、分散ストレージシステム１００を管理する。管理システム２０３は、一以上の計算機（一以上の物理計算機又は仮想計算機）で構成されてよい。具体的には、例えば、管理計算機が表示デバイスを有していて管理計算機が自分の表示デバイスに情報を表示する場合、管理計算機が管理システム２０３でよい。また、例えば、管理計算機（例えばサーバ）が表示用情報を遠隔の表示用計算機（例えばクライアント）に送信し表示用計算機がその情報を表示する場合（管理計算機が表示用計算機に情報を表示する場合）、管理計算機と表示用計算機とのうちの少なくとも管理計算機を含んだシステムが管理システム２０３でよい。
【００４１】
分散ストレージシステム１００は、ネットワーク２４０に接続された複数のノード１０１を含む。各ノード１０１は、インターフェース部２５１、ＰＤＥＶ部２５２、メモリ部２５３及びそれらに接続されたプロセッサ部２５４を有する。例えば、インターフェース部２５１は、ネットワーク２４０に接続され、インターフェース部２５１経由でノード間転送が行われる。ＰＤＥＶ部２５２に基づく論理記憶領域が、ノード領域である。メモリ部２５３が、１以上のプログラム、及び、上述したノード管理ビットマップ１０２を記憶する。プロセッサ部２５４が、１以上のプログラムを実行する。
【００４２】
図３は、分散ストレージシステム１００を含むシステム全体の論理構成を示す。
【００４３】
２以上のノード１０１がそれぞれ有する２以上のＶＯＬ（例えば、ＶＯＬ  Ａ１、及び、ＶＯＬ  Ａ２）が１つのＶＯＬ（例えば、ＶＯＬ  Ａ）としてホスト２０１に提供される。ホスト２０１は、ＶＯＬ  Ａを指定したＩ／Ｏ要求を、ＶＯＬ  Ａ１を提供するノード０、又は、ＶＯＬ  Ａ２を提供するノード１に送信する。
【００４４】
各ノード１０１は、上述したようにコントローラ６０を有する。コントローラ６０は、データプレーン３１１及びコントロールプレーン３１２を有する。データプレーン３１１が、ＶＯＬを提供し、ホスト２０１からのＩ／Ｏ要求に従う処理を行う。コントロールプレーン３１２が、種々の制御を行う。コントロールプレーン３１２は、コントロールマスタ３２２とコントロールエージェント３２１とを有する。コントロールマスタ３２２が、管理システム２０３から指示を受け、その指示に従う制御コマンドを、１以上のコントロールエージェント３２１に送信する。コントロールエージェント３２１は、制御コマンドに従い制御を行う。
【００４５】
各ノード１０１が、ノード管理ビットマップ１０２を基に、ノード毎に、転送対象データセットを特定し転送する。分散ストレージシステム１００において、データの整合性を、例えば下記のうちのいずれかの方法で維持することができる。
・ストライプ毎に、いずれかのノード１０１が担当ノードとなる。ノード１０１は、ライト要求に対応したライト先ストライプの担当ノードが自ノードであれば、ライト対象のユーザデータをＣＭ５１に書き、当該ストライプについて、転送対象データセットを他ノードに転送する。ノード１０１は、ライト要求に対応したライト先ストライプの担当ノードが自ノードでなければ、担当ノード（他ノード）に、そのライト要求を転送する。
・各ノード１０１が、自ノードについて、ライト要求に従うデータセットが書き込まれる第１のＣＭ部分と、受信した転送用コマンドに従うデータセットが書き込まれる第２のＣＭ部分とを持ち、それらのＣＭ部分のうちより新しいデータセットを格納している方を、自ノードのノード領域におけるストリップへの書込み対象として採用する。
【００４６】
図４は、ノード１０１の論理構成を示す。
【００４７】
ノード１０１において、データプレーン３１１は、フロントエンドプログラム４２１、コントロールプログラム４２２、キャッシュプログラム４２３、アドレス変換プログラム４２４、データ転送プログラム４２５及びバックエンドプログラム４２６を含む。データプレーン０が、ノード管理ビットマップ１０２を管理する。フロントエンドプログラム４２１は、Ｉ／Ｏ要求を受けたり、Ｉ／Ｏ要求の応答を返したりする。コントロールプログラム４２２は、受けたＩ／Ｏ要求の処理を実行したり、Ｉ／Ｏ要求の処理と非同期で転送処理を実行したりする。キャッシュプログラム４２３は、ＣＭ５１を更新したり、ノード管理ビットマップ１０２を更新したりする。アドレス変換プログラム４２４は、キャッシュアドレス（ＣＭの論理アドレス）をストリップアドレス（ストリップの論理アドレス）に変換する。データ転送プログラム４２５は、１以上の転送対象データセットを指定した転送用コマンドを送信したり、１以上のライト対象データセットを指定したライトコマンドを送信したりする。バックエンドプログラム４２６は、ライトコマンドに応答して、そのライトコマンドで指定されている１以上のライト対象データセットを１以上のストリップに書き込む。
【００４８】
ノード１０１において、コントロールプレーン３１２は、ＣＬＩ（Command Line Interface）プログラム４３１、ＧＵＩ（Graphical User Interface）プログラム４３２、ＲＥＳＴ（REpresentational State Transfer）サーバプログラム４３３、コントロールエージェント３２１、コントロールマスタ３２２及び保守プログラム４３４を含む。ＣＬＩプログラム４３１は、ＣＬＩ経由でホスト２０１のユーザから指示を受け付ける。ＧＵＩプログラム４３２は、ＧＵＩ経由でホスト２０１のユーザから指示を受け付ける。ＲＥＳＴサーバプログラム４３３は、ノード１０１において、コントローラ６０（例えばＳＤＳ）外の少なくとも１つのプログラムである外部プログラム（例えば、図示しないアプリケーションプログラム）から指示を受け付ける。ＲＥＳＴサーバプログラム４３３は、例えば、外部プログラムからの指示に従い保守プログラム４３４に指示を出すことができる。コントロールエージェント３２１は、少なくとも１つのノード１０１におけるコントロールマスタ３２２から指示を受け付ける。コントロールマスタ３２２は、少なくとも１つのノード１０１におけるコントロールエージェント３２１に指示を出す。保守プログラム４３４は、ＲＥＳＴサーバプログラム４３３から指示を受け付け、その指示に従う保守（例えば、少なくとも１つのノードに対応した最大転送長（サブビットマップの長さ）を変更すること）を行う。
【００４９】
以下、本実施形態で行われる処理の一例を説明する。また、ノード０を例に取る。
【００５０】
図５は、ホストライト処理の流れを示す。
【００５１】
フロントエンドプログラム０が、ホスト２０１からユーザデータのライト要求を受信する（Ｓ５０１）。ライト要求は、ライト先を示す情報であるライト先情報を含む。ライト先情報は、例えば、ライト先ＶＯＬのＩＤ（例えばＬＵＮ（Logical Unit Number））と、ライト先ＶＯＬにおけるライト先の領域の論理アドレスとを含む。
【００５２】
フロントエンドプログラム０が、そのライト要求をコントロールプログラム０に転送する（Ｓ５０２）。
【００５３】
コントロールプログラム０は、そのライト要求を解析する（Ｓ５０３）。例えば、コントロールプログラム０は、要求がライト要求であることと、そのライト要求におけるライト先情報とを特定する。
【００５４】
コントロールプログラム０は、ライト要求に従うユーザデータのキャッシュをキャッシュプログラム０に指示する（Ｓ５０４）。
【００５５】
キャッシュプログラム０は、その指示に応答して、ＣＭ０に対してユーザデータのログストラクチャードライトを行う、すなわち、ログストラクチャード方式でＣＭ０にユーザデータを書き込む（Ｓ５０５）。なお、ログストラクチャードライトは、図５に示すように、ライト要求に応答して行われる処理において行われてもよいし、ライト要求に応答して行われる処理とは非同期に行われてもよい（例えば、ユーザデータをＣＭ０に書き込んだ後に、ＣＭ０において離散したデータセットが連続するようにログストラクチャードライトを行ってよい）。
【００５６】
また、キャッシュプログラム０は、Ｓ５０５のＣＭ０の更新に伴い、ノード管理ビットマップ０を更新する（Ｓ５０６）。例えば、新たなＶＯＬ領域（ＶＯＬにおける領域）をライト先としたユーザデータに従うデータセットがキャッシュストリップに書き込まれた場合、キャッシュプログラム０は、そのキャッシュストリップに対応したビットの値を“０”から“１”に更新する。
【００５７】
キャッシュプログラム０は、Ｓ５０４の指示に対する応答をコントロールプログラム０に返す（Ｓ５０７）。コントロールプログラム０は、その応答を受けた場合、Ｓ５０２の要求に対する応答をフロントエンドプログラム０に返す（Ｓ５０８）。フロントエンドプログラム０は、その応答を受けた場合、Ｓ５０１のライト要求に対する完了応答をホスト２０１に返す（Ｓ５０９）。
【００５８】
図６を参照して、ログストラクチャードライトの一例を説明する。
【００５９】
新たなユーザデータユニットＸがライト対象の場合、キャッシュプログラム０は、そのユーザデータユニットＸを構成するユーザデータセットｘ１、ｘ２及びｘ３と、それらのユーザデータセットに基づくパリティｘＰとを、第１のキャッシュストライプ（連続したキャッシュストリップ）に書き込む。
【００６０】
次に、新たなユーザデータユニットＹがライト対象の場合、キャッシュプログラム０は、そのユーザデータユニットＹを構成するユーザデータセットｙ１、ｙ２及びｙ３と、それらのユーザデータセットに基づくパリティｙＰとを、第１のキャッシュストライプの次のキャッシュストライプである第２のキャッシュストライプ（具体的には、第１のキャッシュストライプの終端キャッシュストリップの次のキャッシュストリップを先頭とした第２のキャッシュストライプ）に書き込む。
【００６１】
次に、ユーザデータユニットＸの全てを更新するためのユーザデータユニットＸ´がライト対象の場合、キャッシュプログラム０は、そのユーザデータユニットＸ´を構成するユーザデータセットｘ１´、ｘ２´及びｘ３´と、それらのユーザデータセットに基づくパリティｘＰ´とを、第２のキャッシュストライプの次のキャッシュストライプである第３のキャッシュストライプに書き込む。また、キャッシュプログラム０は、更新前のユーザデータユニットＸを構成するユーザデータセットｘ１、ｘ２及びｘ３をそれぞれ格納している３つのキャッシュストリップを、空き領域として管理する。更新前パリティｘＰが格納されているキャッシュストリップも空き領域として管理されてよい。
【００６２】
このように、ログストラクチャードライトによれば、更新前データセットが格納されている領域に更新後データセットが上書きされるのではなく、更新後データセットのために新たに領域が確保され、その領域が、新たにキャッシュストリップとなる。これにより、ライト先アドレスが非連続のランダムライトが行われても、一定のアドレス長のＣＭ０に、アドレスが連続したデータ領域（アドレスが連続した転送対象キャッシュストリップ）を得ることができる。
【００６３】
なお、更新後ユーザデータセットｘ１´、ｘ２´及びｘ３´にそれぞれ対応した３つのライト先ストリップは、更新前ユーザデータセットｘ１、ｘ２及びｘ３にそれぞれ対応した３つのライト先ストリップと同じため、キャッシュプログラム０は、ノード管理ビットマップ０は更新しないでよい（例えば、更新前ユーザデータセットｘ１を格納したキャッシュストリップに対応したビットの値は“１”のままでよい）。但し、転送対象データセットが格納されているキャッシュストリップのアドレスは変更されたため、キャッシュプログラム０は、ビット“１”に対応したキャッシュアドレスを、更新前ユーザデータセット（例えばｘ１）を格納しているキャッシュストリップのアドレスから、更新後ユーザデータセット（例えばｘ１´）を格納しているキャッシュストリップのアドレスに変更してよい。
【００６４】
図７は、非同期転送処理の流れを示す。非同期転送処理は、ホストライト処理と非同期に行われる転送処理であって、転送対象データを転送先ノードに転送する処理を含む処理である。
【００６５】
コントロールプログラム０が、ロック取得をキャッシュプログラム０に指示する（Ｓ７０１）。
【００６６】
キャッシュプログラム０が、その指示に応答して、次の処理を行う（Ｓ７０２）。
・キャッシュプログラム０は、ノード管理ビットマップ１０２を参照し、ノード０〜３の各々について、転送対象キャッシュストリップを特定する。以下、ノード１を例に取る。
・キャッシュプログラム０は、ノード１について、特定した全ての転送対象キャッシュストリップを含む連続したキャッシュストリップをロックできるか否かの判断であるロック判断を行う。
・ロック判断の結果が真の場合、キャッシュプログラム０は、連続したキャッシュストリップをロックする。ロックされたキャッシュストリップ内のデータセットがホストライト処理において更新されることがない。
【００６７】
キャッシュプログラム０が、Ｓ７０１の指示に対する応答として、Ｓ７０２の結果を表す応答をコントロールプログラム０に返す（Ｓ７０３）。
【００６８】
コントロールプログラム０が、ロックされた連続したキャッシュストリップのうちの各転送対象キャッシュストリップのキャッシュアドレスを特定する（Ｓ７０４）。コントロールプログラム０が、Ｓ７０４で特定したキャッシュアドレスのアドレス変換をアドレス変換プログラム０に指示する。アドレス変換プログラム０が、その指示に応答して、キャッシュアドレスに対応したストリップアドレスを特定し（Ｓ７０６）、特定したストリップアドレスをコントロールプログラム０に返す（Ｓ７０７）。
【００６９】
必要に応じて（例えば、当該ストリップを含むストライプについてノード０が少なくともパリティ生成の担当の場合）、コントロールプログラム０が、更新前データセットをノード１から読み出し、パリティを生成する（Ｓ７０８）。
【００７０】
コントロールプログラム０が、ノード１のキャッシュロックをデータ転送プログラム０に指示する（Ｓ７０９）。その指示では、ストリップ数及びストリップアドレス群が指定される。ストリップ数は、例えば、ノード１についてＳ７０２でロックされたキャッシュストリップの数、又は、ノード１についてＳ７０２でロックされたキャッシュストリップのうちの転送対象キャッシュストリップの数である。ストリップアドレス群は、ノード領域１内の１以上のストリップのアドレスでもよいし、ストリップアドレスと転送長との組でもよい。当該指示に応答して、データ転送プログラム０が、ロック要求をノード１に送信する（Ｓ７１０）。当該ロック要求でも、ストリップ数及びストリップアドレス群が指定される。つまり、当該ロック要求は、指定されたストリップ数と同数のキャッシュストリップをノード１のＣＭからロックすること（確保すること）の要求である。当該ロック要求に応答して、ノード１（例えばコントローラ１）が、ＣＭ１から、指定されたストリップ数と同数の領域（キャッシュストリップ）をロックし（例えば、キャッシュノード領域１からキャッシュストリップをロックし）、且つ、それらの領域に、ストリップアドレス群を関連付ける（Ｓ７１１）。ノード１（例えばコントローラ１）が、Ｓ７１０の指示に対する応答をデータ転送ログラム０に返す（Ｓ７１２）。データ転送プログラム０が、Ｓ７０９の指示に対する応答をコントロールプログラム０に返す（Ｓ７１３）。
【００７１】
コントロールプログラム０が、データ転送をデータ転送プログラム０に指示する（Ｓ７１４）。
【００７２】
その指示に応答して、下記が行われる。
・データ転送プログラム０が、ノード領域０に対する全転送対象データセットのライトコマンドを生成する（Ｓ７１５）。ライトコマンドでは、ストリップアドレス群（ノード領域０内のストリップのアドレス）が指定される。データ転送プログラム０が、そのライトコマンドの送信をバックエンドプログラム０に指示する。その指示に応答して、バックエンドプログラム０が、ノード領域０に対するライトコマンドを送信する（Ｓ７１６）。バックエンドプログラム０が、応答をデータ転送プログラム０に返す（Ｓ７１８）。
・データ転送プログラム０が、ノード１に対する全転送対象データセットの転送用コマンドを生成する（Ｓ７１５）。転送用コマンドでは、上記ストリップアドレス群（ノード領域１内のストリップのアドレス）が指定される。データ転送プログラム０が、転送用コマンドをノード１に転送する（Ｓ７１７）。ノード１（例えばコントローラ１）が、その転送用コマンドに応答して、その転送用コマンドに従う転送対象データセットを、Ｓ７１１でロックしたキャッシュストリップに書き込んで、応答をデータ転送プログラム０に返す（Ｓ７１９）。ノード１において、コントローラ１が、転送対象データセットを、キャッシュストリップからノード領域１のストリップに書き込む。
【００７３】
データ転送プログラム０が、Ｓ７１４の指示に対する応答をコントロールプログラム０に返す（Ｓ７２０）。
【００７４】
コントロールプログラム０が、ロック解除をキャッシュプログラム０に指示する（Ｓ７２１）。その指示に応答して、キャッシュプログラム０が、Ｓ７０２で取得したロックを解除する（Ｓ７２２）。キャッシュプログラム０が、Ｓ７２１の指示に対する応答をコントロールプログラム０に返す（Ｓ７２３）。
【００７５】
以上が、非同期転送処理である。
【００７６】
なお、非同期転送処理では、転送元ノードが転送先ノードに転送用コマンドを送信することで転送元ノードから転送先ノードへ転送対象データセットが転送されるが（プッシュ型の転送）、転送先ノードが転送元ノードへ転送要求を送信することで転送元ノードから転送先ノードへ転送対象データセットが転送されてよい（プル型の転送）。
【００７７】
また、上述のロック判断（特定した全ての転送対象キャッシュストリップを含む連続したキャッシュストリップをロックできるか否かの判断）の結果が、例えば下記の場合に偽となる。
・ロック対象のキャッシュストリップのうちの少なくとも１つが既にロックされている。
・ロック対象のキャッシュストリップをロックすると、ロック割合（ＣＭの容量に対する、ロックされているキャッシュストリップの全容量の割合）が閾値を超える。
【００７８】
ロック判断の結果が偽の場合、コントローラ０は、非同期転送処理とは別の処理（例えば、別のノードに対応したキャッシュノード領域におけるキャッシュストリップに関してのロック判断）を行ってもよい。
【００７９】
全てのノード１０１について、最大転送長（ノード管理テーブル１０２におけるサブビットマップ７０の長さ）が同じである必要は無い。最大転送長は、例えば、下記のように設定又は変更可能である。
【００８０】
図８は、最大転送長制御処理の流れを示す。最大転送長制御処理は、ノード１０１において実行される。以下、ノード０を例に取る。
【００８１】
最大転送長を設定する設定イベントが生じた場合（Ｓ８０１：ＹＥＳ）、ノード０に最大転送長が設定される（Ｓ８０２）。すなわち、ノード０に、ノード０〜３の各々についてサブビットマップ７０が設定される。ここで言う「設定イベント」とは、例えば、下記のうちのいずれかでよい。
・最大転送長を指定した設定指示をＣＬＩプログラム０がホスト２０１から受けたこと。
・最大転送長を指定した設定指示をＧＵＩプログラム０がホスト２０１から受けたこと。
・保守プログラム４３４が、ＲＥＳＴサーバプログラム０経由で外部プログラムから最大転送長を指定した設定指示を受けたこと。
・最大転送長を指定した設定指示をコントロールマスタ０が管理システム２０３から受けたこと。
【００８２】
指定された最大転送長は、管理システム２０３、外部プログラム及びコントローラ０のうちのいずれによって決定されてもよい。
【００８３】
最大転送長は、コントローラ０（例えばＳＤＳ）の性能値に基づく。具体的には、最大転送長は、例えば、下記のうちの少なくとも１つに基づく。なお、以下の説明において、「Ｋが比較的大きい（又は小さい）」とは、「或るＫの値ｋ１よりも別の或るＫの値ｋ２の方が大きい（又は小さい）」ことを意味する。また、「最大転送長は比較的小さい（又は大きい）」とは、「或るＫの値ｋ１に対応した最大転送長ｔ１よりも別の或るＫの値ｋ２に対応した最大転送長ｔ２の方が小さい（又は大きい）」ことを意味する。
・ノード０について目標とされるＩ／Ｏ処理性能（単位時間当たりに入出力されるデータの量）。例えば、Ｉ／Ｏ処理性能が比較的高い場合、最大転送長は比較的小さい。非同期転送処理がホストＩ／Ｏ処理の性能に与える影響を小さくするためである。なお、「Ｉ／Ｏ処理性能」とは、Ｉ／Ｏ要求（本実施形態ではホストから受信したＩ／Ｏ要求）の処理の性能である。「Ｉ／Ｏ」は、ライトであってもよいし、リードであってもよいし、ライト及びリードの両方であってもよい。
・ノード０に搭載されるインターフェース部のネットワーク帯域。例えば、ネットワーク帯域が比較的小さい程、最大転送長は比較的小さい。インターフェース部という物理的なハードウェアの性能を超えた転送はできないからである。
・ホストライト処理の多重度。例えば、多重度が比較的大きい場合、最大転送長は比較的小さい。多重度が大きいと非同期転送処理に使用可能なリソース量が圧迫されるからである。
・冗長構成領域５３を構成するノード数。例えば、ノード数が比較的大きい場合、最大転送長は比較的小さい。ノード数が大きいと、サブビットマップの数が増え、以って、ノード管理ビットマップのサイズが大きくなる傾向にあるからである。
【００８４】
稼動した後（Ｓ８０３）、少なくとも１つのノードについて設定済の最大転送長を変更する変更イベントが生じた場合（Ｓ８０４：ＹＥＳ）、ノード０に設定済の最大転送長が変更される（Ｓ８０５）、変更後の最大転送長が設定される（Ｓ８０６）。例えば、サブビットマップ７０が長くなる又は短くなる。ここで言う「変更イベント」とは、例えば、下記のうちのいずれかでよい。
・変更後の最大転送長を指定した変更指示をＣＬＩプログラム０がホスト２０１から受けたこと。
・変更後の最大転送長を指定した変更指示をＧＵＩプログラム０がホスト２０１から受けたこと。
・保守プログラム４３４が、ＲＥＳＴサーバプログラム０経由で外部プログラムから変更後の最大転送長を指定した変更指示を受けたこと。
・保守プログラム４３４が、ノード０の負荷（例えば、計算リソース（ハードウェア）の負荷、又は、１以上の外部プログラムの稼働状況）が１以上の閾値のうちのいずれかの閾値以上となった又はいずれかの閾値未満となったことを検出した。
・変更後の最大転送長を指定した変更指示をコントロールマスタ０が管理システム２０３から受けたこと。
・前回のＳ８０４の判断から一定時間が経った。
・現在時刻が所定の時刻になった。
【００８５】
変更後の最大転送長は、例えば、下記のうちの少なくとも１つに基づく。
・ノード０の計算リソース（ハードウェア）の性能値。例えば、コントローラ０（例えば保守プログラム０）が、ノード０の計算リソースの性能値（例えば、ＣＭ０の空き容量）に基づいて帯域の限界値を予測し（或いは、当該帯域の限界値の予測値を管理システム２０３のような外部から受けて）、限界値の予測値を基に、最大転送長を変更する。
・１以上の外部プログラムの稼働状況。例えば、１又は複数の外部プログラム（例えば或る外部プログラム）が新たに稼働又は停止する場合、コントローラ０（例えば、ＲＥＳＴサーバプログラム０）が、その１又は複数の外部プログラムの新たな稼動又は停止の通知をその１又は複数の外部プログラムの少なくとも１つから受ける、又は、コントローラ０（例えば、保守プログラム０）が、１又は複数の外部プログラムの新たな稼動又は停止の通知を管理システム２０３から受ける。その通知を受けたコントローラ０（例えば、ＲＥＳＴサーバプログラム０又は保守プログラム０）が、１又は複数の外部プログラムが新たに稼働するならば最大転送長を比較的小さくし、１又は複数の外部プログラムが新たに停止するならば最大転送長を比較的大きくする。
【００８６】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【００８７】
例えば、ＣＭ５１に対するライトとして、必ずしもログストラクチャードライトが採用されなくてもよい。
【００８８】
また、例えば、未転送の転送対象データセットの冗長性維持のため、ノード１０１は、その転送対象データセットをＰＤＥＶ部に書き込んでおき、その転送対象データセットのノード間転送完了後にその転送対象データをＰＤＥＶ部から削除してもよい。
【００８９】
また、例えば、転送対象データセットは、ＣＭからデステージされていないデータセットである「ダーティデータセット」と言うことができる。また、例えば、転送対象データセットを格納するキャッシュストリップを「ダーティキャッシュストリップ」と言うことができる。
【符号の説明】
【００９０】
１０１…ノード
【図１】
0006731553.tif 000002
【図２】
0006731553.tif 000003
【図３】
0006731553.tif 000004
【図４】
0006731553.tif 000005
【図５】
0006731553.tif 000006
【図６】
0006731553.tif 000007
【図７】
0006731553.tif 000008
【図８】
0006731553.tif 000009