(57)【要約】  一例のストレージシステムは、コンテンツに含まれ、メディア領域に格納されている、参照要求データブロックの参照要求を取得する。ストレージシステムは、参照要求データブロックを含むコンテンツ内で連続する複数データブロックの、メディア領域上のアドレスにおけるギャップ数を決定する。ストレージシステムは、ギャップ数に基づいて、前記複数データブロックによるデフラグが有効か否か判定する。ストレージシステムは、デフラグが有効と判定した場合に、メディア領域からメモリ領域に読み出された複数データブロックを、メディア領域の連続アドレス領域に書き出す。
2015145667.tif 000002
【特許請求の範囲】
【請求項１】
１又は複数の記憶デバイスにより提供され、コンテンツのデータを格納するメディア領域と、
前記メディア領域のデータを一時的に格納するメモリ領域を含むコントローラと、を含み、
前記コントローラは、
コンテンツに含まれ、前記メディア領域に格納されている、参照要求データブロックの参照要求を取得し、
前記参照要求データブロックを含む前記コンテンツ内で連続する複数データブロックの、前記メディア領域上のアドレスにおけるギャップ数を決定し、
前記ギャップ数に基づいて、前記複数データブロックによるデフラグが有効か否か判定し、
前記デフラグが有効と判定した場合に、前記メディア領域から前記メモリ領域に読み出された前記複数データブロックを、前記メディア領域の連続アドレス領域に書き出す、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記コントローラは、前記参照要求データブロックが前記メモリ領域にキャッシュされていない場合に、前記参照要求データブロックを含む前記複数データブロックを前記メディア領域から前記メモリ領域に読み出し、
前記読み出した複数データブロックのギャップ数に基づいて、前記複数データブロックによるデフラグが有効か否か判定し、
前記参照要求データブロックが前記メモリ領域にキャッシュされている場合、前記複数データブロックを前記メディア領域から読み出すことなく、キャッシュされている前記参照要求データブロックを返す、ストレージシステム。
【請求項３】
請求項１に記載のストレージシステムであって、
前記コントローラは、
更新要求データブロックを伴う前記コンテンツの更新要求の処理において、前記コンテンツ内で連続し前記更新要求データブロックを含む複数データブロックが前記メモリ領域にキャッシュされている場合に、前記更新要求データブロックを含む複数データブロックを、前記メディア領域の連続アドレス領域に書き出す、ストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
前記コントローラは、前記複数データブロックが前記コンテンツ内において占める範囲に基づいて、前記複数データブロックによるデフラグが有効か否か判定する、ストレージシステム。
【請求項５】
請求項１に記載のストレージシステムであって、
前記コントローラは、
前記コンテンツのデフラグの実行を制御する、デフラグ実行制御情報を含み、
前記コンテンツ内の全データが前記メディア領域内で連続アドレス領域に格納されている場合に前記デフラグ実行制御情報をデフラグ無効に設定し、
前記デフラグ実行制御情報がデフラグ有効を示す場合に、前記ギャップ数に基づいて、前記複数データブロックによるデフラグが有効か否か判定する、ストレージシステム。
【請求項６】
請求項５に記載のストレージシステムであって、
前記コントローラは、前記コンテンツの更新要求の種別に基づいて、前記デフラグ実行制御情報をデフラグ無効に設定するか否か判定する、ストレージシステム。
【請求項７】
請求項５に記載のストレージシステムであって、
前記コントローラは、前記デフラグ実行制御情報がデフラグ有効を示す場合に前記コンテンツのオフラインデフラグを実行し、前記デフラグ実行制御情報がデフラグ無効を示す場合にオフラインデフラグを省略する、ストレージシステム。
【請求項８】
請求項１に記載のストレージシステムであって、
前記コントローラは、
前記メモリ領域に接続され、前記メモリ領域を拡張するメモリ拡張領域と、を含み、
前記メモリ領域に格納され、前記コンテンツ内で連続するデータブロックを、前記メモリ拡張領域における連続アドレス領域に移動する、ストレージシステム。
【請求項９】
請求項１に記載のストレージシステムであって、
前記コントローラは、
前記メディア領域において過去データを格納しており解放すべきブロック、を管理する、解放ブロック管理情報を保持し、
前記メディア領域において、前記解放ブロック管理情報に登録されているブロックの解放処理を実行する、ストレージシステム。
【請求項１０】
１又は複数の記憶デバイスにより提供され、コンテンツのデータを格納するメディア領域と、前記メディア領域のデータを一時的に格納するメモリ領域と、を含むストレージシステムの制御方法であって、
コンテンツに含まれ、前記メディア領域に格納されている、参照要求データブロックの参照要求を取得し、
前記参照要求データブロックを含む前記コンテンツ内で連続する複数データブロックの、前記メディア領域上のアドレスにおけるギャップ数を決定し、
前記ギャップ数に基づいて、前記複数データブロックによるデフラグが有効か否か判定し、
前記デフラグが有効と判定した場合に、前記メモリ領域に格納されている前記複数データブロックを、前記メディア領域の連続アドレス領域に書き出す、ストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムにおけるデフラグに関する。
【背景技術】
【０００２】
本技術分野の背景技術として、特許文献１がある。特許文献１に開示されているストレージ装置は、ホストからの参照要求に応答して通常の参照処理を行い、コンテンツ内で連続したデータ（論理的に連続したデータと呼ぶ）を取得する。その時、データの物理的な位置が連続していない場合には、ストレージ装置は、それらを次のディスクへの書き出し時に、連続物理領域に書き出す。更に、特許文献１は、ホスト更新要求時にそのライトデータだけでなく、そのライトデータのオフセット周辺の論理的に連続したデータを読み出してからディスクに書き込む方法を開示している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許８３５９４３０号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１のストレージ装置は、ホスト参照要求時、読み出したデータブロック数が小さいと、それらをディスクの新規領域に書き出す。そのため、コンテンツ全体ではランダム性が増し、ディスクからの読み出し性能が劣化する。更に、ホスト更新要求時、特許文献１のストレージ装置は、周辺データをディスクから必ず読み出すため、そのＩ／Ｏ待ちによりホスト要求応答性能が劣化する。したがって、ホストＩ／Ｏ要求の処理性能の低下を抑制しつつ、デフラグ処理を高速化することが望まれる。
【課題を解決するための手段】
【０００５】
本発明の一態様は、１又は複数の記憶デバイスにより提供され、コンテンツのデータを格納するメディア領域と、前記メディア領域のデータを一時的に格納するメモリ領域を含むコントローラと、を含むストレージシステムである。前記コントローラは、コンテンツに含まれ、前記メディア領域に格納されている、参照要求データブロックの参照要求を取得する。前記コントローラは、前記参照要求データブロックを含む前記コンテンツ内で連続する複数データブロックの、前記メディア領域上のアドレスにおけるギャップ数を決定する。前記コントローラは、前記ギャップ数に基づいて、前記複数データブロックによるデフラグが有効か否か判定する。前記コントローラは、前記デフラグが有効と判定した場合に、前記メディア領域から前記メモリ領域に読み出された前記複数データブロックを、前記メディア領域の連続アドレス領域に書き出す。
【発明の効果】
【０００６】
本発明の一態様によれば、ホストＩ／Ｏ要求の処理性能の低下を抑制しつつデフラグ処理を高速化できる。
【図面の簡単な説明】
【０００７】
【図１】実施例１の概要を説明する図である。
【図２Ａ】ファイルストレージシステムの構成例を示す図である。
【図２Ｂ】ファイルストレージシステムの構成例を示す図である。
【図３】参照要求時デフラグ判定テーブルの構成例を示す図である。
【図４】更新要求時デフラグ判定テーブルの構成例を示す図である。
【図５】ホスト参照要求時のデフラグ方法の概要を示す図である。
【図６】ホスト参照要求時デフラグ処理のフローチャートである。
【図７】ホスト更新要求時のデフラグ方法の概要を示す図である。
【図８】ホスト更新要求時デフラグ処理のフローチャートである。
【図９】オフラインデフラグ処理のフローチャートである。
【図１０】実施例２の概要を示す図である。
【図１１】ページ回収処理のフローチャートである。
【図１２】実施例３の概要を示す図である。
【図１３】解放ブロック回収処理のフローチャートである。
【発明を実施するための形態】
【０００８】
幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【０００９】
なお、以下の説明では、「ＸＸテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「ＸＸテーブル」を「ＸＸ情報」と呼ぶことができる。
【００１０】
また、以下の説明では、プログラムを主語として処理を説明する場合があるが、プログラムをハードウェアの自体、またはハードウェアが有するプロセッサ（例えば、ＭＰ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｏｒ））によって実行することで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェースデバイス（例えばポート）を用いながら行うため、処理の主語がハードウェアとされても良い。また、プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００１１】
以下において、ファイルストレージシステムにおけるデフラグ技術が開示される。ファイルストレージシステムは、１以上の記憶デバイスを含む。以下において、１以上の記憶デバイスが与える記憶領域をメディア領域と呼ぶ。
【００１２】
ファイルストレージシステムにおけるメディア領域の入出力性能は、格納されるデータへのランダム及びシーケンシャルアクセスのパターンに制限される。メディア領域へのアクセスは、メディア領域において定義されるアドレスを使用する。メディア領域で定義されるアドレスは、例えば、論理ブロックアドレス（ＬＢＡ）である。
【００１３】
ランダムアクセスの性能は、シーケンシャルアクセスの性能と比較して低い。従って、シーケンシャルアクセス要求は、なるべくランダムアクセスとならないようにデータを配置することが、ストレージシステムの入出力性能の向上に有効である。
【００１４】
ファイルストレージシステムは、データを、論理的にまとまったデータであるコンテンツごとに管理する。コンテンツとしては、通常のファイルの他、アーカイブファイル、バックアップファイル、仮想計算機のボリュームファイルのような、通常のファイルを集約したファイルがある。コンテンツは、ファイルの一部でもあり得る。
【００１５】
同様に、データのアクセスも、コンテンツごとに発生する。そのため、コンテンツを構成するデータは、メディア領域において連続したアドレス領域に格納することが求められる。しかし、データの更新要求(上書・追加・削除)により、コンテンツのデータのメディア領域における格納アドレスがランダムとなり、入出力性能が劣化する。
【００１６】
対策としてデフラグの適用がある。しかし、デフラグは、コンテンツを全てメディア領域から読み出し(ランダムアクセス)し、そのデータをメディア領域の新たなアドレス領域に書き込む必要があり、負荷が重く、システムの性能を低下させる。
【００１７】
以下に説明するファイルストレージシステムは、オンラインデフラグを実行する。オンラインデフラグは、ホストからの参照要求（ホスト参照要求）及び／又は更新要求（ホスト更新要求）の処理におけるデフラグである。
【００１８】
一例において、ファイルストレージシステムは、ホスト参照要求時に、参照要求されたデータと、コンテンツ内で参照要求されたデータに連続するデータと、によるデフラグが、有効であるか判定する。ファイルストレージシステムは、参照要求データを含む、コンテンツ内での連続データがメディア領域で有するギャップ数に基づいてデフラグが有効であるか否か判定する。
【００１９】
ここで、コンテンツ内のデータ位置は、オフセットにより示される。本開示において、コンテンツ内でのデータ位置を論理的な位置と呼ぶことがある。同様に、コンテンツ内でオフセットが連続するデータを、論理的に連続したデータと呼ぶことがある。これに対して、メディア領域において連続アドレスに格納されているデータを、物理的に連続するデータと呼ぶことがある。上述のように、メディア領域におけるアドレスは、例えば、ＬＢＡで示される。
【００２０】
コンテンツ内の連続データは、複数データブロックに分かれてメディア領域において格納されている。ファイルストレージシステムは、当該複数データブロック（ブロック領域）のアドレス間におけるギャップ数に基づいて、デフラグが有効であるか判定する。アドレスが非連続である場合、それら間にギャップが存在する。以下では、メディア領域におけるデータ格納単位領域を単にブロックと呼ぶ。
【００２１】
デフラグが有効であると判定した場合、ファイルストレージシステムは、上記複数データブロックを、メディア領域における連続アドレス領域（連続ブロックからなる領域）に書き出す。ギャップ数に基づき不要と判定したデフラグを省略することで、デフラグによる負荷の増大を低減する。
【００２２】
一例において、ファイルストレージシステムは、予め指定されているコンテンツに対してのみ、ホスト参照要求時のオンラインデフラグを実行する。ファイルストレージシステムは、コンテンツへのホスト更新要求時に、当該コンテンツのデフラグが必要となるか否か判定する。必要と判定したコンテンツには、それを示すフラグを与える。
【００２３】
ファイルストレージシステムは、ホスト参照要求時、上記フラグにより、対象コンテンツが、オンラインデフラグが必要であるか否かを判定する。フラグが、オンラインデフラグが必要であることを示す場合のみ、ファイルストレージシステムは、オンラインデフラグを実行する。これにより、不要なデフラグをさらに省略できる。
【００２４】
一例において、ファイルストレージシステムは、ホスト更新要求において、オンラインデフラグを実行する。ホストから更新要求されているデータと、コンテンツ内で連続したデータがキャッシュされている時、ファイルストレージシステムは、更新要求データを含む連続データを、まとめてメディア領域における連続アドレス領域に書き出す。
【００２５】
一例において、ファイルストレージシステムは、オンラインデフラグと共に、オフラインデフラグを実行する。オフラインデフラグは、ホスト要求と非同期のデフラグである。ファイルストレージシステムは、オフラインデフラグにおいて、オンラインデフラグでデフラグが完了しなかったコンテンツを選択し、デフラグを適用する。オンラインデフラグがコンテンツのランダムなデータ配置を減少させるため、オフラインデフラグの処理負荷が軽減し、システム入出力性能の低下が抑制できる。
【実施例１】
【００２６】
図１は本実施例の計算機システム及びファイルストレージシステムの処理の概要を模式的に示している。計算機システムは、ファイルストレージシステム１００と、複数のホスト計算機１４と、管理計算機１５とを含む。これらはネットワーク２により接続されている。【００２７】
ホスト計算機１４は、ファイルストレージシステム１００のリソースにアクセスし、業務を行う計算機である。ネットワーク２は、ホスト計算機１４とファイルストレージシステム１００との間のユーザデータ及び管理計算機１５と他の装置との間の管理データの通信用ネットワークであって、一例において、ＩＰネットワークである。【００２８】
図１において、ファイルシステムは、ファイルストレージシステム１００で構成されている。ファイルストレージシステム１００はファイルシステムを含み、ホスト計算機１４から、保持しているファイルへのアクセスを受け付ける。【００２９】
ファイルストレージシステム１００のメモリ領域１０３は、デフラグ制御プログラム３００を格納している。デフラグ制御プログラム３００は、オンラインデフラグ処理モジュール３０１とオフラインデフラグ処理モジュール３０２とを含む。【００３０】
オンラインデフラグ処理モジュール３０１は、ホスト計算機１４から参照要求を受信すると、当該参照要求の参照先コンテンツのコンテンツ管理テーブル２００を参照し、デフラグ実行フラグ２０２が有効に設定されているか否かチェックする。コンテンツ管理テーブル２００は、一つのコンテンツについての管理情報を保持している。【００３１】
デフラグ実行フラグ２０２が有効に設定されている場合、オンラインデフラグ処理モジュール３０１は、オンラインデフラグを実行する。これにより、無用なオンラインデフラグのための処理を避けることができる。具体的には、オンラインデフラグ処理モジュール３０１は、参照要求データに加え、コンテンツ内で参照要求データに連続するデータ（論理的に連続したデータ）を、メディア領域１０４から読み出す。メディア領域１０４から読み出すデータブロック数Ｋは、２以上の整数である。Ｋは一定値又は可変値である。【００３２】
図１の例において、参照データはコンテンツＢ内のＢ１であり、メディア領域１０４から読み出すデータブロック数Ｋは３である。コンテンツＢはデータブロックＢ０、Ｂ１、Ｂ２、Ｂ３で構成され、コンテンツＢ内において、データブロックＢ０、Ｂ１、Ｂ２、Ｂ３は、この順序で連続配置されている。つまり、データブロックＢ０、Ｂ１、Ｂ２、Ｂ３のオフセットは連続している。メディア領域１０４は、コンテンツＢのデータを格納し、最新データのデータブロックが太線で示されている。【００３３】
データＢ１に対する参照要求に対して、メディア領域１０４から、ブロック１４１、１４３、１４５のデータが読み出される。ブロック１４１、１４３、１４５は、それぞれ、データブロックＢ０、Ｂ１、Ｂ２を格納している。コンテンツ内の論理的に連続したデータの選択方法は、設計に依存する。例えば、オンラインデフラグ処理モジュール３０１は、参照データの前のデータのみ選択してもよく、参照データの後のデータのみ選択してもよく、前後双方のデータを選択してもよい。【００３４】
オンラインデフラグ処理モジュール３０１は、データを読み出したデータブロックのメディア領域１０４におけるアドレス（物理的データ配置）におけるギャップ数をカウントする。図１の例において、オンラインデフラグ処理モジュール３０１は、コンテンツ内オフセットとメディア領域内アドレスとを対応付けるアドレスマッピングテーブル２６０を参照し、コンテンツ内のオフセットからメディア領域１０４におけるアドレスを同定することができる。オンラインデフラグ処理モジュール３０１は、参照要求時デフラグ判定テーブル２２０を参照し、当該カウント数においてデフラグが有効か否か判定する。【００３５】
デフラグが有効であると判定すると、オンラインデフラグ処理モジュール３０１は、メディア領域１０４の連続アドレス領域（物理的な連続ブロック）に、データを書き出す。これにより、論理的に連続したデータを、物理的に連続したデータブロックで構成する。【００３６】
図１の例において、ブロック１４１、１４３、１４５（データブロックＢ０、Ｂ１、Ｂ２）のギャップ数は２である。ブロック１４１とブロック１４３との間にギャップ１４２が存在し、ブロック１４３とブロック１４５との間にギャップ１４４が存在する。【００３７】
本例において、参照要求時デフラグ判定テーブル２２０は、デフラグが有効であると示している。オンラインデフラグ処理モジュール３０１は、データＢ０、Ｂ１、Ｂ３を、メディア領域１０４で連続するブロック１４６〜１４７に書き出す。コンテンツＢのギャップ数は、２から１に減少している。【００３８】
ギャップ数のカウント及びデフラグが有効であるか否かの判定は、データをメディア領域１０４から読み出す前に行っても良い。デフラグが無効と判定した場合、オンラインデフラグ処理モジュール３０１はメディア領域１０４から参照データのみを読み出し、他の連続周辺データを読み出さなくてもよい。【００３９】
次に、ホスト計算機１４からの更新要求に応じたオンラインデフラグを説明する。オンラインデフラグ処理モジュール３０１は、更新要求を受信すると、更新データに論理的に連続するデータがキャッシュされている場合に、更新データとキャッシュデータを共に、物理的に連続した領域に書き出す。【００４０】
図１の例において、ホスト更新要求はコンテンツＤに対し、更新データＤ１＊を上書きすることを示す。コンテンツＤは、データブロックＤ０、Ｄ１、Ｄ２、Ｄ３で構成され、コンテンツＢ内において、データブロックＤ０、Ｄ１、Ｄ２、Ｄ３は、この順序で連続配置されている。ホスト更新要求は、データブロックＤ０を、データブロックＤ１＊で上書きすることを指示する。メディア領域１０４は、コンテンツＤのデータを格納し、最新データのデータブロックが太線で示されている。【００４１】
オンラインデフラグ処理モジュール３０１は、データブロックＤ１＊によるホスト更新要求を受信すると、キャッシュ管理テーブル２４０を参照して、データブロックＤ１＊に論理的に連続するデータがキャッシュされているか判定する。図１の例において、データブロックＤ１＊に論理的に連続するデータブロックＤ０、Ｄ２がキャッシュされている。オフラインデフラグ処理モジュール３０２は、データブロックＤ０、Ｄ１＊、Ｄ２をメディア領域１０４の連続するブロック１７１〜１７３に書き出す。コンテンツＤのギャップ数は、２から１に減少している。【００４２】
オンラインデフラグ処理モジュール３０１は、さらに、更新後のコンテンツＤがフラグメントし、デフラグが必要かどうかの判定を、更新要求時デフラグ判定テーブル２３０に基づいて行う。デフラグが必要と判定した場合、オフラインデフラグ処理モジュール３０２は、コンテンツＤのコンテンツ管理テーブル２００に、デフラグ実行フラグ２０２を有効に設定する。【００４３】
次に、オフラインデフラグを説明する。オフラインデフラグ処理モジュール３０２は、オフラインデフラグ管理テーブル２１０を参照し、高速実行フラグ２１２が有効に設定されているか調べる。高速実行フラグ２１２が有効に設定されていない場合、オフラインデフラグ処理モジュール３０２は、メディア領域１０４内の全てのコンテンツについて、オフラインデフラグを実行する。【００４４】
高速実行フラグ２１２が設定されている場合、オフラインデフラグ処理モジュール３０２は、コンテンツ管理テーブル２００にデフラグ実行フラグ２０２が設定されているコンテンツを選択し、選択したコンテンツについてのみオフラインデフラグを実行する。【００４５】
本構成により、オンラインデフラグ処理にて読み出したデータの物理的な配置を連続に書き換えるため、読み出し性能を向上させることができる。更に、オンラインデフラグで物理的なデータ配置が連続となったデータが増えることにより、オフラインデフラグ処理の負荷が軽減する。【００４６】
データブロックのギャップ数に基づいてオンラインデフラグの実行有無を判定することで、デフラグの効果が小さい又はデフラグの効果がないオンラインデフラグ処理を省略し、オンラインデフラグ処理のホストＩ／Ｏ要求の処理性能への影響を低減できる。【００４７】
図２Ａは、本実施例にかかるファイルストレージ装置１０の構成例を示す。ファイルストレージシステム１００は、ファイルストレージ装置１０で構成されている。ファイルストレージ装置１０は、管理計算機１５、複数のホスト計算機１４に、ネットワーク２を介して接続されている。ネットワーク２は、例えばＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、公衆回線または専用回線などであってよい。【００４８】
ファイルストレージ装置１０は、プロセッサ１０２、メモリ１０７、記憶デバイス１０６及びネットワークインタフェース１０５を含む。これらは、システムバス１０８を介して接続されている。【００４９】
プロセッサ１０２は、メモリ１０７に格納されているプログラムに従って、メモリ領域１０３に格納されている情報を使用して動作することで、ファイルストレージ装置１０の様々な機能部として動作する。例えば、プロセッサ１０２は、デフラグ制御部及び空きブロック管理部として動作する。【００５０】
メモリ１０７は、プログラム群３５０及び管理情報２５０を格納している。プログラム群３５０は、デフラグ制御プログラム３００、空きブロック管理プログラム３１０を含む。管理情報２５０は、プログラム群３５０が使用する情報を含む。管理情報２５０は、コンテンツ管理テーブル２００、オフラインデフラグ管理テーブル２１０、参照要求時デフラグ判定テーブル２２０、更新要求時デフラグ判定テーブル２３０、キャッシュ管理テーブル２４０、アドレスマッピングテーブル２６０を含む。【００５１】
さらに、メモリ１０７は、ファイルトレージ装置１０が動作するための情報を格納するために用いられるほか、ホスト計算機１４のユーザデータを一時的に格納するキャッシュメモリとして、さらに、プロセッサ１０２のワークメモリとして用いられる。メモリ１０７は、図１におけるメモリ領域１０３を提供する。メモリ１０７には、ＤＲＡＭ等の揮発性半導体メモリまたはフラッシュメモリ等の不揮発性半導体メモリが使用され、メディア領域１０４よりも高速データアクセスが可能である。【００５２】
説明の便宜上、プログラム群３５０及び管理情報２５０はメモリ領域１０３内に示されているが、典型的には、プログラム群３５０及び管理情報２５０は、記憶デバイス１０６からロードされる。【００５３】
記憶デバイス１０６は、所定の機能を実現するために必要なプログラム、管理情報、メタデータを格納する他、本例において、ホスト計算機１４のユーザデータを格納する。記憶デバイス１０６は、メディア領域１０４を提供する。例えば、記憶デバイス１０６は、不揮発性の非一時的記憶媒体を備える記憶デバイスであり、ネットワークを介して接続されてもよい。【００５４】
デフラグ制御プログラム３００は、上述のように、ホストＩ／Ｏ要求時にデフラグを実行するオンラインデフラグ処理モジュール３０１と、ホストＩ／Ｏ要求と非同期にデフラグを実行するオフラインデフラグ処理モジュール３０２を含む。【００５５】
空きブロック管理プログラム３１０は、ユーザデータを格納するメディア領域１０４（記憶デバイス１０６）のデータ格納単位であるブロックの使用／未使用を管理する。空きブロック管理プログラム３１０は、空きブロックのメディア領域内アドレスを示す空きブロック管理情報を保持し、メディア領域１０４におけるデータ更新に応じて当該管理情報を更新する。【００５６】
デフラグ制御プログラム３００は、空きブロック管理プログラム３１０と連携して、メディア領域から読み出したコンテンツデータの物理連続領域の書き出し先を決定する。空きブロック管理プログラム３１０は、デフラグ適用後、コンテンツデータが格納されていたブロックを空きブロックとして管理する。【００５７】
図２Ｂは、ファイルストレージシステム１００の他の構成例を示す。本例において、ファイルストレージシステム１００は、ファイルサーバ１１とブロックストレージ装置１２から構成される。図２Ａの構成における記憶デバイス１０６以外の構成要素が、ファイルサーバ１１に含まれている。ブロックストレージ装置１２が、記憶デバイス１０６に対応する。【００５８】
ネットワーク４は、ファイルサーバ１１とブロックストレージ装置１２を相互に接続するネットワークであり、例えば、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）である。ファイルサーバ１１は、ストレージインタフェース１１９を介してネットワーク４に接続し、ブロックストレージ装置１２は、ストレージインタフェース１２９を介して、ネットワーク４に接続する。ファイルサーバ１１及びブロックストレージ装置１２は、ユーザデータの更新及び参照のため、ネットワーク４を介して、コマンド及びユーザデータの送受信を行う。【００５９】
ブロックストレージ装置１２は、ファイルサーバ１１に対して、ユーザデータの保存先と、ブロック単位でのデータへのアクセスＩ／Ｆとを提供する。ブロックストレージ装置１２は、ファイルサーバ１１との通信に使用するストレージＩ／Ｆ１２９、メモリ１２３に格納されたプログラムを実行するプロセッサ１２２、データを保存する記憶デバイス１２４及びプログラムやデータを格納するメモリ１２３を搭載し、それらを内部的な通信路（例えば、バス）１２８によって接続している。【００６０】
ファイルサーバ１１は、プロセッサ１１２、メモリ１１３、ネットワークインタフェース１１５及びストレージインタフェース１１９を含み、これらはシステムバス１１８で接続されている。プロセッサ１１２、メモリ１１３、ネットワークインタフェース１１５は、ファイルストレージ装置１０における対応要素と同様である。メモリ１１３は、プログラム群３５０及び管理情報２５０を格納している。【００６１】
図１に示すように、ファイルストレージシステム１００は、コンテンツ管理テーブル２００を含む。コンテンツ管理テーブル２００は、コンテンツ毎に作成される。コンテンツ管理テーブル２００は、不図示の従来の管理情報に加え、デフラグ実行フラグ２０２を含む。従来の管理情報は、例えば、ｉｎｏｄｅを構成する情報であり、コンテンツの長さ、コンテンツ所有ユーザ、コンテンツの更新、等に関する情報を含む。【００６２】
コンテンツにデフラグが必要な場合、デフラグ実行フラグ２０２は有効に設定され、コンテンツにデフラグが不要な場合、デフラグ実行フラグ２０２は無効に設定される。コンテンツを構成するデータが、メディア領域１０４において連続したアドレス領域に格納されている場合、デフラグ実行フラグ２０２は無効に設定される。【００６３】
本実施例では、オンラインデフラグ処理モジュール３０１は、ホスト更新要求の処理において、更新要求時デフラグ判定テーブル２３０に基づき、当該コンテンツのデフラグが必要であるか否かを判定する。デフラグが必要であると判定した場合、オンラインデフラグ処理モジュール３０１は、当該コンテンツのデフラグ実行フラグ２０２を有効に設定する。【００６４】
さらに、ホスト参照要求時デフラグ判定テーブル２２０の判定結果又はオフラインデフラグの適用により、コンテンツを構成するデータが物理的に連続な領域に配置されたと判定した場合、オンラインデフラグ処理モジュール３０１は、デフラグ実行フラグ２０２を無効に設定する。【００６５】
オフラインデフラグ管理テーブル２１０は、高速実行フラグ２１２から構成される。高速実行フラグ２１２は、管理計算機１５から設定される値である。高速実行フラグ２１２が有効な時、オフラインデフラグを適用するコンテンツを、デフラグ実行フラグ２０２が有効なコンテンツに制限し、高速なデフラグを実行する。【００６６】
高速実行フラグ２１２が無効な時、全てのコンテンツにデフラグを適用し、全てのコンテンツで最適なデータ配置を実現する。これらの制御をシステム管理者が管理計算機１５を介して設定する。【００６７】
図３は、ホスト参照要求時デフラグ判定テーブル２２０の構成例を示す。ホスト参照要求時デフラグ判定テーブル２２０は、メディア領域から読み出した論理的に連続するＫ個のデータブロックがコンテンツ内に占める範囲の種別を示すカラム２２２、Ｋ個のデータブロックのギャップ数を示すカラム２２３、デフラグ実行判定結果を示すカラム２２４を有する。【００６８】
このように、ホスト参照要求時デフラグ判定テーブル２２０は、Ｋ個のデータブロックがコンテンツ内に占める範囲の種別及びＫ個のデータブロックのギャップ数の組合せと、デフラグ実行判定結果と、の関係を示す。【００６９】
コンテンツ内に占める範囲の種別は、コンテンツ全体、コンテンツの先頭データを含むコンテンツの一部、コンテンツの終端データを含むコンテンツの一部、中間データのみからなるコンテンツの一部、である。中間データのみからなるコンテンツの一部は、先頭データ及び終端データ以外のデータで構成されている。【００７０】
コンテンツ内に占める範囲とギャップ数との関係から、デフラグ実行判定を行うことで、デフラグ効果についてより適切な判定を行うことができる。図３の例は、コンテンツ内に占める範囲とギャップ数との関係からデフラグ効果がない可能性がある場合には、デフラグ判定結果無効となっている。なお、参照要求時でのオンラインデフラグ実行判定結果は、コンテンツ内でデータブロックが占める範囲によらず、ギャップ数のみから決定されてもよい。【００７１】
図４は、更新要求時デフラグ判定テーブル２３０の構成例を示す。更新要求時デフラグ判定テーブル２３０は、ホスト更新要求の種類を示すカラム２３２、メディア領域１０４における連続ブロック割当可否を示すカラム２３３、デフラグが必要か否かの判定結果を示すカラム２３４を有する。【００７２】
ここでは、Ｌｏｇ−ｓｔｒｕｃｔｕｒｅｄ  Ｆｉｌｅ  Ｓｙｓｔｅｍ（ＬＦＳ）を採用するファイルシステムを搭載したファイルストレージシステムにおける、デフラグ発生の判定方法を説明する。なお、本実例のデフラグ発生の判定方法はＬＦＳに限定されることなく、他のファイルシステムを搭載したファイルストレージシステムに対しても適宜変更して適用できる。【００７３】
ＬＦＳは、コンテンツのユーザデータ及び管理情報の双方の更新をトラキングし、更新データをファイルシステムのログ部分に記録する。ログされる更新時点をチェックポイントと呼ぶ。ＬＦＳは、過去のチェックポイントから選択した一部又は全部のチェックポイントの更新データを、スナップショットとして保存することで、ファイルシステムのスナップショットを自動かつ連続的に生成することができる。【００７４】
ＬＦＳは、ファイルを更新する時、ファイルの更新箇所に対応するメディア領域１０４上のブロックのデータに、更新データを上書きせずに、更新データをメディア領域１０４上の別のブロックに書き込む。これにより、任意チェックポイントのデータを復元することができる。メモリ領域１０３上では、ファイルの更新箇所に対応するブロックのデータは、更新データで上書きされる。【００７５】
ＬＦＳの上記動作により、ホスト更新要求が既存コンテンツ内のデータの上書処理である時、該当コンテンツにおいてフラグメンテーションが発生し、デフラグが必要である。ホスト更新要求が、新規コンテンツの追加要求又は既存コンテンツへのデータ追加要求である時、既存データと新規追加データを含む全てのデータをメディア領域１０４内の連続ブロックへ格納することができない時、フラグメンテーションが発生し、デフラグが必要である。全てのデータをメディア領域１０４内の連続ブロックへの格納できる場合、デフラグが不要である。【００７６】
最後に、ホスト更新要求がデータの削除要求である時、デフラグは発生しない。これらの判定結果から、コンテンツ管理テーブル２００のデフラグ実行フラグ２０２を有効にするかどうかを判断する。【００７７】
なお、同一ブロックに更新データを上書きするファイルシステムにおいて、ホスト更新要求がデータの削除要求である時デフラグが発生し、データの上書処理である時デフラグは発生しない。データの追加についてはＬＦＳと同様である。【００７８】
図５は、ホスト参照要求時のデフラグ方法の概要を示す。コンテンツＣ（４００）が、データブロックＣ０、Ｃ１、Ｃ２、Ｃ３、Ｃ４、Ｃ５、Ｃ６、Ｃ７から構成されている。コンテンツＣのコンテンツ管理テーブル４１０のデフラグ実行フラグ４１２は有効である。データブロックＣ０、Ｃ１、Ｃ２、Ｃ３、Ｃ４、Ｃ５、Ｃ６、Ｃ７は、メディア領域１０４に格納されている。図５において、メディア領域１０４の太線のデータブロックが、コンテンツＣの最新のデータを示す。【００７９】
図５の例において、データブロックＣ１の参照要求が発行されている。例えば、メモリ領域１０３にデータブロックＣ１がキャッシュされていない場合、データブロックＣ１が、メディア領域１０４から読み出される必要がある。キャッシュ管理テーブル２４０は、データブロックＣ１がキャッシュされているか否かを示す。【００８０】
オンラインデフラグ処理モジュール３０１は、デフラグ実行フラグ４１２が有効であるため、参照要求データブロックＣ１を含む、論理的な連続データブロックＣ０、Ｃ１、Ｃ２をメディア領域１０４のブロック４０１〜４０３から読み出す。ここでは、コンテンツにおけるデータブロックＣ１の論理的連続周辺データブロックとして、データブロックＣ１の前後のデータブロックＣ０、Ｃ２が選択されている。オンラインデフラグ処理モジュール３０１は、ＯＳが提供する機能を使用して、メディア領域１０４からデータを読み出す。【００８１】
これと異なり、データブロックＣ１の前のデータブロックのみ又はデータブロックＣ１の後の連続データブロックのみを選択してもよい。データブロックＣ１の前のデータブロック数と後のデータブロック数とが異なっていてもよい。また、本例において、選択されるデータブロック数Ｋは、３であるが、それ以外の数値でもよい。【００８２】
次に、オンラインデフラグ処理モジュール３０１が、メディア領域１０４におけるデータブロックＣ０、Ｃ１、Ｃ２（ブロック４０１〜４０３）のギャップ数をカウントする。オンラインデフラグ処理モジュール３０１は、アドレスマッピングテーブル２６０を参照して、データブロックＣ０、Ｃ１、Ｃ２のコンテンツ内オフセットに対応するメディア領域内アドレスを知ることができる。オンラインデフラグ処理モジュール３０１は、データブロックＣ０、Ｃ１、Ｃ２のメディア領域内アドレスにより、ギャップ数をカウントする。なお、ギャップ数のカウントは、データブロックＣ０、Ｃ１、Ｃ２の読み出し前に実行されてもよい。【００８３】
図５の例を参照すると、メディア領域１０４において、データブロックＣ０（ブロック４０１）とデータブロックＣ１（ブロック４０２）と間にギャップ４０４が存在し、データブロックＣ１（ブロック４０２）とデータブロックＣ２（ブロック４０３）と間にギャップ４０５が存在する。【００８４】
したがって、メディア領域１０４におけるデータブロックＣ０（ブロック４０１）、データブロックＣ１（ブロック４０２）、データブロックＣ２（ブロック４０３）のギャップ数は、２である。【００８５】
オンラインデフラグ処理モジュール３０１は、ホスト参照要求時デフラグ判定テーブル２２０を参照し、データブロックＣ０、Ｃ１、Ｃ２を使用してデフラグを行うか否か判定する。オンラインデフラグ処理モジュール３０１は、データブロックＣ０、Ｃ１、Ｃ２がコンテンツＣ（４００）で占める範囲と、それらのギャップ数とから、デフラグ実行の有無を決定する。【００８６】
データブロックＣ０は、コンテンツＣ（４００）の先頭データである。したがって、データブロックＣ０、Ｃ１、Ｃ２は、コンテンツＣ（４００）の先頭データを含み、コンテンツＣ（４００）の一部である。なお、データブロックのコンテンツ内の位置は、そのオフセットにより示されている。【００８７】
ホスト参照要求時デフラグ判定テーブル２２０は、データブロックがコンテンツ内で占める範囲が「コンテンツの先頭データを含むコンテンツの一部」であって、そのギャップ数が「２」である場合、デフラグ実行判定が「有効」であることを示す。したがって、オンラインデフラグ処理モジュール３０１は、データブロックＣ０、Ｃ１、Ｃ２を物理的連続領域に書き出すことで、デフラグを行うと判定する。【００８８】
オンラインデフラグ処理モジュール３０１は、キャッシュ管理テーブル２４０において、これらデータブロック（の格納ページ）のキャッシュ状態をダーティに設定する。なお、ダーディ状態を示すキャッシュ状態に代えて／加えて、デフラグ用の処理を示す特別な書き出し専用ビットを用意してもよい。【００８９】
その後、データブロックＣ０、Ｃ１、Ｃ２をメディア領域１０４に書き出すファイルシステムプログラムが、書き出し時に、書き出し先新規アドレス領域を空きブロック管理プログラム３１０から取得し、データブロックＣ０、Ｃ１、Ｃ２を、メディア領域１０４内の新規アドレス領域に書き出す。【００９０】
新規アドレス領域は、連続した空きブロックであり、メディア領域１０４に書き出すファイルステムプログラムは，空きブロック管理プログラム３１０から、空きブロックの情報を得ることができる。図５の例において、データブロックＣ０、Ｃ１、Ｃ２は、それぞれ、連続したブロック４０１＊、４０２＊、４０３＊に書き出される。【００９１】
なお、メディア領域１０４に書き出すファイルシステムプログラムに代わり，オンラインデフラグ処理モジュール３０１が，書き出し時に、書き出し先アドレスを空きブロック管理プログラム３１０から取得し、キャッシュ管理テーブル２４０に設定してもよい。この時，メディア領域１０４に書き出すファイルシステムプログラムは，キャッシュ管理テーブル２４０に設定した書き出し先アドレスに、データブロックを書き出す。【００９２】
空きブロック管理プログラム３１０は、オフラインデフラグ処理モジュール３０２の処理結果を得て、ブロック４０１、４０２、４０３を空きブロックとして、ブロック４０１＊、４０２＊、４０３＊、非空き領域として管理する。【００９３】
次に、データブロックＣ５の参照要求に対する処理を説明する。データブロックＣ１と同様に、メモリ領域１０３上にデータブロックＣ５がキャッシュされていない場合、データブロックＣ５は、メディア領域１０４から読み出される必要がある。【００９４】
オンラインデフラグ処理モジュール３０１は、参照データブロックＣ５に加え、その周辺連続データブロックをメディア領域１０４から読み出す。本例は、参照データブロックＣ５の前後一つずつのデータブロックＣ４、Ｃ６をメディア領域１０４から読み出す。【００９５】
データブロックＣ４、Ｃ５、Ｃ６は、メディア領域１０４において、ブロック４０６〜４０８に格納されている。メディア領域１０４において、データブロックＣ４（ブロック４０６）とデータブロックＣ５（ブロック４０７）と間にギャップ４０９が存在する。【００９６】
したがって、メディア領域１０４におけるデータブロックＣ４（ブロック４０６）、データブロックＣ５（ブロック４０７）、データブロックＣ６（ブロック４０８）のギャップ数は、１である。さらに、データブロックＣ４、Ｃ５、Ｃ６は、コンテンツＣ（４００）の一部であって、中間データのみからなる。【００９７】
ホスト参照要求時デフラグ判定テーブル２２０は、データブロックがコンテンツ内で占める範囲が「中間データのみからなるコンテンツの一部」であって、そのギャップ数が「１」である場合、デフラグ実行判定が「無効」であることを示す。したがって、オンラインデフラグ処理モジュール３０１は、キャッシュ管理テーブル２４０をデータブロックＣ４、Ｃ５、Ｃ６のキャッシュ状態をダーティに設定することなく処理を終了する。データブロックＣ４、Ｃ５、Ｃ６は、メディア領域１０４に書き出されない。【００９８】
なお、ギャップ数のカウントは、データブロックＣ４、Ｃ５、Ｃ６の読み出し前に実行されてもよい。本例のようにデフラグが不要と判定される場合、参照データの周辺連続データを読み出さなくてもよい。【００９９】
以上のように、オンラインデフラグ処理モジュール３０１は、デフラグが有効な時だけデフラグを実行し、コンテンツを構成するデータがメディア領域１０４において連続するように配置する。【０１００】
図６は、ホスト参照要求時デフラグ処理のフローチャートである。不図示のファイルシステムプログラムは、ホスト計算機１４からの参照要求又はシステム内部の処理による参照要求を受け付ける（Ｓ１０１）。要求処理モジュールは、キャッシュ管理テーブル２４０を参照し、メディア領域１０４から参照データを読み出す必要があるか判定する（Ｓ１０２）。【０１０１】
メモリ領域１０３上にデータがキャッシュされており、メディア領域１０４から参照データを読み出す必要がない場合（Ｓ１０２：ＮＯ）、要求処理モジュールは、メモリ領域１０３上のキャッシュデータを、要求元に応答する（Ｓ１１０）。キャッシュヒット時のオンラインデフラグを省略することで、オンラインデフラグの負荷を低減する。【０１０２】
メディア領域１０４から参照データを読み出す必要がある場合（Ｓ１０２：ＹＥＳ）、オンラインデフラグ処理モジュール３０１は、参照先コンテンツのコンテンツ管理テーブル２００を参照し、デフラグ実行フラグ２０２が有効か否か判定する（Ｓ１０３）。【０１０３】
デフラグ実行フラグ２０２が無効である場合（Ｓ１０３：ＮＯ）、オンラインデフラグ処理モジュール３０１は、ＯＳ内のメディア領域Ｉ／Ｏモジュールを使用して、参照要求データをメディア領域１０４から読み出し、メモリ領域１０３に格納する（Ｓ１０５）。要求処理モジュールは、メモリ領域１０３に書き出された参照データを、要求元へ応答する（Ｓ１１０）。【０１０４】
デフラグ実行フラグ２０２が有効である場合（Ｓ１０３：ＹＥＳ）、オンラインデフラグ処理モジュール３０１は、読み出したＫデータブロックのメディア領域１０４におけるアドレス情報（物理的位置関係の情報）をアドレスマッピングテーブル２６０から取得する（Ｓ１０４）。【０１０５】
オンラインデフラグ処理モジュール３０１は、Ｋデータブロックのオンラインデフラグを実行すべきか判定する（Ｓ１０６）。オンラインデフラグ処理モジュール３０１は、Ｋデータブロックがコンテンツ内に占める位置を特定し、さらに、それらのギャップ数をカウントする。オンラインデフラグ処理モジュール３０１は、Ｋデータブロックのコンテンツ内オフセット値及びメディア領域１０４内アドレスから、それらのコンテンツ内に占める位置及びギャップ数を特定する。なお、オンラインデフラグ処理モジュール３０１は、判定Ｓ１０６を、Ｋデータブロックを読み出した後に行ってもよい。【０１０６】
オンラインデフラグ処理モジュール３０１は、メディア領域Ｉ／Ｏモジュールを使用して、要求データブロックを含む論理的に連続なＫデータブロックを、メディア領域１０４から読み出す（Ｓ１１１）。【０１０７】
オンラインデフラグ処理モジュール３０１は、ホスト参照要求時デフラグ判定テーブル２２０を参照し、上記コンテンツ内に占める位置及びギャップ数の組が対応するデフラグ実行判定結果カラム２０４の値を取得する。デフラグ実行判定結果が無効の場合（Ｓ１０６：ＮＯ）、オンラインデフラグ処理モジュール３０１は、メディア領域１０４から読み出した参照データを、ホスト計算機１４へ返して、処理を終了する。【０１０８】
デフラグ実行判定結果が有効の場合（Ｓ１０６：ＹＥＳ）、オンラインデフラグ処理モジュール３０１は、オンラインデフラグを実行する。具体的には、オンラインデフラグ処理モジュール３０１は、メモリ領域１０３に読み出したＫブロックのデータが、それらの次の書き出し時に物理的に連続したブロック書き出すように処理する。【０１０９】
例えば、オンラインデフラグ処理モジュール３０１は、Ｋブロックデータのキャッシュ状態をダーティに設定する。メディア領域Ｉ／Ｏモジュールは、これらのダーティページを空きブロック管理プログラム３１０から新規アドレス領域を取得し、ダーティ状態のＫブロックデータを指定された連続ブロックに書き出す。【０１１０】
Ｋブロックデータの書き出し先は、オンラインデフラグ処理モジュール３０１が決定してもよい。ダーディ状態を示すキャッシュ状態に代えて／加えて、デフラグ用の処理を示す特別な書き出し専用ビットを用意してもよい。連続ブロックに書き出すデータブロックの数に、最大値ｍが定義されていてもよい。Ｋが最大値ｍより大きい場合、Ｋデータブロックから選択されたｍ連続データブロックが、連続アドレスに書き出される。ブロックデータの書き出しについては、他のフローチャートにおいて同様である。【０１１１】
オンラインデフラグ処理モジュール３０１は、アドレスマッピングテーブル２６０を更新する。さらに、オンラインデフラグ処理モジュール３０１は、上記デフラグ後、コンテンツ全体（コンテンツの全データブロック）が、メディア領域１０４の連続アドレスブロック（物理連続ブロック）に配置されているか、アドレスマッピングテーブル２６０を参照して判定する（Ｓ１０８）。【０１１２】
コンテンツが物理連続ブロックへ配置されている場合（Ｓ１０８：ＹＥＳ）、オンラインデフラグ処理モジュール３０１は、当該コンテンツのデフラグ実行フラグ２０２を無効に設定し（Ｓ１０９）、メモリ領域１０３上に読み出した参照データをホスト計算機１４へ返し（Ｓ１１０）、処理を終了する。コンテンツが物理連続ブロックへ配置されていない場合（Ｓ１０８：ＮＯ）、ステップＳ１０９はスキップされる。【０１１３】
図７は、ホスト更新要求時のデフラグ方法の概要を示す。ここでは、上書要求のホスト更新要求の例と、新規コンテンツ追加要求のホスト更新要求の例を説明する。上書き要求の対象コンテンツは、コンテンツＤ（４２０）である。コンテンツＤ（４２０）はデータブロックＤ０、Ｄ１、Ｄ２、Ｄ３から構成され、メディア領域１０４に格納されている。【０１１４】
ホスト更新要求は、データブロックＤ１を、データブロックＤ１＊で上書きすることを要求する。メモリ領域１０３は、ホスト計算機１４から受信したにデータブロックＤ１＊を格納している。ファイルシステムプログラムは、キャッシュ管理テーブル２４０において、データブロックＤ１（の格納ページ）のキャッシュ状態をダーティにする。【０１１５】
オンラインデフラグ処理モジュール３０１は、デフラグが必要であるかを判定するために、更新要求時デフラグ判定テーブル２３０を参照する。ここでのホスト更新要求は、上書き要求であり、更新要求時デフラグ判定テーブル２３０は、デフラグが必要であることを示す。オンラインデフラグ処理モジュール３０１は、コンテンツＤ管理テーブル４３０のデフラグ実行フラグ３３２を有効にする。【０１１６】
データブロックＤ１＊の論理的に連続な周辺データであるデータブロックＤ０とデータブロックＤ２とが、既にメモリ領域１０３上にキャッシュされている場合、オンラインデフラグ処理モジュール３０１は、データブロックＤ０、Ｄ１＊、Ｄ２が、次のそれらの書き出し時に、連続ブロックに書き出されるように処理する。【０１１７】
例えば、オンラインデフラグ処理モジュール３０１は、キャッシュ管理テーブル２４０においてそれらの（格納ページの）キャッシュ状態をダーティに設定する。メディア領域書き出しプログラムが、書き出し先アドレスとして空きブロック管理プログラム３１０から空き連続ブロックのアドレスを取得する。メディア領域Ｉ／Ｏモジュールは、それらを、指定された連続ブロックに書き出す。【０１１８】
メディア領域Ｉ／Ｏモジュールの代わりに、オンラインデフラグ処理モジュール３０１が空きブロック管理プログラム３１０から空き連続ブロックのアドレスを取得してもよい。データブロックＤ０、Ｄ２に付与されるダーティ状態に代えて／加えて、デフラグ用の処理を示す特別な書き出し専用ビットを用意してもよい。【０１１９】
データブロックＤ１＊の論理的に連続な周辺データであるデータブロックＤ０又はデータブロックＤ２が、メモリ領域１０３上にキャッシュされていない場合、そのデータブロックはメディア領域１０４から読み出されることはない。既にキャッシュされている連続周辺データブロックのみが、データブロックＤ１＊と共に書き出される。【０１２０】
図７の例において、ホスト更新要求前、ブロック４２１、４２２、４２３、４２４は、データブロックＤ０、Ｄ１、Ｄ２、Ｄ３を格納している。デフラグ後、ブロック４２１＊、４２２＊、４２３＊、４２４は、データブロックＤ０、Ｄ１＊、Ｄ２、Ｄ３を格納している。空きブロック管理プログラム３１０では、デフラグ後、ブロック４２１、４２２、４２３を空きブロックとして管理する。【０１２１】
次に、ホスト更新要求が追加要求である例の概要を、コンテンツＥ４４０を使用して説明する。コンテンツＥ４４０はデータブロックＥ０、Ｅ１、Ｅ２から構成される。コンテンツＥを新規追加する場合、それぞれをメモリ領域１０３上にキャッシュし、それぞれダーティにする。【０１２２】
ホスト更新要求はコンテンツ新規追加要求であり、論理的に連続した周辺データはファイルストレージシステム１００内に存在しない。メディア領域Ｉ／Ｏモジュールは、それぞれを空きブロック管理プログラム３１０が割り当てた物理的に連続した領域へ書き出す。【０１２３】
メディア領域１０４における連続した領域に書き出せない場合、オンラインデフラグ処理モジュール３０１は、コンテンツＥ管理テーブル４５０のデフラグ実行フラグを、有効に設定する。図７の例において、データブロックＥ０、Ｅ１、Ｅ２物理的に連続した領域へ書き出されており、デフラグ実行フラグ４５２は無効のままである。【０１２４】
図８は、ホスト更新要求時デフラグ処理のフローチャートを示す。要求処理モジュールは、ホスト計算機１４からの更新要求又はシステム内部の処理による更新要求を受け付ける（Ｓ２０１）。要求処理モジュールは、更新データをメモリ領域１０３においてキャッシュし、キャッシュ管理テーブル２４０において、それらデータブロック（の格納ページ）のキャッシュ状態をダーティに設定する（Ｓ２０２）。【０１２５】
オンラインデフラグ処理モジュール３０１は、更新要求時デフラグ判定テーブル２３０を参照して、ホスト更新要求の種類に応じてデフラグが必要か否かを判定する（Ｓ２０３）。デフラグが不要と判定した場合（Ｓ２０３：ＮＯ）、オンラインデフラグ処理モジュール３０１は、ステップＳ２０５に進む。【０１２６】
デフラグが必要と判定した場合（Ｓ２０３：ＹＥＳ）、オンラインデフラグ処理モジュール３０１は、当該コンテンツのコンテンツ管理テーブル２００のデフラグ実行フラグ２０２を有効に設定する（Ｓ２０４）。【０１２７】
オンラインデフラグ処理モジュール３０１は、キャッシュ管理テーブル２４０を参照して、更新要求データブロックに論理的に連続する既存データブロック（更新要求データ以外のデータブロック）が、メモリ領域１０３上に存在するかチェックする（Ｓ２０５）。【０１２８】
論理的に連続な周辺データがメモリ領域１０３上に存在しない場合（Ｓ２０５：ＮＯ）、ステップＳ２０７はスキップされる。論理的に連続な周辺データがメモリ領域１０３上に存在する場合（Ｓ２０５：ＹＥＳ）、オンラインデフラグ処理モジュール３０１は、キャッシュ管理テーブル２４０において、周辺データ（の格納ページ）のキャッシュ状態をダーティに設定する（Ｓ２０７）。【０１２９】
メディア領域Ｉ／Ｏモジュールは、ダーティデータを、空きブロック管理プログラム３１０が割り当てた、メディア領域１０４内の空きブロックへ書き出す（Ｓ２０８）。上述のように、オンラインデフラグ処理モジュール３０１及びメディア領域Ｉ／Ｏモジュールのいずれが、更新要求データ及び周辺データの書き出し先空きブロックのアドレス情報を取得してもよい。【０１３０】
オンラインデフラグ処理モジュール３０１は、ホスト更新要求データを含みメディア領域１０４に書き出されたデータが、連続したブロック（連続物理領域）に割り当てられたか否かを、マッピングテーブル２７０を参照して判定する（Ｓ２０９）。【０１３１】
データが連続したブロックに割り当てられていない場合（Ｓ２０９：ＮＯ）、オンラインデフラグ処理モジュール３０１は、コンテンツ管理テーブル２００のデフラグ実行フラグ２０２を有効に設定して（Ｓ２１０）、処理を終了する。【０１３２】
データが連続したブロックに割り当てられている場合（Ｓ２０９：ＹＥＳ）、オンラインデフラグ処理モジュール３０１は、コンテンツ全体が連続したブロックに割り当てられているかマッピングテーブル２７０を参照して判定する（Ｓ２１１）。【０１３３】
コンテンツ全体が連続したブロックに割り当てられている場合には（Ｓ２１１：ＹＥＳ）、オンラインデフラグ処理モジュール３０１は、デフラグ実行フラグ２０２を無効に設定して（Ｓ２１２）、処理を終了する。コンテンツ全体が連続したブロックに割り当てられていない場合には（Ｓ２１１：ＮＯ）、ステップＳ２１２はスキップされる。【０１３４】
図９は、オフラインデフラグ処理のフローチャートを示す。オフラインデフラグ処理モジュール３０２は、コンテンツ管理テーブル２００から、メディア領域１０４に格納されているコンテンツのリストを生成する（Ｓ３０１）。オフラインデフラグ処理モジュール３０２は、コンテンツを選択し（Ｓ３０２）、オフラインデフラグ管理テーブル２１０の高速実行フラグ２１２が有効に設定されているか判定する（Ｓ３０３）。高速実行フラグ２１２は、管理者により管理計算機１５から設定され得る。【０１３５】
高速実行フラグ２１２が有効である場合（Ｓ３０３：ＹＥＳ）、オフラインデフラグ処理モジュール３０２は、コンテンツ管理テーブル２００のデフラグ実行フラグ２０２が有効か判定する（Ｓ３０４）。高速実行フラグ２１２が無効である場合（Ｓ３０３：ＮＯ）、ステップＳ３０４はスキップされる。【０１３６】
デフラグ実行フラグ２０２が無効である場合（Ｓ３０４：ＮＯ）、オフラインデフラグ処理モジュール３０２は、ステップＳ３０８に進む。デフラグ実行フラグ２０２が有効である場合、オフラインデフラグ処理モジュール３０２は、当該コンテンツのデフラグを実行する（Ｓ３０５）。【０１３７】
オフラインデフラグ処理モジュール３０２は、デフラグ後、マッピングテーブル２７０を参照して、コンテンツ全体が連続したブロックへ配置できたかを判定する（Ｓ３０６）。コンテンツ全体が連続したブロックへ配置されている場合（Ｓ３０６：ＹＥＳ）、オフラインデフラグ処理モジュール３０２は、該当コンテンツのデフラグ実行フラグ２０２を無効に設定する（Ｓ３０７）。コンテンツ全体が連続したブロックへ配置されていない場合（Ｓ３０６：ＮＯ）、ステップＳ３０７はスキップされる。【０１３８】
ステップＳ３０８において、オフラインデフラグ処理モジュール３０２は、次のコンテンツが存在するか判定する。次のコンテンツが存在する場合（Ｓ３０８：ＹＥＳ）、オフラインデフラグ処理モジュール３０２は、ステップＳ２０２へ戻る。次のコンテンツが存在しない場合には（Ｓ３０８：ＮＯ）、オフラインデフラグ処理モジュール３０２は、オフラインデフラグを終了する。【０１３９】
なお、ストレージシステム１００は、オフラインデフラグ及び／又は更新要求時のオンラインデフラを実行しなくてもよい。ストレージシステム１００は、デフラグ実行フラグを参照することなく、全コンテンツのオフラインデフラグを実行してもよい。ストレージシステム１００は、参照要求におけるキャッシュヒット時にも、オンラインデフラグを実行してもよい。デフラグ実行フラグを使用しなくてもよい。
【実施例２】
【０１４０】
本実施例は、キャッシュ拡張装置と連携したデフラグ方法を説明する。図１０に示すようにファイルストレージ装置１０及びサーバ１１に対して、キャッシュ拡張装置１８を接続し、メモリ領域１０３の拡張を行うことができる。キャッシュ拡張装置１８により与えられるキャッシュ拡張領域は、フラッシュメモリに代表されるＮｏｎ  Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ（ＮＶＭ）などの記憶媒体で構成されてよい。また、キャッシュ拡張領域は、メモリ領域のデータを一時的に格納するスワップ領域として使用されてもよいし、そのままメモリ領域として使用されてもよい。【０１４１】
キャッシュ拡張領域が通常のメモリ領域と同様に扱われる場合には、実施例１との変更部分は無いため説明を省略する。以下において、キャッシュ拡張領域が２次キャッシュ領域又はスワップ領域として使用される場合について説明する。【０１４２】
図１０において、コンテンツＢは、データブロックＢ０、Ｂ１、Ｂ２、Ｂ３で構成されている。データブロックＢ０、Ｂ１、Ｂ２、Ｂ３は、メディア領域１０４において、非連続のブロックに格納されている。ホスト参照要求は、データブロックＢ１の参照を要求している。【０１４３】
オンラインデフラグ処理モジュール３０１は、データブロックＢ１と共に、データブロックＢ０及びＢ２を読み出す。メモリ領域１０３は有限であるため、全てのデータをメモリ上に保持することはできない。この時、ＯＳのページ回収処理モジュールがメモリ逼迫すると動作する。例えば、論理的に連続なデータブロックＢ０、Ｂ１、Ｂ２のどれかが回収対象となった場合、その連続性を保ったまま、キャッシュ拡張装置１８内で連続するように配置する。これによりキャッシュ拡張装置からデータブロックＢ０、Ｂ１、Ｂ２を読み出す性能が向上する。【０１４４】
また、デフラグ実行時、デフラグ制御プログラム３００は、キャッシュ拡張領域に格納されているデータをメディア領域１０４から読み出さずに、メディア領域１０４内の連続アドレスに書き出す。これにより、メディア領域１０４から読み出すＩ／Ｏが不必要になり、デフラグ性能が向上する。【０１４５】
キャッシュ拡張領域に格納されているデータは、メモリ領域１０３に格納されているデータと同様に扱われる。ＯＳで管理されるメモリ管理情報にデータの格納先が記されるだけである。そのため、実施例１で述べたオンラインデフラグ処理及びオフラインデフラグ処理に変更はない。【０１４６】
ここで、ページ回収処理について説明する。ページは、メモリ領域１０３におけるデータ格納単位である。図１１は、本実施例におけるメモリ領域１０３上のページ回収処理を示す。ページ回収処理モジュールは、ページの参照頻度を管理するメモリ管理情報を参照し、参照頻度の低いページを選択する（Ｓ４０１）。ページ回収処理モジュールは、選択ページが指すコンテンツ管理テーブル２００において、デフラグ実行フラグ２０２が有効か判定する（Ｓ４０２）。【０１４７】
デフラグ実行フラグ２０２が無効な場合（Ｓ４０２：ＮＯ）、ページ回収処理部は、選択ページの回収処理を行う（Ｓ４０３）。デフラグ実行フラグ２０２が有効な場合（Ｓ４０２：ＹＥＳ）、ページ回収処理部は、選択ページ周辺の論理的に連続なデータがメモリ上に存在するか判定する（Ｓ４０４）。【０１４８】
論理的に連続なデータが存在しない場合（Ｓ４０４：ＮＯ）、ページ回収処理部は、選択ページを、２次キャッシュ領域又はスワップ領域への移動対象と決定する（Ｓ４０５）。論理的に連続なデータが存在する場合（Ｓ４０４：ＹＥＳ）、ページ回収処理部は、選択ページを含む連続データのページを、移動対象と決定する（Ｓ４０６）。【０１４９】
ページ回収処理部は、移動対象ページのデータを移動し、移動前のページを回収する（Ｓ４０７）。ページ回収処理部は、メモリ管理情報を、メモリ管理情報が移動されたデータに参照先としてページの移動先を参照するように変更し（Ｓ４０８）、処理を終了する。以上の処理により、移動されたページデータのアクセス性能を向上できる。
【実施例３】
【０１５０】
デフラグ処理の高速化を行うには、物理的に連続した領域にデータを高速に書き込む必要がある。特に、フラッシュメモリを使用する場合、一度書き込んだデータ領域への上書きは性能が低い。【０１５１】
ストレージプールを作成して実使用分のみ記憶デバイスの物理領域を割り当てる場合、デフラグによりデータが移動される領域は、空きブロック管理プログラム３１０上では空き領域であるが、ストレージプールにおける解放処理が行われていない場合、ストレージプール上では使用領域である。つまり、デフラグを適用することにより、ストレージプールの使用領域が増加し、物理記憶領域の使用効率が劣化する。本実施例は、これらを解決する。【０１５２】
以下においては、ＬＦＳを採用するファイルシステムを搭載したファイルストレージシステムの例を説明する。以下に説明する方法は、ＬＦＳに限定されることなく、ＬＦＳを採用しないファイルシステムを搭載したストレージシステムにおいて、既に使用されていないブロックの解放（Ｔｒｉｍ処理）に使用できる。【０１５３】
ＬＦＳは、ファイルシステムのスナップショットを自動かつ連続的に生成する。ＬＦＳは、コンテンツを更新する際、コンテンツの更新箇所に対応する、メディア領域１０４上のブロックのデータを上書きせずに、更新データをメディア領域１０４上の別のブロックに書き込む。これにより、過去の任意の時点のデータを復元することができる。メモリ領域１０３上では、コンテンツの更新箇所に対応するブロックのデータは上書きされる。この任意の時点をチェックポイントと呼ぶ。【０１５４】
図１１は、実施例３の概要を示す。実施例１の構成に、維持チェックポイント数管理テーブル５００と解放ブロックリスト５１０が追加されている。管理者は、維持チェックポイント数管理テーブル５００は、維持チェックポイント数５０２を、管理計算機１５から設定することができる。【０１５５】
維持チェックポイント数管理テーブル５００において、維持チェックポイント数５０２は、現在処理している最新のチェックポイントからどれだけ過去のチェックポイントを維持するかを示す。維持チェックポイント数５０２は、スナップショットを含まない。一部のチェックポイントのデータは、スナップショットとして保存される。スナップショットとして選択されるチェックポイントは、管理計算機１５から指定され得る。【０１５６】
最新のチェックポイントから、スナップショットを除いた維持チェックポイント数まで、データが維持される。より過去のチェックポイントのデータを格納するブロックは、後述するように解放される。【０１５７】
解放ブロックリスト５１０は、デフラグやチェックポイントの増加によって、あるチェックポイントで解放可となったメディア領域１０４のブロックアドレスを示す。あるチェックポイントが作成される時に、解放ブロック回収処理モジュールは、その解放ブロックリスト５１０をチェックポイントと結び付けられてメディア領域１０４に格納してもよい。その構成において、解放ブロックリスト５１０は、チェックポイント毎に作成される。【０１５８】
解放ブロック回収処理モジュールは、チェックポイント毎に解放ブロックリスト５１０を読み出し、Ｔｒｉｍ処理などを含めた解放処理を、（最新チェックポイント―維持チェックポイント数Ｎ）のチェックポイントまで行う。【０１５９】
図１１において、ストレージプール１５０が作成されている。ストレージプール１５０の記憶領域は、１又は複数のＮＶＭなどの高速記憶装置１５１の記憶領域、及び、１つ又は複数のＨＤＤなどの低速記憶デバイス１５２の記憶領域から構成される。【０１６０】
解放ブロック回収処理モジュールは、ホスト要求処理と同期または非同期で動作する。解放ブロック回収処理モジュールは、維持チェックポイント数管理テーブル５００の維持チェックポイント数５０２までに登録されている解放ブロックリストに基づいて、キャッシュ拡張装置１８やストレージプール１５０におけるブロックの解放処理（Ｔｒｉｍ処理）を行う。これにより、キャッシュ拡張装置１８やストレージプール１５０において、領域解放処理を行うことができる。【０１６１】
図１３は、解放ブロック回収処理モジュールのフローチャートを示す。ファイルストレージシステム１００は、チェックポイントとブロックアドレスとを関連づける、不図示のチェックポイント管理情報を保持している。解放ブロック回収処理モジュールは、チェックポイント管理情報において、一番古いチェックポイントの探索を行い、選択する（Ｓ５０１）、選択チェックポイントが、（最新チェックポイント−維持チェックポイント数Ｎ）以前のチェックポイントであるか、判定する（Ｓ５０２）。上述のように、スナップショットはカウントから除かれる。【０１６２】
ステップＳ５０２の判定結果が否定的の場合（Ｓ５０２：ＮＯ）、解放ブロック回収処理モジュールは、処理を終了する。ステップＳ５０２の判定結果が肯定的の場合（Ｓ５０２：ＹＥＳ）、解放ブロック回収処理モジュールは、選択チェックポイントの解放ブロックリスト５１０を読み出す（Ｓ５０３）。【０１６３】
空きブロック管理プログラム３１０は、解放ブロックリスト５１０の解放ブロックアドレスを、空きブロックへ変更する（Ｓ５０４）。解放ブロック回収処理モジュールは、解放ブロックの解放処理（トリム処理）を行い（Ｓ５０５）、ステップＳ５０１に戻る。以上の処理により、使用されていないブロックを解放し記憶領域の効率的な利用を実現できる。【０１６４】
以上、ホスト装置からのＩ／Ｏ性能を維持したままデフラグ処理を高速化する本発明について、実施例に即して説明したが、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。【０１６５】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【図１】
2015145667.tif 000003
【図２Ａ】
2015145667.tif 000004
【図２Ｂ】
2015145667.tif 000005
【図３】
2015145667.tif 000006
【図４】
2015145667.tif 000007
【図５】
2015145667.tif 000008
【図６】
2015145667.tif 000009
【図７】
2015145667.tif 000010
【図８】
2015145667.tif 000011
【図９】
2015145667.tif 000012
【図１０】
2015145667.tif 000013
【図１１】
2015145667.tif 000014
【図１２】
2015145667.tif 000015
【図１３】
2015145667.tif 000016
【国際調査報告】
2015145667.tif 000017
2015145667.tif 000018
2015145667.tif 000019
2015145667.tif 000020