(57)【要約】【課題】重複排除処理におけるＩ／Ｏ性能を向上させる。【解決手段】上位装置３から受信した書き込みデータのサイズに応じて、書き込みデータと記憶装置２１に記憶されているデータとの間の重複排除処理を行なう処理サイズを決定する決定部と、決定部によって決定された処理サイズで、重複排除処理を行ない、書き込みデータを処理する処理部と、を備える。【選択図】図３
2019003416.tif 000002
【特許請求の範囲】
【請求項１】
上位装置から受信した書き込みデータのサイズに応じて、前記書き込みデータと記憶装置に記憶されているデータとの間の重複排除処理を行なう処理サイズを決定する決定部と、
前記決定部によって決定された前記処理サイズで、前記重複排除処理を行ない、前記書き込みデータを処理する処理部と、
を備える、ストレージ制御装置。
【請求項２】
前記決定部は、前記処理サイズを、論理アドレスの管理単位である所定データサイズの２ｎ（ｎは整数）倍に決定する、
請求項１に記載のストレージ制御装置。
【請求項３】
前記決定部は、前記処理サイズを、論理アドレスの管理単位である所定データサイズの整数倍に決定する、
請求項１に記載のストレージ制御装置。
【請求項４】
前記論理アドレスと、スロット番号とを、前記所定データサイズ毎に対応づけたマッピング情報、及び、前記スロット番号と、前記スロット番号を参照する前記論理アドレスの数を示すリファレンス値とを、前記処理サイズ毎に対応づけたスロット管理情報を記憶する記憶部を更に備え、
前記処理部は、前記記憶部に記憶された前記マッピング情報と前記スロット管理情報とを用いて、前記重複排除処理及び前記書き込みデータの処理を行なう、
請求項２又は３に記載のストレージ制御装置。
【請求項５】
前記マッピング情報には、前記スロット番号に対してオフセット値が付加されており、
前記処理部は、前記オフセット値に基づき、前記スロット番号のうちの前記論理アドレスによって参照される位置を特定する、
請求項４に記載のストレージ制御装置。
【請求項６】
前記スロット管理情報において前記処理サイズを特定する値が前記リファレンス値よりも大きいスロット番号が存在する場合に、当該スロット番号を参照する論理アドレスの参照先を他のスロット番号に変更するとともに、前記他のスロット番号における前記処理サイズを決定する制御を行なう制御部を更に備える、
請求項４又は５に記載のストレージ制御装置。
【請求項７】
前記制御部は、前記スロット番号を参照する論理アドレスが連続する論理アドレスである場合に、前記制御を行なう、
請求項６に記載のストレージ制御装置。
【請求項８】
上位装置から受信した書き込みデータのサイズに応じて、前記書き込みデータと記憶装置に記憶されているデータとの間の重複排除処理を行なう処理サイズを決定し、
前記決定された前記処理サイズで、前記重複排除処理を行ない、前記書き込みデータを処理する、
処理をコンピュータに実行させる制御プログラム。
【請求項９】
上位装置から受信した書き込みデータのサイズに応じて、前記書き込みデータと記憶装置に記憶されているデータとの間の重複排除処理を行なう処理サイズを決定し、
前記決定された前記処理サイズで、前記重複排除処理を行ない、前記書き込みデータを処理する、
制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、制御プログラム及び制御方法に関する。
【背景技術】
【０００２】
同一データを排除する重複排除では、データは例えば４キロバイト（ＫＢ）の固定サイズに分割され、同一データは同一スロットで管理される。また、重複排除されたデータは圧縮されて、データ容量が更に削減されてもよい。
【０００３】
重複排除の制御は、サーバがアクセスするボリューム（「ユーザボリューム」や「論理ボリューム」，「ＬＵ」と称されてもよい。）のＬＢＡに対して４ＫＢ毎にスロットを示すテーブルが保持されることにより、行なわれてよい。なお、「ＬＵ」は、Logical Unitの略称である。また、「ＬＢＡ」は、Logical Block Addressの略称である。
【０００４】
図１は、従来例におけるストレージ装置のボリューム構成を例示する図である。
【０００５】
本例において、ストレージ装置（不図示）には、２つのプール１０００（「プール＃０」又は「プール＃１」と称されてもよい。）が展開されている。各プール１０００には、１又は複数のＬＵ１００１が所属する。
【０００６】
図１において、プール＃０にはＬＵＮ０〜３で示される４つのＬＵ１００１が含まれ、プール＃１にはＬＵＮ１０〜１２で示される３つのＬＵ１００１が含まれる。なお、「ＬＵＮ」は、Logical Unit Numberの略称である。
【０００７】
重複排除は、プール１０００単位で実施されてよい。すなわち、同一プール１０００内であれば、異なるＬＵ１００１間で重複排除が実施されてよい。図１に示される例では、プール＃０のＬＵＮ０〜３の４つのＬＵ１００１間で重複排除が行なわれ、プール＃１のＬＵＮ１０〜１２の３つのＬＵ１００１間で重複排除が行なわれる。
【０００８】
サーバからのInput/Output（Ｉ／Ｏ）データのサイズや重複排除の単位は、サーバの設定やボリュームのデータ内容に依存する場合がある。そのため、ボリューム毎に最適なスロットサイズが異なる場合がある（例えば、下記の特許文献１及び３を参照）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】国際公開第２０１６／１８１４７９号パンフレット
【特許文献２】特開２００８−８４２７０号公報
【特許文献３】国際公開第２０１２／０５３１５２号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【００１０】
重複排除の単位（「スロットサイズ」と称されてもよい。）が４ＫＢである場合には、サーバからのＩ／Ｏデータは４ＫＢ毎のブロックに分割される。そのため、Ｉ／Ｏデータのサイズが大きい場合には、分割後のブロック数が多くなり、ストレージ装置における処理性能が低下するおそれがある。例えば、３２ＫＢのＩ／Ｏデータは、４ＫＢ毎の８つのブロックに分割される。
【００１１】
スロットサイズを４ＫＢよりも大きくすることにより、分割後のデータブロック数が減少する。例えば、スロットサイズが１６ＫＢの場合には、３２ＫＢのＩ／Ｏデータは、２つのブロックに分割される。
【００１２】
しかしながら、スロットサイズを大きくした場合には、サーバからスロットサイズよりも小さいデータサイズ（例えば、４ＫＢ）のＩ／Ｏが発行されると、データ書き込みの際にマージ処理が実施される。このため、ストレージ装置における処理性能が低下するおそれがある。なお、マージ処理は、例えば、ボリュームに既に記憶されている１６ＫＢのデータを読み込んで、新たに書き込まれる４ＫＢのデータをマージすることにより、実施される。
【００１３】
また、スロットサイズよりも小さいデータサイズ（例えば、４ＫＢ）のデータによる重複が多く発生する場合（例えば、４ＫＢ単位では重複するが、１６ＫＢ単位では重複しないＩ／Ｏデータが多く発生する場合）には、重複率が低下する。これにより、ストレージ装置のボリュームにおけるデータ圧縮率が低下するおそれがある。
【００１４】
１つの側面では、重複排除処理におけるＩ／Ｏ性能を向上させることを目的とする。
【課題を解決するための手段】
【００１５】
ストレージ制御装置は、上位装置から受信した書き込みデータのサイズに応じて、前記書き込みデータと前記記憶装置に記憶されているデータとの間の重複排除処理を行なう処理サイズを決定する決定部と、前記決定部によって決定された前記処理サイズで、前記重複排除処理を行ない、前記書き込みデータを処理する処理部と、を備える。
【発明の効果】
【００１６】
１つの側面では、重複排除処理におけるＩ／Ｏ性能を向上させることができる。
【図面の簡単な説明】
【００１７】
【図１】従来例におけるストレージ装置のボリューム構成を例示する図である。
【図２】関連例におけるブロックマッピングの一例を示す図である。
【図３】実施形態の一例におけるストレージシステムのハードウェア構成を示す図である。
【図４】実施形態の一例におけるController Module（ＣＭ）のファームウェア構成を示す図である。
【図５】実施形態の一例におけるスロットサイズテーブルを例示する図である。
【図６】実施形態の一例におけるブロックマッピングの一例を示す図である。
【図７】実施形態の一例としてのＣＭにおけるブロックの解凍処理を示す図である。
【図８】実施形態の一例としてのＣＭにおけるデータ書き換え時のブロックマップの一例を示す図である。
【図９】実施形態の一例におけるスロット分割テーブルの一例を示す図である。
【図１０】実施形態の一例としてのＣＭにおける書き込みデータサイズとスロットサイズとの関係を説明する図である。
【図１１】実施形態の一例としてのＣＭにおけるスロットサイズの最適化処理を説明する図である。
【図１２】実施形態の一例としてのＣＭにおけるスロットサイズの最適化処理を説明する図である。
【図１３】実施形態の一例としてのＣＭにおけるスロットサイズの最適化処理を説明する図である。
【図１４】実施形態の一例としてのＣＭにおけるスロットサイズの最適化処理を行なわない場合を説明する図である。
【図１５】実施形態の一例としてのＣＭにおけるスロットサイズの最適化処理を行なわない場合を説明する図である。
【図１６】実施形態の一例としてのＣＭにおけるデータ読み出しコマンドに対する制御処理を説明するフローチャートである。
【図１７】実施形態の一例としてのＣＭにおけるデータ書き込みコマンドに対する制御処理を説明するフローチャートである。
【図１８】実施形態の一例としてのＣＭにおけるスロットサイズの最適化処理を説明するフローチャートである。
【図１９】実施形態の変形例におけるスロットサイズテーブルを例示する図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。
【００１９】
また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００２０】
以下、図中において、同一の各符号は同様の部分を示しているので、その説明は省略する。
【００２１】
〔Ａ〕関連技術
図２は、関連例におけるブロックマッピングの一例を示す図である。
【００２２】
関連例におけるストレージ装置（不図示）は、アドレス変換テーブル（「マッピングテーブル」と称されてもよい。）６０１，スロット管理テーブル６０２及び実データテーブル６０３を管理する。
【００２３】
アドレス変換テーブル６０１には、所定データサイズ（例えば、４ＫＢ）のＬＢＡ毎に、ユーザボリュームのスロット番号が対応付けられている。図示する例において、１ＬＢＡは５１２バイト（すなわち、８ＬＢＡは４ＫＢ）であり、0x0000〜0x005FのＬＢＡが４ＫＢ毎に分割されて、スロット番号（図２の「Blockmap」を参照）を割り当てられている。例えば、LBA=0x0000〜0x0007の範囲にはslot=500が割り当てられており、LBA=0x0008〜0x000Fの範囲にはslot=501が割り当てられている。
【００２４】
ストレージ装置は、所定データサイズのＬＢＡ単位（「ブロック単位」と称されてもよい。）で、ユーザボリュームに対するアクセスを行なう。
【００２５】
スロット管理テーブル６０２には、スロット番号（図２の「slot no」を参照）毎に、スロットサイズ（図２の「slot_index」を参照）とリファレンスカウンタ値（図２の「ref_cnt」を参照）とが対応付けられている。「リファレンスカウンタ値」は、「リファレンス値」や「重複データ数」と称されてもよい。図２においては、スロット管理テーブル６０２に示されているslot=500〜511の全てのスロットにおけるスロットサイズが4KBに設定されている。
【００２６】
リファレンスカウンタ値は、アドレス変換テーブル６０１において、対応するスロット番号をポイントしているブロックの数を示す。図２においては、slot=500は、LBA=0x0000〜0x0007及び0x0020〜0x0027の２つのブロックからポイントされているため、リファレンスカウンタ値が2に設定されている。また、slot=501は、LBA=0x0008〜0x000Fの１つのブロックからポイントされているため、リファレンスカウンタ値が1に設定されている。
【００２７】
すなわち、同一のデータは１つのスロットによってまとめて管理され、データ内容が重複しているスロットは複数のブロックマップからポイントされる。
【００２８】
データの更新によってアドレス変換テーブル６０１からスロット管理テーブル６０２へのポイント先が変更されると、データの更新前にポイントされていたスロット番号のリファレンスカウンタ値は、１デクリメントされる。リファレンスカウンタ値が０になったスロットのデータは、削除対象として認識される。
【００２９】
実データテーブル６０３には、所定データサイズ（例えば、４ＫＢ）毎に分割されたデータが記録されている（図２の「datalog」を参照）。
【００３０】
〔Ｂ〕実施形態の一例
〔Ｂ−１〕システム構成例
実施形態の一例においては、図２に示した関連例において４ＫＢの固定長（別言すれば、「所定データサイズ」）に設定されていたスロットサイズを、ホスト装置３（図３を参照）からのＩ／Ｏデータサイズ（別言すれば、「データ長」）に応じて可変長とする。
【００３１】
図３は、実施形態の一例におけるストレージシステム１００のハードウェア構成を示す図である。
【００３２】
ストレージシステム１００は、例示的に、ストレージ装置１及びホスト装置３を備え、ホスト装置３に対して記憶領域を提供する。
【００３３】
ホスト装置３は、上位装置の一例であり、例えば、サーバ機能を備えたコンピュータである。図３に示す例においてはストレージシステム１００が１つのホスト装置３を備えることとしているが、ストレージシステム１００が備えるホスト装置３の数は種々変更することができる。
【００３４】
ストレージ装置１は、後述する複数の記憶装置２１を搭載し、ホスト装置３に対して記憶領域を提供する装置であり、例えばRedundant Arrays of Inexpensive Disks（ＲＡＩＤ）を用いて複数の記憶装置２１にデータを分散又は冗長化した状態で保存する。ストレージ装置１は、例示的に、複数（図示する例では４つ）のＣＭ１０及びDisk Enclosure（ＤＥ）２０を備える。
【００３５】
ＤＥ２０は、冗長化のために複数のＣＭ１０と複数のアクセスパスで通信可能に接続されており、複数（図示する例ではｍ＋１個）の記憶装置２１（「記憶装置＃０〜＃ｍ」と表記されてもよい。）を備える。
【００３６】
記憶装置２１は、記憶部の一例であり、データを読み書き可能に記憶する装置であり、例えば、Hard Disk Drive（ＨＤＤ）やSolid State Drive（ＳＳＤ），Storage Class Memory（ＳＣＭ）が用いられてよい。
【００３７】
ＣＭ１０は、種々の制御を行なうストレージ制御装置の一例であり、ホスト装置３からのストレージアクセス要求（「アクセス制御信号」や「Ｉ／Ｏデータ」と称されてもよい。）に従って、各種制御を行なう。ＣＭ１０は、例示的に、Central Processing Unit（ＣＰＵ）１１，メモリ１２，複数（図示する例では２つ）のCommunication Adaptor（ＣＡ）１３及び複数（図示する例では２つ）のDrive Interface（ＤＩ）１４を備える。なお、図３に示される４つのＣＭ１０は互いに同様の構成を有しているため、図３においては４つのＣＭ１０のうち１つのＣＭ１０の構成を示し、他のＣＭ１０の構成の図示は省略している。
【００３８】
ＣＡ１３は、ホスト装置３をストレージ装置１と通信可能に接続するインタフェースである。ＣＡ１３は、例えば、チャネルアダプタである。なお、図３に示す例においては、ＣＭ１０が２つのＣＡ１３を備えることとしているが、これに限定されるものではなく、ＣＭ１０は１つ又は３つ以上のＣＡ１３を備えることとしてもよい。
【００３９】
ＤＩ１４は、ＣＭ１０とＤＥ２０とを通信可能に接続するためのインタフェースであり、例えばFibre Channel（ＦＣ）アダプタである。ＣＭ１０は、このＤＩ１４を介して、記憶装置２１に対するデータの書き込みや読み出しを行なう。なお、図３に示す例においては、ＣＭ１０が２つのＤＩ１４を備えることとしているが、これに限定されるものではなく、ＣＭ１０は１つ又は３つ以上のＤＩ１４を備えることとしてもよい。
【００４０】
メモリ１２は、例示的に、Read Only Memory（ＲＯＭ）及びRandom Access Memory（ＲＡＭ）を含む記憶装置である。メモリ１２のＲＯＭには、Basic Input/Output System（ＢＩＯＳ）等のプログラムが書き込まれてよい。メモリ１２のソフトウェアプログラムは、ＣＰＵ１１に適宜に読み込まれて実行されてよい。また、メモリ１２のＲＡＭは、一次記録メモリあるいはワーキングメモリとして利用されてよい。
【００４１】
ＣＰＵ１１は、例示的に、種々の制御や演算を行なう処理装置であり、メモリ１２に格納されたOperating System（ＯＳ）やプログラムを実行することにより、種々の機能を実現する。すなわち、ＣＰＵ１１は、図４を用いて後述するように、重複排除制御部４０，ＣＡ制御部４７，キャッシュ制御部４８，ＲＡＩＤ制御部４９及びＤＩ制御部５０として機能してよい。
【００４２】
なお、これらの重複排除制御部４０，ＣＡ制御部４７，キャッシュ制御部４８，ＲＡＩＤ制御部４９及びＤＩ制御部５０としての機能を実現するためのプログラムは、コンピュータ読取可能な記録媒体に記録された形態で提供されてよい。コンピュータ読み取り可能な記録媒体は、例えば、フレキシブルディスクやＣＤ，ＤＶＤ，ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスクであってよい。ＣＤは、例えば、ＣＤ−ＲＯＭやＣＤ−Ｒ，ＣＤ−ＲＷであってよい。また、ＤＶＤは、例えば、ＤＶＤ−ＲＯＭやＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤであってよい。そして、コンピュータ（本実施形態ではＣＰＵ１１）は上述した記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置又は外部記録装置に転送し格納して用いてよい。また、プログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（「記録媒体」と称されてもよい。）に記録しておき、記憶装置から通信経路を介してコンピュータに提供してもよい。
【００４３】
重複排除制御部４０，ＣＡ制御部４７，キャッシュ制御部４８，ＲＡＩＤ制御部４９及びＤＩ制御部５０としての機能を実現する際には、内部記憶装置に格納された制御プログラムがコンピュータによって実行されてよい。なお、本実施形態では、「内部記憶装置」はメモリ１２であってよく、「コンピュータ」はＣＰＵ１１であってよい。また、記録媒体に記録された制御プログラムをコンピュータが読み取って実行してもよい。
【００４４】
ＣＰＵ１１は、例示的に、ＣＭ１０全体の動作を制御する。ＣＭ１０全体の動作を制御するための装置は、ＣＰＵ１１に限定されず、例えば、ＭＰＵやＤＳＰ，ＡＳＩＣ，ＰＬＤ，ＦＰＧＡのいずれか１つであってもよい。また、ＣＭ１０全体の動作を制御するための装置は、ＣＰＵ，ＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤ及びＦＰＧＡのうちの２種類以上の組み合わせであってもよい。なお、「ＭＰＵ」はMicro Processing Unitの略称であり、「ＤＳＰ」はDigital Signal Processorの略称であり、「ＡＳＩＣ」はApplication Specific Integrated Circuitの略称である。また、「ＰＬＤ」はProgrammable Logic Deviceの略称であり、「ＦＰＧＡ」はField Programmable Gate Arrayの略称である。
【００４５】
図４は、実施形態の一例におけるＣＭ１０のファームウェア構成を示す図である。
【００４６】
ファームウェア４は、例示的に、重複排除制御部４０，ＣＡ制御部４７，キャッシュ制御部４８，ＲＡＩＤ制御部４９及びＤＩ制御部５０として機能する。また、ファームウェア４からは、複数（図示する例では３つ）のボリューム５１が認識される。
【００４７】
ＣＡ制御部４７は、ＣＡ１３とホスト装置３との間のコマンドの送受信を制御する。
【００４８】
キャッシュ制御部４８は、データをＣＭ１０のメモリ１２に一時的に保持させることによりキャッシュ制御を行なう。
【００４９】
ＲＡＩＤ制御部４９は、ＲＡＩＤグループの制御を行なう。
【００５０】
ＤＩ制御部５０は、ＤＩ１４とボリューム５１との間のコマンドの送受信を制御する。
【００５１】
重複排除制御部４０は、ボリューム５１において重複して書き込まれるデータを排除する。重複排除制御部４０は、例示的に、Ｉ／Ｏ制御部４１，ブロックマップ制御部４２，スロット制御部４３，実データ制御部４４，ハッシュ制御部４５及びGarbage Collection（ＧＣ）制御部４６として機能する。
【００５２】
Ｉ／Ｏ制御部４１は、重複排除に関するＩ／Ｏ全体の制御を行なう。
【００５３】
ブロックマップ制御部４２は、図６等を用いて後述するアドレス変換テーブル２０２を使用してブロックマップを管理する。
【００５４】
スロット制御部４３は、図６等を用いて後述するスロット管理テーブル２０３を使用してスロットを管理する。
【００５５】
実データ制御部４４は、重複排除，圧縮後のデータ格納及び読み出し制御を行なう。
【００５６】
ハッシュ制御部４５は、ハッシュ値を用いて、重複排除判定を行なう。
【００５７】
ＧＣ制御部４６は、例えばガベージコレクションにより、ボリューム５１における不要データの削除を行なう。
【００５８】
図５は、実施形態の一例におけるスロットサイズテーブル２０１を例示する図である。
【００５９】
スロットサイズテーブル２０１は、ＣＭ１０におけるブロックマッピングにおいて利用可能なスロットサイズを示す。
【００６０】
図６等を用いて後述するアドレス変換テーブル２０２においてＬＢＡが管理されている領域の大きさに基づき、スロットサイズテーブル２０１が設定される。図６においてはＬＢＡが４ＫＢ毎に管理されているため、すなわち、ＬＢＡの管理単位が４ＫＢであるため、図５に示されるスロットサイズテーブル２０１の「データサイズ」は、４×２ｎＫＢ（ｎは整数）で示される。なお、図５に示すように、データサイズの上限値（図示する例では、３２ＫＢ）を設けることで、ｎがとり得る範囲を制限してよい（図示する例では、ｎ＝０，１，２，３）。整数ｎは、スロットサイズテーブル２０１の「値」に対応する。
【００６１】
スロットサイズテーブル２０１の「データサイズ」のうち、最小のデータサイズは、基本データサイズや所定データサイズと称されてよい。スロットサイズテーブル２０１における「倍率」である２ｎを基本データサイズに乗じることにより、各スロットに設定可能なデータサイズが算出される。図５に示す例では、値ｎ＝０の際に「倍率」が１倍で「データサイズ」が４ＫＢとなる。また、値ｎ＝１の際に「倍率」が２倍で「データサイズ」が８ＫＢとなり、値ｎ＝２の際に「倍率」が４倍で「データサイズ」が１６ＫＢとなり、値ｎ＝３の際に「倍率」が８倍で「データサイズ」が３２ＫＢとなる。
【００６２】
図４に示したスロット制御部４３は、スロットサイズテーブル２０１に示される情報を用いて、各スロットのデータサイズを設定する。各スロットのデータサイズは、スロット毎に異なってよい。スロットサイズテーブル２０１に関する情報は、図３に示した記憶装置２１に記憶されてよい。
【００６３】
すなわち、スロット制御部４３は、ホスト装置３から受信した書き込みデータのサイズに応じて、書き込みデータと記憶装置２１に記憶されているデータとの間の重複排除処理を行なう処理サイズを決定する決定部の一例として機能する。また、スロット制御部４３は、処理サイズを、ＬＢＡの管理単位である所定データサイズの２ｎ倍に決定する決定部の一例として機能する。
【００６４】
図６は、実施形態の一例におけるブロックマッピングの一例を示す図である。
【００６５】
ＣＭ１０は、図６に例示するブロックマッピングを実行することにより、図４に示したボリューム５１を管理する。
【００６６】
アドレス変換テーブル２０２は、ボリューム５１のアドレス（「論理アドレス」と称されてもよい。）をスロット番号に変換するためのテーブルである。アドレス変換テーブル２０２を表わす情報（「マッピング情報」と称されてもよい。）は、記憶装置２１に記憶されてよい。
【００６７】
アドレス変換テーブル２０２には、図５において説明したスロットサイズに関わらず、所定データサイズ（例えば、４ＫＢ）のＬＢＡ毎に、ユーザボリュームのスロット番号が対応付けられている。図示される例において、１ＬＢＡは５１２バイトであり、0x0000〜0x007FのＬＢＡが４ＫＢ毎に分割されて、スロット番号が割り当てられている（アドレス変換テーブル２０２の「Blockmap」のslotを参照）。また、各ＬＢＡには、スロットサイズが４ＫＢを超える場合に、或るスロットのうちのどの位置をポイントしているかを示すオフセット値が割り当てられている（アドレス変換テーブル２０２の「Blockmap」のoffsを参照）。例えば、LBA=0x0000〜0x0007の範囲には“slot=500，offs=0”が割り当てられており、LBA=0x0008〜0x000Fの範囲には“slot=501，offs=0”が割り当てられている。
【００６８】
図６のアドレス変換テーブル２０２において、同一のスロット番号の連続するオフセット値をポイントするＬＢＡは、一点鎖線によって区分されている。例えば、LBA=0x0020〜0x003Fの範囲には、slot=503が割り当てられている。同様に、LBA=0x0040〜0x005Fの範囲にも、slot=503が割り当てられている。
【００６９】
同一のスロット番号“503”が割り当てられているＬＢＡのうち、LBA=0x0020〜0x0027の範囲にはoffs=0が割り当てられており、LBA=0x0028〜0x002Fの範囲にはoffs=1が割り当てられている。また、LBA=0x0030〜0x0027の範囲にはoffs=2が割り当てられており、LBA=0x0038〜0x003Fの範囲にはoffs=3が割り当てられている。スロットには、offs=0, 1, 2, 3の順で４ＫＢ毎にデータが割り当てられている。
【００７０】
図４に示したブロックマップ制御部４２は、所定データサイズのＬＢＡ単位（「ブロック単位」と称されてもよい。）で、ボリューム５１に対するアクセスを行なう。
【００７１】
スロット管理テーブル２０３には、スロット番号（図中の「slot no」を参照）毎に、スロットサイズ値（図中の「ratio」を参照）とリファレンスカウンタ値（図中の「ref_cnt」を参照）とが対応付けられている。「リファレンスカウンタ値」は、「リファレンス値」や「重複データ数」と称されてもよい。スロット管理テーブル２０３を表わす情報（「スロット管理情報」と称されてもよい。）は、記憶装置２１に記憶されてよい。
【００７２】
図６のスロット管理テーブル２０３においては、slot=500, 501のスロットサイズ値が0(4KB)に設定されており、slot=502のスロットサイズ値が1(8KB)に設定されており、slot=503のスロットサイズ値が2(16KB)に設定されている。
【００７３】
リファレンスカウンタ値は、アドレス変換テーブル２０２において、対応するスロット番号をポイントしているブロックの数を示す。図６においては、slot=500は、LBA=0x0000〜0x0007，0x0060〜0x0067及び0x0068〜0x006Fの３つのブロックからポイントされているため、リファレンスカウンタ値が3に設定されている。また、slot=502は、LBA=0x0010〜0x00017及び0x0018〜0x001Fの２つのブロックからポイントされているため、リファレンスカウンタ値が2に設定されている。
【００７４】
データの更新によってアドレス変換テーブル２０２からスロット管理テーブル２０３へのポイント先が変更されると、図４に示したスロット制御部４３は、データの更新前にポイントされていたスロット番号のリファレンスカウンタ値を１デクリメントする。リファレンスカウンタ値が０になったスロットのデータは、図４に示したＧＣ制御部４６によって削除対象として認識される。
【００７５】
実データテーブル２０４には、所定データサイズ（例えば、４ＫＢ）毎に分割及び圧縮されたデータが記録されている（図中の「datalog」を参照）。slot=500のスロットサイズは4KBであるため、実データ（「データログ」と称されてもよい。）におけるデータサイズと解凍データのイメージにおけるデータサイズは、いずれも4KB（図中においてブロック１つ）である。一方、slot=502のスロットサイズは8KBであるため、実データにおけるデータサイズは4KB（図中においてブロック１つ）であるが、解凍データのイメージにおけるデータサイズは8KB（図中においてブロック２つ）である。また、slot=503のスロットサイズは16KBであるため、実データにおけるデータサイズは4KB（図中においてブロック１つ）であるが、解凍データのイメージにおけるデータサイズは16KB（図中においてブロック４つ）である。
【００７６】
図４に示した実データ制御部４４は、ＤＩ制御部５０を介してボリューム５１から圧縮された実データを読み出し、読み出した実データに基づいて解凍後のデータを取得する。
【００７７】
図７は、実施形態の一例としてのＣＭ１０におけるブロックの解凍処理を示す図である。
【００７８】
図６に示した例においてLBA=0x0050へ４ＫＢのリード要求が発行された場合は、例えば、以下の処理が実行される。
【００７９】
図４に示したブロックマップ制御部４２は、LBA=0x0050がslot=503をポイントしており、LBA=0x0050にはデータが対応付けられていることを認識する。図４に示したスロット制御部４３は、slot=503が示す実データを参照する。図４に示した実データ制御部４４は、ＤＩ制御部５０を介して、参照された実データのアドレスから特定される圧縮データを記憶装置２１から読み出す。
【００８０】
実データ制御部４４は、ＤＩ制御部５０を介してｘバイトの圧縮データを読み出し、読み出した圧縮データを解凍する（図７の処理Ａ１参照）。なお、ｘは、正の実数である。
【００８１】
圧縮データのサイズが圧縮前において１６ＫＢである場合には、実データ制御部４４は、圧縮データから、それぞれ４ＫＢを有する４つの解凍データを生成する。４つの解凍データは、オフセット値としてoffs=0〜3をそれぞれ有する。
【００８２】
実データ制御部４４は、ＣＡ制御部４７を介して、生成した４つの解凍データのうち、先頭の８ＫＢのオフセットから４ＫＢのデータをホスト装置３へ転送する（図７の処理Ａ２参照）。
【００８３】
このように、基本スロットサイズよりも大きいスロットサイズである１６ＫＢ単位で書き込まれたデータであっても、スロットサイズよりも小さい４ＫＢのデータだけを読み出すことができる。
【００８４】
図８は、実施形態の一例としてのＣＭ１０におけるデータ書き換え時のブロックマップの一例を示す図である。
【００８５】
ＣＭ１０は、ホスト装置３からのＩ／Ｏによってデータのライト要求を受け取ると、アドレス変換テーブル２０２，スロット管理テーブル２０３及び実データテーブル２０４に関する情報を書き換える。
【００８６】
図８に示す例では、図６に示した状態から、LBA=0x0050に対して、４ＫＢの重複しない新規のデータに係るライトが発行されている。
【００８７】
ブロックマップ制御部４２は、アドレス変換テーブル２０２に基づき、LBA=0x0050がポイントしていた更新前（すなわち、図６に示した状態）のスロットがslot=503であることを認識する。ハッシュ制御部４５は、４ＫＢの書き込みデータのハッシュ値を計算する。図８に示す例では、書き込みデータは重複しない新規のデータであるため、ハッシュはヒットしない（別言すれば、４ＫＢのスロットサイズの各既存データのハッシュと比較しても、書き込みデータのハッシュは一致しない）。なお、ハッシュ値は、２０バイトのSecure Hash Algorithm-1（ＳＨＡ−１）値であってよい。
【００８８】
ハッシュ制御部４５は、書き込みデータのハッシュと、スロット管理テーブル２０３に登録されている全ての既存データのハッシュとを比較して、書き込みデータと同一のデータが存在するかを判断してよい。また、ハッシュ制御部４５は、書き込みデータのハッシュと、書き込みデータと同じスロットサイズを有する既存データのハッシュとを比較して、書き込みデータと同一のデータが存在するかを判断してもよい。同じスロットサイズである書き込みデータと既存データとの組に限って、ハッシュの比較が行なわれることにより、ハッシュの比較処理を高速に行なうことができ、ストレージシステム１００におけるＩ／Ｏ性能及びレスポンスを向上できる。
【００８９】
書き込みデータは新規のデータであるため、スロット制御部４３は、書き込みデータに対してslot=504を割り当てる。すなわち、スロット管理テーブル２０３において、図６では実データに対応付けられていなかったslot=504に対して、ratio=0(4KB)及びref_cnt=1が登録される（符号Ｂ１参照）。
【００９０】
実データ制御部４４は、書き込みデータを圧縮して、圧縮したデータをslot=504に格納する。すなわち、実データテーブル２０４において、ホスト装置３からのライト要求に対応するデータが登録される（符号Ｂ２参照）。slot=504のスロットサイズは4KBであるため、実データにおけるデータサイズと解凍データのイメージにおけるデータサイズは、いずれも4KB（図中においてブロック１つ）である。
【００９１】
スロット制御部４３は、slot=504のリファレンスカウンタ値を１デクリメントする。すなわち、スロット管理テーブル２０３において、図６では8であったslot=503のリファレンスカウンタ値が、図８において7にデクリメントされる（符号Ｂ３参照）。
【００９２】
ブロックマップ制御部４２は、アドレス変換テーブル２０２において、LBA=0x0050〜0x0057のポイント先を、“slot=503, offs=2”から“slot=504, offs=0”に更新する（符号Ｂ４参照）。
【００９３】
すなわち、ブロックマップ制御部４２、スロット制御部４３、実データ制御部４４及びハッシュ制御部４５は、書き込みデータを決定された処理サイズで処理し、決定された処理サイズで処理された書き込みデータと同じ処理サイズの書き込み済データとの間で、重複排除処理を行なう処理部の一例として機能する。また、ブロックマップ制御部４２、スロット制御部４３、実データ制御部４４及びハッシュ制御部４５は、記憶装置２１に記憶されたマッピング情報とスロット管理情報とを用いて、重複排除処理及び書き込みデータの処理を行なう処理部の一例として機能する。
【００９４】
図８に示される状態において、LBA=0x0050へ８ＫＢのリード要求（すなわち、LBA=0x0050〜0x005Fに対するリード要求）が発行された場合には、例えば、以下の処理が実行される。
【００９５】
ブロックマップ制御部４２は、LBA=0x0050がポイントするslot=504とLBA=0x0058がポイントするslot=503とを参照する。スロット制御部４３は、参照されたslot=504及び503に対応するデータが存在することを認識する。
【００９６】
実データ制御部４４は、slot=504の圧縮データを読み込み、読み込んだデータを解凍し、４ＫＢの解凍済みデータを生成する。
【００９７】
また、実データ制御部４４は、slot=503の圧縮データを読み込み、読み込んだデータを解凍し、１６ＫＢの解凍済みデータを生成する。LBA=0x0058はslot=503のoffs=3をポイントしているため、実データ制御部４４は、１６ＫＢの解凍済みデータのうち、１２ＫＢの位置から４ＫＢ分のデータを読み込む。
【００９８】
Ｉ／Ｏ制御部４１は、ＣＡ制御部４７を介して、slot=504における４ＫＢの解凍済みデータと、slot=503における４ＫＢ分のデータとを、ホスト装置３へ転送する。
【００９９】
図９は、実施形態の一例におけるスロット分割テーブル２０５の一例を示す図である。
【０１００】
スロット制御部４３は、ホスト装置３からのＩ／Ｏが発生すると、Ｉ／Ｏサイズを基本スロットサイズ（例えば、４ＫＢ）の整数倍に切り上げる。例えば、Ｉ／Ｏサイズが１９ＫＢの場合には、データサイズは２０ＫＢに切り上げられる。スロット制御部４３は、切り上げ後のデータサイズを、Ｉ／Ｏデータの先頭から、大きなスロットサイズ順（例えば、４×２ｎＫＢで定められるサイズのうち大きなサイズ順）に分割する。例えば、２０ＫＢのデータは、１６ＫＢ＋４ＫＢのデータに分割される。
【０１０１】
また、スロット制御部４３は、スロットサイズの最大値が３２ＫＢである場合に、１２８ＫＢのＩ／Ｏが発生した場合には、Ｉ／Ｏデータを３２ＫＢ×４に分割してよい。
【０１０２】
図９に示すスロット分割テーブル２０５は、ホスト装置３からのＩ／Ｏデータの「Ｉ／Ｏサイズ」を４×ａＫＢで表わせる「切り上げ後サイズ」に切り上げて、「切り上げ後サイズ」のデータを４×２ｎで表わせる「分割サイズ」のデータに分割することを示す。「分割サイズ」は、対応するＩ／Ｏデータのスロットサイズに相当する。なお、ａは正の整数である。図９に示す例において、スロットサイズの最大値は３２ＫＢである。
【０１０３】
図９に示す例では、「Ｉ／Ｏサイズ」が0.5KB〜4KBの場合には、「切り上げ後サイズ」は4KBであり、「分割サイズ」は4KBである。すなわち、図４に示したスロット制御部４３は、0.5KB〜4KBのＩ／Ｏに対して、4KBのスロットサイズを割り当てる。
【０１０４】
また、「Ｉ／Ｏサイズ」が7.5KB〜12KBの場合には、「切り上げ後サイズ」は12KBであり、「分割サイズ」は8KB+4KBである。すなわち、図４に示したスロット制御部４３は、7.5KB〜12KBのＩ／Ｏに対して、8KB+4KBの２つのスロットサイズを割り当てる。
【０１０５】
更に、「Ｉ／Ｏサイズ」が24.5KB〜28KBの場合には、「切り上げ後サイズ」は28KBであり、「分割サイズ」は16KB+8KB+4KBである。すなわち、図４に示したスロット制御部４３は、24.5KB〜28KBのＩ／Ｏに対して、16KB+8KB+4KBの３つのスロットサイズを割り当てる。
【０１０６】
別言すれば、スロット制御部４３は、ホスト装置３からの書き込みデータのサイズ以上のスロットサイズ又はスロットサイズの組み合わせを選択する。
【０１０７】
なお、Small Computer System Interface（ＳＣＳＩ）におけるＩ／Ｏの最小サイズは0.5KBであるため、図９の「Ｉ／Ｏサイズ」に示す範囲はそれぞれ0.5KB間隔で設定されている。
【０１０８】
図１０は、実施形態の一例としてのＣＭ１０における書き込みデータサイズとスロットサイズとの関係を説明する図である。
【０１０９】
図１０に示す例では、LBA=0x0090〜0x00AFに１６ＫＢのデータが書き込まれ、１６ＫＢのslot=400が割り当てられている。また、LBA=0x0090には４ＫＢのデータが書き込まれている。LBA=0x0090がポイントするslot=401は他のＬＢＡによってポイントされていないため、ハッシュがヒットせず、新規に４ＫＢのslot=401が割り当てられている。更に、LBA=0x0098には４ＫＢのデータが書き込まれている。LBA=0x0098がポイントするslot=402は他のＬＢＡによってポイントされていないため、ハッシュがヒットせず、新規に４ＫＢのslot=402が割り当てられている。
【０１１０】
図１０のスロット管理テーブル２０３では、16KB+4KB+4KB=24KBの領域が割り当てられている。アドレス変換テーブル２０２では、LBA=0x0090〜00x00AFの４つの領域が使用されているため、１６ＫＢの書き込みデータに対して、２４ＫＢ分のスロットが割り当てられている。すなわち、図１０に示す例では、重複排除が効率的に実施されていない。
【０１１１】
なお、slot=400がLBA=0x00B0〜0x00CFからもポイントされていれば、３２ＫＢの書き込みデータに対して２４ＫＢの実データ領域が割り当てられていることとなり、重複排除が効率的に行なわれていることになる。
【０１１２】
そこで、実施形態の一例におけるＣＭ１０は、ホスト装置３からのＩ／Ｏが発生した場合に、スロットサイズの最適化処理を行なってよい。
【０１１３】
なお、Ｉ／Ｏの発生とは非同期にスロット管理テーブル２０３を読み込んでスロットサイズの最適化処理を実施することも想定される。しかしながら、スロットからブロックマップ（別言すれば、「アドレス変換テーブル２０２」）への逆引きは行なえないため、スロットの移動に伴って実施されるブロックマップの更新ができない。また、アドレス変換テーブル２０２の全領域を読み込むことにより各ＬＢＡがポイントするスロット番号を参照してスロットサイズの最適化処理を行なうことは可能であるが、アドレス変換テーブル２０２の全領域の読み込みに長い時間がかかるおそれがある。
【０１１４】
そこで、データのライト処理を実行する際に、リファレンスカウンタ値が減算されたスロットにおけるスロット倍率とリファレンスカウンタ値とが比較されることにより、スロットサイズの最適化処理を実行するかが判断されてよい。そして、スロット倍率がリファレンスカウンタ値よりも大きい場合に、スロットサイズの最適化処理が実行されてよい。
【０１１５】
図１０に示す例では、スロット管理テーブル２０３のslot=400において、ratio=2(16KB)が設定されており、スロット倍率は基本スロットサイズ（４ＫＢ）の「４倍」である。そして、slot=400において、スロット倍率である「４」は、リファレンスカウンタ値よりも大きい。そこで、スロット倍率8KBのslot=403が新規に割り当てられ、slot=400のリファレンスカウンタ値が0に設定されてslot=400が削除対象になることにより、スロットサイズの最適化処理が実行されてよい。
【０１１６】
図１１〜図１３は、実施形態の一例としてのＣＭ１０におけるスロットサイズの最適化処理を説明する図である。図１１〜図１３には、ボリューム５１におけるデータの書き換え処理及びスロットサイズの最適化処理によって生じたブロックマッピングの変化の一連の流れが示されている。
【０１１７】
初期状態として、図１１に示すように、LBA=0x0090〜0x00AFの範囲にわたって、１６ＫＢのデータが書き込まれている状態を想定する。アドレス変換テーブル２０２において、LBA=0x0090〜0x00AFの４つのブロックは、slot=400のoffs=0〜3をそれぞれ参照している。スロット管理テーブル２０３のslot=400において、スロットサイズ値は2(16KB)であり、リファレンスカウンタ値は4である。
【０１１８】
図１２に示される状態では、ライトＩ／Ｏが発生したことにより、アドレス変換テーブル２０２において、LBA=0x00A0〜0x00A7が“slot=400, offs=2”から“slot=401, offs=0”に書き換えられている（符号Ｃ１参照）。これにより、スロット管理テーブル２０３において、slot=400のリファレンスカウンタ値が4から3にデクリメントされる（符号Ｃ２参照）。また、slot=401には、スロットサイズ値“0(4KB)”及びリファレンスカウンタ値“1”が登録される（符号Ｃ３参照）。
【０１１９】
図１２に示す例では、スロット管理テーブル２０３のslot=400において、ratio=2(16KB)が設定されており、スロット倍率は基本スロットサイズ（４ＫＢ）の「４倍」である。符号Ｃ２におけるslot=400のリファレンスカウンタ値のデクリメントにより、スロット倍率の「４」は、リファレンスカウンタ値“3”よりも大きくなる。
【０１２０】
そこで、アドレス変換テーブル２０２において、Ｉ／Ｏ範囲のブロックマップがＩ／Ｏデータの書き込み前にポイントしていたスロットのサイズ分拡張して参照される。
【０１２１】
図１２に示す例において、書き込みが行なわれた領域LBA=0x00A0はＩ／Ｏデータの書き込み前に“slot=400, offs=2”をポイントしており、slot=400の倍率は４倍であった。そこで、ブロックマップ制御部４２は、ライトＩ／Ｏが発行されたＬＢＡ領域を４倍に拡張したＬＢＡを参照する。ライトＩ／Ｏが発行されたＬＢＡ領域がポイントするoffs=2を４倍に広げるとoffs=0〜3となり、拡張されたブロックマップはLBA=0x0090〜0x00AFとなる。ブロックマップ制御部４２は、拡張したブロックマップを読み込み、書き込み前のslot=400をポイントするブロックマップの数を計測し、計測したブロックマップの数をslot=400のリファレンスカウンタ値と比較する。図１２に示す例では、LBA=0x0090, 0x0098及び0x00A8の３つのブロックマップがslot=400をポイントしており、ブロックマップの数がリファレンスカウンタ値“3”と一致する。
【０１２２】
そこで、図１３に示すように、スロットサイズの再配置処理が実行される。図１３では、スロット制御部４３は、連続するLBA=0x0090及び0x0098をまとめて８ＫＢのスロットに割り当て、LBA=0x00A8を４ＫＢのスロットに割り当てる。ここで、ハッシュを計算し、ハッシュが一致すれば、ホスト装置３からのライトＩ／Ｏの発生時におけるスロット割り当てと同様に、重複データとしてスロットの割り当てが行なわれてよい。図１３では、ハッシュがヒットせずに非重複のデータとしてスロットの割り当てが行なわれる例を示している。
【０１２３】
図１３に示す例では、スロット管理テーブル２０３において、slot=400のリファレンスカウンタ値が0に設定され、削除対象となる（符号Ｄ１参照）。また、slot=402にはスロットサイズ値“1(8KB)”及びリファレンスカウンタ値“2”が設定され（符号Ｄ２参照）、slot=403にはスロットサイズ値“0(4KB)”及びリファレンスカウンタ値“1”が設定される（符号Ｄ３参照）。
【０１２４】
すなわち、ブロックマップ制御部４２は、スロット管理情報において処理サイズを特定する値がリファレンス値よりも大きい場合に、対応するＬＢＡが参照するスロット番号を変更する制御部の一例として機能する。また、スロット制御部４３は、変更後のスロット番号における処理サイズを決定する制御を行なう制御部の一例として機能する。
【０１２５】
図１４及び図１５は、実施形態の一例としてのＣＭ１０におけるスロットサイズの最適化処理を行なわない場合を説明する図である。図１４及び図１５には、ボリューム５１におけるデータの書き換え処理によって生じたブロックマッピングの変化の一連の流れが示されている。
【０１２６】
図１４に示す例では、LBA=0x0090〜0x00AF及び0x1000〜0x1007の範囲において、slot=400がポイントされている。
【０１２７】
ここで、図１５に示すように、LBA=0x0090〜0x0097が“slot=403, offs=0”に書き換えられ（符号Ｅ１参照）、LBA=0x0098〜0x009Fが“slot=403, offs=1”に書き換えられ（符号Ｅ２参照）、合計８ＫＢのデータが更新された状態を想定する。アドレス変換テーブル２０２においてスロットのポイント先が書き換えられたことにより、スロット管理テーブル２０３におけるslot=400のリファレンスカウンタ値は5から3に更新される（符号Ｅ３参照）。また、スロット管理テーブル２０３のslot=403には、スロットサイズ値“1(8KB)”及びリファレンスカウンタ値“2”が登録される（符号Ｅ４参照）。
【０１２８】
アドレス変換テーブル２０２において更新された領域をslot=400のスロット倍率４倍に拡張すると、LBA=0x0090〜0x00AFとなる。LBA=0x0090〜0x00AFの範囲において、slot=400をポイントする領域は、LBA=0x00A0〜0x00A7及び0x00A8〜0x00AFの２つである。slot=400をポイントする計測されたＬＢＡ領域の数が２つであるのに対して、slot=400のリファレンスカウンタ値は3であり、slot=400をポイントするＬＢＡ領域の数とリファレンスカウンタ値とが一致しない。slot=400をポイントするＬＢＡ領域の数とリファレンスカウンタ値とが一致しないことは、ライト範囲をスロット倍率分拡張した範囲におけるブロックマップ以外にも、slot=400をポイントしているLBAが存在することを意味する。図１５に示す例では、LBA=0x1000がslot=400をポイントしている。
【０１２９】
スロット管理テーブル２０３においてslot=400のデータを再配置するためには、アドレス変換テーブル２０２においてslot=400をポイントしているLBA=0x0100のポイント先も変更することとなる。しかしながら、slot=400をポイントしているＬＢＡがLBA=0x0100であることを特定するためには、ブロックマップの全範囲が読み出されることとなる。これにより、スロットサイズの最適化処理に長い時間がかかるおそれがある。
【０１３０】
そこで、スロットサイズの最適化処理を効率的に実施するために、同じスロットをポイントするとともにＬＢＡが連続しない複数のブロックのうち、一部のブロックのポイント先が書き換えられた場合には、スロットの再配置処理は実行されなくてよい。
【０１３１】
すなわち、ブロックマップ制御部４２は、データの書き込み領域のＬＢＡと同じスロット番号を示すＬＢＡが連続するＬＢＡである場合に、スロット番号の変更を行なう制御部の一例として機能する。また、スロット制御部４３は、データの書き込み領域のＬＢＡと同じスロット番号を示すＬＢＡが連続するＬＢＡである場合に、変更後のスロット番号における処理サイズの決定を行なう制御部の一例として機能する。
【０１３２】
〔Ｂ−２〕動作例
上述した実施形態の一例としてのＣＭ１０におけるデータ読み出しコマンドに対する制御処理を、図１６に示すフローチャート（ステップＳ１〜Ｓ９）に従って説明する。
【０１３３】
Ｉ／Ｏ制御部４１は、ＣＡ制御部４７を介してホスト装置３からリードＩ／Ｏを受信すると、キャッシュ制御部４８を介してリードデータを格納する一時バッファを獲得する（ステップＳ１）。
【０１３４】
ブロックマップ制御部４２は、アドレス変換テーブル２０２において、Ｉ／Ｏ範囲のブロックマップを読み込む（ステップＳ２）。
【０１３５】
スロット制御部４３は、リードＩ／Ｏに係るＬＢＡがポイントするスロット単位で処理を分割し、分割されたスロットのうちの先頭のスロットを選択する（ステップＳ３）。
【０１３６】
実データ制御部４４は、ＤＩ制御部５０を介して、選択されたスロットが示す実データを読み込む（ステップＳ４）。
【０１３７】
Ｉ／Ｏ制御部４１は、キャッシュ制御部４８を介して、データブロックが示すオフセットのデータを一時バッファにコピーする（ステップＳ５）。
【０１３８】
スロット制御部４３は、Ｉ／Ｏ範囲のスロット（別言すれば、「分割されたスロット」）のうちの最終のスロットの処理が完了したかを判定する（ステップＳ６）。
【０１３９】
最終のスロットの処理が完了していない場合には（ステップＳ６のＮｏルート参照）、スロット制御部４３は、次のスロットを選択する（ステップＳ７）。そして、処理はステップＳ４へ戻る。
【０１４０】
一方、最終のスロットの処理が完了した場合には（ステップＳ６のＹｅｓルート参照）、処理はステップＳ８へ進む。そして、Ｉ／Ｏ制御部４１は、キャッシュ制御部４８を介して一時バッファに格納されたデータを読み出し、ＣＡ制御部４７を介して読み出したデータをホスト装置３へ転送する（ステップＳ８）。
【０１４１】
Ｉ／Ｏ制御部４１は、キャッシュ制御部４８を介して、一時バッファを解放する（ステップＳ９）。そして、データ読み出しコマンドに対する制御処理は終了する。
【０１４２】
次に、実施形態の一例としてのＣＭ１０におけるデータ書き込みコマンドに対する制御処理を、図１７に示すフローチャート（ステップＳ１１〜Ｓ２５）に従って説明する。
【０１４３】
Ｉ／Ｏ制御部４１は、ＣＡ制御部４７を介してホスト装置３からライトＩ／Ｏを受信すると、キャッシュ制御部４８を介してライトデータを格納する一時バッファを獲得する（ステップＳ１１）。
【０１４４】
Ｉ／Ｏ制御部４１は、キャッシュ制御部４８を介して、ライトデータを一時バッファに格納する（ステップＳ１２）。
【０１４５】
スロット制御部４３は、ライトデータのスロットサイズを決定し、先頭のスロットを選択する（ステップＳ１３）。
【０１４６】
ハッシュ制御部４５は、決定したスロットサイズで、ライトデータのハッシュを計算するとともに、決定したスロットサイズと同じスロットサイズにおけるスロット管理テーブル２０３に登録されたデータのハッシュを、実データテーブル２０４の実データを使用して計算する（ステップＳ１４）。なお、スロット管理テーブル２０３に登録されたデータのハッシュは、ハッシュ制御部４５が管理するハッシュ管理テーブル（不図示）に予め登録されて、ライトデータと既存データとの比較に用いられてもよい。例えば、スロット管理テーブル２０３にデータが登録された時にハッシュが計算され、計算されたハッシュがハッシュ管理テーブルに予め登録されてよい。
【０１４７】
ハッシュ制御部４５は、ライトデータのハッシュについて、スロット管理テーブル２０３に登録された同じスロットサイズのデータを対象に、各データのハッシュと比較して、ヒットするものがあるか否かを判定する（ステップＳ１５）。
【０１４８】
ハッシュがヒットした場合には（ステップＳ１５のＹｅｓルート参照）、スロット制御部４３は、対象スロットのリファレンスカウンタにブロックマップの数を加算する（ステップＳ１６）。そして、処理はステップＳ１９に移行する。
【０１４９】
一方、ハッシュがヒットしなかった場合には（ステップＳ１５のＮｏルート参照）、スロット制御部４３は、スロット管理テーブル２０３において、新規のスロットを割り当てる（ステップＳ１７）。
【０１５０】
実データ制御部４４は、キャッシュ制御部４８を介して一時バッファからライトデータを読み出し、ＤＩ制御部５０を介して読み出したデータを実データとして記憶装置２１に書き込む（ステップＳ１８）。
【０１５１】
スロット制御部４３は、Ｉ／Ｏ範囲のスロットのうちの最終のスロットの処理が完了したかを判定する（ステップＳ１９）。
【０１５２】
最終のスロットの処理が完了していない場合には（ステップＳ１９のＮｏルート参照）、スロット制御部４３は、次のスロットを選択する（ステップＳ２０）。そして、処理はステップＳ１４へ戻る。
【０１５３】
一方、最終のスロットの処理が完了した場合には（ステップＳ１９のＹｅｓルート参照）、スロット制御部４３は、スロット管理テーブル２０３において、更新前のブロックマップが示していたスロットのリファレンスカウンタを減算する（ステップＳ２１）。
【０１５４】
スロット制御部４３は、スロットサイズの最適化処理を実施する（ステップＳ２２）。なお、スロットサイズの最適化処理の詳細は、図１８を用いて後述する。
【０１５５】
ブロックマップ制御部４２は、アドレス変換テーブル２０２において、ブロックマップを更新する（ステップＳ２３）。
【０１５６】
Ｉ／Ｏ制御部４１は、キャッシュ制御部４８を介して、一時バッファを解放する（ステップＳ２４）。
【０１５７】
Ｉ／Ｏ制御部４１は、ＣＡ制御部４７を介して、ホスト装置３に処理完了を通知する（ステップＳ２５）。そして、データ書き込みコマンドに対する制御処理は終了する。
【０１５８】
なお、図１７に示した例においてはスロット毎の処理（ステップＳ１４〜Ｓ２０を参照）が完了した後にスロットサイズの最適化処理（ステップＳ２２を参照）が行なわれることとしたが、これに限定されるものではない。スロットサイズの最適化処理は、スロット毎の処理（例えば、ステップＳ１６又はＳ１８の処理とステップＳ１９の処理との間）において繰り返し実施されてもよい。また、スロットサイズの最適化処理は、ステップＳ１１〜Ｓ２５で示したデータ書き込みコマンドに対する制御処理の完了後、データ書き込みコマンドに対する制御処理とは非同期に実施されてもよい。これにより、ホスト装置３からのライトＩ／Ｏの発行からステップＳ２５におけるホスト装置３へ処理完了を通知するまでに要する時間を短縮できるため、レスポンスを向上できる。
【０１５９】
ＣＭ１０は、ホスト装置３から書き込みデータを受信する都度、リアルタイムで、ステップＳ１３で示したスロットサイズの決定処理、及び、ステップＳ２２に示したスロットサイズ最適化処理を実施してよい。これにより、スロットサイズの決定処理及びスロットサイズ最適化処理が迅速に完了するため、ストレージシステム１００におけるＩ／Ｏ性能及びレスポンスをより向上できる。
【０１６０】
書き込みデータのハッシュと、スロット管理テーブル２０３に登録されている全ての既存データのハッシュとが比較されることにより、重複排除処理が実施されてよい。また、書き込みデータのハッシュと、書き込みデータと同じスロットサイズを有する既存データのハッシュとが比較されることにより、重複排除処理が実施されてもよい。同じスロットサイズである書き込みデータと既存データとの組に限って、ハッシュの比較が行なわれることにより、ハッシュの比較処理を高速に行なうことができ、ストレージシステム１００におけるＩ／Ｏ性能及びレスポンスを向上できる。
【０１６１】
次に、実施形態の一例としてのＣＭ１０におけるスロットサイズの最適化処理を、図１８に示すフローチャート（ステップＳ２２１〜Ｓ２２９）に従って説明する。
【０１６２】
スロット制御部４３は、スロット管理テーブル２０３において、リファレンスカウンタが減算されたスロットを参照する（ステップＳ２２１）。
【０１６３】
スロット制御部４３は、スロット倍率がリファレンスカウンタ値よりも大きいかを判定する（ステップＳ２２２）。
【０１６４】
スロット倍率がリファレンスカウンタ値よりも大きくない場合には（ステップＳ２２２のＮｏルート参照）、スロットサイズの最適化処理は終了する。
【０１６５】
一方、スロット倍率がリファレンスカウンタ値よりも大きい場合には（ステップＳ２２２のＹｅｓルート参照）、ブロックマップ制御部４２は、更新前のブロックマップに対して、Ｉ／Ｏ対象のスロットのサイズに拡張した範囲を読み込む（ステップＳ２２３）。
【０１６６】
ブロックマップ制御部４２は、ブロックマップにおいて、Ｉ／Ｏ対象のスロットを示す領域の数Ｓ（Ｓは０以上の整数）を計測する（ステップＳ２２４）。
【０１６７】
ブロックマップ制御部４２は、Ｉ／Ｏ対象のスロットを示す領域の数ＳがＩ／Ｏ対象のスロットのリファレンスカウンタ値と一致するかを判定する（ステップＳ２２５）。
【０１６８】
Ｉ／Ｏ対象のスロットを示す領域の数ＳがＩ／Ｏ対象のスロットのリファレンスカウンタ値と一致しない場合には（ステップＳ２２５のＮｏルート参照）、スロットサイズの最適化処理は終了する。
【０１６９】
一方、Ｉ／Ｏ対象のスロットを示す領域の数ＳがＩ／Ｏ対象のスロットのリファレンスカウンタ値と一致する場合には（ステップＳ２２５のＹｅｓルート参照）、処理はステップＳ２２６へ進む。そして、スロット制御部４３は、スロット管理テーブル２０３において、新規スロットを割り当てる（ステップＳ２２６）。
【０１７０】
実データ制御部４４は、データを旧スロットから新スロットへ移動する（ステップＳ２２７）。
【０１７１】
スロット制御部４３は、旧スロットのリファレンスカウンタ値を０にする（ステップＳ２２８）。
【０１７２】
ブロックマップ制御部４２は、移動したＬＢＡ領域のブロックマップを新スロットへ更新する（ステップＳ２２９）。そして、スロットの最適化処理は終了する。
【０１７３】
〔Ｂ−３〕効果
上述した実施形態の一例におけるＣＭ１０によれば、例えば、以下のような作用効果を奏することができる。
【０１７４】
スロット制御部４３は、ホスト装置３から受信した書き込みデータのサイズに応じて、書き込みデータと記憶装置２１に記憶されているデータとの間の重複排除処理を行なうスロットサイズを決定する。また、ブロックマップ制御部４２、スロット制御部４３、実データ制御部４４、及び、ハッシュ制御部４５は、決定されたスロットサイズで、重複排除処理を行ない、書き込みデータを処理する。これにより、重複排除処理におけるＩ／Ｏ性能を向上させることができる。具体的には、サイズの異なるＩ／Ｏが混在する環境において、Ｉ／Ｏ毎に処理単位を変更することで、ストレージシステム１００の性能を向上させることができる。また、スロットサイズを大きな値で固定しないため、書き込みデータの重複排除率を向上させることができる。
【０１７５】
スロット制御部４３は、スロットサイズを、所定データサイズの２ｎ（ｎは整数）倍に決定する。これにより、書き込みデータのサイズに応じたスロットサイズの決定を容易にすることができる。
【０１７６】
記憶装置２１は、ＬＢＡとスロット番号とを所定データサイズ毎に対応付けたマッピング情報を記憶するとともに、スロット番号と、スロット番号を参照するＬＢＡの数を示すリファレンス値とを、スロットサイズ毎に対応付けたスロット管理情報を記憶する。また、ブロックマップ制御部４２、スロット制御部４３、実データ制御部４４、及び、ハッシュ制御部４５は、記憶装置２１に記憶されたマッピング情報とスロット管理情報とを用いて、重複排除処理及び書き込みデータの処理を行なう。これにより、重複排除処理及び書き込みデータの処理を効率的に実施できる。
【０１７７】
マッピング情報には、スロット番号に対してオフセット値が付加されている。また、ブロックマップ制御部４２、スロット制御部４３、実データ制御部４４、及び、ハッシュ制御部４５は、オフセット値に基づき、スロット番号のうちのＬＢＡが参照する位置を特定する。これにより、１ブロックのＬＢＡのサイズと、１つのスロットのサイズとが異なる場合でも、ブロックマッピングを実施できる。
【０１７８】
ブロックマップ制御部４２は、スロット管理情報においてスロットサイズを特定する値がリファレンス値よりも大きい場合に、対応するＬＢＡが参照するスロット番号を変更する。また、スロット制御部４３は、変更後のスロット番号におけるスロットサイズを決定する制御を行なう。これにより、データの更新により、スロットサイズが過剰に割り当てられている場合でも、スロットサイズを最適化することができる。
【０１７９】
ブロックマップ制御部４２及びスロット制御部４３は、データの書き込み領域のＬＢＡと同じスロット番号を示すＬＢＡが連続するＬＢＡである場合に、スロット番号の変更及び変更後のスロット番号におけるスロットサイズの決定をそれぞれ行なう。これにより、スロットサイズの最適化処理においてＬＢＡの全範囲を読み出さなくてもよく、スロットサイズの最適化処理を迅速に完了できる。
【０１８０】
〔Ｃ〕変形例
上述した実施形態の一例においてはスロットサイズが基本データサイズの２ｎ倍に設定されたが、これに限定されるものではない。例えば、スロットサイズは、基本データサイズの整数倍であってもよい。
【０１８１】
図１９は、実施形態の変形例におけるスロットサイズテーブル２０１ａを例示する図である。
【０１８２】
スロットサイズテーブル２０１ａは、図５に示したスロットサイズテーブル２０１と同様に、ＣＭ１０におけるブロックマッピングにおいて利用可能なスロットサイズを示す。
【０１８３】
図１９に示されるスロットサイズテーブル２０１ａの「データサイズ」は、４×ｐＫＢ（ｐは整数）で示される。なお、図１９に示すように、データサイズの上限値（図示する例では、３２ＫＢ）を設けることで、ｐがとり得る範囲を制限してよい（図示する例では、ｐ＝１，２，３，４，５，６，７，８）。整数ｐは、スロットサイズテーブル２０１ａの「値」に対応する。
【０１８４】
スロットサイズテーブル２０１ａの「データサイズ」のうち、最小のデータサイズは、基本データサイズや所定データサイズと称されてよい。スロットサイズテーブル２０１ａにおける「倍率」であるｐを基本データサイズに乗じることにより、各スロットに設定可能なデータサイズが算出される。図１９に示す例では、値ｐ＝１の際に「倍率」が１倍で「データサイズ」が４ＫＢとなる。また、例えば、値ｐ＝２の際に「倍率」が２倍で「データサイズ」が８ＫＢとなり、値ｐ＝３の際に「倍率」が３倍で「データサイズ」が１２ＫＢとなり、値ｐ＝８の際に「倍率」が８倍で「データサイズ」が３２ＫＢとなる。
【０１８５】
図４に示したスロット制御部４３は、スロットサイズテーブル２０１ａに示される情報を用いて、各スロットのデータサイズを設定する。スロットサイズテーブル２０１ａに関する情報は、図３に示した記憶装置２１に記憶されてよい。
【０１８６】
このように、実施形態の変形例において、スロット制御部４３は、スロットサイズを、所定データサイズの整数倍に決定する決定部の一例として機能する。これにより、上述した実施形態の一例と同様の効果を奏することができる他に、スロットサイズを柔軟に決定することができるという効果を奏することができる。
【０１８７】
〔Ｄ〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０１８８】
〔Ｅ〕付記
以上の実施形態及び変形例に関し、さらに以下の付記を開示する。
【０１８９】
（付記１）
上位装置から受信した書き込みデータのサイズに応じて、前記書き込みデータと記憶装置に記憶されているデータとの間の重複排除処理を行なう処理サイズを決定する決定部と、
前記決定部によって決定された前記処理サイズで、前記重複排除処理を行ない、前記書き込みデータを処理する処理部と、
を備える、ストレージ制御装置。
【０１９０】
（付記２）
前記決定部は、前記処理サイズを、論理アドレスの管理単位である所定データサイズの２ｎ（ｎは整数）倍に決定する、
付記１に記載のストレージ制御装置。
【０１９１】
（付記３）
前記決定部は、前記処理サイズを、論理アドレスの管理単位である所定データサイズの整数倍に決定する、
付記１に記載のストレージ制御装置。
【０１９２】
（付記４）
前記論理アドレスと、スロット番号とを、前記所定データサイズ毎に対応づけたマッピング情報を記憶するとともに、前記スロット番号と、前記スロット番号を参照する前記論理アドレスの数を示すリファレンス値とを、前記処理サイズ毎に対応づけたスロット管理情報を記憶する記憶部を更に備え、
前記処理部は、前記記憶部に記憶された前記マッピング情報と前記スロット管理情報とを用いて、前記重複排除処理及び前記書き込みデータの処理を行なう、
付記２又は３に記載のストレージ制御装置。
【０１９３】
（付記５）
前記マッピング情報には、前記スロット番号に対してオフセット値が付加されており、
前記処理部は、前記オフセット値に基づき、前記スロット番号のうちの前記論理アドレスによって参照される位置を特定する、
付記４に記載のストレージ制御装置。
【０１９４】
（付記６）
前記スロット管理情報において前記処理サイズを特定する値が前記リファレンス値よりも大きいスロット番号が存在する場合に、当該スロット番号を参照する論理アドレスの参照先を他のスロット番号に変更するとともに、前記他のスロット番号における前記処理サイズを決定する制御を行なう制御部を更に備える、
付記４又は５に記載のストレージ制御装置。
【０１９５】
（付記７）
前記制御部は、前記スロット番号を参照する論理アドレスが連続する論理アドレスである場合に、前記制御を行なう、
付記６に記載のストレージ制御装置。
【０１９６】
（付記８）
上位装置から受信した書き込みデータのサイズに応じて、前記書き込みデータと記憶装置に記憶されているデータとの間の重複排除処理を行なう処理サイズを決定し、
前記決定された前記処理サイズで、前記重複排除処理を行ない、前記書き込みデータを処理する、
処理をコンピュータに実行させる制御プログラム。
【０１９７】
（付記９）
前記処理サイズを、論理アドレスの管理単位である所定データサイズの２ｎ（ｎは整数）倍に決定する、
処理を前記コンピュータに実行させる、付記８に記載の制御プログラム。
【０１９８】
（付記１０）
前記処理サイズを、論理アドレスの管理単位である所定データサイズの整数倍に決定する、
処理を前記コンピュータに実行させる、付記８に記載の制御プログラム。
【０１９９】
（付記１１）
前記論理アドレスと、スロット番号とを、前記所定データサイズ毎に対応づけたマッピング情報を記憶するとともに、前記スロット番号と、前記スロット番号を参照する前記論理アドレスの数を示すリファレンス値とを、前記処理サイズ毎に対応づけたスロット管理情報を記憶部に記憶させ、
前記記憶部に記憶させた前記マッピング情報と前記スロット管理情報とを用いて、前記重複排除処理及び前記書き込みデータの処理を行なう、
処理を前記コンピュータに実行させる、付記８又は９に記載の制御プログラム。
【０２００】
（付記１２）
前記マッピング情報には、前記スロット番号に対してオフセット値が付加されており、
前記オフセット値に基づき、前記スロット番号のうちの前記論理アドレスによって参照される位置を特定する、
処理を前記コンピュータに実行させる、付記１１に記載の制御プログラム。
【０２０１】
（付記１３）
前記スロット管理情報において前記処理サイズを特定する値が前記リファレンス値よりも大きいスロット番号が存在する場合に、当該スロット番号を参照する論理アドレスの参照先を他のスロット番号に変更するとともに、前記他のスロット番号における前記処理サイズを決定する制御を行なう、
処理を前記コンピュータに実行させる、付記１１又は１２に記載の制御プログラム。
【０２０２】
（付記１４）
前記制御部は、前記スロット番号を参照する論理アドレスが連続する論理アドレスである場合に、前記制御を行なう、
処理を前記コンピュータに実行させる、付記１３に記載の制御プログラム。
【０２０３】
（付記１５）
上位装置から受信した書き込みデータのサイズに応じて、前記書き込みデータと記憶装置に記憶されているデータとの間の重複排除処理を行なう処理サイズを決定し、
前記決定された前記処理サイズで、前記重複排除処理を行ない、前記書き込みデータを処理する、
制御方法。
【０２０４】
（付記１６）
前記処理サイズを、論理アドレスの管理単位である所定データサイズの２ｎ（ｎは整数）倍に決定する、
付記１５に記載の制御方法。
【０２０５】
（付記１７）
前記処理サイズを、論理アドレスの管理単位である所定データサイズの整数倍に決定する、
付記１５に記載の制御方法。
【０２０６】
（付記１８）
前記論理アドレスと、スロット番号とを、前記所定データサイズ毎に対応づけたマッピング情報を記憶するとともに、前記スロット番号と、前記スロット番号を参照する前記論理アドレスの数を示すリファレンス値とを、前記処理サイズ毎に対応づけたスロット管理情報を記憶部に記憶させ、
前記記憶部に記憶させた前記マッピング情報と前記スロット管理情報とを用いて、前記重複排除処理及び前記書き込みデータの処理を行なう、
付記１６又は１７に記載の制御方法。
【０２０７】
（付記１９）
前記マッピング情報には、前記スロット番号に対してオフセット値が付加されており、
前記オフセット値に基づき、前記スロット番号のうちの前記論理アドレスによって参照される位置を特定する、
付記１８に記載の制御方法。
【０２０８】
（付記２０）
前記スロット管理情報において前記処理サイズを特定する値が前記リファレンス値よりも大きいスロット番号が存在する場合に、当該スロット番号を参照する論理アドレスの参照先を他のスロット番号に変更するとともに、前記他のスロット番号における前記処理サイズを決定する制御を行なう、
付記１８又は１９に記載の制御方法。
【符号の説明】
【０２０９】
１００    ：ストレージシステム
１        ：ストレージ装置
１０      ：ＣＭ
１１      ：ＣＰＵ
１２      ：メモリ
１３      ：ＣＡ
１４      ：ＤＩ
２０      ：ＤＥ
２１      ：記憶装置
３        ：ホスト装置
４        ：ファームウェア
４０      ：重複排除制御部
４１      ：Ｉ／Ｏ制御部
４２      ：ブロックマップ制御部
４３      ：スロット制御部
４４      ：実データ制御部
４５      ：ハッシュ制御部
４６      ：ＧＣ制御部
４７      ：ＣＡ制御部
４８      ：キャッシュ制御部
４９      ：ＲＡＩＤ制御部
５０      ：ＤＩ制御部
５１      ：ボリューム
２０１    ：スロットサイズテーブル
２０１ａ  ：スロットサイズテーブル
２０２    ：アドレス変換テーブル
２０３    ：スロット管理テーブル
２０４    ：実データテーブル
２０５    ：スロット分割テーブル
６０１    ：アドレス変換テーブル
６０２    ：スロット管理テーブル
６０３    ：実データテーブル
１０００  ：プール
１００１  ：ＬＵ
【図１】
2019003416.tif 000003
【図２】
2019003416.tif 000004
【図３】
2019003416.tif 000005
【図４】
2019003416.tif 000006
【図５】
2019003416.tif 000007
【図６】
2019003416.tif 000008
【図７】
2019003416.tif 000009
【図８】
2019003416.tif 000010
【図９】
2019003416.tif 000011
【図１０】
2019003416.tif 000012
【図１１】
2019003416.tif 000013
【図１２】
2019003416.tif 000014
【図１３】
2019003416.tif 000015
【図１４】
2019003416.tif 000016
【図１５】
2019003416.tif 000017
【図１６】
2019003416.tif 000018
【図１７】
2019003416.tif 000019
【図１８】
2019003416.tif 000020
【図１９】
2019003416.tif 000021