以下、実施の形態について図面を参照して説明する。
(第1実施形態)
まず、図1を参照して、第1実施形態に係るストレージシステムを含む情報処理システム1の構成を説明する。
このストレージシステムは、例えば、分散ストレージシステムとして実現され得る。このストレージシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成されたストレージとしてそれぞれ機能する複数のノード4と、これらノード4を管理する中央コントローラ3とを備える。各ノード4は、ストレージシステム全体のデータ格納領域を任意に分割した領域を管理する。
各ノード4は、一つ以上の物理ディスクを備える。この物理ディスクは、データを格納可能な不揮発性メモリを備え、例えば、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)等として実現される。各ノード4は、例えば、筐体、ラック、あるいはフロアのような特定の範囲内に配置される多数の物理ディスクを含み得る。また、各ノード4では、一つ以上の物理ディスクの記憶領域を論理的に分割または結合することにより、一つ以上の論理ディスク(論理ユニット:LU)が設定(作成)される。
図1に示す例では、ストレージシステムにN個のノードが設けられている。
第1ノード4Aは、第1物理ディスク471Aと第2物理ディスク472Aとを備える。そして、第1ノード4Aでは、これら物理ディスク471A,472Aの領域を論理的に分割または結合することにより、第1論理ディスク431Aと第2論理ディスク432Aとが作成されている。
第2ノード4Bは、第1物理ディスク471Bと第2物理ディスク472Bとを備える。そして、第2ノード4Bでは、これら物理ディスク471B,472Bの領域を論理的に分割または結合することにより、第1論理ディスク431Bと第2論理ディスク432Bとが作成されている。
また、第Nノード4Cは、第1物理ディスク471Cと第2物理ディスク472Cとを備える。そして、第Nノード4Cでは、これら物理ディスク471C,472Cの領域を論理的に分割または結合することにより、第1論理ディスク431Cと第2論理ディスク432Cとが作成されている。
ここでは、各ノード4A,4B,4Cに、二つの物理ディスクと二つの論理ディスクとが設けられる例を示したが、各ノード4A,4B,4Cには、任意の数の物理ディスクと、任意の数の論理ディスクとを設けることができる。
情報処理システム1は、クライアント2と中央コントローラ3と複数のノード4とによって構成される。クライアント2と中央コントローラ3と各ノード4とは、ケーブルまたはネットワーク5を介して相互に接続されている。クライアント2は、ノード4にアクセスする情報処理装置(コンピューティングデバイス)である。
クライアント2および中央コントローラ3は、各ノード4に対して、データの書き込み、読み出し、および削除のような各種のアクセスを行うことができる。
データの書き込み、読み出し、および削除を行う場合に、クライアント2および中央コントローラ3から各ノード4に送信される情報は、例えば、以下の通りである。
(1)読み出し(リード要求): 論理ディスク番号および論理アドレス
(2)書き込み(ライト要求): 論理ディスク番号、論理アドレス、およびデータ
(3)削除(削除要求): 論理ディスク番号および論理アドレス
なお、論理アドレスには、例えば、論理ブロックアドレス(LBA)が用いられる。
また、クライアント2から各ノード4に対して、データの書き込み、読み出し、および削除を行う場合には、例えば、以下のいずれかの方法が用いられる。
(1)クライアント2は、中央コントローラ3に対して、対象のデータがどのノード4の論理ディスクに存在しているのか、あるいはどのノード4の論理ディスクに保存すべきかを問い合わせ、以降は、対象のノード4の論理ディスクに直接、読み出し、書き込み、または削除を行う。
(2)クライアント2は、対象のデータがどのノード4の論理ディスクに存在しているのか、あるいはどのノード4の論理ディスクに保存すべきかを、当該クライアント2内で決定し、対象のノード4の論理ディスクに直接、読み出し、書き込み、または削除を行う。
(3)クライアント2は、中央コントローラ3内の論理ディスクに対して、対象のデータの読み出し、書き込み、または削除を行う。その後、中央コントローラ3は、対象のノード4の論理ディスクにその対象のデータの読み出し、書き込み、または削除を行い、その結果をクライアント2に返す。
いずれの場合においても、中央コントローラ3は、あるデータがどのノード4のどの論理ディスク(LU)に存在しているか、あるいはどのノード4に保存されるべきかを計算するアルゴリズム、あるいはその情報を含むテーブルを有している。
また、ノード4の各々は、そのノード4内に重複したデータが格納されないように制御する重複排除機能を有する。各ノード4は、重複排除機能により、クライアント2(または中央コントローラ3)から新たに受信された書き込みデータと一致するデータ(以下、重複データとも称する)が既に物理ディスクに格納されている場合、この書き込みデータを物理ディスクに書き込まず、代わりに、この書き込みデータの論理アドレスに、重複データが格納されている物理アドレスを関連付ける。これにより、ノード内に重複したデータが格納されず、したがって重複排除を実現することができる。なお、本ストレージシステムでは、各ノード4内で重複排除のための処理が行われるが、複数のノード4に跨った重複排除処理は行われないことを想定する。
重複排除機能による制御の対象は、例えば、チャンク単位のデータである。チャンクのサイズには任意のサイズを用いることができ、例えば4kBである。各ノード4は、例えば、クライアント2から新たに受信された書き込みデータをチャンク単位に分割し、分割されたチャンク単位の書き込みデータに対して、上述した重複排除のための処理を行う。
このように、ノード4の各々では、重複排除処理によりストレージ効率が向上する。しかし、各ノード4に類似度が低いデータが多く格納される場合には、重複排除を行うことによる効果が低く、ストレージ効率が十分に向上しない可能性がある。
そのため、本実施形態では、あるノード4において重複排除に対する貢献度が低い論理ディスクを別のノード4に移動することにより、重複排除の効果を高め、ストレージシステム全体でのストレージ効率を向上させる。中央コントローラ3とノード4とは、連携して、移動元のノードから移動対象の論理ディスクを選択し、その移動対象の論理ディスクを移動する移動先のノードを選択し、移動対象の論理ディスクを移動元のノードから移動先のノードに移動するように構成される。なお、中央コントローラ3とノード4とは、複数の移動先候補ノードの各々に移動対象の論理ディスクを移動した場合に増加するデータ格納のための物理容量を試算し、重複排除の効果がより高くなる移動先候補のノードを移動先のノードとして選択することができる。これにより、ストレージシステム全体で重複排除の効果を高めることができる。
中央コントローラ3は、ストレージシステム全体でのストレージ効率を向上させるように、各ノード4における重複排除を管理する。中央コントローラ3は、管理部31と管理テーブル32とを備える。中央コントローラ3は、例えば、CPU、主メモリ、および不揮発性メモリを備え、CPUが不揮発性メモリから主メモリにロードされた特定のプログラムを実行することにより、管理部31として機能し得る。また、中央コントローラ3は、System−on−a−chip(SoC)のような回路によって実現されていてもよい。
管理部31は、ストレージシステム全体でのストレージ効率を向上させるために、あるノード4に含まれる論理ディスクを別のノード4に移動する処理を行う。
より具体的には、管理部31は、ストレージシステム内の複数のノード4から、移動対象となる論理ディスクの移動元のノード(以下、移動元ノードとも称する)を選択し、その移動元ノードに、移動対象の論理ディスクを選択させる。管理部31は、性能と容量の少なくとも一方に余裕がないノードを移動元ノードとして選択する。管理部31は、例えば、複数のノード4の内で、リードおよびライトの少なくとも一方に関する性能が最も低いノード、または空き領域のサイズもしくは割合が最も小さいノードを移動元ノードとして選択する。性能は、例えば、リード性能とライト性能の少なくとも一方であり、物理ディスクに対するリード時間やライト時間を統計処理した値で表される。また、容量は、物理ディスクの空き領域の大きさや割合に基づく値で表される。管理部31は、性能と容量の少なくとも一方を表す値が最も低いノードを移動元ノードとして選択するようにしてもよい。このような移動元ノードの選択により、ノード4間で容量または性能を平均化することができる。
管理部31は、移動元ノードを除く複数のノード4(以下、移動先候補ノードとも称する)から、移動対象の論理ディスクが移動される移動先のノード(以下、移動先ノードとも称する)を選択する。具体的には、管理部31は、移動対象の論理ディスクがいずれかの移動先候補ノードに移動されることによって、移動元ノードで削減されるデータ格納のための物理容量(削減量)を算出する。また、管理部31は、移動対象の論理ディスクが移動先候補ノードに移動されることによって、当該移動先候補ノードで増加するデータ格納のための物理容量(増加量)を、移動先候補ノード毎に算出する。管理部31は、算出された削減量と増加量とを用いて、論理ディスクの移動によるストレージシステム全体での削減量が最大となる移動先候補ノードを、移動先ノードとして選択する。
そして、管理部31は、移動元ノードから移動先ノードに、移動対象の論理ディスク内の全データを移動するための処理を行う。この処理に応じて、移動元ノードでは、移動対象の論理ディスク内の全データが削除され、移動先ノードでは、それら全データが格納される論理ディスクが新たに作成される。
また、管理テーブル32は、あるデータが、どのノードのどの論理ディスク(LU)に存在しているか、あるいはどのノードに保存されるべきかを管理する。したがって、管理部31は、この管理テーブル32を用いることにより、あるデータが、どのノードのどの論理ディスクに存在しているか、あるいはどのノードに保存されるべきかを決定することができる。なお、管理テーブル32を用いる代わりに、管理部31に、あるデータが、どのノードのどの論理ディスクに存在しているか、あるいはどのノードに保存されるべきかを決定するためのアルゴリズムが組み込まれていてもよい。
図2はノード4(各ノード4A,4B,4C)の構成を示す。ノード4は、ノードコントローラ41と一つ以上の物理ディスク47とを備える。ノードコントローラ41は、SoCのような回路によって実現され得る。ノード4は主メモリ42を備えていてもよい。主メモリ42は、揮発性メモリであるランダムアクセスメモリ、例えば、DRAMである。
ノードコントローラ41は、中央コントローラ3、クライアント2および他のノードの各々との間で各種の要求(コマンド)やデータを入出力(送受信)するための通信機能を有している。ノードコントローラ41は、データの書き込み、読み出しおよび削除のような各種のアクセスのために物理ディスク47を制御する。また、ノードコントローラ41は、クライアント2や中央コントローラ3から受信されたデータのバッファや、物理ディスク47から読み出されたデータのキャッシュ等のために、主メモリ42を制御する。
図2に示すように、主メモリ42には、アドレス変換テーブルとして機能する論理−物理マップテーブル421のキャッシュ領域が設けられている。論理−物理マップテーブル421は、論理ディスク43の論理アドレスそれぞれと、物理ディスク47の物理アドレスそれぞれとの間のマッピングを管理する。
主メモリ42にはさらに、処理中に用いられる各種の値や、各種のテーブル(例えば、ノード重複排除テーブル422と論理ディスク重複排除テーブル423)の格納領域が設けられてもよい。ノード重複排除テーブル422は、ノード4毎に設けられ、各ノード4における重複排除を管理する。論理ディスク重複排除テーブル423は、論理ディスク43毎に設けられ、各論理ディスク43における重複排除を管理する。
図3は、重複排除機能を有するノード4における、論理ディスク431,432にそれぞれ対応する論理アドレス空間61,62と、物理ディスク471,472に対応する物理アドレス空間65との関係を示す。
図3に示す例では、第1論理ディスク431に対応する第1論理アドレス空間61において、第1論理アドレス611および第3論理アドレス613の各々に第1データが論理的に格納され、第2論理アドレス612に第2データが論理的に格納され、第4論理アドレス614に第3データが論理的に格納されている。第2論理ディスク432に対応する第2論理アドレス空間62において、第1論理アドレス621および第4論理アドレス624の各々に第1データが論理的に格納され、第2論理アドレス622に第2データが論理的に格納され、第3論理アドレス623に第4データが論理的に格納されている。
また、物理ディスク471,472に対応する物理アドレス空間65では、第1物理アドレス651に第1データが格納され、第2物理アドレス652に第2データが格納され、第3物理アドレス653に第3データが格納され、第4物理アドレスに654に第4データが格納されている。
上述した重複排除機能により、第1論理アドレス空間61における第1論理アドレス611および第3論理アドレス613と、第2論理アドレス空間62における第1論理アドレス621および第4論理アドレス624とはいずれも、第1データを格納する第1物理アドレス651にマッピングされている。つまり、四つの論理アドレス611,613,621,624に対して同一の第1データ(重複データ)を書き込むことが要求された場合には、物理ディスク471,472に書き込まれた一つの第1データの物理アドレス651に対して、それら四つの論理アドレス611,613,621,624がマッピングされる。
同様に、上述した重複排除機能により、第1論理アドレス空間61における第2論理アドレス612と、第2論理アドレス空間62における第2論理アドレス622とはいずれも、第2データを格納する第2物理アドレス652にマッピングされている。つまり、二つの論理アドレス612,622に対して同一の第2データを書き込むことが要求された場合には、物理ディスク471,472に書き込まれた一つの第2データの物理アドレス652に対して、それら二つの論理アドレス612,622がマッピングされる。
なお、第1論理アドレス空間61における第4論理アドレス614は、第3データを格納する第3物理アドレス653にマッピングされている。また、第2論理アドレス空間62における第3論理アドレス623は、第4データを格納する第4物理アドレス654にマッピングされている。
このように、各論理ディスク431,432には、同一である複数のデータ(重複データ)が論理的に格納され得る。つまり、同一である複数のデータのそれぞれが、論理ディスク内の複数のアドレスのそれぞれに関連付けられる。一方、ノード内の一つ以上の物理ディスク471,472には、その同一である複数のデータが、一つのデータとして一つの物理アドレスに格納される。そして、その一つのデータが格納された一つの物理アドレスに対して、複数の論理アドレスがマッピングされる。
つまり、論理ディスク431,432は、物理ディスク471,472へのポインタの集合体となっている。これにより、例えば既存のチャンク(データ)と全く同一のチャンク(データ)が論理ディスク431,432に書き込まれようとした際には、物理ディスク471,472へ書き込むのではなく、既に書き込まれている物理ディスク471,472へのポインタを該当論理ディスク431,432に記録することで、重複したデータの保存を防ぐことができる。
図4は、論理−物理マップテーブル421の一構成例を示す。論理−物理マップテーブル421は、論理ディスク431,432の論理アドレスそれぞれと、物理ディスク471,472の物理アドレスそれぞれとの間のマッピングを管理するための複数のエントリを含む。各エントリは、論理ディスク番号と論理アドレスと物理アドレスとを含む。あるエントリは、論理ディスク番号と論理アドレスとで特定される論理的なデータ格納位置が、物理アドレスで特定される物理的なデータ格納位置にマッピングされていることを示す。この論理−物理マップテーブル421を用いることにより、論理ディスク番号および論理アドレスの組を、物理アドレスに変換することができる。
図4に示すように、論理ディスク番号が“0”である論理ディスクにおける論理アドレス“10000”は、物理アドレス“0001”にマッピングされている。また、論理ディスク番号が“1”である論理ディスクにおける論理アドレス“10000”も、物理アドレス“0001”にマッピングされている。このように、論理ディスク番号が“0”である論理ディスクにおける論理アドレス“10000”と、論理ディスク番号が“1”である論理ディスクにおける論理アドレス“10000”とは、いずれも物理アドレス“0001”にマッピングされている。つまり、これらの論理ディスク番号および論理アドレスの二つの組は、重複排除機能により、重複データが格納された一つの物理アドレスに関連付けられている。なお、複数の物理アドレスが、論理ディスク番号および論理アドレスの一つの組に関連付けられることはない。
図5は、ノード重複排除テーブル422の一構成例を示す。ノード重複排除テーブル422は、対応する一つのノード4内の物理ディスク471,472に格納されるチャンク単位の複数のデータに対応する複数のエントリを含む。各エントリは、例えば、ハッシュ値と物理アドレスと被参照数とを含む。
あるデータ(チャンク)に対応するエントリにおいて、「ハッシュ値」は、そのデータを用いて算出されたハッシュ値を示す。「物理アドレス」は、そのデータが格納されている物理アドレスを示す。「被参照数」は、全ての論理ディスク431,432内の、この物理アドレスに関連付けられた(マッピングされた)論理アドレスの総数(すなわち、全ての論理ディスク431,432内の、この物理アドレスを参照する論理アドレスの総数)を示す。
図5に示す例において、第1のエントリは、ハッシュ値が“0x1234”であるデータが物理アドレス“0001”の領域に格納され、この物理アドレス“0001”に関連付けられた、全論理ディスク431,432内の論理アドレスの総数が“3”であることを示している。また、第2のエントリは、ハッシュ値が“0xFFFF”であるデータが物理アドレス“0002”の領域に格納され、この物理アドレス“0002”に関連付けられた、全論理ディスク431,432内の論理アドレスの総数が“7”であることを示している。
あるノード4において、あるデータ(チャンク)が物理ディスク471,472に既に書き込まれているかどうかは、そのデータから算出されたハッシュ値に対応するエントリがノード重複排除テーブル422内にあるかどうかによって決定することができる。つまり、データから算出されたハッシュ値に対応するエントリがノード重複排除テーブル422内にある場合、そのデータは物理ディスク471,472に既に書き込まれている。一方、データから算出されたハッシュ値に対応するエントリがノード重複排除テーブル422内にない場合、そのデータは物理ディスク471,472にまだ書き込まれていない。
図6は、論理ディスク重複排除テーブル423の一構成例を示す。論理ディスク重複排除テーブル423は、論理ディスク431,432毎に設けられる。論理ディスク重複排除テーブル423は、対応する一つの論理ディスクに論理的に格納されたデータのハッシュ値毎に、複数のエントリを含む。各エントリは、ハッシュ値とカウントとを含む。
あるハッシュ値に対応するエントリにおいて、「カウント」は、当該ハッシュ値が算出されたデータが、対応する論理ディスクに論理的に格納されている数を示す。つまり、この「カウント」は、このハッシュ値が算出されたデータが格納されている物理アドレスに関連付けられた(マッピングされた)、対応する一つの論理ディスク内の論理アドレスの数を示していると云える。
図6に示す例において、第1のエントリは、ハッシュ値が“0x1234”であるデータが、対応する論理ディスクに論理的に格納されている数が“1”であることを示す。つまり、ハッシュ値が“0x1234”であるデータが第1物理アドレスに格納されているとすると、第1のエントリのカウントは、対応する論理ディスク内の、第1物理アドレスに関連付けられた論理アドレスの数が“1”であることを示す。
また、第2のエントリは、ハッシュ値が“0xFFFF”であるデータが、対応する論理ディスクに論理的に格納されている数が“3”であることを示す。つまり、ハッシュ値が“0xFFFF”であるデータが第2物理アドレスに格納されているとすると、第2のエントリのカウントは、対応する論理ディスク内の、第2物理アドレスに関連付けられた論理アドレスの数が“3”であることを示す。
図2に戻り、ノードコントローラ41は、リード制御部411、ライト制御部412、削除制御部413、および論理ディスク管理部414として機能することができる。
リード制御部411は、クライアント2または中央コントローラ3からリード要求を受け付けた場合、論理−物理マップテーブル421から、リード要求に指定された論理ディスク番号および論理アドレスに対応するエントリを検索し、そのエントリ内の物理アドレス(すなわち、指定された論理ディスク番号および論理アドレスにマッピングされた物理アドレス)を取得する。リード制御部411は、その物理アドレスに基づいて物理ディスク47からデータを読み出す。そして、リード制御部411は、読み出されたデータを要求したクライアント2または中央コントローラ3に送信する。
削除制御部413は、クライアント2または中央コントローラ3から削除要求を受け付けた場合、論理−物理マップテーブル421から、その削除要求に指定された論理ディスク番号および論理アドレスに対応するエントリを検索し、そのエントリ内の物理アドレス(すなわち、指定された論理ディスク番号および論理アドレスにマッピングされた物理アドレス)を取得する。そして、削除制御部413は、論理−物理マップテーブル421から、その取得されたエントリを削除する。
さらに、削除制御部413は、ノード重複排除テーブル422および論理ディスク重複排除テーブル423を以下のように更新する。
(1)ノード重複排除テーブルの更新: 削除制御部413は、ノード重複排除テーブル422内の、取得された物理アドレスに対応するエントリにおいて、被参照数から1を引く。この被参照数が0になった場合、削除制御部413は、ノード重複排除テーブル422から当該エントリを削除する。
(2)論理ディスク重複排除テーブルの更新: 削除制御部413は、取得された物理アドレスからデータを読み出し、そのデータのハッシュ値を算出する。削除制御部413は、削除要求に指定された論理ディスク番号の論理ディスク43に対応する論理ディスク重複排除テーブル423内の、算出されたハッシュ値に対応するエントリにおいて、カウントから1を引く。このカウントが0になった場合、削除制御部413は、この論理ディスク重複排除テーブル423から当該エントリを削除する。
なお、以上の削除処理は、クライアント2または中央コントローラ3から削除要求を受け付けた場合だけでなく、後述するように、ライト制御部412等の、ノードコントローラ41内の他の構成による削除要求を受け付けた場合にも行われ得る。
ライト制御部412は、クライアント2または中央コントローラ3からライト要求を受け付けた場合、そのライト要求に指定された論理ディスク番号および論理アドレスに基づいて、論理−物理マップテーブル421を検索する。検索の結果、論理−物理マップテーブル421内に、指定された論理ディスク番号および論理アドレスに対応するエントリがあった場合、ライト制御部412は、この論理ディスク番号および論理アドレスを指定した削除要求を削除制御部413に送る。これによって、削除制御部413により、この論理ディスク番号および論理アドレスに対する削除処理が行われる。つまり、ライト要求に指定された論理ディスク番号および論理アドレスにデータが既に格納されていて、そのデータが上書きされようとする場合には、その論理ディスク番号および論理アドレスに対する削除処理が行われる。
そして、ライト制御部412は、ライト要求に応じて受信された書き込みデータと一致するデータ(重複データ)が既に物理ディスク47に格納されているならば、この書き込みデータを物理ディスク47に書き込まず、代わりに、ライト要求に指定された論理ディスク番号および論理アドレスを、重複データが格納されている物理アドレスに関連付ける。一方、ライト制御部412は、ライト要求に応じて受信された書き込みデータと一致するデータ(重複データ)が物理ディスク47にまだ格納されていないならば、物理ディスク47内の領域を新たに割り当て、この領域に書き込みデータを書き込み、ライト要求で指定された論理ディスク番号および論理アドレスに、書き込みデータが書き込まれた物理アドレスを関連付ける。
より具体的には、ライト制御部412は、まず、書き込みデータのハッシュ値を算出する。そして、ライト制御部412は、ハッシュ値を用いてノード重複排除テーブル422を検索し、このハッシュ値に対応するエントリがある場合、当該エントリに含まれる物理アドレス(すなわち、重複データが格納されている物理アドレス)と、ライト要求に指定された論理ディスク番号および論理アドレスとを含むエントリを、論理−物理マップテーブル421に追加する。
さらに、ライト制御部412は、ノード重複排除テーブル422および論理ディスク重複排除テーブル423を以下のように更新する。
(1)ノード重複排除テーブルの更新: ライト制御部412は、ノード重複排除テーブル422内の、書き込みデータのハッシュ値に対応するエントリにおいて、被参照数に1を加える。
(2)論理ディスク重複排除テーブルの更新: ライト制御部412は、ライト要求に指定された論理ディスク番号の論理ディスク43に対応する論理ディスク重複排除テーブル423内に、書き込みデータのハッシュ値に対応するエントリがある場合、そのエントリのカウントに1を加え、書き込みデータのハッシュ値に対応するエントリがない場合、当該ハッシュ値と1が設定されたカウントとを含むエントリを、その論理ディスク重複排除テーブル423に追加する。
一方、ノード重複排除テーブル422内に、書き込みデータのハッシュ値に対応するエントリがない場合、物理ディスク47内の領域を新たに割り当てて、書き込みデータ(チャンク)を書き込み、当該領域の物理アドレスと、ライト要求に指定された論理ディスク番号および論理アドレスとを含むエントリを、論理−物理マップテーブル421に追加する。
さらに、ライト制御部412は、ノード重複排除テーブル422および論理ディスク重複排除テーブル423を以下のように更新する。
(1)ノード重複排除テーブルの更新: ライト制御部412は、書き込みデータのハッシュ値と、書き込みデータが書き込まれた物理アドレスと、1が設定された被参照数とを含むエントリをノード重複排除テーブル422に追加する。
(2)論理ディスク重複排除テーブルの更新: ライト制御部412は、書き込みデータのハッシュ値と、1が設定されたカウントとを含むエントリを、ライト要求に指定された論理ディスク番号に対応する論理ディスク重複排除テーブル423に追加する。
また、論理ディスク管理部414は、新たな論理ディスク43を作成(設定)することができる。論理ディスク管理部414は、例えば、中央コントローラ3による要求に応じて、新たな論理ディスク43を作成する。
論理ディスク管理部414は、中央コントローラ3による要求に応じて、移動対象の論理ディスクを選択することができる。上述したように、中央コントローラ3は、例えば、性能と容量の少なくとも一方に余裕がないノードを移動元ノードとして選択し、この移動元ノードに、移動対象の論理ディスクを選択することを要求する。
移動元ノード内の論理ディスク管理部414は、一つ以上の論理ディスク43から、当該ノード4における重複排除に対する貢献度が最も低い論理ディスクを、移動対象の論理ディスクとして選択する。例えば、重複排除に対する貢献度が最も低い論理ディスクは、全てのデータ(チャンク)がオリジナルのデータ(すなわち、全てのデータが他の論理ディスクには格納されていないデータ)である論理ディスクである。この論理ディスクが別のノード4に移動されることにより、当該論理ディスク内のデータを格納するために使用されていた物理容量の分だけ、移動元ノードでは使用可能な物理容量が増加する。
これに対して、重複排除に対する貢献度が最も高い論理ディスクは、全てのデータ(チャンク)が、他の論理ディスクに格納されているデータと重複している論理ディスクである。この論理ディスクを別のノードに移動したとしても、移動元ノードで使用可能な物理容量は全く変わらない。
以下では、図7から図11を参照して、移動元ノードとして第1ノード4Aが選択された場合を例として、ストレージシステムにおいて、移動対象の論理ディスクと移動先ノードとが決定される動作を説明する。ここでは、第1ノード4A内に三つの論理ディスク43が設けられ、また移動先候補ノードが第2ノード4Bおよび第3ノード4Cであることを想定する。
第1ノード4Aの論理ディスク管理部414は、この第1ノード4A内の複数の論理ディスク43から移動対象の論理ディスクを選択する。論理ディスク管理部414は、各論理ディスクの重複排除に対する貢献度に基づいて、貢献度が低い論理ディスクを移動対象の論理ディスクとして選択する。この貢献度は、第1ノード4Aにおける重複排除に対して、各論理ディスク43が貢献している度合いを示す。この貢献度は、例えば、0から1までの値を取る。貢献度が0であれば、その論理ディスクが、ノード4における重複排除に全く貢献していない(論理ディスクに存在するデータ全てがオリジナルデータのある)ことを示す。また、貢献度が1であれば、その論理ディスクに存在する全てのデータ(チャンク)について、同一のデータがノード4内の別のいずれかの論理ディスクにも存在していることを示す。
図7は、第1ノード4Aにおける重複排除に対する第1論理ディスク431Aの貢献度が算出される例を示す。
論理ディスク管理部414は、第1ノード4Aのノード重複排除テーブル422Aと、第1論理ディスク431Aの論理ディスク重複排除テーブル423Aとを用いて、第1ノード4Aにおける重複排除に対する第1論理ディスク431Aの貢献度を算出する。より具体的には、論理ディスク管理部414は、ノード重複排除テーブル422Aの各エントリと論理ディスク重複排除テーブル423Aの各エントリとの間で、ハッシュ値が同一であり、且つノード重複排除テーブル422Aのエントリにおける被参照数と、論理ディスク重複排除テーブル423Aのエントリにおけるカウントとが異なるエントリ(つまり、被参照数=カウントでないエントリ)を検出して、検出されたエントリの数をカウントする。カウントされたエントリに対応するデータ(チャンク)は、第1論理ディスク431Aだけでなく、別の論理ディスクにも存在するので、重複排除に貢献していると云える。そのため、論理ディスク管理部414は、カウントされたエントリ数を、論理ディスク重複排除テーブル423Aの総エントリ数で除した値を、第1論理ディスク431Aの貢献度として算出する。
図7に示す例では、ハッシュ値が“0x1234”、“0xFFFF”、“0x3712”、および“0x1014”である四つのエントリが、ハッシュ値が同一であり、且つ被参照数とカウントとが異なるエントリに該当する。したがって、論理ディスク管理部414によってカウントされるエントリ数は4である。論理ディスク管理部414は、カウントされたエントリ数である4を、論理ディスク重複排除テーブル423Aの総エントリ数である5で除した値である0.8(=4/5)を、第1論理ディスク431Aの貢献度として算出する。
また、図8は、第1ノード4Aにおける重複排除に対する第2論理ディスク432Aの貢献度が算出される例を示す。
論理ディスク管理部414は、第1ノード4Aのノード重複排除テーブル422Aと、第2論理ディスク432Aの論理ディスク重複排除テーブル423Bとを用いて、第1ノード4Aにおける重複排除に対する第2論理ディスク432Aの貢献度を算出する。より具体的には、論理ディスク管理部414は、ノード重複排除テーブル422Aの各エントリと論理ディスク重複排除テーブル423Bの各エントリとの間で、ハッシュ値が同一であり、且つノード重複排除テーブル422Aのエントリにおける被参照数と、論理ディスク重複排除テーブル423Bのエントリにおけるカウントとが異なるエントリ(つまり、被参照数=カウントでないエントリ)を検出して、検出されたエントリの数をカウントする。そして、論理ディスク管理部414は、カウントされたエントリ数を、論理ディスク重複排除テーブル423Bの総エントリ数で除した値を、第2論理ディスク432Aの貢献度として算出する。
図8に示す例では、ハッシュ値が“0x1234”および“0x4182”である二つのエントリが、ハッシュ値が同一であり、且つ被参照数とカウントとが異なるエントリに該当する。したがって、論理ディスク管理部414によってカウントされるエントリ数は2である。論理ディスク管理部414は、カウントされたエントリ数である2を、論理ディスク重複排除テーブル423Bの総エントリ数である5で除した値である0.4(=2/5)を、第2論理ディスク432Aの貢献度として算出する。
このように、ノード重複排除テーブル422の被参照数(すなわち、一つ以上の論理ディスク43内の、ある第1物理アドレスに関連付けられた論理アドレスの総数)と、論理ディスク重複排除テーブル423のカウント(すなわち、ある一つの論理ディスク内の、第1物理アドレスに関連付けられた論理アドレスの数)とが等しい場合に算出される貢献度は、ノード重複排除テーブル422の被参照数と、論理ディスク重複排除テーブルのカウントとが異なる場合に算出される貢献度よりも低くなる。
論理ディスク管理部414は、同様にして他の各論理ディスクの貢献度を算出する。
図9は、論理ディスク管理部414により算出された論理ディスク毎の貢献度の例を示す。図9では、論理ディスク番号が“1”である第1論理ディスク431Aの貢献度が0.8であり、論理ディスク番号が“2”である第2論理ディスク432Aの貢献度が0.4であり、論理ディスク番号が“3”である第3論理ディスクの貢献度が0.55であることが示されている。
論理ディスク管理部414は、算出された論理ディスク毎の貢献度に基づいて、これら三つの論理ディスク43から移動対象の論理ディスクを選択する。論理ディスク管理部414は、三つの論理ディスク43の内、例えば、貢献度が最も低い第2論理ディスク432Aを移動対象の論理ディスクとして選択する。
論理ディスク管理部414は、中央コントローラ3に、移動対象の論理ディスクが第2論理ディスク432Aであることを通知する(例えば、第2論理ディスク432Aの論理ディスク番号を通知する)。そして、論理ディスク管理部414は、この第2論理ディスク432Aに対応する論理ディスク重複排除テーブル423を中央コントローラ3に送信する。
中央コントローラ3の管理部31は、第1ノード4A(論理ディスク管理部414)から、第2論理ディスク432Aが移動対象であることを示す通知を受け、この第2論理ディスク432Aに対応する論理ディスク重複排除テーブル423を受信する。また、管理部31は、移動先候補のノードである第2ノード4Bおよび第Nノード4Cの各々から、ノード重複排除テーブル422を受信する。
管理部31は、移動対象の第2論理ディスク432Aが移動先候補のいずれかのノードに移動されることによる効果を試算する。中央コントローラ3は、この効果の指標として、ストレージシステム全体での物理容量の増減を用い、移動の結果、ストレージシステム全体でデータ格納に使用される物理容量が削減されるほど、効果が高いものと判別する。
管理部31は、移動対象の論理ディスクが移動された前後において、ストレージシステム全体で使用される物理容量の増減を試算するために、以下の二つの量を比較する。
(1)移動元ノードにおいて、移動前と比較して削減される、データ格納に使用される物理容量(削減量)
(2)移動先ノードにおいて、移動前と比較して増加する、データ格納に使用される物理容量(増加量)
管理部31は、上記の(1)削減量と(2)増加量とを用いて、ストレージシステム全体でデータ格納に使用される物理容量が削減されるように、移動先ノードを選択する。削減量が増加量よりも小さい場合、あるいは削減量と増加量とが等しい場合、ストレージシステム全体での物理容量が増加するか、変わらないので、移動対象の論理ディスクが移動されるメリットがない。一方、削減量が増加量よりも大きい場合、ストレージシステム全体での物理容量が減少するので、移動対象の論理ディスクが移動されるメリットがある。
したがって、管理部31は、増加量から削減量を引いた値を、ストレージシステム全体での物理容量の増減を示す値として移動先候補ノード毎に算出し、算出された値が最大である移動先候補ノードを移動先ノードとして選択する。
より具体的には、まず、管理部31は、移動元ノードである第1ノード4A内の物理ディスク47において削減されるデータ格納のための物理容量(削減量)を推定する。中央コントローラ3は、例えば、第1ノード4Aから第2論理ディスク432Aの貢献度を受信し、この貢献度と第2論理ディスク432Aに対応する論理ディスク重複排除テーブル423に含まれる総エントリ数とを用いて、下記の式により削減量を算出する。
削減量=(1−貢献度)×論理ディスク重複排除テーブルに含まれる総エントリ数
この削減量は、移動対象の論理ディスクの移動によって、移動元ノードの物理ディスク47から削除されるデータの数(チャンク数)に相当するので、移動元ノードにおいて削減されるデータ格納のための物理容量を表す指標として用いることができる。なお、第1ノード4Aの論理ディスク管理部414がこの削減量を算出し、算出された削減量を中央コントローラ3に送信するようにしてもよい。
例えば、図8に示した例のように、第2論理ディスク432Aの貢献度が0.4であり、第2論理ディスク432Aに対応する論理ディスク重複排除テーブル423に含まれる総エントリ数が5である場合、
削減量=(1−0.4)×5=3
が算出される。
また、中央コントローラ3の管理部31は、移動対象の第2論理ディスク432Aが移動されることによって、移動先候補のノードである第2ノード4Bおよび第Nノード4Cの各々の物理ディスク47において増加するデータ格納のための物理容量(増加量)を推定する。より具体的には、中央コントローラ3の管理部31は、移動対象の論理ディスクの論理ディスク重複排除テーブル423の各エントリのハッシュ値を、移動先候補のノードのノード重複排除テーブル422の各エントリのハッシュ値と比較することにより、論理ディスク重複排除テーブル423に含まれる全てのエントリの内、ノード重複排除テーブル422に同一のハッシュ値のエントリがないエントリの数をカウントする。このエントリの数は、移動対象の論理ディスクの移動によって、移動先候補のノードの物理ディスクに新たに格納されるデータの数(チャンク数)に相当するので、移動先候補のノードにおいて増加するデータ格納のための物理容量(増加量)を表す指標として用いることができる。
図10は、移動対象の第2論理ディスク432A内のデータが第2ノード4Bに移動されることによって、第2ノード4B内の物理ディスク47において増加するデータ格納のための物理容量(増加量)が算出される例を示す。
管理部31は、移動対象の第2論理ディスク432Aに対応する論理ディスク重複排除テーブル423Bの各エントリのハッシュ値を、第2ノード4Bのノード重複排除テーブル422Bの各エントリのハッシュ値と比較し、論理ディスク重複排除テーブル423Bに含まれる全てのエントリの内、ノード重複排除テーブル422Bに同一のハッシュ値のエントリがないエントリを検出して、検出されたエントリの数をカウントする。図10に示す例では、論理ディスク重複排除テーブル423Bに含まれる五つのエントリの内、ハッシュ値が“0x1234”であるエントリのみが、ノード重複排除テーブル422Bに同一のハッシュ値のエントリがあるエントリであり、他の四つのエントリは、ノード重複排除テーブル422Bに同一のハッシュ値のエントリがないエントリである。そのため、管理部31は、増加量として4を算出する。
図11は、移動対象の第2論理ディスク432Aが第Nノード4Cに移動されることによって、第Nノード4C内の物理ディスク47において増加するデータ格納のための物理容量(増加量)が算出される例を説明する。
管理部31は、移動対象の第2論理ディスク432Aに対応する論理ディスク重複排除テーブル423Bの各エントリのハッシュ値を、第Nノード4Cのノード重複排除テーブル422Cの各エントリのハッシュ値と比較し、論理ディスク重複排除テーブル423Bに含まれる全てのエントリの内、ノード重複排除テーブル422Cに同一のハッシュ値のエントリがないエントリを検出して、検出されたエントリの数をカウントする。図11に示す例では、論理ディスク重複排除テーブル423Bに含まれる五つのエントリの内、ハッシュ値が“0x1234”、“0xA010”、“0x4182”、および“0x3110”である四つのエントリが、ノード重複排除テーブル422Cに同一のハッシュ値のエントリがあるエントリであり、他の一つのエントリが、ノード重複排除テーブル422Cに同一のハッシュ値のエントリがないエントリである。そのため、管理部31は、増加量として1を算出する。
管理部31は、上記の削減量および増加量の算出結果を用いて、ストレージシステム全体でデータ格納に使用される物理容量(データ格納量)が削減されるように、移動先ノードを選択する。管理部31は、移動先候補ノードにおける増加量から、移動元ノードにおける削減量を引いた値を、ストレージシステム全体での物理容量の増減を示す値として移動先候補ノード毎に算出し、算出された値が最大である移動先候補ノードを移動先ノードとして選択する。
上述したように、図7から図11に示した例において、移動対象の第2論理ディスク432Aが移動されることによる物理容量の増減は以下の通りである。
(1)移動元ノードである第1ノード4Aにおける削減量: 3
(2−1)移動先候補ノードである第2ノード4Bにおける増加量: 4
(2−2)移動先候補ノードである第Nノード4Cにおける増加量: 1
第2論理ディスク432Aが第2ノード4Bに移動される場合、ストレージシステム全体で使用される物理容量の増減を示す値は、−1(=3−4)である。つまり、第2論理ディスク432Aが第2ノード4Bに移動される場合には、ストレージシステム全体で使用される物理容量が増加してしまう。
一方、第2論理ディスク432Aが第Nノード4Cに移動される場合、ストレージシステム全体で使用される物理容量の増減を示す値は、2(=3−1)である。つまり、第2論理ディスク432Aが第Nノード4Cに移動される場合には、ストレージシステム全体で使用される物理容量を削減することができる。
以上の結果に基づき、管理部31は、ストレージシステム全体で使用される物理容量の増減を示す値が最大である第Nノード4Cを、移動先ノードとして選択する。管理部31は、移動対象の論理ディスクを移動元ノードから移動先ノードに移動するための処理を行うか、あるいは管理者またはユーザに移動の提案を行う。
管理部31により、移動対象の論理ディスクを移動元ノードから移動先ノードに移動するための処理は以下の通りである。
まず、管理部31は、移動先ノードに新たな論理ディスクの作成を要求する。移動先ノードの論理ディスク管理部414は、この要求に応じて新たな論理ディスクを作成する。
次いで、管理部31は、移動元ノードに、移動対象の論理ディスク内の全データの読み出しを要求する。より具体的には、管理部31は、例えば、移動対象の論理ディスクの論理ディスク番号と、この論理ディスクに対応する論理アドレスの内、物理アドレス空間にマッピングされている全論理アドレスのそれぞれとを指定したリード要求を移動元ノードに送信する。移動元ノードのリード制御部411は、このリード要求に応じて、移動対象の論理ディスク内の全データを読み出し、読み出されたデータを中央コントローラ3に送信する。管理部31は、移動元ノードから、移動対象の論理ディスク内の全データを受信する。
そして、管理部31は、移動先ノードに、受信した移動対象の論理ディスク内の全データの書き込みを要求する。より具体的には、管理部31は、作成された新たな論理ディスクの論理ディスク番号と、データを書き込む論理アドレス(論理アドレス範囲)とが指定されたライト要求を移動先ノードに送信する。移動先ノードのライト制御部412は、このライト要求に応じて、作成された新たな論理ディスクにデータを書き込む。
管理部31は、移動先ノードにおけるデータの書き込みが完了したことに応じて、管理テーブル32を更新する。上述したように、管理テーブル32は、あるデータが、どのノードのどの論理ディスクに存在しているかを示す。そのため、管理部31は、移動元ノードの移動対象の論理ディスクに存在していたデータが、移動先ノードの新たに作成された論理ディスクに存在していることを示すように、管理テーブル32を更新する。
そして、管理部31は、移動元ノードに、移動対象の論理ディスク内の全データの削除を要求する。より具体的には、管理部31は、例えば、移動対象の論理ディスクの論理ディスク番号と、この論理ディスクに対応する全論理アドレス(論理アドレス範囲)とを指定した削除要求を移動元ノードに送信する。移動元ノードの削除制御部413は、この削除要求に応じて、移動対象の論理ディスク内の全データを削除する(すなわち、全論理アドレスをアンマップ状態にする)。
図12のフローチャートを参照して、ノード4によって実行されるリード処理の手順の例を説明する。
まず、各ノード4に設けられるノードコントローラ41は、クライアント2からリード要求(リードコマンド)を受け付けたか否かを判定する(ステップS11)。リード要求では、例えば、データが読み出される論理ディスク番号と論理アドレスとが指定されている。ノードコントローラ41は、リード要求を、クライアント2から直接受け付けてもよいし、中央コントローラ3を介して受け付けてもよい。リード要求を受け付けていない場合(ステップS11のNO)、ステップS11に戻り、リード要求を受け付けたか否かが再度判定される。
リード要求を受け付けた場合(ステップS11のYES)、ノードコントローラ41は、リード要求で指定された論理ディスク番号と論理アドレスとを用いて論理−物理マップテーブル421を検索し、対応するエントリを取得する(ステップS12)。ノードコントローラ41は、取得されたエントリから物理アドレスを取得する(ステップS13)。そして、ノードコントローラ41は、物理ディスク471,472から、取得された物理アドレスのデータを読み出し(ステップS14)、読み出されたデータをクライアント2に返却(送信)する(ステップS15)。
以上により、読み出しが要求されたデータを、クライアント2に返却することができる。
図13のフローチャートは、ノード4によって実行される削除処理の手順の例を示す。ここでは、説明を分かりやすくするために、削除要求(例えば、アンマップコマンドまたはトリムコマンド)が、チャンク単位のデータを削除するための要求であることを想定する。
まず、ノードコントローラ41は、削除要求を受け付けたか否かを判定する(ステップS201)。削除要求では、例えば、データが削除される論理ディスク番号と論理アドレスとが指定されている。ノードコントローラ41は、削除要求を、クライアント2から直接受け付けてもよいし、中央コントローラ3を介して受け付けてもよい。さらに、ノードコントローラ41は、当該ノードコントローラ41によって他の処理中に生成された削除要求を受け付けてもよい。削除要求を受け付けていない場合(ステップS201のNO)、ステップS201に戻り、削除要求を受け付けたか否かが再度判定される。
削除要求を受け付けた場合(ステップS201のYES)、ノードコントローラ41は、削除要求で指定された論理ディスク番号と論理アドレスとを用いて、論理−物理マップテーブル421を検索し、対応するエントリを取得する(ステップS202)。そして、ノードコントローラ41は、取得されたエントリを論理−物理マップテーブル421から削除する(ステップS203)。
次いで、ノードコントローラ41は、物理ディスク471,472から、取得されたエントリに含まれる第1物理アドレスのデータを読み出し(ステップS204)、読み出されたデータのハッシュ値を算出する(ステップS205)。ノードコントローラ41は、算出されたハッシュ値を用いて、削除要求で指定された論理ディスク番号の論理ディスクに対応する論理ディスク重複排除テーブル423を検索し、このハッシュ値に対応するエントリにおいて、カウントから1を引く(ステップS206)。
そして、ノードコントローラ41は、このエントリのカウントが0になったか否かを判定する(ステップS207)。カウントが0になった場合(ステップS207のYES)、ノードコントローラ41は、このエントリを論理ディスク重複排除テーブル423から削除する(ステップS208)。カウントが0でない場合(ステップS207のNO)、すなわち、カウントが1以上である場合、ステップS208がスキップされる。
次いで、ノードコントローラ41は、第1物理アドレスを用いてノード重複排除テーブル422を検索し、第1物理アドレスに対応するエントリにおいて、被参照数から1を引く(ステップS209)。そして、ノードコントローラ41は、このエントリの被参照数が0になったか否かを判定する(ステップS210)。被参照数が0になった場合(ステップS210のYES)、このエントリをノード重複排除テーブル422から削除する(ステップS211)。被参照数が0でない場合(ステップS210のNO)、すなわち、被参照数が1以上である場合、ステップS211がスキップされる。
以上により、削除要求に応じて、論理−物理マップテーブル421から対応するエントリが削除される(アンマップ)と共に、ノード重複排除テーブル422および論理ディスク重複排除テーブル423内の対応するエントリも更新することができる。
図14のフローチャートは、ノード4によって実行されるライト処理の手順の例を示す。ここでは、説明を分かりやすくするために、クライアント2からのライト要求(ライトコマンド)が、チャンク単位のデータを書き込むための要求であることを想定する。
まず、ノードコントローラ41は、クライアント2からライト要求(ライトコマンド)を受け付けたか否かを判定する(ステップS301)。ライト要求では、データが書き込まれる論理ディスク番号と論理アドレスとが指定されている。ノードコントローラ41は、ライト要求をクライアント2から直接受け付けてもよいし、中央コントローラ3を介して受け付けてもよい。ライト要求を受け付けていない場合(ステップS301のNO)、ステップS301に戻り、クライアント2からライト要求を受け付けたか否かが再度判定される。
クライアント2からライト要求を受け付けた場合(ステップS301のYES)、ノードコントローラ41は、ライト要求で指定された論理ディスク番号と論理アドレスとを用いて、論理−物理マップテーブル421を検索する(ステップS302)。この検索により、論理−物理マップテーブル421から、指定された論理ディスク番号および論理アドレスに該当するエントリが見つかった場合(ステップS303のYES)、ノードコントローラ41は、この論理ディスクおよび論理アドレスを指定した削除処理を行う(ステップS304)。ノードコントローラ41が、例えば、論理ディスクおよび論理アドレスを指定した削除要求を生成することにより、この削除要求に応じて削除処理が実行される。削除処理の手順については、図13を参照して上述した通りである。一方、論理−物理マップテーブル421に該当するエントリがない場合(ステップS303のNO)、ステップS304がスキップされる。
次いで、ノードコントローラ41は、ライト要求に応じてクライアント2から受信された書き込みデータのハッシュ値を算出する(ステップS305)。ノードコントローラ41は、算出されたハッシュ値を用いてノード重複排除テーブル422を検索する(ステップS306)。この検索により、ノード重複排除テーブル422から、ハッシュ値に該当するエントリ(以下、第1エントリとも称する)が見つかった場合(ステップS307のYES)、ノードコントローラ41は、その第1エントリに含まれる物理アドレスを取得し(ステップS308)、ライト要求で指定された論理ディスク番号および論理アドレスと、取得された物理アドレスとを含む新たなエントリを、論理−物理マップテーブル421に追加する(ステップS309)。また、ノードコントローラ41は、ノード重複排除テーブル422において、第1エントリの被参照数に1を加える(ステップS310)。
そして、ノードコントローラ41は、ライト要求で指定された論理ディスク番号の論理ディスクに対応する論理ディスク重複排除テーブル423に、算出されたハッシュ値に該当するエントリがあるか否かを判定する(ステップS311)。論理ディスク重複排除テーブル423に、算出されたハッシュ値に該当するエントリがある場合(ステップS311のYES)、ノードコントローラ41は、第2エントリのカウントに1を加える(ステップS312)。一方、論理ディスク重複排除テーブル423に、算出されたハッシュ値に該当する第2エントリがない場合(ステップS311のNO)、ノードコントローラ41は、論理ディスク重複排除テーブル423に、算出されたハッシュ値と1が設定されたカウントとを含む新たなエントリを追加する(ステップS316)。
また、ステップS306における検索の結果、ノード重複排除テーブル422に、書き込みデータのハッシュ値に該当するエントリがない場合(ステップS307のNO)、ノードコントローラ41は、物理ディスク471,472内の領域を新たに割り当て、その領域の書き込みデータを書き込む(ステップS313)。ノードコントローラ41は、ライト要求で指定された論理ディスク番号および論理アドレスと、データが書き込まれた領域の物理アドレスとを含む新たなエントリを、論理−物理マップテーブル421に追加する(ステップS314)。ノードコントローラ41は、ノード重複排除テーブル422に、算出されたハッシュ値と、データが書き込まれた領域の物理アドレスと、1が設定された被参照数とを含む新たなエントリを追加する(ステップS315)。そして、ノードコントローラ41は、論理ディスク重複排除テーブル423に、算出されたハッシュ値と1が設定されたカウントとを含む新たなエントリを追加する(ステップS316)。
以上により、ライト要求に応じてクライアント2から受信された書き込みデータが、物理ディスク471,472に既に格納されているデータと重複する場合、書き込みデータは物理ディスク471,472に書き込まれず、既に格納されているデータへの参照を示すエントリが論理−物理マップテーブル421に追加される。したがって、データをストレージに効率良く保存することができる。
図15のフローチャートを参照して、中央コントローラ3によって実行される移動制御処理の手順の例を説明する。
まず、中央コントローラ3は、複数のノード4から移動元ノードを選択する(ステップS401)。中央コントローラ3は、性能と容量の少なくとも一方に余裕がないノードを移動元ノードとして選択する。
中央コントローラ3は、移動元ノードに、移動対象の論理ディスクの選択を要求する(ステップS402)。移動元ノードが移動対象の論理ディスクを選択する処理の手順については、図17のフローチャートを参照して後述する。中央コントローラ3は、移動元ノードによって移動対象の論理ディスクが選択されたか否かを判定する(ステップS403)。中央コントローラ3は、例えば、移動元ノードから、移動対象の論理ディスクが選択されたことを示す通知や移動対象の論理ディスクの論理ディスク番号を受け取った場合に、移動対象の論理ディスクが選択されたと判定する。移動対象の論理ディスクが選択されていない場合(ステップS403のNO)、ステップS403に戻り、移動対象の論理ディスクが選択されたか否かが再度判定される。
移動対象の論理ディスクが選択された場合(ステップS403のYES)、中央コントローラ3は、移動元ノードから、移動対象の論理ディスクの論理ディスク重複排除テーブル423と、この論理ディスクの移動元ノード内での重複排除に関する貢献度とを取得(受信)する(ステップS404)。貢献度は、移動対象の論理ディスクを選択するための処理において算出される。貢献度を算出するための処理の手順については、図18のフローチャートを参照して後述する。また、中央コントローラ3は、ストレージシステムに含まれる複数のノード4の内の、移動元ノード以外のノードである移動先候補の各ノードから、ノード重複排除テーブル422を取得(受信)する(ステップS405)。
次いで、中央コントローラ3は、移動対象の論理ディスクの論理ディスク重複排除テーブル423と貢献度とを用いて、移動対象の論理ディスクがいずれかの移動先候補のノードに移動されることによる、移動元ノードでの削減量(削減される使用量)を算出する(ステップS406)。
また、中央コントローラ3は、移動対象の論理ディスクの論理ディスク重複排除テーブル423と、ある移動先候補のノードのノード重複排除テーブル422とを用いて、移動対象の論理ディスクが当該移動先候補のノードに移動されることによる、当該移動先候補のノードでの増加量(増加する使用量)を算出する(ステップS407)。中央コントローラ3は、別の移動先候補のノードがあるか否かを判定する(ステップS408)。別の移動先候補のノードがある場合(ステップS408のYES)、ステップS407に戻り、その別の移動先候補のノードでの増加量を算出する。別の移動先候補のノードがない場合(ステップS408のNO)、すなわち、全ての移動先候補のノードについて、移動対象の論理ディスクが移動されることによる増加量が算出された場合、ステップS409に進む。
ステップS409において、中央コントローラ3は、算出された移動元ノードでの削減量と移動先候補の各ノードでの増加量とを用いて、移動先候補のノード毎に、ストレージシステム全体での使用量の増減を算出する。例えば、移動元ノードでの削減量とある移動先候補のノードでの増加量とを比較して、増加量よりも削減量が大きいならば、システム全体での使用量は減少し、移動対象の論理ディスクをその移動先候補のノードに移動するメリットがある。一方、削減量よりも増加量が大きいならば、システム全体での使用量は増加し、移動対象の論理ディスクをその移動先候補のノードに移動するメリットはない。
中央コントローラ3は、移動先候補のノード毎に算出された、システム全体での使用量の増減に基づいて、使用量が削減される移動先候補のノードがあるか否かを判定する(ステップS410)。使用量が削減される移動先候補のノードがある場合(ステップS410のYES)、中央コントローラ3は、削減される使用量が最大となる移動先候補のノードを移動先ノードとして選択する(ステップS411)。そして、中央コントローラ3は、移動対象の論理ディスク(移動対象の論理ディスク内の全データ)を移動先ノードに移動するためのデータ移動処理を行い(ステップS412)、処理を終了する。データ移動処理の手順については、図16のフローチャートを参照して後述する。なお、中央コントローラ3は、データ移動処理を行う代わりに、移動対象の論理ディスクを移動先ノードに移動することを管理者またはユーザに提案してもよい。中央コントローラ3は、例えば、移動対象の論理ディスクを移動先ノードに移動することを薦めるメッセージを管理者またはユーザに通知する。この場合、管理者またはユーザにより、移動対象の論理ディスクを移動先ノードに移動することを指示する操作が行われた場合に、データ移動処理を行うようにしてもよい。
一方、使用量が削減される移動先候補のノードがない場合(ステップS410のNO)、処理を終了する。なお、中央コントローラ3は、移動対象の論理ディスクを移動しようとしたものの、使用量が削減される移動先候補のノードがなかったことを管理者またはユーザに通知するようにしてもよい。
図16のフローチャートは、図15のフローチャートのステップS411に相当するデータ移動処理の手順の例を示す。データ移動処理は、上述した通り、移動対象の論理ディスク(移動対象の論理ディスク内の全データ)を移動先ノードに移動するための処理であり、中央コントローラ3によって実行される。
中央コントローラ3は、まず、移動先ノードに新たな論理ディスクの作成を要求する(ステップS51)。移動先ノードのノードコントローラ41は、この要求に応じて、当該ノード内に新たな論理ディスクを作成する。中央コントローラ3は、作成された新たな論理ディスクの論理ディスク番号を取得する。
次いで、中央コントローラ3は、移動元ノードに、移動対象の論理ディスク内の全データの読み出しを要求する(ステップS52)。移動元ノードのノードコントローラ41は、この要求に応じて、移動対象の論理ディスク内の全データを読み出し、読み出されたデータを中央コントローラ3に送信する。ノードコントローラ41によるリード処理の手順は、図12を参照して上述した通りである。
中央コントローラ3は、移動元ノードから、移動対象の論理ディスク内の全データを受信する(ステップS53)。中央コントローラ3は、移動先ノードに、受信した移動対象の論理ディスク内の全データの書き込みを要求する(ステップS54)。移動先ノードのノードコントローラ41は、この要求に応じて、ステップS51によって作成された新たな論理ディスクにデータを書き込む。ノードコントローラ41によるライト処理の手順は、図14を参照して上述した通りである。
中央コントローラ3は、移動先ノードによるデータの書き込みが完了したか否かを判定する(ステップS55)。中央コントローラ3は、例えば、移動先ノードから全データについて書き込みが完了したことを示す通知を受け取った場合に、移動先ノードによるデータの書き込みが完了したと判定する。移動先ノードによるデータの書き込みが完了していない場合(ステップS55のNO)、ステップS55に戻る。
一方、移動先ノードによるデータの書き込みが完了した場合(ステップS55のYES)、中央コントローラ3は管理テーブル32を更新する(ステップS56)。中央コントローラ3は、移動元ノードの移動対象の論理ディスクに存在していたデータが、移動先ノードの新たに作成された論理ディスクに存在していることを示すように、管理テーブル32を更新する。
そして、中央コントローラ3は、移動元ノードに、移動対象の論理ディスク内の全データの削除を要求する(ステップS57)。ノードコントローラ41による削除処理の手順は、図13を参照して上述した通りである。
図17のフローチャートは、ノード4によって実行される論理ディスク選択処理の手順の例を示す。
ノードコントローラ41は、中央コントローラ3から移動対象の論理ディスクの選択が要求されたか否かを判定する(ステップS61)。この中央コントローラ3による要求は、図15のフローチャートを参照して上述したステップS402に相当する。したがって、ノード4の内の、中央コントローラ3が移動元ノードとして選択したいずれかのノードがこの要求を受信する。移動対象の論理ディスクの選択が要求されていない場合(ステップS61のNO)、ステップS61に戻る。
移動対象の論理ディスクの選択が要求された場合(ステップS61のYES)、ノードコントローラ41は、物理ディスク471,472から主メモリ42に、ノード内に存在する各論理ディスク431,432に対応する論理ディスク重複排除テーブル423を読み出す(キャッシュする)(ステップS62)。また、ノードコントローラ41は、物理ディスク471,472から主メモリ42にノード重複排除テーブル422を読み出す(キャッシュする)(ステップS63)。
次いで、ノードコントローラ41は、ノード内の論理ディスク431,432から、貢献度の算出対象である一つの論理ディスクを選択する(ステップS64)。ノードコントローラ41は、算出対象の論理ディスクに対応する論理ディスク重複排除テーブル423とノード重複排除テーブル422とを用いて、その論理ディスクの重複排除に対する貢献度を算出するための貢献度算出処理を行う(ステップS65)。貢献度算出処理の手順については、図18を参照して後述する。
そして、ノードコントローラ41は、ノード内に貢献度の算出対象となる別の論理ディスクがあるか否かを判定する(ステップS66)。算出対象となる別の論理ディスクがある場合(ステップS66のYES)、ステップS64に戻り、別の論理ディスクの重複排除に対する貢献度を算出するための処理が行われる。
一方、算出対象となる別の論理ディスクがない場合(ステップS66のNO)、すなわち、ノード内の全ての論理ディスク431,432について、重複排除に対する貢献度がそれぞれ算出された場合、ノードコントローラ41は、ノード内に存在する全ての論理ディスク431,432の内、貢献度が最小である論理ディスクを移動対象の論理ディスクとして選択する(ステップS67)。ノードコントローラ41は、選択された移動対象の論理ディスクを中央コントローラ3に通知する(ステップS68)。ノードコントローラ41は、例えば、選択された移動対象の論理ディスクの論理ディスク番号を中央コントローラ3に通知する。また、ノードコントローラ41は、この移動対象の論理ディスクに対応する論理ディスク重複排除テーブル423を中央コントローラ3に送信する(ステップS69)。
図18のフローチャートを参照して、図17のフローチャートに示したステップS65に相当する貢献度算出処理の手順の例を説明する。貢献度算出処理は、上述した通り、各論理ディスク431,432の重複排除に対する貢献度を算出するための処理であり、ノード4によって実行される。この処理では、貢献度を算出する対象の一つの論理ディスクに対応する一つの論理ディスク重複排除テーブル423と、ノード重複排除テーブル422とが用いられる。
まず、ノードコントローラ41は、貢献度を算出する対象の論理ディスク431,432に対応する論理ディスク重複排除テーブル423に含まれる一つ以上のエントリの内で、重複排除に貢献しているエントリをカウントするためのヒットカウンタを初期化する、すなわち、ヒットカウンタに0を設定する(ステップS71)。
次に、ノードコントローラ41は、論理ディスク重複排除テーブル423から一つのエントリを選択する(ステップS72)。ノードコントローラ41は、例えば、論理ディスク重複排除テーブル423に含まれる一つ以上のエントリを先頭から順に選択してもよい。
ノードコントローラ41は、選択されたエントリのハッシュ値で、ノード重複排除テーブル422を検索する(ステップS73)。この検索により、ノード重複排除テーブル422において、ハッシュ値が同一であるエントリがヒットした場合(ステップS74のYES)、ノードコントローラ41は、論理ディスク重複排除テーブル423から選択されたエントリのカウントと、ノード重複排除テーブル422においてヒットしたエントリの被参照数とが等しいかどうかを判定する(ステップS75)。カウントと被参照数とが等しくない場合(ステップS75のNO)、ノードコントローラ41はヒットカウンタに1を加える(ステップS76)。カウントと被参照数とが等しい場合(ステップS75のYES)、ステップS76がスキップされる。また、ステップS73の検索により、ノード重複排除テーブル422において、ハッシュ値が同一であるエントリがヒットしなかった場合(ステップS74のNO)、ステップS75およびステップS76がスキップされる。
次いで、ノードコントローラ41は、論理ディスク重複排除テーブル423に、重複排除に対する貢献がまだ判定されていない別のエントリが存在するか否かを判定する(ステップS77)。重複排除に対する貢献がまだ判定されていない別のエントリが存在する場合(ステップS77のYES)、ステップS72に戻り、別のエントリに関する処理が続行される。
一方、重複排除に対する貢献がまだ判定されていない別のエントリが存在しない場合(ステップS77のNO)、すなわち、論理ディスク重複排除テーブル423に含まれる全てのエントリについて、重複排除に対する貢献が判定された場合、ノードコントローラ41は、ヒットカウンタの値を、論理ディスク重複排除テーブル423に含まれる総エントリ数で除した値を、貢献度として返す(ステップS78)。
以上により、ある論理ディスク431,432の重複排除に対する貢献度を算出することができる。
以上説明したように、本実施形態によれば、重複排除の効果を高めることができる。中央コントローラ3は、複数のノード4から第1ノードを選択する。第1ノードは、一つ以上の物理ディスク47と、第1ノードにおける重複排除に関するノード重複排除テーブル422と、一つ以上の物理ディスク47に対して設定された一つ以上の論理ディスク43の各々における重複排除に関する一つ以上の論理ディスク重複排除テーブル423とを用いて、一つ以上の論理ディスク43から第1論理ディスクを選択するノードコントローラ41とを備える。中央コントローラ3は、複数のノード4から第1ノードを除いた一つ以上のノードから第2ノードを選択し、第1論理ディスク内のデータを第2ノードに移動する。
これにより、ストレージシステム全体での重複排除の効果を高めることができ、ストレージシステム全体でデータ格納に使用される物理容量を削減することができる。
(第2実施形態)
第1実施形態では、複数のノードの各々で重複排除処理が行われ、重複排除の効果を高めるために二つのノード間で論理ディスクが移動される。これに対して、第2実施形態では、一つのノード内に複数のストレージプールが設けられ、複数のストレージプールの各々で重複排除処理が行われ、重複排除の効果を高めるために二つのストレージプール間で論理ディスクが移動される。第2実施形態では、複数のストレージプールを備える一つのノード内における、重複排除の効果を高めるための構成を示す。
以下では、このような構成として、一つのノード内に複数のストレージプールノードが設けられる場合を例示する。各ストレージプールノードは、一つのストレージプールと、そのストレージプール内で重複排除処理を行い、別のストレージプールノードとの間で論理ディスクを移動するためのコントローラとを備える。第2実施形態では、第1実施形態のノードを、ストレージプールノードに置き換えることにより、複数のストレージプールを備える一つのノード内において、第1実施形態と同様に重複排除の効果を高めることができる。
第2実施形態に係るストレージプールノードの構成は第1実施形態のノード4の構成と同様であり、また第2実施形態に係るノードコントローラの構成は第1実施形態の中央コントローラ3の構成と同様である。以下では、図19および図20を参照して、第2実施形態に係る情報処理システム1Aの構成を説明するが、各構成の具体的な動作は、第1実施形態に係る情報処理システム1内の対応する構成の動作と同様である。
まず、図19は、第2実施形態に係るストレージシステムを含む情報処理システム1Aの構成を示す。このストレージシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成されたストレージとして機能するノード4Dを備える。
ノード4Dは、一つ以上のストレージプールノード8を備える。図19に示す例では、ノード4DにN個のストレージプールノード8が設けられている。各ストレージプールノード8は、一つ以上の物理ディスクを備える。この物理ディスクは、データを格納可能な不揮発性メモリを備え、例えば、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)等として実現される。各ストレージプールノード8は、例えば、筐体、ラック、あるいはフロアのような特定の範囲内に配置される多数の物理ディスクを含み得る。また、各ストレージプールノード8では、一つ以上の物理ディスクを結合することによりストレージプール(仮想ディスク)を作成し、このストレージプールの記憶領域を論理的に分割または結合することにより、一つ以上の論理ディスクが設定(作成)される。
図19に示す例では、ノード4DにN個のストレージプールノード(ストレージプール)が設けられている。
第1ストレージプールノード8Aは、第1物理ディスク871Aと第2物理ディスク872Aとを備える。そして、第1ストレージプールノード8Aでは、これら物理ディスク871A,872Aの領域を結合することによりストレージプール(仮想ディスク)88Aを作成し、このストレージプール88Aの記憶領域を論理的に分割または結合することにより、第1論理ディスク831Aと第2論理ディスク832Aとが作成されている。
第2ストレージプールノード8Bは、第1物理ディスク871Bと第2物理ディスク872Bとを備える。そして、第2ストレージプールノード8Bでは、これら物理ディスク871B,872Bの領域を結合することによりストレージプール88Bを作成し、このストレージプール88Bの記憶領域を論理的に分割または結合することにより、第1論理ディスク831Bと第2論理ディスク832Bとが作成されている。
また、第Nストレージプールノード8Cは、第1物理ディスク871Cと第2物理ディスク872Cとを備える。そして、第Nストレージプールノード8Cでは、これら物理ディスク871C,872Cの領域を結合することによりストレージプール88Cを作成し、このストレージプール88Cの記憶領域を論理的に分割または結合することにより、第1論理ディスク831Cと第2論理ディスク832Cとが作成されている。
ここでは、各ストレージプールノード8A,8B,8Cに、二つの物理ディスクと二つの論理ディスクとが設けられる例を示したが、各ストレージプールノード8A,8B,8Cには、任意の数の物理ディスクと、任意の数の論理ディスクとを設けることができる。
情報処理システム1Aは、クライアント2とノード4Dとによって構成される。クライアント2とノード4Dとは、ケーブルまたはネットワーク5を介して相互に接続されている。クライアント2は、ノード4Dにアクセスする情報処理装置(コンピューティングデバイス)であり、第1実施形態において記載した構成を有している。
ストレージプールノード8の各々は、第1実施形態のノード4と同様に、ストレージプールノード内に重複したデータが格納されないように制御する重複排除機能を有する。各ストレージプールノード8は、重複排除機能により、クライアント2から新たに受信された書き込みデータと一致するデータ(重複データ)が既に物理ディスクに格納されている場合、この書き込みデータを物理ディスクに書き込まず、代わりに、この書き込みデータの論理アドレスに、重複データが格納されている物理アドレスを関連付ける。これにより、ストレージプールノード内に重複したデータが格納されず、したがって重複排除を実現することができる。なお、本ストレージシステムでは、各ストレージプールノード8内で重複排除のための処理が行われるが、複数のストレージプールノード8に跨った重複排除処理は行われないことを想定する。
ストレージプールノード8の各々では、重複排除処理によりストレージ効率が向上する。しかし、各ストレージプールノード8に類似度の低いデータが多く格納される場合には、重複排除を行うことによる効果が低く、ストレージ効率が十分に向上しない可能性がある。
そのため、本実施形態では、あるストレージプールノードにおいて重複排除に対する貢献度が低い論理ディスクを別のストレージプールノードに移動することにより、重複排除の効果を高め、ノード4D全体でのストレージ効率を向上させる。ノードコントローラ7とストレージプールノード8とは、連携して、移動元ストレージプールノードから移動対象の論理ディスクを選択し、その移動対象の論理ディスクを移動する移動先ストレージプールノードを選択し、移動対象の論理ディスクを移動元ストレージプールノードから移動先ストレージプールノードに移動するように構成される。
ノードコントローラ7は、ノード4D全体でのストレージ効率を向上させるように、各ストレージプールノード8における重複排除を管理する。ノードコントローラ7は、管理部71と管理テーブル72とを備える。ノードコントローラ7は、SoCのような回路によって実現され得る。
管理部71は、ノード4D全体でのストレージ効率を向上させるために、あるストレージプールノード8に含まれる論理ディスクを別のストレージプールノード8に移動する処理を行う。
より具体的には、管理部71は、ノード4D内の複数のストレージプールノード8から、移動対象となる論理ディスクの移動元のストレージプールノード(以下、移動元ストレージプールノードとも称する)を選択し、その移動元ストレージプールノードに、移動対象の論理ディスクを選択させる。管理部71は、性能と容量の少なくとも一方に余裕がないストレージプールノードを移動元ストレージプールノードとして選択する。性能は、例えば、リード性能とライト性能の少なくとも一方であり、物理ディスクに対するリード時間やライト時間を統計処理した値で表される。また、容量は、物理ディスクの空き領域の大きさや割合に基づく値で表される。管理部71は、例えば、性能と容量の少なくとも一方を表す値が最も低いストレージプールノードを移動元ストレージプールノードとして選択する。
管理部71は、移動元ストレージプールノードを除く複数のストレージプールノード8(以下、移動先候補ストレージプールノードとも称する)から、移動対象の論理ディスクが移動される移動先のストレージプールノード(以下、移動先ストレージプールノードとも称する)を選択する。具体的には、管理部71は、移動対象の論理ディスクがいずれかの移動先候補ストレージプールノードに移動されることによる、移動元ストレージプールノードで削減されるデータ格納のための物理容量(削減量)を算出する。また、管理部71は、移動対象の論理ディスクが移動先候補ストレージプールノードに移動されることによる、当該移動先候補ストレージプールノードで増加するデータ格納のための物理容量(増加量)を、移動先候補ストレージプールノード毎に算出する。管理部71は、論理ディスクの移動によるノード4D全体での削減量が最大となる移動先候補ストレージプールノードを、移動先ストレージプールノードとして選択する。
そして、管理部71は、移動元ストレージプールノードから移動先ストレージプールノードに、移動対象の論理ディスク内の全データを移動するための処理を行う。この処理に応じて、移動元ストレージプールノードでは、移動対象の論理ディスク内の全データが削除され、移動先ストレージプールノードでは、それら全データが格納される論理ディスクが新たに作成される。
また、管理テーブル72は、あるデータが、どのストレージプールノード(ストレージプール)のどの論理ディスク(LU)に存在しているか、あるいはどのストレージプールノードに保存されるべきかを管理する。したがって、管理部71は、この管理テーブル72を用いることにより、あるデータが、どのストレージプールノードのどの論理ディスクに存在しているか、あるいはどのストレージプールノードに保存されるべきかを決定することができる。なお、管理テーブル72を用いる代わりに、管理部71に、あるデータが、どのストレージプールノードのどの論理ディスクに存在しているか、あるいはどのストレージプールノードに保存されるべきかを決定するためのアルゴリズムが組み込まれていてもよい。
図20は、ストレージプールノード8の構成を示す。ストレージプールノード8は、ストレージプールコントローラ81と一つ以上の物理ディスク87とを備える。ストレージプールコントローラ81は、SoCのような回路によって実現され得る。ストレージプールノード8は主メモリ82を備えていてもよい。主メモリ82は、揮発性メモリであるランダムアクセスメモリ、例えば、DRAMである。
ストレージプールコントローラ81は、ノードコントローラ7、クライアント2および他のストレージプールノードの各々との間で各種の要求(コマンド)やデータを送受信するための通信機能を有している。ストレージプールコントローラ81は、データの書き込みおよび読み出しのような各種のアクセスのために物理ディスク87を制御する。また、ストレージプールコントローラ81は、クライアント2やノードコントローラ7から受信されたデータのバッファや、物理ディスク87から読み出されたデータのキャッシュ等のために、主メモリ82を制御する。
図20に示すように、主メモリ82には、アドレス変換テーブルとして機能する論理−物理マップテーブル821のキャッシュ領域が設けられている。論理−物理マップテーブル821は、論理ディスク83の論理アドレスそれぞれと、物理ディスク87の物理アドレスそれぞれとの間のマッピングを管理する。
主メモリ82にはさらに、処理中に用いられる各種の値や、各種のテーブル(例えば、ストレージプール重複排除テーブル822と論理ディスク重複排除テーブル823)の格納領域が設けられてもよい。ストレージプール重複排除テーブル822は、ストレージプールノード8毎に設けられ、各ストレージプールノード8における重複排除を管理する。論理ディスク重複排除テーブル823は、論理ディスク83毎に設けられ、各論理ディスク83における重複排除を管理する。
重複排除機能を有するストレージプールノード8における、論理アドレス空間61,62と物理アドレス空間65との関係は、図3を参照して上述した通りである。
論理−物理マップテーブル821は、論理ディスク831,832の論理アドレスそれぞれと、物理ディスク871,872の物理アドレスそれぞれとの間のマッピングを管理するための複数のエントリを含む。論理−物理マップテーブル821は、図4に示した論理−物理マップテーブル421と同様の構成を有する。
ストレージプール重複排除テーブル822は、対応する一つのストレージプールノード8内の物理ディスク871,872に格納されるチャンク単位の複数のデータに対応する複数のエントリを含む。ストレージプール重複排除テーブル822は、図5に示したノード重複排除テーブル422と同様の構成を有する。
論理ディスク重複排除テーブル823は、論理ディスク831,832毎に設けられる。論理ディスク重複排除テーブル823は、対応する一つの論理ディスクに論理的に格納されたデータのハッシュ値毎に、複数のエントリを含む。論理ディスク重複排除テーブル823は、図6に示した論理ディスク重複排除テーブル423と同様の構成を有する。
ストレージプールコントローラ81は、リード制御部811、ライト制御部812、削除制御部813、および論理ディスク管理部814として機能することができる。
リード制御部811は、クライアント2またはノードコントローラ7からリード要求を受け付けた場合、論理−物理マップテーブル821から、リード要求に指定された論理ディスク番号および論理アドレスに対応するエントリを検索し、そのエントリ内の物理アドレス(すなわち、指定された論理ディスク番号および論理アドレスにマッピングされた物理アドレス)を取得する。リード制御部811は、その物理アドレスに基づいて物理ディスク87からデータを読み出す。そして、リード制御部811は、読み出されたデータを要求したクライアント2またはノードコントローラ7に送信する。
削除制御部813は、クライアント2またはノードコントローラ7から削除要求を受け付けた場合、論理−物理マップテーブル821から、その削除要求に指定された論理ディスク番号および論理アドレスに対応するエントリを検索し、そのエントリ内の物理アドレス(すなわち、指定された論理ディスク番号および論理アドレスにマッピングされた物理アドレス)を取得する。そして、削除制御部813は、論理−物理マップテーブル821から、その取得されたエントリを削除する。
さらに、削除制御部813は、ストレージプール重複排除テーブル822および論理ディスク重複排除テーブル823を以下のように更新する。
(1)ストレージプール重複排除テーブルの更新: 削除制御部813は、ストレージプール重複排除テーブル822内の、取得された物理アドレスに対応するエントリにおいて、被参照数から1を引く。この被参照数が0になった場合、削除制御部813は、ストレージプール重複排除テーブル822から当該エントリを削除する。
(2)論理ディスク重複排除テーブルの更新: 削除制御部813は、取得された物理アドレスからデータを読み出し、そのデータのハッシュ値を算出する。削除制御部813は、削除要求に指定された論理ディスク番号の論理ディスク83に対応する論理ディスク重複排除テーブル823内の、算出されたハッシュ値に対応するエントリにおいて、カウントから1を引く。このカウントが0になった場合、削除制御部813は、この論理ディスク重複排除テーブル823から当該エントリを削除する。
なお、以上の削除処理は、クライアント2またはノードコントローラ7から削除要求を受け付けた場合だけでなく、後述するように、ライト制御部812等の、ストレージプールコントローラ81内の他の構成による削除要求を受け付けた場合にも行われ得る。
ライト制御部812は、クライアント2またはノードコントローラ7からライト要求を受け付けた場合、そのライト要求に指定された論理ディスク番号および論理アドレスに基づいて、論理−物理マップテーブル821を検索する。検索の結果、論理−物理マップテーブル821内に、指定された論理ディスク番号および論理アドレスに対応するエントリがあった場合、ライト制御部812は、この論理ディスク番号および論理アドレスを指定した削除要求を削除制御部813に送る。これによって、削除制御部813により、この論理ディスク番号および論理アドレスに対する削除処理が行われる。つまり、ライト要求に指定された論理ディスク番号および論理アドレスにデータが既に格納されていて、そのデータが上書きされようとする場合には、その論理ディスク番号および論理アドレスに対する削除処理が行われる。
そして、ライト制御部812は、ライト要求に応じて受信された書き込みデータと一致するデータ(重複データ)が既に物理ディスク87に格納されているならば、この書き込みデータを物理ディスク87に書き込まず、代わりに、ライト要求に指定された論理ディスク番号および論理アドレスを、重複データが格納されている物理アドレスに関連付ける。一方、ライト制御部812は、ライト要求に応じて受信された書き込みデータと一致するデータ(重複データ)が物理ディスク87にまだ格納されていないならば、物理ディスク87内の領域を新たに割り当て、この領域に書き込みデータを書き込み、ライト要求で指定された論理ディスク番号および論理アドレスに、書き込みデータが書き込まれた物理アドレスを関連付ける。
より具体的には、ライト制御部812は、まず、書き込みデータのハッシュ値を算出する。そして、ライト制御部812は、ハッシュ値を用いてストレージプール重複排除テーブル822を検索し、このハッシュ値に対応するエントリがある場合、当該エントリに含まれる物理アドレス(すなわち、重複データが格納されている物理アドレス)と、ライト要求に指定された論理ディスク番号および論理アドレスとを含むエントリを、論理−物理マップテーブル821に追加する。
さらに、ライト制御部812は、ストレージプール重複排除テーブル822および論理ディスク重複排除テーブル823を以下のように更新する。
(1)ノード重複排除テーブルの更新: ライト制御部812は、ストレージプール重複排除テーブル822内の、書き込みデータのハッシュ値に対応するエントリにおいて、被参照数に1を加える。
(2)論理ディスク重複排除テーブルの更新: ライト制御部812は、ライト要求に指定された論理ディスク番号の論理ディスク83に対応する論理ディスク重複排除テーブル823内に、書き込みデータのハッシュ値に対応するエントリがある場合、そのエントリのカウントに1を加え、書き込みデータのハッシュ値に対応するエントリがない場合、当該ハッシュ値と、1が設定されたカウントとを含むエントリを、その論理ディスク重複排除テーブル823に追加する。
一方、ストレージプール重複排除テーブル822内に、書き込みデータのハッシュ値に対応するエントリがない場合、物理ディスク87内の領域を新たに割り当てて、書き込みデータを書き込み、当該領域の物理アドレスと、ライト要求に指定された論理ディスク番号および論理アドレスとを含むエントリを、論理−物理マップテーブル821に追加する。
さらに、ライト制御部812は、ストレージプール重複排除テーブル822および論理ディスク重複排除テーブル823を以下のように更新する。
(1)ノード重複排除テーブルの更新: ライト制御部812は、書き込みデータのハッシュ値と、書き込みデータが書き込まれた物理アドレスと、1が設定された被参照数とを含むエントリをストレージプール重複排除テーブル822に追加する。
(2)論理ディスク重複排除テーブルの更新: ライト制御部812は、書き込みデータのハッシュ値と1が設定されたカウントとを含むエントリを、ライト要求に指定された論理ディスク番号に対応する論理ディスク重複排除テーブル823に追加する。
論理ディスク管理部814は、新たな論理ディスク83を作成(設定)することができる。論理ディスク管理部814は、例えば、ノードコントローラ7による要求に応じて、新たな論理ディスク83を作成する。論理ディスク管理部814は、ストレージプールの作成(設定)を行うこともできる。
また、論理ディスク管理部814は、ノードコントローラ7による要求に応じて、移動対象の論理ディスクを選択することができる。上述したように、ノードコントローラ7は、例えば、性能と容量の少なくとも一方に余裕がないノードを移動元ストレージプールノードとして選択し、この移動元ストレージプールノードに、移動対象の論理ディスクを選択することを要求する。
移動元ストレージプールノード内の論理ディスク管理部814は、一つ以上の論理ディスク83から、当該ストレージプールノード8内での重複排除に対する貢献度が低い論理ディスクを、移動対象の論理ディスクとして選択する。
第1実施形態において図7から図11を参照して説明した、移動対象の論理ディスクと移動先ノードとが決定される動作を、第2実施形態の構成に適用することにより、移動対象の論理ディスクと移動先ストレージプールノードとを決定することができる。また、図12から図18のフローチャートに示した手順も、第2実施形態に示した構成に適用することにより、ノードコントローラ7が移動制御処理およびデータ移動処理を実行し、またストレージプールコントローラ81がリード処理、削除処理、ライト処理、論理ディスク選択処理、および貢献度算出処理を実行することができる。
以上説明したように、第2実施形態では、第1実施形態のノードを、ストレージプール(ストレージプールノード)に置き換えた構成により、複数のストレージプールを備える一つのノード内において重複排除の効果を高めることができる。ノードコントローラ7は、複数のストレージプールノード8から第1ストレージプールノードを選択する。第1ストレージプールノードは、一つ以上の物理ディスク87と、第1ストレージプールノードにおける重複排除に関するストレージプール重複排除テーブル822と、一つ以上の物理ディスク87に対して設定された一つ以上の論理ディスク83の各々における重複排除に関する一つ以上の論理ディスク重複排除テーブル823とを用いて、一つ以上の論理ディスク83から第1論理ディスクを選択するストレージプールコントローラ81とを備える。ノードコントローラ7は、複数のストレージプールノード8から第1ストレージプールノードを除いた一つ以上のストレージプールノードから第2ストレージプールノードを選択し、第1論理ディスク内のデータを第2ストレージプールノードに移動する。
これにより、ノード内での重複排除の効果を高めることができ、ノード全体でデータ格納に使用される物理容量を削減することができる。
なお、第2実施形態におけるストレージプールノード8間での論理ディスクの移動と、第1実施形態におけるノード4間での論理ディスクの移動とが併用されてもよい。例えば、第1実施形態のノード4Aを第2実施形態のノード4Dに置き換えて、ノード4Dにおいてストレージプールノード(ストレージプール)8間で論理ディスクが移動されると共に、ノード4Dと、ノード4Bまたはノード4Cとの間で論理ディスクが移動されるようにしてもよい。これにより、複数のストレージプールを備える一つのノード4D内で重複排除の効果を高めながら、複数のノード4を備えるストレージシステム全体でも重複排除の効果を高めることができる。
また、本実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
また、本実施形態の各種処理はコンピュータプログラムによって実現することができるので、このコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのコンピュータプログラムをコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
実施形態によれば、ストレージシステムは、複数のノードと第1制御部とを具備する。複数のノードは、各々が一つ以上の物理ディスクを備える。第1制御部は、前記複数のノードから第1ノードを選択する。前記第1ノードは、一つ以上の第1物理ディスクと、前記第1ノードにおける重複排除に関する第1テーブルと、前記一つ以上の第1物理ディスクに対して設定された一つ以上の論理ディスクの各々における重複排除に関する一つ以上の第2テーブルとを用いて、前記第1ノードにおける重複排除に対する、前記一つ以上の論理ディスクの各々の貢献度を算出し、前記一つ以上の論理ディスクの各々の貢献度を用いて、前記一つ以上の論理ディスクの内で、前記第1ノードにおける重複排除に対する貢献度が最も低い第1論理ディスクを選択する第2制御部とを具備する。前記第1制御部は、前記複数のノードから前記第1ノードを除いた一つ以上のノードから第2ノードを選択し、前記第1論理ディスク内のデータを前記第2ノードに移動する。