(57)【要約】【課題】重複排除の処理に伴うレイテンシを抑制しつつ情報処理装置間通信の負荷を抑制する。【解決手段】情報処理装置１０は、重複を排除したデータを分散して格納する。記憶部１１は、装置情報１１ａと性能情報１１ｂとを格納する。制御部１２は、格納対象データを格納先に格納する格納指示を受け付け、ポストプロセス処理におけるレイテンシと、インライン処理におけるレイテンシとが均衡するように、格納対象データのデータサイズと性能情報１１ｂと装置情報１１ａから、第１のデータサイズと第２のデータサイズとを算出し、管理情報２１ａを有する第１の情報処理装置２０を格納先から特定し、第１のデータサイズのデータを処理対象とするポストプロセス処理の実行を第１の情報処理装置２０に指示し、第２のデータサイズのデータを処理対象とするインライン処理の実行をその余の第２の情報処理装置３０に指示する。【選択図】図１
2018106636.tif 000002
【特許請求の範囲】
【請求項１】
複数の情報処理装置をネットワークを介して接続し、前記情報処理装置が有する記憶装置に、ポストプロセス処理またはインライン処理により重複を排除したデータを分散して格納可能な情報処理システムにおける情報処理装置であって、
前記情報処理装置を識別可能な装置情報と前記情報処理装置におけるポストプロセス処理およびインライン処理の性能情報とを格納する記憶部と、
格納対象データを格納先に格納する格納指示を受け付け、前記ポストプロセス処理におけるレイテンシと前記インライン処理におけるレイテンシとが均衡するように、前記格納対象データのデータサイズと前記性能情報と前記装置情報から、前記ポストプロセス処理で処理対象とする第１のデータサイズと前記インライン処理で処理対象とする第２のデータサイズとを算出し、前記格納対象データの管理情報を有する第１の情報処理装置を前記格納先から特定し、前記格納対象データのうち前記第１のデータサイズのデータを処理対象とする前記ポストプロセス処理の実行を前記第１の情報処理装置に指示し、前記格納対象データのうち前記第２のデータサイズのデータを処理対象とする前記インライン処理の実行をその余の第２の情報処理装置に指示する制御部と、
備える情報処理装置。
【請求項２】
前記制御部は、
算出した前記第２のデータサイズが予め設定された閾値より大きい場合、前記格納対象データのうち前記第１のデータサイズのデータを処理対象とする前記ポストプロセス処理の実行を前記第１の情報処理装置に指示し、前記格納対象データのうち前記第２のデータサイズのデータを処理対象とする前記インライン処理の実行をその余の第２の情報処理装置に指示し、
算出した前記第２のデータサイズが前記閾値以下である場合、前記格納対象データについて前記インライン処理を実行する、
請求項１記載の情報処理装置。
【請求項３】
前記制御部は、
前記格納指示で受け付けた前記格納対象データのデータサイズが所定のデータサイズ以下である場合、前記格納対象データについて前記インライン処理を実行する、
請求項１記載の情報処理装置。
【請求項４】
前記装置情報は、前記ポストプロセス処理または前記インライン処理の実行対象となる情報処理装置である実行対象装置を特定可能な情報であり、
前記制御部は、
前記装置情報から前記実行対象装置の数を特定し、
算出した前記第２のデータサイズが予め設定された閾値よりも小さく、かつ前記格納対象データのデータサイズが所定のデータサイズに前記実行対象装置の数を乗じた値よりも大きい場合、データサイズが均衡するように前記実行対象装置の数で前記格納対象データを分割し、
前記格納対象データの分割データを処理対象とする前記インライン処理の実行を前記実行対象置に指示する、
請求項１記載の情報処理装置。
【請求項５】
前記装置情報は、前記ポストプロセス処理または前記インライン処理の実行対象となる情報処理装置である実行対象装置を特定可能な情報であり、
前記制御部は、
前記装置情報から前記実行対象装置の数を特定し、
算出した前記第２のデータサイズが予め設定された閾値よりも小さい場合に、前記実行対象装置の数から予め設定された所定値を減算した値を新たな実行対象装置の数とし、前記ポストプロセス処理におけるレイテンシと、前記インライン処理におけるレイテンシとが均衡するように、前記格納対象データのデータサイズと前記性能情報と前記新たな実行対象装置の数から前記第１のデータサイズと前記第２のデータサイズとを算出する、
請求項１記載の情報処理装置。
【請求項６】
複数の情報処理装置をネットワークを介して接続し、前記情報処理装置が有する記憶装置に、ポストプロセス処理またはインライン処理により重複を排除したデータを分散して格納可能な情報処理システムにおける情報処理方法であって、
前記情報処理装置を識別可能な装置情報と前記情報処理装置におけるポストプロセス処理およびインライン処理の性能情報とを記憶部に格納し、
格納対象データを格納先に格納する格納指示を受け付け、前記ポストプロセス処理におけるレイテンシと前記インライン処理におけるレイテンシとが均衡するように、前記格納対象データのデータサイズと前記性能情報と前記装置情報から、前記ポストプロセス処理で処理対象とする第１のデータサイズと前記インライン処理で処理対象とする第２のデータサイズとを算出し、前記格納対象データの管理情報を有する第１の情報処理装置を前記格納先から特定し、前記格納対象データのうち前記第１のデータサイズのデータを処理対象とする前記ポストプロセス処理の実行を前記第１の情報処理装置に指示し、前記格納対象データのうち前記第２のデータサイズのデータを処理対象とする前記インライン処理の実行をその余の第２の情報処理装置に指示する、
情報処理方法。
【請求項７】
複数の情報処理装置をネットワークを介して接続し、前記情報処理装置が有する記憶装置に、ポストプロセス処理またはインライン処理により重複を排除したデータを分散して格納可能な情報処理システムにおけるデータ管理プログラムであって、
前記情報処理装置を識別可能な装置情報と前記情報処理装置におけるポストプロセス処理およびインライン処理の性能情報とを記憶部に格納し、
格納対象データを格納先に格納する格納指示を受け付け、前記ポストプロセス処理におけるレイテンシと、前記インライン処理におけるレイテンシとが均衡するように、前記格納対象データのデータサイズと前記性能情報と前記装置情報から、前記ポストプロセス処理で処理対象とする第１のデータサイズと前記インライン処理で処理対象とする第２のデータサイズとを算出し、前記格納対象データの管理情報を有する第１の情報処理装置を前記格納先から特定し、前記格納対象データのうち前記第１のデータサイズのデータを処理対象とする前記ポストプロセス処理の実行を前記第１の情報処理装置に指示し、前記格納対象データのうち前記第２のデータサイズのデータを処理対象とする前記インライン処理の実行をその余の第２の情報処理装置に指示する、
処理をコンピュータに実行させるデータ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法およびデータ管理プログラムに関する。
【背景技術】
【０００２】
近年、フラッシュメモリの低価格化や高性能化に伴い、ストレージ装置でＨＤＤ（Hard Disk Drive）の代わりの記憶装置にフラッシュメモリを用いたＳＳＤ（Solid State Drive）を搭載したオールフラッシュアレイ（AFA：All Flash Array）がある。また、ストレージ装置の専用のハードウェアを用いずに、汎用の情報処理装置や汎用のＯＳを使用したストレージ装置であるＳＤＳ（Software Defined Storage）の開発がすすんでいる。
【０００３】
ＡＦＡとＳＤＳを組み合わせ、複数の情報処理装置でストレージ装置を実現したマルチノードストレージ装置がある。マルチノードストレージ装置は、複数の情報処理装置（ノード）間をＩｎｆｉｎｉＢａｎｄで接続し、データの格納を要求するサーバとの間をファイバチャネルで接続し、各ノードが備える記憶装置で分散してデータを記憶するストレージ装置である。
【０００４】
ＡＦＡで用いられるＳＳＤは、ＨＤＤと比較してアクセス速度が高速であるという利点があるが、書込み回数に上限があり装置寿命が短いという欠点がある。また、ＳＳＤは、ＨＤＤと比較してデータ容量当たりの単価が高いという欠点がある。ＳＳＤの欠点を補う技術として重複排除（De-duplication）の技術が用いられる。
【０００５】
重複排除は、同じデータを重複して記憶装置に書き込まない技術である。重複排除の処理は、記憶する対象データのハッシュ値を求め、同じハッシュ値のデータが既に記憶装置に記憶されているか否かを判定し、記憶されている場合は対象データを記憶せず、記憶されていない場合は対象データを記憶する処理である。なお、ハッシュ値を求める方法として、ＳＨＡ−１（Secure Hash Algorithm−１）などのハッシュ関数を用いる方法がある。ＡＦＡにおいては、重複排除の技術を用いることにより、書込み回数を減らしてＳＳＤの装置寿命を延ばすとともに、データ容量当たりの単価を下げることが可能である。
【０００６】
重複排除を記憶装置で用いる技術として、インライン方式（以下、インライン処理と記載する）と、ポストプロセス方式（以下、ポストプロセス処理と記載する）がある。インライン処理は、記憶装置にデータを書き込む前にデータの重複排除を行う処理である。ポストプロセス処理は、記憶装置にデータを書き込んだ後でデータの重複排除を行う処理である。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２０１６／０８８２５８号
【特許文献２】国際公開第２０１５／０９７７５６号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
インライン処理は、書き込む前のデータを重複排除し、記憶装置にデータを書き込んだ後で書き込み完了の応答を行うため、重複排除の処理時間が含まれる分レイテンシ（書き込みを要求から結果を返すまでの応答時間）がポストプロセス処理よりも長い。
【０００９】
ポストプロセス処理は、書き込み完了の応答後に記憶装置に書き込んだデータを重複排除するため、重複排除の処理時間が応答時間に含まれずレイテンシがインライン処理よりも短い。しかしながら、マルチノードストレージ装置において、重複排除してデータを記憶する際に全てのノードでポストプロセス処理を実行することで性能向上が図れるとは限らない。この理由は、ポストプロセス処理をマルチノードストレージ装置で実行すると、記憶装置に格納する前のデータのキャッシュページや記憶装置に格納したデータを指すポインタを更新するためのノード間通信が増加し、これに伴う負荷が高くなるためである。
【００１０】
一側面では、本発明は、データを記憶装置に格納する際における重複排除の処理に伴うレイテンシを抑制しつつ情報処理装置間における通信の負荷を抑制できる情報処理装置、情報処理方法およびデータ管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、以下に示すような情報処理装置を提供する。情報処理装置は、複数の情報処理装置をネットワークを介して接続し、情報処理装置が有する記憶装置に、ポストプロセス処理またはインライン処理により重複を排除したデータを分散して格納可能な情報処理システムにおける一の情報処理装置である。情報処理装置は、記憶部と、制御部とを備える。記憶部は、情報処理装置を識別可能な装置情報と情報処理装置におけるポストプロセス処理およびインライン処理の性能情報とを格納する。制御部は、格納対象データを格納先に格納する格納指示を受け付け、ポストプロセス処理におけるレイテンシとインライン処理におけるレイテンシとが均衡するように、格納対象データのデータサイズと性能情報と装置情報から、ポストプロセス処理で処理対象とする第１のデータサイズとインライン処理で処理対象とする第２のデータサイズとを算出し、格納対象データの管理情報を有する第１の情報処理装置を格納先から特定し、格納対象データのうち第１のデータサイズのデータを処理対象とするポストプロセス処理の実行を第１の情報処理装置に指示し、格納対象データのうち第２のデータサイズのデータを処理対象とするインライン処理の実行をその余の第２の情報処理装置に指示する。
【発明の効果】
【００１２】
一態様によれば、データを記憶装置に格納する際における重複排除の処理に伴うレイテンシを抑制しつつ情報処理装置間における通信の負荷を抑制できる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施形態の情報処理システムの構成の一例を示す図である。
【図２】第２の実施形態のストレージシステムの構成の一例を示す図である。
【図３】第２の実施形態のストレージ装置のハードウェア構成の一例を示す図である。
【図４】第２の実施形態のアドレスとデータとのマッピングの概要を示す図である。
【図５】第２の実施形態のストレージ装置間のシーケンスの一例を示す図である。
【図６】第２の実施形態のインライン処理のシーケンスの一例を示す図である。
【図７】第２の実施形態のポストプロセス処理のシーケンスの一例を示す図である。
【図８】第２の実施形態のレイテンシと書き込みデータサイズの関係の一例を示す図である。
【図９】第２の実施形態のデータ書き込み処理のフローチャートを示す図である。
【図１０】第３の実施形態のデータ書き込み処理のフローチャートを示す図である。
【図１１】第４の実施形態のデータ書き込み処理のフローチャートを示す図である。
【図１２】第５の実施形態のデータ書き込み処理のフローチャートを示す図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照して実施の形態を詳細に説明する。
［第１の実施形態］
まず、第１の実施形態の情報処理システムについて図１を用いて説明する。図１は、第１の実施形態の情報処理システムの構成の一例を示す図である。
【００１５】
情報処理システム５０は、情報処理装置１０，２０，３０，…とサーバ４０がネットワーク４５を介して接続したシステムである。情報処理システム５０は、情報処理装置１０，２０，３０，…が有する記憶装置１３ａ，１３ｂ，２３ａ，２３ｂ，３３ａ，３３ｂ，…に、ポストプロセス処理またはインライン処理により重複を排除したデータを分散して格納可能なシステムである。情報処理システム５０において、サーバ４０は、格納対象データの格納を情報処理装置１０に指示する。情報処理装置１０は、記憶装置１３ａ，１３ｂ，２３ａ，２３ｂ，３３ａ，３３ｂ，…に重複を排除したデータを分散して格納するよう、情報処理装置２０，３０に指示する。
【００１６】
ここで、情報処理装置１０は、サーバ４０から格納対象データを格納する格納指示を受けた情報処理装置である。格納指示は、格納対象データの格納先である記憶装置１３ａ，…のアドレス情報を含む。情報処理装置２０，３０は、情報処理装置１０からデータをポストプロセス処理またはインライン処理で格納する指示を受けた情報処理装置である。
【００１７】
情報処理装置１０，２０，３０は、記憶装置を備えた情報処理装置であり、たとえば、ストレージ装置として稼動するサーバや、フラッシュストレージ装置や、ＳＤＳ（Software Defined Storage）である。
【００１８】
情報処理装置１０は、記憶部１１と、制御部１２と、データを格納可能な１以上の記憶装置１３ａ，１３ｂ，…を含む。
記憶部１１は、装置情報１１ａと性能情報１１ｂとを記憶可能であり、たとえば、ＲＡＭ（Random Access Memory）などの各種メモリである。装置情報１１ａは、複数の情報処理装置１０，…のうち格納対象データを分散格納する処理を実行する情報処理装置を特定可能な情報である。たとえば、装置情報１１ａは、ポストプロセス処理またはインライン処理の実行対象となる情報処理装置である実行対象装置を特定可能な情報である。
【００１９】
性能情報１１ｂは、情報処理装置１０，…におけるポストプロセス処理およびインライン処理の性能情報である。性能情報１１ｂは、情報処理装置１０，…においてポストプロセス処理およびインライン処理を実行した性能値から特定可能な情報である。記憶部１１は、性能情報１１ｂを予め格納する。
【００２０】
制御部１２は、サーバ４０から格納対象データを格納する格納指示を受け、所定のデータサイズを算出する。制御部１２は、所定のデータサイズに分けた格納対象データを処理対象とするポストプロセス処理またはインライン処理の実行を情報処理装置２０，３０に指示する。
【００２１】
記憶装置１３ａ，１３ｂ，…は、データを格納する装置であり、たとえば、ＳＳＤやＨＤＤである。記憶装置１３ａ，１３ｂ，…は、ＲＡＩＤ（Redundant Arrays of Independent Disks）構成をとることができる。
【００２２】
制御部１２は、格納指示受付制御１２ａと、データサイズ算出制御１２ｂと、データ処理制御１２ｃとを行う。
格納指示受付制御１２ａは、サーバ４０から格納対象データを格納先に格納する格納指示を受け付ける制御である。格納指示は、格納対象データを格納する命令であり、たとえば、ライトコマンドである。格納先は、記憶装置１３ａ，…における格納対象データの格納位置を特定可能な情報であり、たとえば、アドレス情報である。
【００２３】
データサイズ算出制御１２ｂは、ポストプロセス処理におけるレイテンシと、インライン処理におけるレイテンシとが均衡するように、第１のデータサイズと第２のデータサイズとを算出する制御である。第１のデータサイズは、ポストプロセス処理で処理対象とするデータサイズである。第２のデータサイズは、インライン処理で処理対象とするデータサイズである。第１のデータサイズと第２のデータサイズは、格納対象データのデータサイズと、性能情報１１ｂと、装置情報１１ａとから算出される。
【００２４】
データ処理制御１２ｃは、ポストプロセス処理を実行する情報処理装置２０を特定し、第１のデータサイズのデータを処理対象とするポストプロセス処理の実行を情報処理装置２０に指示する制御である。情報処理装置２０は、格納指示に含まれる格納先から特定される。情報処理装置２０は、格納対象データの管理情報２１ａを有する情報処理装置である。また、データ処理制御１２ｃは、第２のデータサイズのデータを処理対象とするインライン処理の実行をその余の情報処理装置３０に指示する制御である。その余の情報処理装置３０とは、情報処理システム５０に含まれる複数の情報処理装置のうち、格納先から特定された情報処理装置２０以外の情報処理装置である。
【００２５】
情報処理装置２０は、記憶部２１と、制御部２２と、データを格納可能な１以上の記憶装置２３ａ，２３ｂ，…を含む。記憶部２１は、管理情報２１ａを格納可能であり、ＲＡＭなどの各種メモリである。管理情報２１ａは、格納対象データの格納先を示すアドレス情報と格納対象のデータの格納先を指すポインタ情報とを含む情報である。
【００２６】
制御部２２は、情報処理装置１０からポストプロセス処理の実行の指示を受け、第１のデータサイズのデータを処理対象とするポストプロセス処理を実行する。記憶装置２３ａ，２３ｂ，…は、記憶装置１３ａ，１３ｂ，…と同様である。
【００２７】
情報処理装置３０は、制御部３２と、データを格納可能な１以上の記憶装置３３ａ，３３ｂ，…を含む。なお、情報処理装置３０における記憶部の記載は省略する。制御部３２は、情報処理装置１０からインライン処理の実行の指示を受け、第２のデータサイズのデータを処理対象とするインライン処理を実行する。記憶装置３３ａ，３３ｂ，…は、記憶装置１３ａ，１３ｂ，…と同様である。
【００２８】
ここで、情報処理装置１０が格納対象データを格納する処理について説明する。
制御部１２は、サーバ４０から格納対象データを格納先に格納する格納指示を受け付ける（格納指示受付制御１２ａ）。
【００２９】
制御部１２は、格納対象データのデータサイズと、性能情報１１ｂと、装置情報１１ａから、第１のデータサイズと第２のデータサイズとを算出する（データサイズ算出制御１２ｂ）。この際に、制御部１２は、ポストプロセス処理におけるレイテンシと、インライン処理におけるレイテンシとが均衡するように、第１のデータサイズと第２のデータサイズを算出する（データサイズ算出制御１２ｂ）。
【００３０】
制御部１２は、情報処理装置２０を格納先から特定する（データ処理制御１２ｃ）。具体的には、制御部１２は、格納先（たとえば、アドレス情報）を含む管理情報２１ａを備える情報処理装置を特定する（データ処理制御１２ｃ）。制御部１２は、ポストプロセス処理の実行を情報処理装置２０に指示する（データ処理制御１２ｃ）。制御部１２は、インライン処理の実行を情報処理装置３０に指示する（データ処理制御１２ｃ）。制御部１２は、格納対象データを第１のデータサイズのデータと第２のデータサイズのデータとに分け、第１のデータサイズのデータをポストプロセス処理での処理対象とする（データ処理制御１２ｃ）。また、制御部１２は、第２のデータサイズのデータをインライン処理における処理対象とする（データ処理制御１２ｃ）。
【００３１】
情報処理装置２０は、情報処理装置１０からポストプロセス処理の実行の指示を受け、第１のデータサイズのデータを処理対象とするポストプロセス処理を実行する。情報処理装置２０は、ポストプロセス処理の処理完了通知を情報処理装置１０に送信する。
【００３２】
情報処理装置３０は、情報処理装置１０からインライン処理の実行の指示を受け、第２のデータサイズのデータを処理対象とするインライン処理を実行する。情報処理装置３０は、インライン処理の処理完了通知を情報処理装置１０に送信する。
【００３３】
情報処理装置１０は、情報処理装置２０，３０それぞれから処理完了通知を受信する。情報処理装置１０は、格納対象データの格納が完了した旨の応答をサーバ４０に送信する。
【００３４】
このように、情報処理装置１０は、ポストプロセス処理におけるレイテンシとインライン処理におけるレイテンシとが均衡するようにデータサイズを求め、情報処理装置１０，…で分散してデータを格納することで、レイテンシを抑制することができる。具体的には、レイテンシがインライン処理よりも短いポストプロセス処理が、インライン処理よりも多くのデータを処理するように、データサイズに重み付けをして分散処理を実行することで、情報処理システム５０全体としてレイテンシの抑制を図る。
【００３５】
また、情報処理装置１０は、管理情報２１ａを有する情報処理装置２０を格納先から特定しポストプロセス処理の実行を指示する。これにより、情報処理装置１０は、管理情報２１ａを備える情報処理装置２０においてポストプロセス処理を実行させる。情報処理装置２０が備える管理情報２１ａは、格納対象データの格納先を指すポインタ情報を含む。これにより、情報処理装置１０は、ポストプロセス処理を実行する際に生じるポインタ情報を更新するために生じる情報処理装置１０，…間の通信の負荷の抑制を図る。
【００３６】
こうして、情報処理システム５０は、データを記憶装置に格納する際における重複排除の処理に伴うレイテンシを抑制しつつ情報処理装置間の通信の負荷を抑制できる情報処理装置、情報処理方法およびデータ管理プログラムを提供できる。
【００３７】
［第２の実施形態］
次に、第２の実施形態として情報処理装置１０，…をストレージ装置に適用したストレージシステムについて図２を用いて説明する。図２は、第２の実施形態のストレージシステムの構成の一例を示す図である。
【００３８】
ストレージシステム４００は、サーバ３００と、ネットワーク３５０を介してサーバ３００と接続するマルチノードストレージ装置１００とを備える。
ストレージシステム４００は、サーバ３００がデータの書き込みの要求をマルチノードストレージ装置１００に送信し、マルチノードストレージ装置１００が受信したデータを重複排除し記憶装置に記憶する。ストレージシステム４００において、ネットワーク３５０としてＦｉｂｅｒＣｈａｎｎｅｌ、ネットワーク３６０としてＩｎｆｉｎｉＢａｎｄを用いることができるが、これらは一例であり、その他のネットワークでもよい。
【００３９】
サーバ３００は、ネットワーク３５０を介してマルチノードストレージ装置１００に対し、データの読み出しや書き込みを要求するコンピュータである。
マルチノードストレージ装置１００は、複数のストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…を備える。ストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…は、専用のストレージ装置であってもよいし、ＳＤＳ（Software Defined Storage）でもよい。ストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…は、ネットワーク３５０を介してサーバ３００からデータやデータ書き込み処理の命令を受信し、データ書き込み処理に対する応答を送信する。ストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…は、ネットワーク３６０を介してストレージ装置間でデータやデータ格納の指示を送受信する。また、ストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…は、受信したデータを記憶装置に記憶する。
【００４０】
マルチノードストレージ装置１００は、サーバ３００からのデータ入出力（Ｉ／Ｏ）要求に応じて、マルチノードストレージ装置１００の各ストレージ装置１００ａ，…が備える記憶装置に対するＩ／Ｏを制御する。たとえば、マルチノードストレージ装置１００に含まれるストレージ装置１００ａがサーバ３００からデータおよび書き込み命令を受信した場合、ストレージ装置１００ａが各ストレージ装置１００ｂ，…に受信したデータおよびデータ書き込み命令を送信する。
【００４１】
サーバ３００およびマルチノードストレージ装置１００が送受信するＩ／Ｏを要求する命令（コマンド）は、たとえばＳＡＭ（SCSI Architecture Model）、ＳＰＣ（SCSI Primary Commands）、ＳＢＣ（SCSI Block Commands）などで規定されている。コマンドに関する情報は、たとえばＣＤＢ（Command Description Block）に記述される。データの読み出しや書き込みに関するコマンドとして、たとえばＲｅａｄコマンドや、Ｗｒｉｔｅコマンドなどがある。コマンドは、読み出しや書き込みの対象とするデータが記憶されているＬＵＮ（Logical Unit Number）やＬＢＡ（Logical Block Address）、読み出しや書き込みの対象とするデータのブロック数などを含めることができる。
【００４２】
以上のようなシステムの構成によって、第２〜第５の実施形態の処理機能を実現できる。なお、第１の実施形態に示した情報処理システム５０も図２に示したストレージシステム４００と同様のシステムにより実現できる。
【００４３】
次に、ストレージ装置１００ａのハードウェア構成について図３を用いて説明する。図３は、第２の実施形態のストレージ装置のハードウェア構成の一例を示す図である。
ストレージ装置１００ａは、コントローラモジュール１２１と、記憶部１２２を含む。ストレージ装置１００ａは、複数のコントローラモジュール１２１と複数の記憶部１２２を備えてもよい。なお、ストレージ装置１００ｂ，１００ｃ，１００ｄ，…も、同様のハードウェアで実現できる。
【００４４】
コントローラモジュール１２１は、ホストインタフェース１１４と、プロセッサ１１５と、ＲＡＭ１１６と、ＨＤＤ（Hard Disk Drive）１１７と、機器接続インタフェース１１８と、記憶部インタフェース１１９を含む。
【００４５】
コントローラモジュール１２１は、プロセッサ１１５によって装置全体が制御されている。プロセッサ１１５には、バスを介してＲＡＭ１１６と複数の周辺機器が接続されている。プロセッサ１１５は、２以上のプロセッサからなるマルチコアプロセッサであってもよい。なお、コントローラモジュール１２１が複数ある場合、コントローラモジュール１２１は主従関係を定め、主となるコントローラモジュール１２１のプロセッサ１１５が従となるコントローラモジュール１２１およびストレージ装置１００ａ全体を制御してもよい。
【００４６】
プロセッサ１１５は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。
【００４７】
ＲＡＭ１１６は、コントローラモジュール１２１の主記憶装置として使用される。ＲＡＭ１１６は、複数のメモリチップを搭載したものでもよく、たとえば、ＤＩＭＭ（Dual Inline Memory Module）でもよい。ＲＡＭ１１６には、プロセッサ１１５に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時格納される。また、ＲＡＭ１１６には、プロセッサ１１５による処理に必要な各種データが格納される。また、ＲＡＭ１１６は、プロセッサ１１５のキャッシュメモリとして機能する。また、ＲＡＭ１１６は、記憶装置１３０ａ，１３０ｂ，…に書き込む前のデータを一時的に保存するキャッシュメモリとしても機能する。
【００４８】
バスに接続されている周辺機器としては、ホストインタフェース１１４、ＨＤＤ１１７、機器接続インタフェース１１８、および記憶部インタフェース１１９がある。ホストインタフェース１１４は、ネットワーク２５０を介してサーバ３００との間でデータの送受信を行う。
【００４９】
ＨＤＤ１１７は、内蔵したディスク媒体に対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１１７は、ストレージ装置１００ａの補助記憶装置として使用される。ＨＤＤ１１７には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することができる。
【００５０】
機器接続インタフェース１１８は、コントローラモジュール１２１に周辺機器やネットワーク３６０を接続するための通信インタフェースである。たとえば機器接続インタフェース１１８には、図示しないメモリ装置やメモリリーダライタを接続することができる。メモリ装置は、機器接続インタフェース１１８との通信機能を搭載した記録媒体である。メモリリーダライタは、メモリカードへのデータの書き込み、またはメモリカードからのデータの読み出しを行う装置である。メモリカードは、たとえば、カード型の記録媒体である。
【００５１】
また、機器接続インタフェース１１８は、図示しない光学ドライブ装置を接続してもよい。光学ドライブ装置は、レーザ光などを利用して、光ディスクに記録されたデータの読み取りを行う。光ディスクは、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。記憶部インタフェース１１９は、記憶部１２２との間でデータの送受信を行う。コントローラモジュール１２１は、記憶部インタフェース１１９を介して記憶部１２２と接続する。
【００５２】
記憶部１２２は、１以上の記憶装置１３０ａ，１３０ｂ，…を備え、コントローラモジュール１２１からの指示に基づきデータを格納する。記憶装置１３０ａ，１３０ｂ，…は、データを記憶する装置であり、たとえば、ＳＳＤ（Solid State Drive）である。
【００５３】
１以上の論理ボリューム１４０ａ，１４０ｂ，…は、記憶装置１３０ａ，１３０ｂ，…に設定される。なお、論理ボリューム１４０ａ，１４０ｂ，…は、複数の記憶装置１３０ａ，１３０ｂ，…に跨って設定されてもよい。記憶装置１３０ａ，１３０ｂ，…に格納されたデータは、ＬＵＮおよびＬＢＡなどのアドレス情報によって特定できる。
【００５４】
以上のようなハードウェア構成によって、ストレージ装置１００ａの処理機能を実現することができる。
ストレージ装置１００ａは、たとえば、コンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、ストレージ装置１００ａの処理機能を実現する。ストレージ装置１００ａに実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。たとえば、ストレージ装置１００ａに実行させるプログラムをＨＤＤ１１７に格納しておくことができる。プロセッサ１１５は、ＨＤＤ１１７内のプログラムの少なくとも一部をＲＡＭ１１６にロードし、プログラムを実行する。また、ストレージ装置１００ａに実行させるプログラムを、光ディスク、メモリ装置、メモリカードなどの可搬型記録媒体に記録しておくことができる。可搬型記録媒体に格納されたプログラムは、たとえばプロセッサ１１５からの制御により、ＨＤＤ１１７にインストールされた後、実行可能となる。またプロセッサ１１５は、可搬型記録媒体から直接プログラムを読み出して実行することができる。
【００５５】
以上のようなハードウェア構成によって、第２〜第５の実施形態の処理機能を実現できる。なお、第１の実施形態に示した情報処理装置１０も図３に示したストレージ装置１００ａと同様のハードウェアにより実現できる。
【００５６】
次に、第２の実施形態のアドレスとデータとのマッピングについて図４を用いて説明する。図４は、第２の実施形態のアドレスとデータとのマッピングの概要を示す図である。
アドレスとデータとのマッピングは、データを指すポインタを用いたツリー構造で表されるアドレスとデータとの対応関係である。アドレスは、記憶装置１３０ａ，１３０ｂ，１３０ｃ，１３０ｄ，…に記憶するデータのアドレス（ＬＢＡ）である。なお、既に記憶されたデータを読み出す場合もアドレスを用いるが、ここでは、ストレージ装置１００ａがデータをサーバ３００から受信し、ストレージ装置１００ｂがデータを記憶する書き込み処理について説明する。なお、ストレージ装置１００ａ，１００ｂ，…は、サーバ３００から受信したデータを所定のサイズに区切った単位データを記憶装置１３０ａ，１３０ｂ，１３０ｃ，１３０ｄ，…に記憶する。単位データは、各ストレージ装置１００ａ，１００ｂ，…における処理単位である。各ストレージ装置１００ａ，…は、単位データ毎にハッシュ値を計算し、単位データ毎に重複排除を実行する。
【００５７】
ストレージ装置１００ａにおけるツリー構造は、アドレステーブル２００ａと、ポインタテーブル２１０ａ，２１０ｂ，…と、リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…と、データ２５０ａ，２５０ｂ，…とをリンクで繋ぐことにより構成される。ストレージ装置１００ｂにおけるツリー構造は、アドレステーブル２００ｂと、ポインタテーブル２１０ｃ，２１０ｄ，…と、リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…と、データ２５０ｃ，２５０ｄ，…とをリンクで繋ぐことにより構成される。なお、ポインタテーブル２１０ａ，２１０ｂ，２１０ｃ，２１０ｄ，…と、リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…とを繋ぐリンクは、ストレージ装置１００ａ，１００ｂ，…間を跨ぐ場合がある。これらのツリー構造を構成するリンクや、各テーブルや、リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…は、ストレージ装置１００ａ，１００ｂ，…のＲＡＭ１１６等のメモリに記憶される。
【００５８】
アドレステーブル２００ａは、データを格納するアドレスとポインタテーブル２１０ａ，２１０ｂ，…との対応関係を管理するテーブルである。アドレステーブル２００ａは、アドレスに対応するポインタテーブル２１０ａ，２１０ｂ，…を指すポインタを含む。言い換えると、アドレステーブル２００ａがＬＢＡ「０」から「１０２３」に対応する場合、ストレージ装置１００ａは、ＬＢＡ「０」から「１０２３」に記憶されたデータを辿るツリー構造のルートを記憶するストレージ装置である。また、アドレステーブル２００ｂは、データを格納するアドレスとポインタテーブル２１０ｃ，２１０ｄ，…との対応関係を管理するテーブルである。アドレステーブル２００ｂは、アドレスに対応するポインタテーブル２１０ｃ，２１０ｄ，…を指すポインタを含む。言い換えると、アドレステーブル２００ｂがＬＢＡ「１０２４」から「２０４７」に対応する場合、ストレージ装置１００ｂは、ＬＢＡ「１０２４」から「２０４７」に記憶されたデータを辿るツリー構造のルートを記憶するストレージ装置である。
【００５９】
アドレステーブル２００ａ，２００ｂ，…は、アドレスが連続するようにストレージ装置１００ａ，１００ｂ，…毎に存在する。たとえば、ストレージ装置１００ａがＬＢＡ「０」から「１０２３」までに対応するアドレステーブル２００ａを備え、ストレージ装置１００ｂがＬＢＡ「１０２４」から「２０４７」までに対応するアドレステーブル２００ｂを備える。言い換えると、格納するデータのアドレスに応じて、ツリー構造のルートであるアドレステーブル２００ａ，２００ｂ，…が定まり、アドレステーブル２００ａ，２００ｂ，…を備えるストレージ装置１００ａ，１００ｂ，…も定まる。
【００６０】
ポインタテーブル２１０ａ，２１０ｂ，…は、アドレステーブル２００ａと、リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…との対応関係を管理するテーブルである。ポインタテーブル２１０ａ，２１０ｂ，…は、リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…を指すポインタを含む。ポインタテーブル２１０ｃ，２１０ｄ，…は、アドレステーブル２００ｂと、リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…との対応関係を管理するテーブルである。ポインタテーブル２１０ｃ，２１０ｄ，…は、リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…を指すポインタを含む。ポインタテーブル２１０ａ，２１０ｂ，２１０ｃ，２１０ｄ，…は、アドレステーブル２００ａ，２００ｂ，…と対応して、ストレージ装置１００ａ，１００ｂ，…毎に備えられる。
【００６１】
リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…は、ポインタテーブル２１０ａ，２１０ｂ，２１０ｃ，２１０ｄ，…と、データ２５０ａ，２５０ｂ，２５０ｃ，２５０ｄ，…との対応関係を管理するテーブルである。リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…は、記憶装置１３０ａ，１３０ｂ，１３０ｃ，１３０ｄ，…に記憶するデータを指すポインタを含む。リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…は、各リーフノードがポインタで指すデータを記憶したストレージ装置１００ａ，１００ｂ，…に備えられる。
【００６２】
ハッシュテーブル２３０ａ，２３０ｂ，…は、ハッシュ値とリンクカウンタとを対応づけて管理するテーブルである。ハッシュテーブル２３０ａ，２３０ｂ，…は、ストレージ装置１００ａ，１００ｂ，…毎に備えられる。ハッシュ値は、ストレージ装置１００ａ，１００ｂ，…が記憶するデータ毎にＳＨＡ−１等の関数を用いて求めたデータを一意に識別するための値である。ストレージ装置１００ａ，１００ｂ，…は、ハッシュ値が同一である場合データも同一と判定できる。リンクカウンタは、ポインタテーブル２１０ａ，２１０ｂ，２１０ｃ，２１０ｄ，…からハッシュ値に対応する単位データを指すリーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…へのリンクの数を管理する情報である。リンクカウンタの値は、リーフノード２２０ａ，２２０ｂ，２２０ｃ，２２０ｄ，…がポインタで指すデータが参照される数である。リンクカウンタの値が「０」の場合、ハッシュ値に対応するデータは記憶されていないことを示す。リンクカウンタの値が「１」以上の場合、ハッシュ値に対応するデータは既に記憶されていることを示す。このように、ハッシュテーブル２３０ａ，２３０ｂ，…は、データを重複排除して記憶するためにストレージ装置１００ａ，１００ｂ，…によって用いられる。
【００６３】
ここで、ストレージ装置１００ａがサーバ３００から受信したデータを格納する処理の概要について説明する。
ストレージ装置１００ａは、サーバ３００からデータと書き込み命令を受信する。ここで、受信したデータの書き込み先のアドレスは１６（ＬＢＡ）であるものとする。
【００６４】
ストレージ装置１００ａは、受信したデータを所定サイズ毎に分割して単位データにする。ストレージ装置１００ａは、受信したデータサイズが３２ＫＢであり、所定サイズ（単位データのデータサイズ）が８ＫＢである場合、受信したデータを８ＫＢ毎の４つの単位データに分割する。ストレージ装置１００ａは、ＳＨＡ−１等の関数を用いて、分割データ毎にハッシュ値を求める。
【００６５】
ストレージ装置１００ａは、ハッシュ値からデータを記憶するストレージ装置を決定する。たとえば、ストレージ装置１００ａは、ハッシュ値の最初の数字が「１」の場合にデータを記憶するストレージ装置をストレージ装置１００ｂと決定し、ハッシュ値の最初の数字が「２」の場合にデータを記憶するストレージ装置をストレージ装置１００ｃと決定できる。ここで、ストレージ装置１００ａが、データを記憶するストレージ装置をストレージ装置１００ｂに決定したものとする。
【００６６】
ストレージ装置１００ａは、分割した単位データとハッシュ値とをストレージ装置１００ｂに送信する。ここで、ストレージ装置１００ａが、ストレージ装置１００ｂに送信した単位データは、データ２５０ｃであるものとする。
【００６７】
ストレージ装置１００ｂは、単位データとハッシュ値とをストレージ装置１００ａから受信する。ストレージ装置１００ｂは、ハッシュテーブル２３０ｂを参照し、受信したハッシュ値に対応するリンクカウンタを読み出す。
【００６８】
ストレージ装置１００ｂは、リンクカウンタの値が「１」以上の場合、言い換えると、受信したハッシュ値と同一のハッシュ値を有するデータが存在する場合、ツリー構造を更新する指示をストレージ装置１００ａに送信し、リンクカウンタの値を「１」加算する。
【００６９】
ここで、データ２５０ｃに対応するリーフノード２２０ｃに、既にポインタテーブル２１０ｃからリンクが繋がっているため、ストレージ装置１００ｂは、データ２５０ｃのハッシュ値に対応するリンクカウンタの値を「１」から「２」に更新する。また、ストレージ装置１００ｂは、リーフノード２２０ｃに対するツリー構造を更新する指示をストレージ装置１００ａに送信する。
【００７０】
ストレージ装置１００ａは、ツリー構造を更新する指示を受信したことに伴い、リンク２８０ａ，２８０ｂを繋ぐ。言い換えると、格納するデータのアドレス（ＬＢＡ）に対応するアドレステーブル２００ａを備えるストレージ装置１００ａが、データにアクセスするツリー構造のリンクを更新する。サーバ３００は、アドレステーブル２００ａからリンク２８０ａ，２８０ｂを辿ることで、リーフノード２２０ｃがポインタで指すデータ２５０ｃにアクセスできる。
【００７１】
こうして、ストレージ装置１００ａ，１００ｂ，…は、既に記憶されたデータと同一のデータを新たに記憶することなく、重複排除したデータの書き込み命令を実行できる。
なお、各ストレージ装置１００ａ，１００ｂ…で、分担してデータを記憶する処理の詳細については後で図５を用いて説明する。
【００７２】
次に、第２の実施形態のストレージ装置間のシーケンスについて図５を用いて説明する。図５は、第２の実施形態のストレージ装置間のシーケンスの一例を示す図である。
マルチノードストレージ装置１００が備えるストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ間で実行される処理のシーケンスについて説明する。
【００７３】
以下、サーバ３００からデータを受信するストレージ装置１００ａを、データ受信ノード１００ａと記載する。また、インライン処理を実行するストレージ装置１００ｂ，１００ｃを、インライン実行ノード１００ｂ，１００ｃと記載する。また、ポストプロセス処理を実行するストレージ装置１００ｄを、ポストプロセス実行ノードと記載する。また、マルチノードストレージ装置１００に含まれるストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…を適宜ノードと記載する。
【００７４】
ストレージ装置１００ａが実行する処理は、ストレージ装置１００ａが備える制御部（プロセッサ１１５）が実行する。ストレージ装置１００ｂが実行する処理は、ストレージ装置１００ｂが備える制御部（プロセッサ１１５）が実行する。ストレージ装置１００ｃが実行する処理は、ストレージ装置１００ｃが備える制御部（プロセッサ１１５）が実行する。ストレージ装置１００ｄが実行する処理は、ストレージ装置１００ｄが備える制御部（プロセッサ１１５）が実行する。
【００７５】
［ステップＳ１１］データ受信ノード１００ａは、サーバ３００から書き込み命令およびデータを受信する。ここで、データ受信ノード１００ａは、１２８ＫＢのデータを受信したものとする。
【００７６】
［ステップＳ１２］データ受信ノード１００ａは、受信した書き込み命令に含まれるＬＢＡからポストプロセス実行ノードを決定する。ここで、データ受信ノード１００ａは、ストレージ装置１００ｄをポストプロセス実行ノード１００ｄとして決定したものとする。
【００７７】
ここで、データ受信ノード１００ａが受信した書き込み命令に含まれるＬＢＡからポストプロセス実行ノードを決定する理由は、ノード間通信の負荷を抑制するためである。
マルチノードストレージ装置１００においては、通常、ポストプロセス処理を実行するノードと、データ格納前に仮のキャッシュページを作成しデータアクセスのツリー構造を更新するノードと、データを格納するノードとが異なるノードとなる。仮のキャッシュページは、データを格納するノードにおいてキャッシュページを作成する前に、書き込み命令に含まれるＬＢＡから決定したノードによって作成されるキャッシュページである。ポストプロセス処理を実行するノードは、仮のキャッシュページを作成する指示とツリー構造のリンクを更新する指示を送信するため、ＬＢＡから決定したノードに対しノード間通信が必要となる。しかし、ポストプロセス処理を実行するノードとＬＢＡから決定したノードが同一であれば、これらのノード間での仮のキャッシュページの作成と仮のキャッシュページへのアクセスのツリー構造の更新のために必要となるノード間通信を削減できる。
【００７８】
このように、マルチノードストレージ装置１００は、ポストプロセス処理を実行するために必要となるノード間通信を削減することができる。なお、ポストプロセス処理の詳細については、後で図７を用いて説明する。
【００７９】
［ステップＳ１３］データ受信ノード１００ａは、サーバ３００から受信したデータを重み付けして分割する。以下、データ受信ノード１００ａが、サーバ３００から受信したデータを重み付けして分割したデータを、重み付け分割データと記載する。
【００８０】
ここで、データ受信ノード１００ａは、受信した１２８ＫＢのデータを、１６ＫＢ，１６ＫＢ，１６ＫＢ，８０ＫＢの４つの重み付け分割データに分割したものとする。データを重み付けして分割するとは、異なるサイズでデータを分割することを意味する。
【００８１】
データ受信ノード１００ａは、ポストプロセス処理のレイテンシとインライン処理のレイテンシがほぼ同一になるようデータサイズを求めて、重み付けして分割する。データ受信ノード１００ａが、データを重み付けして分割する際の重み付けについては、後で図８を用いて説明する。
【００８２】
また、本シーケンスにおいては、データ受信ノード１００ａがサーバ３００から受信したデータを分割して各ノードで処理を実行する一例を示すが、サーバ３００から受信したデータサイズ等に応じてデータを分割せずに処理する場合もある。データ受信ノード１００ａの処理の詳細については、後で図９，図１０，図１１，図１２を用いて説明する。
【００８３】
［ステップＳ１４］データ受信ノード１００ａは、ステップＳ１３で重み付けして分割したデータを各ノードに送信する。データ受信ノード１００ａは、重み付け分割データのデータサイズが一番大きいデータ（データサイズ８０ＫＢ）とポストプロセス処理の実行命令とをポストプロセス実行ノード１００ｄに送信する。データ受信ノード１００ａは、重み付け分割データのデータサイズが一番大きいデータ以外のデータ（データサイズ１６ＫＢ）とインライン処理の実行命令とをインライン実行ノード１００ｂ，１００ｃに送信する。
【００８４】
［ステップＳ１５］インライン実行ノード１００ｂは、重み付け分割データ（１６ＫＢ）をデータ受信ノード１００ａから受信する。
［ステップＳ１６］インライン実行ノード１００ｃは、重み付け分割データ（１６ＫＢ）をデータ受信ノード１００ａから受信する。
【００８５】
［ステップＳ１７］ポストプロセス実行ノード１００ｄは、重み付け分割データ（８０ＫＢ）をデータ受信ノード１００ａから受信する。
［ステップＳ１８］データ受信ノード１００ａは、重み付け分割データ（１６ＫＢ）を所定のサイズに分割した単位データにし、各単位データについてインライン処理を実行する。たとえば、所定のサイズが８ＫＢである場合、データ受信ノード１００ａは、重み付け分割データ（１６ＫＢ）を単位データ（８ＫＢ）２つに分割し、それぞれについてインライン処理を実行する。
【００８６】
なお、インライン処理の詳細については、後で図６を用いて説明する。
［ステップＳ１９］インライン実行ノード１００ｂは、受信した重み付け分割データ（１６ＫＢ）を所定のサイズに分割した単位データにし、各単位データについてインライン処理を実行する。
【００８７】
［ステップＳ２０］インライン実行ノード１００ｃは、受信した重み付け分割データ（１６ＫＢ）を所定のサイズに分割した単位データにし、各単位データについてインライン処理を実行する。
【００８８】
［ステップＳ２１］ポストプロセス実行ノード１００ｄは、受信した重み付け分割データ（８０ＫＢ）を所定のサイズに分割した単位データにし、各単位データについてポストプロセス処理を実行する。
【００８９】
なお、ポストプロセス処理の詳細については、後で図７を用いて説明する。
［ステップＳ２２］インライン実行ノード１００ｂは、インライン処理の完了通知をデータ受信ノード１００ａに送信する。
【００９０】
［ステップＳ２３］インライン実行ノード１００ｃは、インライン処理の完了通知をデータ受信ノード１００ａに送信する。
［ステップＳ２４］ポストプロセス実行ノード１００ｄは、ポストプロセス処理の完了通知をデータ受信ノード１００ａに送信する。
【００９１】
［ステップＳ２５］データ受信ノード１００ａは、各ノードから完了通知を受信する。
［ステップＳ２６］データ受信ノード１００ａは、サーバ３００に書き込み完了通知を送信する。
【００９２】
このように、マルチノードストレージ装置１００は、サーバ３００から受信したデータを重み付けして分割し、各ノードでインライン処理またはポストプロセス処理を実行できる。マルチノードストレージ装置１００は、ポストプロセス処理のレイテンシとインライン処理のレイテンシがほぼ同一になるようデータサイズを求めて、重み付けして分割することにより、全てノードでインライン処理を実行するよりもレイテンシを短縮できる。
【００９３】
次に、第２の実施形態のインライン処理のシーケンスについて図６を用いて説明する。図６は、第２の実施形態のインライン処理のシーケンスの一例を示す図である。
マルチノードストレージ装置１００が備えるストレージ装置１００ｂ，１００ｃ，１００ｄ間で実行されるインライン処理のシーケンスについて説明する。
【００９４】
以下、インライン処理を実行するストレージ装置１００ｂを、インライン実行ノード１００ｂと記載する。また、単位データを記憶するストレージ装置１００ｃを、データ記憶ノード１００ｃと記載する。また、データにアクセスするためのツリー構造を更新するストレージ装置１００ｄを、ツリー記憶ノード１００ｄと記載する。なお、データ受信ノード１００ａは、受信した書き込み命令に含まれるＬＢＡからツリー記憶ノード１００ｄを決定したものとする。なお、サーバ３００から書き込み命令およびデータを受信するデータ受信ノード１００ａは、図６においては図示を省略するものとする。
【００９５】
ストレージ装置１００ｂが実行する処理は、ストレージ装置１００ｂが備える制御部（プロセッサ１１５）が実行する。ストレージ装置１００ｃが実行する処理は、ストレージ装置１００ｃが備える制御部（プロセッサ１１５）が実行する。ストレージ装置１００ｄが実行する処理は、ストレージ装置１００ｄが備える制御部（プロセッサ１１５）が実行する。
【００９６】
［ステップＳ３１］インライン実行ノード１００ｂは、データ受信ノード１００ａから重み付け分割データとインライン処理の実行命令とを受信する。
［ステップＳ３２］インライン実行ノード１００ｂは、重み付け分割データを単位データに分割する。たとえば、重み付け分割データのデータサイズが１６ＫＢであり、単位データのデータサイズが８ＫＢである場合、インライン実行ノード１００ｂは、重み付け分割データを８ＫＢサイズの単位データ２つに分割する。
【００９７】
［ステップＳ３３］インライン実行ノード１００ｂは、単位データのハッシュ値を計算する。なお、インライン実行ノード１００ｂは、複数の単位データが存在する場合、それぞれの単位データについてハッシュ値を計算する。
【００９８】
［ステップＳ３４］インライン実行ノード１００ｂは、単位データのハッシュ値から、単位データを記憶するデータ記憶ノードを決定する。なお、インライン実行ノード１００ｂは、ステップＳ３３において複数の単位データについてハッシュ値を計算した場合、それぞれのハッシュ値からハッシュ値に対応する単位データを記憶するデータ記憶ノードを決定する。
【００９９】
ここで、インライン実行ノード１００ｂは、単位データを記憶するストレージ装置としてデータ記憶ノード１００ｃを決定したものとする。
［ステップＳ３５］インライン実行ノード１００ｂは、単位データと単位データから求めたハッシュ値とデータ書き込み命令とをデータ記憶ノード１００ｃに送信する。
【０１００】
［ステップＳ３６］データ記憶ノード１００ｃは、単位データと単位データから求めたハッシュ値とデータ書き込み命令とをインライン実行ノード１００ｂから受信する。
［ステップＳ３７］データ記憶ノード１００ｃは、データ記憶ノード１００ｃが備えるハッシュテーブルを参照し、ハッシュテーブルに受信したハッシュ値と同一のハッシュ値が存在しない場合、受信した単位データを格納するアドレスを指すポインタを備えたリーフノードを作成する。
【０１０１】
なお、データ記憶ノード１００ｃは、ハッシュテーブルに受信したハッシュ値と同一のハッシュ値が存在する場合、既に単位データが格納されておりリーフノードも作成されているため本ステップのリーフノード作成を省略する。
【０１０２】
このように、データ記憶ノード１００ｃは、ハッシュ値を用いて単位データごとにデータの重複排除をする。
［ステップＳ３８］データ記憶ノード１００ｃは、受信した単位データを記憶したキャッシュページをデータ記憶ノード１００ｃが備えるＲＡＭ１１６等のメモリに作成する。また、データ記憶ノード１００ｃは、キャッシュページを作成した後、データ記憶ノード１００ｃが備える記憶部１２２に単位データを記憶する。
【０１０３】
なお、データ記憶ノード１００ｃは、既にデータを記憶したキャッシュページが作成されておりデータが記憶部１２２に記憶されている場合、本ステップのキャッシュページ作成およびデータを記憶する処理を省略する。
【０１０４】
［ステップＳ３９］インライン実行ノード１００ｂは、ツリー記憶ノード１００ｄにツリー更新指示を送信する。言い換えると、インライン実行ノード１００ｂは、記憶した単位データを指すポインタを備えたリーフノードへリンクを繋ぐ指示を送信する。
【０１０５】
［ステップＳ４０］ツリー記憶ノード１００ｄは、インライン実行ノード１００ｂからツリー更新指示を受信する。
［ステップＳ４１］ツリー記憶ノード１００ｄは、ステップＳ４０で受信した指示に基づき、データのアドレスに対応するアドレステーブルから記憶した単位データを指すポインタを備えたリーフノードへ辿るリンクを繋ぎ、ツリー構造を更新する。
【０１０６】
［ステップＳ４２］インライン実行ノード１００ｂは、データ受信ノード１００ａに完了通知を送信し、インライン処理を終了する。
次に、第２の実施形態のポストプロセス処理のシーケンスについて図７を用いて説明する。図７は、第２の実施形態のポストプロセス処理のシーケンスの一例を示す図である。
【０１０７】
マルチノードストレージ装置１００が備えるストレージ装置１００ｂ，１００ｄ間で実行されるインライン処理のシーケンスについて説明する。
以下、単位データを記憶するストレージ装置１００ｂを、データ記憶ノード１００ｂと記載する。ポストプロセス処理を実行するストレージ装置１００ｄを、ポストプロセス実行ノード１００ｄと記載する。
【０１０８】
なお、サーバ３００から書き込み命令およびデータを受信するデータ受信ノード１００ａは、図７においては図示を省略するものとする。
ストレージ装置１００ｂが実行する処理は、ストレージ装置１００ｂが備える制御部（プロセッサ１１５）が実行する。ストレージ装置１００ｄが実行する処理は、ストレージ装置１００ｄが備える制御部（プロセッサ１１５）が実行する。
【０１０９】
［ステップＳ５１］ポストプロセス実行ノード１００ｄは、データ受信ノード１００ａから重み付け分割データとポストプロセス処理の実行命令とを受信する。
なお、データ受信ノード１００ａは、受信した書き込み命令に含まれるＬＢＡからツリー記憶ノード１００ｄを決定し、ツリー記憶ノード１００ｄにポストプロセス実行ノード１００ｄとして動作する指示を送信するものとする。ポストプロセス実行ノード１００ｄ自身がツリー記憶ノード１００ｄであるため、キャッシュページのアドレス送信とキャッシュページに記憶するデータの送信とツリー更新指示のためのノード間通信を削減できる。
【０１１０】
［ステップＳ５２］ポストプロセス実行ノード１００ｄは、重み付け分割データを単位データに分割する。たとえば、重み付け分割データのデータサイズが８０ＫＢであり、単位データのデータサイズが８ＫＢである場合、ポストプロセス実行ノード１００ｄは、重み付け分割データを８ＫＢサイズの１０個の単位データに分割する。
【０１１１】
［ステップＳ５３］ポストプロセス実行ノード１００ｄは、単位データそれぞれについてキャッシュページを作成する。
ポストプロセス実行ノード１００ｄは、単位データを記憶装置１３０ａ，…に記憶する前に、単位データにサーバ３００がアクセスできるようにするため、単位データを記憶したキャッシュページをＲＡＭ１１６等のメモリに作成する。なお、本ステップで作成するキャッシュページは、ステップＳ１２で説明した仮のキャッシュページである。
【０１１２】
［ステップＳ５４］ポストプロセス実行ノード１００ｄは、ステップＳ５３で作成したキャッシュページのアドレスを指すようツリー構造を更新する。たとえば、ポストプロセス実行ノード１００ｄは、キャッシュページのアドレスを指すようにポインタテーブルのポインタを更新する。
【０１１３】
［ステップＳ５５］ポストプロセス実行ノード１００ｄは、データ受信ノード１００ａに完了通知を送信する。
［ステップＳ５６］ポストプロセス実行ノード１００ｄは、単位データのハッシュ値を計算する。なお、ポストプロセス実行ノード１００ｄは、複数の単位データが存在する場合、それぞれの単位データについてハッシュ値を計算する。
【０１１４】
［ステップＳ５７］ポストプロセス実行ノード１００ｄは、単位データのハッシュ値から、単位データを記憶するデータ記憶ノードを決定する。なお、ポストプロセス実行ノード１００ｄは、ステップＳ５６において複数の単位データについてハッシュ値を計算した場合、それぞれのハッシュ値からハッシュ値に対応する単位データを記憶するデータ記憶ノードを決定する。
【０１１５】
ここで、ポストプロセス実行ノード１００ｄは、単位データを記憶するストレージ装置としてデータ記憶ノード１００ｂを決定したものとする。
［ステップＳ５８］ポストプロセス実行ノード１００ｄは、単位データと単位データから求めたハッシュ値とデータ書き込み命令とをデータ記憶ノード１００ｂに送信する。
【０１１６】
［ステップＳ５９］データ記憶ノード１００ｂは、単位データと単位データから求めたハッシュ値とデータ書き込み命令とをポストプロセス実行ノード１００ｄから受信する。
［ステップＳ６０］データ記憶ノード１００ｂは、データ記憶ノード１００ｂが備えるハッシュテーブルを参照し、ハッシュテーブルに受信したハッシュ値と同一のハッシュ値が存在しない場合、受信した単位データを格納するアドレスを指すポインタを備えたリーフノードを作成する。
【０１１７】
なお、データ記憶ノード１００ｂは、ハッシュテーブルに受信したハッシュ値と同一のハッシュ値が存在する場合、既に単位データが格納されておりリーフノードも作成されているため本ステップのリーフノード作成を省略する。
【０１１８】
このように、データ記憶ノード１００ｂは、ハッシュ値を用いて単位データごとにデータの重複排除をする。
［ステップＳ６１］データ記憶ノード１００ｂは、受信した単位データを記憶したキャッシュページをデータ記憶ノード１００ｂが備えるＲＡＭ１１６等のメモリに作成する。また、データ記憶ノード１００ｂは、キャッシュページを作成した後、データ記憶ノード１００ｂが備える記憶部１２２に単位データを記憶する。
【０１１９】
なお、データ記憶ノード１００ｂは、既にデータを記憶したキャッシュページが作成されておりデータが記憶部１２２に記憶されている場合、本ステップのキャッシュページ作成およびデータを記憶する処理を省略する。
【０１２０】
［ステップＳ６２］データ記憶ノード１００ｂは、ポストプロセス実行ノード１００ｄにツリー更新指示を送信する。具体的には、データ記憶ノード１００ｂは、ツリー更新指示とともに、記憶した単位データを指すポインタを備えたリーフノードへリンクを繋ぐ指示を送信する。
【０１２１】
［ステップＳ６３］ポストプロセス実行ノード１００ｄは、受信したツリー更新指示に基づき、データのアドレスに対応するアドレステーブルから記憶した単位データを指すポインタを備えたリーフノードへ辿るリンクを繋ぎ、ツリー構造を更新する。
【０１２２】
次に、第２の実施形態のレイテンシと書き込みデータサイズの関係について図８を用いて説明する。図８は、第２の実施形態のレイテンシと書き込みデータサイズの関係の一例を示す図である。
【０１２３】
図８は、サーバ３００とストレージ装置１００ａとの間におけるレイテンシ（μｓ）と書き込みデータサイズ（ＫＢ）との関係を示したグラフである。より具体的には、図８は、１台のノード（ストレージ装置１００ａ）において、複数のデータサイズ（８ＫＢ，１６ＫＢ，…，１２８ＫＢ）の書き込みデータでインライン処理とポストプロセス処理を実行した場合のレイテンシを測定したグラフである。なお、ストレージ装置１００ａは、１台のノードの一例であり、その他のストレージ装置１００ｂ，１００ｃ，…のいずれか１台であってもよい。
【０１２４】
インライン処理は、単位データそれぞれについて重複排除のためハッシュ値を計算し、単位データを記憶装置に記憶した後で書き込み完了通知を送信する処理である。ポストプロセス処理は、単位データそれぞれについてハッシュ値を計算する前に、書き込み完了通知を送信する処理である。このため、１台のストレージ装置１００ａにおいて、同一のデータサイズで書き込み処理を実行した場合、重複排除のための処理時間が含まれないポストプロセス処理のほうがインライン処理よりもレイテンシが短くなる。
【０１２５】
しかし、マルチノードストレージ装置１００に含まれる複数のノードでポストプロセス処理を実行すると、インライン処理を実行する場合よりもノード間（ストレージ装置１００ａ，１００ｂ，…間）での通信回数が多くなるため、負荷は高くなる。
【０１２６】
ポストプロセス処理がインライン処理よりもストレージ間通信の回数が多くなる理由は、ポストプロセス処理ではデータを格納する前にキャッシュページを設けるため、キャッシュページのアドレスをデータ受信ノード１００ａからＬＢＡ決定ノードに通知し、ツリー更新の指示も必要となるからである。また、記憶装置にデータを記憶する前にデータにアクセスするためのキャッシュページを作成するため、キャッシュページ作成のための負荷も増加する。
【０１２７】
このため、マルチノードストレージ装置１００においては、レイテンシが短くノード間通信回数が多いポストプロセス処理と、レイテンシが長くノード間通信回数が少ないインライン処理とを組み合わせることで、装置全体の負荷低減を図る。具体的には、インライン処理とポストプロセス処理のレイテンシがほぼ同一となるサイズにデータを重み付けして分割し、インライン処理ノードとポストプロセス処理ノードで処理を分担し、マルチノードストレージ装置１００における全体のレイテンシ低減を図る。
【０１２８】
サーバ３００がマルチノードストレージ装置１００に送信した書き込みデータのサイズＤは、次の式（１）のように表される。ここで、インライン処理ノードに割当てるデータサイズはＨ、ポストプロセス処理ノードに割当てるデータサイズはＬで表される。また、マルチノードストレージ装置１００に含まれるノード数はｎで表される。ノード数は、サーバ３００から受信したデータを処理対象として格納するストレージ装置の数である。なお、ノード数は、物理的な台数に限られず、ストレージ装置を識別可能な識別情報の数であってもよいし、ストレージ装置の機能を実現する仮想マシンの数であってもよいし、その他データを格納する機能の数であってもよい。
【０１２９】
なお、以下の式において、条件（Ａ）と条件（Ｂ）を満たすＨおよびＬの値を求めるものとする。条件（Ａ）１台のノードがポストプロセス処理を実行し、他のノードがインライン処理を実行する。条件（Ｂ）インライン処理を実行する複数のノードとポストプロセス処理を実行する１台のノードとでレイテンシｔが同一の値となるデータサイズを求めるものとする。
【０１３０】
【数１】
2018106636.tif 000003
【０１３１】
また、レイテンシｔは、ポストプロセス処理におけるレイテンシと書き込みデータサイズの近似直線の傾きａL、ポストプロセス処理の近似直線の切片ｂLを用いて、次の式（２）のように表される。
【０１３２】
【数２】
2018106636.tif 000004
【０１３３】
また、レイテンシｔは、インライン処理におけるレイテンシと書き込みデータサイズの近似直線の傾きａH、インライン処理の近似直線の切片ｂHを用いて、次の式（３）のように表される。
【０１３４】
【数３】
2018106636.tif 000005
【０１３５】
Ｈは、式（１）、式（２）、式（３）より、次の式（４）のように表される。
【０１３６】
【数４】
2018106636.tif 000006
【０１３７】
Ｌは、式（１）、式（２）、式（３）より、次の式（５）のように表される。
【０１３８】
【数５】
2018106636.tif 000007
【０１３９】
このようにして、ＨおよびＬの値が求められる。なお、ノード数が「４」であり、Ｄが１２８ＫＢである場合に、Ｈを１６ＫＢとし、Ｌを８０ＫＢとした例（図８のグラフの点線で示した部分）については、図５で示した通りである。
【０１４０】
また、上述の各式は、マルチノードストレージ装置１００において、１台のノードがポストプロセス処理を実行し、他のノードがインライン処理を実行する場合の一例に過ぎない。マルチノードストレージ装置１００において、インライン処理を実行するノード数とポストプロセス処理を実行するノード数とを変更する場合、ノード数の変更に伴い式（１）を変更することでＨおよびＬの値を求めてもよい。また、マルチノードストレージ装置１００の運用に応じて条件を変更し、その他の方法でＨおよびＬの値を求めてもよい。
【０１４１】
なお、マルチノードストレージ装置１００に含まれる各ノードは、ＨおよびＬの算出に必要となるデータ（ノード数、レイテンシの値、ａH、ｂH、ａL、ｂL）を予めＨＤＤ１１７等の記憶部に記憶しており、これらのデータを用いてＨおよびＬを算出できる。
【０１４２】
次に、第２の実施形態のデータ書き込み処理のフローチャートについて図９を用いて説明する。図９は、第２の実施形態のデータ書き込み処理のフローチャートを示す図である。
【０１４３】
データ書き込み処理は、マルチノードストレージ装置１００がサーバ３００からデータを受信し、マルチノードストレージ装置１００が備える１以上のノードでインライン処理またはポストプロセス処理を実行し、データを書き込む処理である。
【０１４４】
マルチノードストレージ装置１００が備えるストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…のうち、サーバ３００からデータを受信したストレージ装置がデータ書き込み処理を実行する。ここで、ストレージ装置１００ａがサーバ３００からデータを受信したものとし、ストレージ装置１００ａがデータ書き込み処理を実行する。なお、ストレージ装置１００ｂ，１００ｃ，１００ｄ，…も、ストレージ装置１００ａと同様の処理を実行できる。
【０１４５】
ストレージ装置１００ａが備える制御部（プロセッサ１１５）は、サーバ３００からデータを受信し、データ書き込み処理を実行する。
以下、サーバ３００からデータを受信したストレージ装置１００ａを、データ受信ノード１００ａと記載する。また、インライン処理を実行するストレージ装置を、インライン実行ノードと記載する。また、ポストプロセス処理を実行するストレージ装置を、ポストプロセス実行ノードと記載する。
【０１４６】
［ステップＳ７１］データ受信ノード１００ａは、サーバ３００から書き込み命令およびデータを受信する。
［ステップＳ７２］データ受信ノード１００ａは、インライン実行ノードに割当てるデータサイズＨ（以下、データサイズＨと記載する）を算出する。
【０１４７】
データ受信ノード１００ａは、受信したデータのデータサイズと、マルチノードストレージ装置１００が備えるノード数と、予め測定されたレイテンシの値（たとえば、図８）と、式（１）〜式（５）を用いてデータサイズＨを算出する。なお、データサイズＨの算出に必要なデータ（ノード数、レイテンシの値等）は、予めＨＤＤ１１７等の記憶部に記憶されている。データ受信ノード１００ａは、データサイズＨの算出に必要なデータを記憶部から読み出し、データサイズＨを算出する。
【０１４８】
［ステップＳ７３］データ受信ノード１００ａは、データサイズＨが予め定められた閾値より小さいか否かを判定する。データ受信ノード１００ａは、データサイズＨが閾値より小さい場合にステップＳ７４にすすみ、データサイズＨが閾値より小さくはない場合にステップＳ７５にすすむ。
【０１４９】
閾値は、システム管理者がストレージシステム４００の運用に応じて設定することができる値である。閾値は、予めストレージ装置１００ａのＨＤＤ１１７等の記憶部に記憶されている。
【０１５０】
データサイズＨは、受信したデータサイズやノード数等に応じて算出される値であるため、常に複数のノードでデータを分配し処理を実行するのに適した値として算出されるとは限らない。データサイズＨの値によっては、マルチノードストレージ装置１００において、ノード間通信数の増加や、レイテンシが短縮されない等の不適切な処理状態となる場合も発生し得る。
【０１５１】
このため、システム管理者は、データサイズＨが複数のノードにデータを分配および処理をすることが不適切な値となる場合、ステップＳ７４にすすみデータ受信ノード１００ａのみでインライン処理を実行するよう閾値の値を設定できる。
【０１５２】
たとえば、システム管理者が閾値に「０」を設定することで、データ受信ノード１００ａは、ステップＳ７２で算出したデータサイズＨがマイナスの値になる場合は、受信したデータを分割せずに、データ受信ノード１００ａのみでインライン処理を実行する。また、システム管理者は、予め測定されたレイテンシやノード数や受信データとして予測されるデータサイズ等に応じて閾値の値に「０」以外の値（たとえば、「１」や「４」等）を設定できる。
【０１５３】
［ステップＳ７４］データ受信ノード１００ａは、サーバ３００から受信したデータを分割することなく、データ受信ノード１００ａでインライン処理を実行する。
［ステップＳ７５］データ受信ノード１００ａは、サーバ３００から受信した書き込み命令に含まれるＬＢＡからポストプロセス実行ノードを決定する。
【０１５４】
［ステップＳ７６］データ受信ノード１００ａは、ポストプロセス実行ノードに割当てるデータサイズＬ（以下、データサイズＬと記載する）を算出する。
データ受信ノード１００ａは、ステップＳ７２で求めたデータサイズＨとサーバ３００から受信したデータのデータサイズと、式（５）とを用いてデータサイズＬを算出する。なお、データ受信ノード１００ａは、データサイズＬの算出に必要なデータを予めＨＤＤ１１７等の記憶部に記憶している。
【０１５５】
なお、データ受信ノード１００ａは、データサイズＨを単位データの倍数になるよう繰り上げたサイズにしてデータサイズＬを求める。
たとえば、単位データのサイズが８ＫＢであり、データサイズＨが１３．８ＫＢである場合、データ受信ノード１００ａは、データサイズＨの値を８ＫＢの倍数に繰り上げて１６ＫＢとしてデータサイズＬを算出する。データ受信ノード１００ａは、サーバ３００から受信したデータのデータサイズが１２８ＫＢであり、ノード数が４である場合、これらの値を式（５）に代入した以下の式（６）でデータサイズＬを算出する。
【０１５６】
Ｌ＝１２８−（４−１）１６…（６）
式（６）により、データ受信ノード１００ａは、データサイズＬを８０ＫＢと算出できる。
【０１５７】
［ステップＳ７７］データ受信ノード１００ａは、サーバ３００から受信したデータを重み付けして分割する。
言い換えると、データ受信ノード１００ａは、受信したデータを１個のデータサイズＬの重み付け分割データと（ノード数−１）個のデータサイズＨの重み付け分割データとに分割する。たとえば、データ受信ノード１００ａは、ノード数が「４」である場合、サーバ３００から受信したデータを１個のデータサイズＬの重み付け分割データと、３個のデータサイズＨの重み付け分割データとに分割できる。
【０１５８】
［ステップＳ７８］データ受信ノード１００ａは、重み付け分割データと処理命令とを各ノードに送信する。
具体的には、データ受信ノード１００ａは、ステップＳ７５で決定したポストプロセス実行ノードに、データサイズＬの重み付け分割データおよびポストプロセス処理の実行命令を送信する。データ受信ノード１００ａは、ステップＳ７５で決定したポストプロセス実行ノード以外のノードに、データサイズＨの重み付け分割データおよびインライン処理の実行命令を送信する。
【０１５９】
なお、データ受信ノード１００ａからインライン処理の実行命令を受信したノードは、受信したデータサイズＨの重み付け分割データのインライン処理を実行する。インライン処理の詳細については、図６で説明した通りである。また、データ受信ノード１００ａからポストプロセス処理の実行命令を受信したノードは、受信したデータサイズＬの重み付け分割データのポストプロセス処理を実行する。ポストプロセス処理の詳細については、図７で説明した通りである。
【０１６０】
［ステップＳ７９］データ受信ノード１００ａは、ステップＳ７７で分割した重み付け分割データのうち、ステップＳ７８でノードに送信していないデータサイズＨの重み付け分割データのインライン処理を実行する。
【０１６１】
ここで、より具体的に説明する。データ受信ノード１００ａは、ステップＳ７８において、複数の重み付け分割データそれぞれを重複せずに、各ノードに送信し処理の実行を指示している。たとえば、ノード数が「４」であり、データサイズＨの重み付け分割データが３個（重み付け分割データＡ，重み付け分割データＢ，重み付け分割データＣ）と、データサイズＬの重み付け分割データＤが存在するものとする。データ受信ノード１００ａは、重み付け分割データＢをインライン実行ノード１００ｂに送信し、重み付け分割データＣをインライン実行ノード１００ｃに送信し、重み付け分割データＤをポストプロセス実行ノード１００ｄに送信している（ステップＳ７８）。データ受信ノード１００ａは、他のノードに送信していない重み付け分割データＡについて、自身のノード（データ受信ノード１００ａ）でインライン処理を実行する。
【０１６２】
［ステップＳ８０］データ受信ノード１００ａは、各ノードから完了通知を受信する。具体的には、データ受信ノード１００ａは、インライン実行ノードが送信した完了通知（ステップＳ４２）とポストプロセス実行ノードが送信した完了通知（ステップＳ５５）とを受信する。
【０１６３】
［ステップＳ８１］データ受信ノード１００ａは、全ての重み付け分割データについてインライン処理およびポストプロセス処理が完了した後、サーバ３００に書き込み完了通知を送信し、データ書き込み処理を終了する。
【０１６４】
このように、マルチノードストレージ装置１００は、データを分割し各ノードでインライン処理とポストプロセス処理とを分担してデータを書き込むよう指示するか、又は、データを分割せずにデータ受信ノードでインライン処理を実行して書き込みを実行する。
【０１６５】
こうして、マルチノードストレージ装置１００は、インライン処理とポストプロセス処理においてデータを書き込みした場合のレイテンシをデータサイズごとに求めて記憶する。マルチノードストレージ装置１００は、記憶したレイテンシと、サーバ３００から受信したデータサイズと、ノード数とに基づいて、インライン実行ノードとポストプロセス実行ノードそれぞれに分割して割当てるデータサイズを決定する。また、マルチノードストレージ装置１００は、インライン実行ノードとポストプロセス実行ノードとにおいて書き込み処理を実行した場合にレイテンシが同一または略同一となるようにデータサイズを決定し、各ノードでインライン処理とポストプロセス処理とを実行する。
【０１６６】
これにより、マルチノードストレージ装置１００は、全てのノードでインライン処理を実行するよりもレイテンシを短くするとともに、全てのノードでポストプロセス処理を実行するよりもノード間通信の回数を減少させることができる。
【０１６７】
［第３の実施形態］
次に、第３の実施形態について説明する。第２の実施形態は、サーバ３００から受信したデータを重み付けして分割し各ノードで分担して処理するか、全てのデータを受信したノードのみで処理するかのいずれかであった。第３の実施形態は、サーバ３００から受信したデータを同じサイズに分割し、全てのノードでインライン処理を実行する処理を含む点で第２の実施形態と相違する。なお、第２の実施形態と同様の構成については、符号を同じにして説明を省略する。
【０１６８】
まず、第３の実施形態のデータ書き込み処理について図１０を用いて説明する。図１０は、第３の実施形態のデータ書き込み処理のフローチャートを示す図である。
データ書き込み処理は、マルチノードストレージ装置１００がサーバ３００からデータを受信し、マルチノードストレージ装置１００が備える１以上のノードでインライン処理またはポストプロセス処理を実行し、データを書き込む処理である。
【０１６９】
マルチノードストレージ装置１００が備えるストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…のうち、サーバ３００からデータを受信したストレージ装置がデータ書き込み処理を実行する。ここで、ストレージ装置１００ａがサーバ３００からデータを受信したものとし、ストレージ装置１００ａがデータ書き込み処理を実行する。なお、ストレージ装置１００ｂ，１００ｃ，１００ｄ，…も、ストレージ装置１００ａと同様の処理を実行できる。
【０１７０】
ストレージ装置１００ａが備える制御部（プロセッサ１１５）は、サーバ３００からデータを受信し、データ書き込み処理を実行する。
［ステップＳ９１］データ受信ノード１００ａは、サーバ３００から書き込み命令およびデータを受信する。以下、サーバ３００から受信したデータのデータサイズをデータサイズＤと記載する。
【０１７１】
［ステップＳ９２］データ受信ノード１００ａは、単位データのデータサイズを取得する。単位データのデータサイズは、予めＨＤＤ１１７等の記憶部に記憶されている。以下、単位データのデータサイズをデータサイズＢと記載する。
【０１７２】
［ステップＳ９３］データ受信ノード１００ａは、データサイズＤがデータサイズＢ以下であるか否かを判定する。データ受信ノード１００ａは、データサイズＤがデータサイズＢ以下である場合にステップＳ１０３にすすみ、データサイズＤがデータサイズＢ以下でない場合にステップＳ９４にすすむ。
【０１７３】
なお、データサイズＤがデータサイズＢ以下の場合、各ノードで処理を分担するとノード間通信による負荷が高くなる上にレイテンシが改善しないため、データ受信ノード１００ａは、ステップＳ１０３でデータを分割せず自身のノードでインライン処理を実行する。
【０１７４】
［ステップＳ９４］データ受信ノード１００ａは、インライン実行ノードに割当てるデータサイズＨ（以下、データサイズＨと記載する）を算出する。なお、本ステップは、ステップＳ７２と同様であるため、説明を省略する。
【０１７５】
［ステップＳ９５］データ受信ノード１００ａは、データサイズＨが予め定められた閾値より小さいか否かを判定する。データ受信ノード１００ａは、データサイズＨが閾値より小さい場合にステップＳ１００にすすみ、データサイズＨが閾値より小さくはない場合にステップＳ９６にすすむ。なお、本ステップは、ステップＳ７３と同様であるため、説明を省略する。
【０１７６】
［ステップＳ９６］データ受信ノード１００ａは、サーバ３００から受信した書き込み命令に含まれるＬＢＡからポストプロセス実行ノードを決定する。
［ステップＳ９７］データ受信ノード１００ａは、ポストプロセス実行ノードに割当てるデータサイズＬ（以下、データサイズＬと記載する）を算出する。なお、本ステップは、ステップＳ７６と同様であるため、説明を省略する。
【０１７７】
［ステップＳ９８］データ受信ノード１００ａは、サーバ３００から受信したデータを重み付けして分割する。なお、本ステップは、ステップＳ７７と同様であるため、説明を省略する。
【０１７８】
［ステップＳ９９］データ受信ノード１００ａは、重み付け分割データと処理命令とを各ノードに送信する。なお、本ステップは、ステップＳ７８と同様であるため、説明を省略する。
【０１７９】
［ステップＳ１００］データ受信ノード１００ａは、データサイズＤがデータサイズＢにノード数を乗じた値より小さいか否かを判定する。データ受信ノード１００ａは、データサイズＤがデータサイズＢにノード数を乗じた値より小さい場合にステップＳ１０３にすすみ、小さくはない場合にステップＳ１０１にすすむ。
【０１８０】
なお、データサイズＤがデータサイズＢにノード数を乗じた値より小さい場合、データ受信ノード１００ａがサーバ３００から受信したデータを分割して各ノードで処理をしても、ノード間通信の負荷がかかる上にレイテンシの改善が見込めない。このため、データ受信ノード１００ａは、データを分割せず自身のノードで処理を実行する。
【０１８１】
［ステップＳ１０１］データ受信ノード１００ａは、サーバ３００から受信したデータを同じサイズに分割する。具体的には、データ受信ノード１００ａは、データサイズＤをノード数で割ったサイズにデータを分割する。
【０１８２】
［ステップＳ１０２］データ受信ノード１００ａは、ステップＳ１０１で分割したデータとインライン処理の命令とを各ノードに送信し、ステップＳ１０４にすすむ。
なお、本ステップは、ステップＳ９９とは異なり、全てのノードに同じサイズのデータとインライン処理の命令とを送信する。
【０１８３】
［ステップＳ１０３］データ受信ノード１００ａは、サーバ３００から受信したデータを分割することなく、データ受信ノード１００ａでインライン処理を実行し、ステップＳ１０６にすすむ。
【０１８４】
［ステップＳ１０４］データ受信ノード１００ａは、分割したデータのうち各ノードに送信していないデータのインライン処理を実行する。
具体的には、データ受信ノード１００ａは、ステップＳ９８で重み付け分割したデータのうち、ステップＳ９９で各ノードに送信していないデータについてインライン処理を実行する。また、データ受信ノード１００ａは、ステップＳ１０１で同じサイズに分割したデータのうち、ステップＳ１０２で各ノードに送信していないデータについてインライン処理を実行する。
【０１８５】
［ステップＳ１０５］データ受信ノード１００ａは、各ノードから完了通知を受信する。具体的には、データ受信ノード１００ａは、ステップＳ９９で重み付け分割データとデータに応じた処理命令とを各ノードに送信した場合、ステップＳ９９でデータと処理命令とを送信した各ノードから完了通知を受信する。また、データ受信ノード１００ａは、ステップＳ１０２で同じサイズに分割したデータとインライン処理の命令とを各ノードに送信した場合、ステップＳ１０２でデータと処理命令とを送信した各ノードから完了通知を受信する。
【０１８６】
［ステップＳ１０６］データ受信ノード１００ａは、全てのデータについて処理が完了した後、サーバ３００に書き込み完了通知を送信し、データ書き込み処理を終了する。
このようにして、マルチノードストレージ装置１００は、データサイズＨが閾値より小さくとも、サーバ３００から受信したデータが単位データのデータサイズで分割可能である場合、受信したデータを同じサイズに分割し各ノードでインライン処理を実行する。
【０１８７】
これにより、マルチノードストレージ装置１００は、受信ノードのみで全ての受信データのインライン処理を実行するよりもレイテンシを低くできる。
［第４の実施形態］
次に、第４の実施形態について説明する。第３の実施形態は、サーバ３００から受信したデータの処理を分担するノード数は固定値（マルチノードストレージ装置１００が備えるストレージ装置１００ａ，…の数）であった。第４の実施形態は、データサイズＨが閾値より少ない場合に、処理を分担するノード数を減らしてデータサイズＨを再計算し、再計算したデータサイズＨが閾値より大きい場合に、減らしたノード数で処理を分担する処理を含む点で第３の実施形態と相違する。なお、第２の実施形態と同様の構成については、符号を同じにして説明を省略する。
【０１８８】
まず、第４の実施形態のデータ書き込み処理について図１１を用いて説明する。図１１は、第４の実施形態のデータ書き込み処理のフローチャートを示す図である。
データ書き込み処理は、マルチノードストレージ装置１００がサーバ３００からデータを受信し、マルチノードストレージ装置１００が備える１以上のノードでインライン処理またはポストプロセス処理を実行し、データを書き込む処理である。
【０１８９】
マルチノードストレージ装置１００が備えるストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…のうち、サーバ３００からデータを受信したストレージ装置がデータ書き込み処理を実行する。ここで、ストレージ装置１００ａがサーバ３００からデータを受信したものとし、ストレージ装置１００ａがデータ書き込み処理を実行する。なお、ストレージ装置１００ｂ，１００ｃ，１００ｄ，…も、ストレージ装置１００ａと同様の処理を実行できる。
【０１９０】
ストレージ装置１００ａが備える制御部（プロセッサ１１５）は、サーバ３００からデータを受信し、データ書き込み処理を実行する。
［ステップＳ１１１］データ受信ノード１００ａは、サーバ３００から書き込み命令およびデータを受信する。以下、サーバ３００から受信したデータのデータサイズをデータサイズＤと記載する。
【０１９１】
［ステップＳ１１２］データ受信ノード１００ａは、単位データのデータサイズを取得する。単位データのデータサイズは、予めＨＤＤ１１７等の記憶部に記憶されている。以下、単位データのデータサイズをデータサイズＢと記載する。
【０１９２】
［ステップＳ１１３］データ受信ノード１００ａは、データサイズＤがデータサイズＢ以下であるか否かを判定する。データ受信ノード１００ａは、データサイズＤがデータサイズＢ以下である場合にステップＳ１２７にすすみ、データサイズＤがデータサイズＢ以下でない場合にステップＳ１１４にすすむ。なお、本ステップはステップＳ９３と同様であるため、説明を省略する。
【０１９３】
［ステップＳ１１４］データ受信ノード１００ａは、インライン実行ノードに割当てるデータサイズＨ（以下、データサイズＨと記載する）を算出する。
なお、本ステップは、ステップＳ７２とほぼ同様である。ただし、ノード数を減算し（ステップＳ１２０）、減算したノード数が「０」以下ではない場合（ステップＳ１２１でＮＯ）、データ受信ノード１００ａは、減算したノード数を用いてデータサイズＨを再算出する。
【０１９４】
［ステップＳ１１５］データ受信ノード１００ａは、データサイズＨが予め定められた閾値より小さいか否かを判定する。データ受信ノード１００ａは、データサイズＨが閾値より小さい場合にステップＳ１２０にすすみ、データサイズＨが閾値より小さくはない場合にステップＳ１１６にすすむ。
【０１９５】
なお、本ステップは、ステップＳ７３とほぼ同様である。ただし、ノード数を減算し（ステップＳ１２０）、減算したノード数でデータサイズＨを再算出した場合（ステップＳ１１４）、データ受信ノード１００ａは、再算出したデータサイズＨを用いて判定する。
【０１９６】
［ステップＳ１１６］データ受信ノード１００ａは、サーバ３００から受信した書き込み命令に含まれるＬＢＡからポストプロセス実行ノードを決定する。
［ステップＳ１１７］データ受信ノード１００ａは、ポストプロセス実行ノードに割当てるデータサイズＬ（以下、データサイズＬと記載する）を算出する。
【０１９７】
なお、本ステップは、ステップＳ７６とほぼ同様である。ただし、ノード数を減算し（ステップＳ１２０）、減算したノード数が「０」以下ではない場合（ステップＳ１２１でＮＯ）、データ受信ノード１００ａは、減算したノード数でデータサイズＬを算出する。
【０１９８】
［ステップＳ１１８］データ受信ノード１００ａは、サーバ３００から受信したデータを重み付けして分割する。
なお、本ステップは、ステップＳ７７とほぼ同様である。ただし、ノード数を減算した場合（ステップＳ１２０）、データ受信ノード１００ａは、減算したノード数と再算出したデータサイズＨを用いてデータを重み付けして分割する。
【０１９９】
［ステップＳ１１９］データ受信ノード１００ａは、重み付け分割データと処理命令とを各ノードに送信する。
なお、本ステップは、ステップＳ７８とほぼ同様である。ただし、ノード数を減算した場合（ステップＳ１２０）、データ受信ノード１００ａは、減算したノード数の各ノードに重み付け分割データと処理の命令とを送信する。
【０２００】
［ステップＳ１２０］データ受信ノード１００ａは、ノード数を所定値ｍ減算した値を求める。所定値ｍは、システム管理者がストレージシステム４００の運用に応じて設定することができる値である。所定値ｍは、予めストレージ装置１００ａのＨＤＤ１１７等の記憶部に記憶される。
【０２０１】
たとえば、システム管理者は、マルチノードストレージ装置１００が備えるノード数が「２４」である場合に所定値ｍを「４」と設定できる。また、システム管理者は、ノード数が「４」である場合に所定値ｍを「１」と設定できる。なお、所定値ｍに「１」または「４」を設定するのは一例であり、その他の値でもよい。
【０２０２】
データ受信ノード１００ａは、本ステップを初回に実行する際にノード数から所定値ｍ減算した値を求め、本ステップを２回目に実行する場合には、初回で減算した値からさらに所定値ｍを減算した値を求める。具体的には、ノード数が「２４」で所定値ｍが「４」である場合、初回は「２４−４」で減算した値を求め、２回目は「（２４−４）−４」で減算した値を求め、Ｎ回目は「２４−４×Ｎ」で減算した値を求める。
【０２０３】
［ステップＳ１２１］データ受信ノード１００ａは、ステップＳ１２０で減算したノード数が０以下であるか否かを判定する。データ受信ノード１００ａは、ステップＳ１２０で減算したノード数が０以下である場合にステップＳ１２２にすすみ、減算したノード数が０以下でない場合にステップＳ１１４にすすむ。
【０２０４】
［ステップＳ１２２］データ受信ノード１００ａは、データサイズＤがデータサイズＢにノード数を乗じた値より小さいか否かを判定する。なお、データ受信ノード１００ａは、ステップＳ１２０で減算する前の元のノード数をデータサイズＢに乗じる。
【０２０５】
データ受信ノード１００ａは、データサイズＤがデータサイズＢにノード数を乗じた値より小さい場合にステップＳ１２７にすすみ、小さくはない場合にステップＳ１２３にすすむ。なお、本ステップは、ステップＳ１００とほぼ同様である。
【０２０６】
［ステップＳ１２３］データ受信ノード１００ａは、サーバ３００から受信したデータを同じサイズに分割する。具体的には、データ受信ノード１００ａは、データサイズＤをノード数で割ったサイズにデータを分割する。なお、データ受信ノード１００ａは、ステップＳ１２０で減算する前の元のノード数を用いる。
【０２０７】
なお、本ステップは、ステップＳ１０１と同様である。
［ステップＳ１２４］データ受信ノード１００ａは、ステップＳ１２３で分割したデータとインライン処理の命令とを各ノードに送信し、ステップＳ１２５にすすむ。なお、データ受信ノード１００ａは、ステップＳ１２０で減算する前の元のノード数のノードに送信する。
【０２０８】
なお、本ステップは、ステップＳ１０２と同様である。
［ステップＳ１２５］データ受信ノード１００ａは、分割したデータのうち各ノードに送信していないデータのインライン処理を実行する。
【０２０９】
なお、本ステップは、ステップＳ１０４と同様である。
［ステップＳ１２６］データ受信ノード１００ａは、各ノードから完了通知を受信する。なお、本ステップはステップＳ１０５と同様であるため、説明を省略する。
【０２１０】
［ステップＳ１２７］データ受信ノード１００ａは、サーバ３００から受信したデータを分割することなく、データ受信ノード１００ａでインライン処理を実行し、ステップＳ１２８にすすむ。
【０２１１】
［ステップＳ１２８］データ受信ノード１００ａは、全てのデータについて処理が完了した後、サーバ３００に書き込み完了通知を送信し、データ書き込み処理を終了する。
このように、マルチノードストレージ装置１００は、全てのノードで処理を分担した際にノード間通信の負荷の増加やレイテンシの悪化が見込まれる場合に、分担するノード数を減算してデータを重み付けして分割し、減算したノード数のノードで処理を分担する。
これにより、マルチノードストレージ装置１００は、ノード間通信の負荷を抑制するとともに低レイテンシで処理が実行できる。
【０２１２】
［第５の実施形態］
次に、第５の実施形態について説明する。第４の実施形態は、サーバ３００から受信したデータを重み付け分割しない場合に、データを同じサイズに分割し全ノードでインライン処理を実行する処理を含んだ。第５の実施形態は、受信したデータを重み付け分割しない場合に、受信した書き込み命令に含まれるＬＢＡで決定したノードに全データとインライン処理命令を送信し、ＬＢＡで決定したノードで全データのインライン処理を実行する処理を含む点で第４の実施形態と相違する。なお、第２の実施形態と同様の構成については、符号を同じにして説明を省略する。
【０２１３】
まず、第５の実施形態のデータ書き込み処理について図１２を用いて説明する。図１２は、第５の実施形態のデータ書き込み処理のフローチャートを示す図である。
データ書き込み処理は、マルチノードストレージ装置１００がサーバ３００からデータを受信し、マルチノードストレージ装置１００が備える１以上のノードでインライン処理またはポストプロセス処理を実行し、データを書き込む処理である。
【０２１４】
マルチノードストレージ装置１００が備えるストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…のうち、サーバ３００からデータを受信したストレージ装置がデータ書き込み処理を実行する。ここで、ストレージ装置１００ａがサーバ３００からデータを受信したものとし、ストレージ装置１００ａがデータ書き込み処理を実行する。なお、ストレージ装置１００ｂ，１００ｃ，１００ｄ，…も、ストレージ装置１００ａと同様の処理を実行できる。
【０２１５】
ストレージ装置１００ａが備える制御部（プロセッサ１１５）は、サーバ３００からデータを受信し、データ書き込み処理を実行する。
［ステップＳ１３１］データ受信ノード１００ａは、サーバ３００から書き込み命令およびデータを受信する。以下、サーバ３００から受信したデータのデータサイズをデータサイズＤと記載する。
【０２１６】
［ステップＳ１３２］データ受信ノード１００ａは、単位データのデータサイズを取得する。単位データのデータサイズは、予めＨＤＤ１１７等の記憶部に記憶されている。以下、単位データのデータサイズをデータサイズＢと記載する。
【０２１７】
［ステップＳ１３３］データ受信ノード１００ａは、データサイズＤがデータサイズＢ以下であるか否かを判定する。データ受信ノード１００ａは、データサイズＤがデータサイズＢ以下である場合にステップＳ１４６にすすみ、データサイズＤがデータサイズＢ以下でない場合にステップＳ１３４にすすむ。なお、本ステップはステップＳ９３と同様であるため、説明を省略する。
【０２１８】
［ステップＳ１３４］データ受信ノード１００ａは、インライン実行ノードに割当てるデータサイズＨ（以下、データサイズＨと記載する）を算出する。
なお、本ステップは、ステップＳ１１４と同様であるため、説明を省略する。
【０２１９】
［ステップＳ１３５］データ受信ノード１００ａは、データサイズＨが予め定められた閾値より小さいか否かを判定する。データ受信ノード１００ａは、データサイズＨが閾値より小さい場合にステップＳ１４１にすすみ、データサイズＨが閾値より小さくはない場合にステップＳ１３６にすすむ。
【０２２０】
なお、本ステップは、ステップＳ１１５と同様であるため、説明を省略する。
［ステップＳ１３６］データ受信ノード１００ａは、サーバ３００から受信した書き込み命令に含まれるＬＢＡからポストプロセス実行ノードを決定する。
【０２２１】
［ステップＳ１３７］データ受信ノード１００ａは、ポストプロセス実行ノードに割当てるデータサイズＬ（以下、データサイズＬと記載する）を算出する。
なお、本ステップは、ステップＳ１１７と同様であるため、説明を省略する。
【０２２２】
［ステップＳ１３８］データ受信ノード１００ａは、サーバ３００から受信したデータを重み付けして分割する。
なお、本ステップは、ステップＳ１１８と同様であるため、説明を省略する。
【０２２３】
［ステップＳ１３９］データ受信ノード１００ａは、重み付け分割データと処理命令とを各ノードに送信する。
なお、本ステップは、ステップＳ１１９と同様であるため、説明を省略する。
【０２２４】
［ステップＳ１４０］データ受信ノード１００ａは、分割したデータのうち各ノードに送信していないデータのインライン処理を実行する。
なお、本ステップは、ステップＳ１２５と同様である。
【０２２５】
［ステップＳ１４１］データ受信ノード１００ａは、ノード数を所定値ｍ減算した値を求める。なお、本ステップは、ステップＳ１２０と同様であるため、説明を省略する。
［ステップＳ１４２］データ受信ノード１００ａは、ステップＳ１４１で減算したノード数が０以下であるか否かを判定する。データ受信ノード１００ａは、ステップＳ１４１で減算したノード数が０以下である場合にステップＳ１４３にすすみ、減算したノード数が０以下でない場合にステップＳ１３４にすすむ。
【０２２６】
なお、本ステップにおいて、データ受信ノード１００ａがノード数が「０」以下であるか否かを判定しているが、これは一例に過ぎず、予め設定された装置数閾値（「０」，「１」，「２」，…）を用いて判定できる。装置数閾値は、システム管理者がストレージシステム４００の運用に応じて設定することができる値である。装置数閾値は、予めストレージ装置１００ａのＨＤＤ１１７等の記憶部に記憶されている。
【０２２７】
［ステップＳ１４３］データ受信ノード１００ａは、サーバ３００から受信した書き込み命令に含まれるＬＢＡから処理ノードを決定する。
［ステップＳ１４４］データ受信ノード１００ａは、サーバ３００から受信したデータを分割することなく、全てのデータとポストプロセス処理の実行命令とをステップＳ１４３で決定した処理ノードに送信する。なお、処理ノードは、データ受信ノード１００ａから受信したデータについてポストプロセス処理を実行する。
【０２２８】
［ステップＳ１４５］データ受信ノード１００ａは、各ノードから完了通知を受信する。なお、本ステップはステップＳ１０５と同様であるため、説明を省略する。
［ステップＳ１４６］データ受信ノード１００ａは、サーバ３００から受信したデータを分割することなく、データ受信ノード１００ａでインライン処理を実行し、ステップＳ１４７にすすむ。
【０２２９】
［ステップＳ１４７］データ受信ノード１００ａは、全てのデータについて処理が完了した後、サーバ３００に書き込み完了通知を送信し、データ書き込み処理を終了する。
このように、マルチノードストレージ装置１００は、サーバ３００から受信したデータを重み付けして分割しない場合に、ＬＢＡで決定したノードにおいて、全てのデータに対してポストポロセス処理を実行する。これにより、ノード間におけるデータ転送性能が高く、各ノード内におけるデータ処理速度が低速である場合に、マルチノードストレージ装置１００は、低レイテンシで処理し、性能向上を図ることができる。
【０２３０】
こうして、ストレージシステム４００は、サーバ３００が書き込みを命令したデータのデータサイズやマルチノードストレージ装置１００が備えるノード数や予め測定したレイテンシに応じて、１以上のノードでインライン処理またはポストプロセス処理を実行する。また、ストレージシステム４００は、インライン実行ノードとポストプロセス実行ノードで書き込み処理を実行した場合にレイテンシが均衡するようにデータサイズを決定し、１以上のノードでインライン処理またはポストプロセス処理を実行する。
【０２３１】
このようにして、マルチノードストレージ装置１００が備える複数のノード（ストレージ装置１００ａ，…）でデータを分散して記憶する際に、重複排除の処理に伴うレイテンシを抑制しつつノード間通信の負荷を抑制できる。
【０２３２】
ストレージシステム４００は、データを記憶装置に格納する際における重複排除の処理に伴うレイテンシを抑制しつつノード間通信の負荷を抑制できる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、情報処理装置１０，２０，３０，…、ストレージ装置１００ａ，１００ｂ，１００ｃ，１００ｄ，…が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハード記憶装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０２３３】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２３４】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【０２３５】
また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することもできる。
以上の第１〜第５の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
【０２３６】
（付記１）  複数の情報処理装置をネットワークを介して接続し、前記情報処理装置が有する記憶装置に、ポストプロセス処理またはインライン処理により重複を排除したデータを分散して格納可能な情報処理システムにおける情報処理装置であって、
前記情報処理装置を識別可能な装置情報と前記情報処理装置におけるポストプロセス処理およびインライン処理の性能情報とを格納する記憶部と、
格納対象データを格納先に格納する格納指示を受け付け、前記ポストプロセス処理におけるレイテンシと前記インライン処理におけるレイテンシとが均衡するように、前記格納対象データのデータサイズと前記性能情報と前記装置情報から、前記ポストプロセス処理で処理対象とする第１のデータサイズと前記インライン処理で処理対象とする第２のデータサイズとを算出し、前記格納対象データの管理情報を有する第１の情報処理装置を前記格納先から特定し、前記格納対象データのうち前記第１のデータサイズのデータを処理対象とする前記ポストプロセス処理の実行を前記第１の情報処理装置に指示し、前記格納対象データのうち前記第２のデータサイズのデータを処理対象とする前記インライン処理の実行をその余の第２の情報処理装置に指示する制御部と、
備える情報処理装置。
【０２３７】
（付記２）  前記制御部は、
算出した前記第２のデータサイズが予め設定された閾値より大きい場合、前記格納対象データのうち前記第１のデータサイズのデータを処理対象とする前記ポストプロセス処理の実行を前記第１の情報処理装置に指示し、前記格納対象データのうち前記第２のデータサイズのデータを処理対象とする前記インライン処理の実行をその余の第２の情報処理装置に指示し、
算出した前記第２のデータサイズが前記閾値以下である場合、前記格納対象データについて前記インライン処理を実行する、
付記１記載の情報処理装置。
【０２３８】
（付記３）  前記制御部は、
前記格納指示で受け付けた前記格納対象データのデータサイズが所定のデータサイズ以下である場合、前記格納対象データについて前記インライン処理を実行する、
付記１記載の情報処理装置。
【０２３９】
（付記４）  前記装置情報は、前記ポストプロセス処理または前記インライン処理の実行対象となる情報処理装置である実行対象装置を特定可能な情報であり、
前記制御部は、
前記装置情報から前記実行対象装置の数を特定し、
算出した前記第２のデータサイズが予め設定された閾値よりも小さく、かつ前記格納対象データのデータサイズが所定のデータサイズに前記実行対象装置の数を乗じた値よりも大きい場合、データサイズが均衡するように前記実行対象装置の数で前記格納対象データを分割し、
前記格納対象データの分割データを処理対象とする前記インライン処理の実行を前記実行対象置に指示する、
付記１記載の情報処理装置。
【０２４０】
（付記５）  前記装置情報は、前記ポストプロセス処理または前記インライン処理の実行対象となる情報処理装置である実行対象装置を特定可能な情報であり、
前記制御部は、
前記装置情報から前記実行対象装置の数を特定し、
算出した前記第２のデータサイズが予め設定された閾値よりも小さい場合に、前記実行対象装置の数から予め設定された所定値を減算した値を新たな実行対象装置の数とし、前記ポストプロセス処理におけるレイテンシと、前記インライン処理におけるレイテンシとが均衡するように、前記格納対象データのデータサイズと前記性能情報と前記新たな実行対象装置の数から前記第１のデータサイズと前記第２のデータサイズとを算出する、
付記１記載の情報処理装置。
【０２４１】
（付記６）  前記装置情報は、前記ポストプロセス処理または前記インライン処理の実行対象となる情報処理装置である実行対象装置を特定可能な情報であり、
前記制御部は、
前記装置情報から前記実行対象装置の数を特定し、
算出した前記第２のデータサイズが予め設定された閾値よりも小さい場合に、前記実行対象装置の数から予め設定された所定値を減算した値を新たな実行対象装置の数とし、
前記新たな実行対象装置の数が予め設定された装置数閾値以下である場合に、前記格納対象データの管理情報を有する第１の情報処理装置を前記格納先から特定し、前記格納対象データを処理対象とする前記ポストプロセス処理の実行を前記第１の情報処理装置に指示する、
付記１記載の情報処理装置。
【０２４２】
（付記７）  複数の情報処理装置をネットワークを介して接続し、前記情報処理装置が有する記憶装置に、ポストプロセス処理またはインライン処理により重複を排除したデータを分散して格納可能な情報処理システムにおける情報処理方法であって、
前記情報処理装置を識別可能な装置情報と前記情報処理装置におけるポストプロセス処理およびインライン処理の性能情報とを記憶部に格納し、
格納対象データを格納先に格納する格納指示を受け付け、前記ポストプロセス処理におけるレイテンシと前記インライン処理におけるレイテンシとが均衡するように、前記格納対象データのデータサイズと前記性能情報と前記装置情報から、前記ポストプロセス処理で処理対象とする第１のデータサイズと前記インライン処理で処理対象とする第２のデータサイズとを算出し、前記格納対象データの管理情報を有する第１の情報処理装置を前記格納先から特定し、前記格納対象データのうち前記第１のデータサイズのデータを処理対象とする前記ポストプロセス処理の実行を前記第１の情報処理装置に指示し、前記格納対象データのうち前記第２のデータサイズのデータを処理対象とする前記インライン処理の実行をその余の第２の情報処理装置に指示する、
情報処理方法。
【０２４３】
（付記８）  複数の情報処理装置をネットワークを介して接続し、前記情報処理装置が有する記憶装置に、ポストプロセス処理またはインライン処理により重複を排除したデータを分散して格納可能な情報処理システムにおけるデータ管理プログラムであって、
前記情報処理装置を識別可能な装置情報と前記情報処理装置におけるポストプロセス処理およびインライン処理の性能情報とを記憶部に格納し、
格納対象データを格納先に格納する格納指示を受け付け、前記ポストプロセス処理におけるレイテンシと、前記インライン処理におけるレイテンシとが均衡するように、前記格納対象データのデータサイズと前記性能情報と前記装置情報から、前記ポストプロセス処理で処理対象とする第１のデータサイズと前記インライン処理で処理対象とする第２のデータサイズとを算出し、前記格納対象データの管理情報を有する第１の情報処理装置を前記格納先から特定し、前記格納対象データのうち前記第１のデータサイズのデータを処理対象とする前記ポストプロセス処理の実行を前記第１の情報処理装置に指示し、前記格納対象データのうち前記第２のデータサイズのデータを処理対象とする前記インライン処理の実行をその余の第２の情報処理装置に指示する、
処理をコンピュータに実行させるデータ管理プログラム。
【０２４４】
（付記９）  複数の情報処理装置をネットワークを介して接続し、前記情報処理装置が有する記憶装置に、ポストプロセス処理またはインライン処理により重複を排除したデータを分散して格納可能な情報処理システムであって、
前記情報処理装置を特定可能な装置情報と前記情報処理装置におけるポストプロセス処理およびインライン処理の性能情報とを格納する記憶部と、
格納対象データを格納先に格納する格納指示を受け付け、前記ポストプロセス処理におけるレイテンシと、前記インライン処理におけるレイテンシとが均衡するように、前記格納対象データのデータサイズと前記性能情報と前記装置情報から、前記ポストプロセス処理で処理対象とする第１のデータサイズと前記インライン処理で処理対象とする第２のデータサイズとを算出し、前記格納対象データの管理情報を有する第２の情報処理装置を前記格納先から特定し、前記格納対象データのうち前記第１のデータサイズのデータを処理対象とする前記ポストプロセス処理の実行を前記第２の情報処理装置に指示し、前記格納対象データのうち前記第２のデータサイズのデータを処理対象とする前記インライン処理の実行をその余の第３の情報処理装置に指示する制御部と、
を含む第１の情報処理装置と、
前記管理情報を格納する記憶部と、前記第１の情報処理装置から前記ポストプロセス処理の実行の指示を受け、前記第ポストプロセス処理を実行する制御部とを含む前記第２の情報処理装置と、
前記第１の情報処理装置から前記インライン処理の実行の指示を受け、前記インライン処理を実行する制御部を含む前記第３の情報処理装置と、
を備える情報処理システム。
【符号の説明】
【０２４５】
１０，２０，３０  情報処理装置
１１，２１，１２２  記憶部
１１ａ  装置情報
１１ｂ  性能情報
１２，２２，３２  制御部
１２ａ  格納指示受付制御
１２ｂ  データサイズ算出制御
１２ｃ  データ処理制御
１３ａ，１３ｂ，２３ａ，２３ｂ，３３ａ，３３ｂ，１３０ａ，１３０ｂ，１３０ｃ，１３０ｄ  記憶装置
２１ａ  管理情報
４０，３００  サーバ
４５，３５０，３６０  ネットワーク
５０  情報処理システム
１００  マルチノードストレージ装置
１００ａ，１００ｂ，１００ｃ，１００ｄ  ストレージ装置
１１４  ホストインタフェース
１１５  プロセッサ
１１６  ＲＡＭ
１１７  ＨＤＤ
１１８  機器接続インタフェース
１１９  記憶部インタフェース
１２１  コントローラモジュール
１４０ａ，１４０ｂ  論理ボリューム
４００  ストレージシステム
【図１】
2018106636.tif 000008
【図２】
2018106636.tif 000009
【図３】
2018106636.tif 000010
【図４】
2018106636.tif 000011
【図５】
2018106636.tif 000012
【図６】
2018106636.tif 000013
【図７】
2018106636.tif 000014
【図８】
2018106636.tif 000015
【図９】
2018106636.tif 000016
【図１０】
2018106636.tif 000017
【図１１】
2018106636.tif 000018
【図１２】
2018106636.tif 000019