(57)【要約】  本発明の装置は、記憶媒体のアクセス性能の向上および長寿命化を図る記憶制御装置に関するものである。記憶制御装置は、ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定部と、物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、データを読み出し、データが記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、論理アドレス領域への書き込みを記憶媒体に指示するデータ再配置部と、を備えた。
2016175028.tif 000002
【特許請求の範囲】
【請求項１】
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を備えた記憶制御装置。
【請求項２】
前記判定手段は、
さらに、前記複数の物理アドレス領域の数を断片数として推定し、
前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する、請求項１に記載の記憶制御装置。
【請求項３】
前記判定手段は、
前記記憶媒体に対する連続する２回のWriteアクセス間におけるWrite量の差分が第２閾値以上である場合に、前記断片数として推定される値をカウントアップする請求項２に記載の記憶制御装置。
【請求項４】
前記判定手段は、一つのファイルを連続データとして書き込むWriteアクセスが終了した際に、前記ファイルのサイズと、前記Writeアクセスの開始時の前記記憶媒体に対する総Write量と、前記Writeアクセスの終了時の前記記憶媒体に対する総Write量と、に基づいて、前記連続データの前記記憶媒体における断片化度合を推定して、前記断片化度合が第３閾値より小さくなった場合に、断片化していると推定する、請求項１に記載の記憶制御装置。
【請求項５】
前記連続データのWriteアクセスをファイルまたはオブジェクト単位で管理する、請求項４に記載の記憶制御装置。
【請求項６】
前記断片化度合は、前記ファイルのサイズを“Ｓ”、前記開始時の総Write量を“Ｗ0”、前記終了時の総Write量を“Ｗ”とすると、Ｓ／（Ｗ−Ｗ0）で表される、請求項４または５に記載の記憶制御装置。
【請求項７】
前記データ再配置手段は、断片化されていると推定されたデータ全体を読み出して再度Writeアクセスすることにより、データの再配置を行なう、請求項１乃至６のいずれか１項に記載の記憶制御装置。
【請求項８】
断片化が推定されるWriteデータをバッファ領域に対して書き込むように制御する格納先決定手段を、さらに備える請求項１乃至７のいずれか１項に記載の記憶制御装置。
【請求項９】
前記格納先決定手段は、前記バッファ領域の空き容量が第４閾値より小さい場合に、格納先を前記記憶媒体に決定する、請求項８に記載の記憶制御装置。
【請求項１０】
前記バッファ領域の空き容量が前記第４閾値より小さくなったことを検出した場合に、前記バッファ領域に格納されたデータを前記記憶媒体に移動するデータ移動手段を、さらに備える請求項８または９に記載の記憶制御装置。
【請求項１１】
前記データ再配置手段による前記記憶媒体における記憶領域の再配置と、前記データ移動手段による前記バッファ領域に格納されたデータの前記記憶媒体への移動と、を関連して実行させる、請求項１０に記載の記憶制御装置。
【請求項１２】
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定ステップと、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置ステップと、
を含む記憶制御方法。
【請求項１３】
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定ステップと、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置ステップと、
をコンピュータに実行させる記憶制御プログラム。
【請求項１４】
記憶媒体と、
論理アドレス空間の論理アドレス領域を指定して、前記記憶媒体へのアクセスを行うアクセス手段と、
前記アクセス手段において指定された論理アドレス領域に基づいて、前記記憶媒体からのデータの読み出しおよび前記記憶媒体へのデータの書き込みを行う記憶制御手段と、
を備えた情報処理システムであって、
前記記憶制御手段は、
前記アクセス手段が前記記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を含む情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、記憶制御装置、記憶制御方法および記憶制御プログラムに関する。
【背景技術】
【０００２】
昨今の計算システムの処理能力向上に伴い、情報を保存する記憶媒体の性能向上が求められている。その結果、近年はより高性能な記憶媒体として、例えば、記憶素子にNANDフラッシュメモリ（以下、NANDフラッッシュと称す）を用いたＳＳＤ（Solid State Drive）が普及している。そして、ＳＳＤ等の記憶媒体で記憶素子として用いられるNANDフラッシュにおいては、データの更新時に格納済の古いデータを消去(Erase)する必要があり、Erase回数の増加は、ブロック内の有効ページの退避処理も含めて性能低下および素子の寿命を縮める原因となる。そのため、Erase回数の削減、および、特定の素子の寿命を過剰に消費しないように各ブロックに対する書き込み回数の均等化が必要である。【０００３】
これに対処するために、一般的なＳＳＤではコントローラ内部でＦＴＬ(Flash Translation Layer)がNANDフラッシュ特有のアクセス処理、および、Wear Levelingと呼ばれるブロック消去回数の均等化を行う。具体的には、例えば特許文献１、非特許文献１で示されるように、消去済のブロックをデータの格納領域として用意して、ホストコンピュータからのWrite要求に対してブロックの領域をページ単位に追記形式でマッピングする。また、複数の消去済ブロックからErase回数が最小のブロックをWriteデータの格納領域とすることで、書き込み回数の均等化を実現する。【０００４】
一方で、ＳＳＤが継続的に追記形式でホストコンピュータからのWriteデータを格納するために、更新等によって不要となったデータが格納された記憶領域を回収する、ＧＣ(Garbage Collection)が必要である。ＳＳＤにおいては、一般的なＧＣの処理に加えて、不要なデータが格納された記憶領域を再利用するためにブロック単位の消去処理が必要であり、事前に有効なページをブロック外の記憶領域に退避するため、ＧＣの負荷は退避を行うページ数に比例して増加する。ＧＣによる負荷の増加は、ＳＳＤにおけるアクセス処理の遅延、性能低下の原因となる。また、退避においてNANDフラッシュに対するデータの書き込みが発生するため、退避を行うページ数の増加はＳＳＤの寿命消費の原因の１つとなる。【０００５】
そこで、ＧＣの負荷を継続的に抑制するためには、データの更新あるいは削除においても、無効となるページが多数のブロックに分散せずに、少数のブロックに集中した状態を維持すると、ＧＣにおける退避処理の増加を抑制できる。無効となるページが少数のブロックに集中した状態を維持するための方法として、非特許文献２では、ホストコンピュータからのWriteコマンドに、同じ性質を持つデータごとに同一のストリームＩＤと呼ばれる情報を付与する。そして、ＳＳＤの内部でストリームＩＤに基づいて格納先のNANDフラッシュのブロックを選択することで、ブロック毎のデータの更新時期が近くなるようにWriteデータの格納を行い、ＧＣの負荷を低減する方法が示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許5937425号
【非特許文献】
【０００７】
【非特許文献１】S. W. Lee, D. J. Park, T. S. Chung, W. K. Choi, D. H. Lee, S. W. Park, and H. J. Song. “A log buffer based flash translation layer using fully associative sector translation,” ACM Transactions on Embedded Computing Systems, vol. 6, no. 3, 2007
【非特許文献２】Jeong-Uk Kang, Jeeseok Hyun, Hyunjoo Maeng, and Sangyeun Cho, “The Multi-streamed Solid-State Drive,” 6th USENIX Workshop on Hot Topics in Storage and File Systems (HotStorage), 2014
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記非特許文献２に記載の技術では、ホストコンピュータからＳＳＤにアクセスを行うためのプロトコル改変を伴い、ホストコンピュータ、ＳＳＤ両方の対応が必要であることから、技術の適用に多大なコストを要する。加えて、非特許文献２のようにＳＳＤに対するWriteデータの更新、削除されるまでの期間を基に格納先のブロックを決定するには、事前にホストコンピュータで実行されるアプリケーションにおけるWriteアクセスのパターン、種類に関する情報が必要である。また、ホストコンピュータで実行されるアプリケーションが複数存在する場合は、ＳＳＤの内部で複数アプリケーションからのWriteデータが混在した状態でNANDフラッシュに格納される。また、入力データによってＳＳＤに対するWriteデータの特性が変化するアプリケーションでは、Writeアクセスのパターンを事前に収集することが困難である。つまり、複数アプリケーションの実行状況や組み合わせが動的に変化する環境では、ＳＳＤに対するWriteアクセスのパターン、種類によるNANDフラッシュのブロックに対するデータ格納の最適化は困難である。【０００９】
本発明の目的は、上述の課題を解決する技術を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明に係る記憶制御装置は、
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を備えた。【００１１】
上記目的を達成するため、本発明に係る記憶制御方法は、
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定ステップと、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置ステップと、
を含む。【００１２】
上記目的を達成するため、本発明に係る記憶制御プログラムは、
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定ステップと、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置ステップと、
をコンピュータに実行させる。【００１３】
上記目的を達成するため、本発明に係るシステムは、
記憶媒体と、
論理アドレス空間の論理アドレス領域を指定して、前記記憶媒体へのアクセスを行うアクセス手段と、
前記アクセス手段において指定された論理アドレス領域に基づいて、前記記憶媒体からのデータの読み出しおよび前記記憶媒体へのデータの書き込みを行う記憶制御手段と、
を備えた情報処理システムであって、
前記記憶制御手段は、
前記アクセス手段が前記記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を含む。
【発明の効果】
【００１４】
本発明によれば、記憶媒体のアクセス性能の向上および長寿命化を図ることができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１実施形態に係る記憶制御装置の構成を示すブロック図である。
【図２】本発明の第２実施形態に係る情報処理システムの構成を示す図である。
【図３】本発明の第２実施形態に係る記憶制御装置の機能構成を示すブロック図である。
【図４】本発明の第２実施形態に係る断片化状態管理テーブルの構成を示す図である。
【図５】本発明の第２実施形態に係る記憶制御部を含むホストコンピュータのハードウェア構成を示すブロック図である。
【図６】本発明の第２実施形態に係る記憶制御部の処理手順を示すフローチャートである。
【図７】本発明の第２実施形態に係るＲｅａｄ処理の手順を示すフローチャートである。
【図８Ａ】本発明の第２実施形態に係るＷｒｉｔｅ処理の手順を示すフローチャートである。
【図８Ｂ】本発明の第２実施形態に係るＷｒｉｔｅ処理の手順を示すフローチャートである。
【図９Ａ】本発明の第２実施形態に係る断片化判定処理の手順を示すフローチャートである。
【図９Ｂ】本発明の第２実施形態に係る断片化管理テーブル更新処理の手順を示すフローチャートである。
【図１０】本発明の第３実施形態に係る情報処理システムの構成を示す図である。
【図１１】本発明の第３実施形態に係る記憶制御装置の機能構成を示すブロック図である。
【図１２】本発明の第３実施形態に係るバッファ管理テーブルの構成を示す図である。
【図１３】本発明の第３実施形態に係る記憶制御部の処理手順を示すフローチャートである。
【図１４】本発明の第３実施形態に係るＲｅａｄ処理の手順を示すフローチャートである。
【図１５Ａ】本発明の第３実施形態に係るＷｒｉｔｅ処理の手順を示すフローチャートである。
【図１５Ｂ】本発明の第３実施形態に係るＷｒｉｔｅ処理の手順を示すフローチャートである。
【図１６】本発明の第３実施形態に係る格納先決定処理の手順を示すフローチャートである。
【図１７】本発明の第３実施形態に係るバッファ解放処理の手順を示すフローチャートである。
【図１８】本発明の第４実施形態に係る記憶制御装置の機能構成を示すブロック図である。
【図１９】本発明の第４実施形態に係る断片化状態管理テーブルの構成を示す図である。
【図２０】本発明の第４実施形態に係る記憶制御部の処理手順を示すフローチャートである。
【図２１】本発明の第４実施形態に係るＷｒｉｔｅ処理の手順を示すフローチャートである。
【図２２】本発明の第４実施形態に係る断片化解消処理の手順を示すフローチャートである。
【図２３】本発明の第５実施形態に係る情報処理システムの構成を示す図である。
【発明を実施するための形態】
【００１６】
以下に、図面を参照して、本発明の実施の形態について例示的に詳しく説明する。ただし、以下の実施の形態に記載されている構成要素は単なる例示であり、本発明の技術範囲をそれらのみに限定する趣旨のものではない。
【００１７】
［第１実施形態］
本発明の第１実施形態としての記憶制御装置１００について、図１を用いて説明する。記憶制御装置１００は、ホストコンピュータによる記憶媒体へのアクセスを制御する装置である。
【００１８】
図１に示すように、記憶制御装置１００は、判定部１０１と、データ再配置部１０２と、を含む。判定部１０１は、ホストコンピュータが記憶媒体１１０にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、記憶媒体１１０の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する。データ再配置部１０２は、物理アドレス空間において断片化されて記憶されていると推定できると判定したデータ１１１に対応する論理アドレス領域を指定して、データを読み出し、データが記憶媒体の内部の連続した物理アドレス領域１１２に書き込まれるように、他の書き込みを制限しつつ、論理アドレス領域への書き込みを記憶媒体１１０に指示する。
【００１９】
本実施形態によれば、記憶媒体に対するWriteアクセスを監視し、記憶媒体内の記憶領域における格納領域の断片化状態を推定し、断片化状態を解消するようにデータを再配置することで、記憶媒体のアクセス性能の向上および長寿命化を図ることができる。
【００２０】
［第２実施形態］
次に、本発明の第２実施形態に係る記憶制御装置を記憶制御部としてホストコンピュータ内に含む情報処理システムについて説明する。本実施形態に係る情報処理システムにおいては、記憶制御部が、ホストコンピュータのＯＳ(Operating System)やアプリケーションプログラム（以下、アプリケーションと称す）の記憶媒体へのアクセス（ReadおよびWrite)における履歴情報から、記憶媒体における物理アドレス空間における記憶領域の断片化状態を推定する。そして、断片化状態があらかじめ定めた状態を超えている場合、断片化状態の領域をまとめて再配置することにより、断片化解消を実現する。
【００２１】
《前提技術の説明》
本実施形態の記憶制御方法を説明する前に、その前提となる記憶制御技術を説明する。
【００２２】
近年ＳＳＤ等の記憶媒体で記憶素子として用いられるNANDフラッシュは、データの更新時に格納済の古いデータを消去(Erase)する必要がある。しかし、NANDフラッシュに対するEraseは、ReadおよびWriteの最小単位であるページを複数含んだブロックを単位として行われる。そのため、NANDフラッシュのページに格納されたデータを消去または更新する場合は、同一ブロックに含まれる他のページの退避が必要である。
【００２３】
また、NANDフラッシュのブロックの消去は、ページのReadやWriteに比べて一般に大きな時間を要することが知られている。加えて、NANDフラッシュ素子のErase回数の増加に従い、ビットエラーの発生率が増加して正常なデータの記憶が困難になる。つまり、NANDフラッシュに対するErase回数の増加は、性能低下および素子の寿命を縮める原因となるため、Erase回数の削減および特定の素子の寿命を過剰に消費しないように、各ブロックに対する書き込み回数の均等化が必要である。
【００２４】
これらの特性に対処するために、一般的なＳＳＤではコントローラ内部でＦＴＬがNANDフラッシュ特有のアクセス処理、およびWear Levelingと呼ばれるブロック消去回数の均等化を行う。具体的には、例えば特許文献１、非特許文献１で示されるように、消去済のブロックをデータの格納領域として用意して、ホストコンピュータからのWrite要求に対してブロックの領域をページ単位に追記形式でマッピングする。また、複数の消去済ブロックからErase回数が最小のブロックをWriteデータの格納領域とすることで、書き込み回数の均等化を実現する。
【００２５】
一方で、ＳＳＤが継続的に追記形式でホストコンピュータからのWriteデータを格納するために、更新等によって不要となったデータが格納された記憶領域を回収する、ＧＣが必要である。ＳＳＤでは一般的なＧＣの処理に加えて、不要なデータが格納された記憶領域を再利用するために、ブロック単位の消去処理が必要である。よって、ＳＳＤにおけるＧＣでは、記憶領域をブロック単位で回収するために、回収対象となるブロックに有効なデータを持つページを含む場合は、事前に有効なページをブロック外の記憶領域に退避する必要がある。有効なページの退避処理は、NANDフラッシュのページに対するRead、および、退避先のページに対するWriteによって実現される。つまり、ＧＣの負荷は退避を行うページ数に比例して増加する。ＧＣによる負荷の増加は、ＳＳＤにおけるアクセス処理の遅延、性能低下の原因である。また、退避においてNANDフラッシュに対するデータの書き込みが発生する。そのため、退避を行うページ数の増加はＳＳＤの寿命消費の原因の１つである。
【００２６】
ＳＳＤのＧＣにおける問題を回避し、アクセス性能の継続的維持、長寿命化を図るためには、ＳＳＤ内部で実行されるＧＣの負荷低減が重要である。具体的には、NANDフラッシュ上の有効なデータを格納したページの退避処理を減らすことが求められる。ＳＳＤのＧＣはNANDフラッシュのブロック単位で行う必要があるため、ＧＣの負荷を継続的に抑制するためには、データの更新、削除の結果無効となるページが多数のブロックに分散せずに、少数のブロックに集中した状態を維持することが必要である。この場合、有効なデータを格納したページが存在しない、もしくは少ないブロックが常に存在し続けることになるため、ＧＣにおける退避処理の増加を抑制できる。
【００２７】
状態を維持するための方法として、非特許文献２ではホストコンピュータからのWriteコマンドに同じ性質を持つデータごとに同一のストリームＩＤと呼ばれる情報を付与する。そして、ＳＳＤの内部でストリームＩＤに基づいて格納先のNANDフラッシュのブロックを選択することで、ブロック毎のデータの更新時期が近くなるようにWriteデータの格納を行い、ＧＣの負荷を低減する方法が示されている。
【００２８】
しかし、非特許文献２の方法はホストコンピュータからＳＳＤにアクセスを行うためのプロトコル改変を伴い、ホストコンピュータ、ＳＳＤ両方の対応が必要であることから、技術の適用に多大なコストを要する。加えて、非特許文献２のようにＳＳＤに対するWriteデータの更新、削除されるまでの期間を基に格納先のブロックを決定するには、事前にホストコンピュータで実行されるアプリケーションにおけるWriteアクセスのパターン、種類に関する情報が必要である。また、ホストコンピュータで実行されるアプリケーションが複数存在する場合は、ＳＳＤの内部で複数アプリケーションからのWriteデータが混在した状態でNANDフラッシュに格納される。加えて、入力データによってＳＳＤに対するWriteデータの特性が変化するアプリケーションでは、Writeアクセスのパターンを事前に収集することが困難である。つまり、複数アプリケーションの実行状況や組み合わせが動的に変化する環境では、ＳＳＤに対するWriteアクセスのパターン、種類によるNANDフラッシュのブロックに対するデータ格納の最適化は困難である。
【００２９】
《実施形態の説明》
上記前提技術の課題を解決するため、第２実施形態乃至第５実施形態においては、ＳＳＤの内部で実行される、NANDフラッシュの記憶領域に対するＧＣにおいて、回収対象のブロックから有効なデータを退避するための処理に伴う負荷を軽減し、ＳＳＤのアクセス性能の向上、長寿命化を図るための技術を提供する。
【００３０】
具体的には、ＳＳＤの提供するＬＢＡ(Logical Block Address)の空間、あるいは連続したWriteアクセス要求ごとにNANDフラッシュ内における格納状況を監視し、NANDフラッシュ内の多数のブロックに断片化した状態を解消する。一般にファイル等の一連の意味を持つデータは、連続したＬＢＡによって表される記憶領域に格納される。また、単一ファイルに含まれるデータは、多くの場合に全体が更新、削除の対象となる。つまり、ＳＳＤに対するWriteデータのうち、ファイルのように連続または隣接したＬＢＡによって表されるデータは格納から更新、または削除までの期間(以下、本明細書では期間を生存期間と記述する)が同じである場合が多いと考えられる。
【００３１】
ＳＳＤ内部のNANDフラッシュに対するWriteデータの格納状況監視は、ＬＢＡの空間における一定の領域、あるいはファイルなどの一連の連続Writeアクセスごとに行う。ＳＳＤのNANDフラッシュの各ブロックに対してWriteデータが追記形式で格納される場合、連続したＬＢＡに対するWriteデータはNANDフラッシュの同一ブロックのページに格納される。一方で、細かなサイズのWriteが断続的に行われる領域は、少量のWriteデータが断続的に到着することから各Writeデータが複数のブロックに断片化した状態で格納される。断片化したWriteデータが格納されたブロックは、他の領域、あるいは連続アクセスのデータが混在した状態で格納されているため、生存期間の異なるデータの混在によってＧＣの負荷を高めると考えられる。
【００３２】
そこで、本実施形態では、ＬＢＡの空間における一定の領域ごとに断片化数を記録する。あるいはファイルなどの一連の連続領域ごとにWriteアクセスをまとめて並列に実行されるデータ格納を管理する。そして、断片化数が一定以上に増加した領域、あるいは多量のデータと並列に格納された連続領域のデータ全体をまとめて再格納することで断片化を解消する。ＬＢＡの空間上の各領域、およびファイルなどの連続したデータを格納する領域に関する断片化の発生を、同じ領域に対するWrite要求の間に行われたＳＳＤ全体のWriteデータ量から推定して記録する。NANDフラッシュに追記形式でデータが格納される場合、ブロックがWriteデータで満たされると、以降のWriteデータは異なるブロックに格納される。つまり、ＬＢＡの空間上の各領域に対してWrite要求を行う際に、同じ領域に対する前回のWrite要求を行った後に、ＳＳＤ上の他の領域に対して格納されたWriteデータの総容量を確認する。そして、総容量が一定以上である場合はWriteデータが新たなブロックに格納されたと判断してWrite要求を行った領域の断片化数を加算する。また、複数のファイルを並列にWriteした場合、複数ファイルのデータがブロック内に混在して格納されるため、並列にWriteされるファイルが増加するほどＳＳＤ内部のNANDフラッシュにおける断片化が進行する。
【００３３】
さらに、本実施形態では各領域の断片化数について履歴を収集することで、断片化の発生頻度が高い領域を検出する。また、検出された断片化発生頻度の高い領域に対するWriteデータをバッファとして用意した記憶領域に格納する。つまり、断片化頻度の高い領域に格納される生存期間の短いWriteデータを優先的にバッファに格納することで、生存期間の短いデータと長いデータを分離する。バッファに格納された、生存期間が短いWriteデータはバッファからＳＳＤに書き込まれるまでの間に更新、削除が行われる。そのため、生存期間の短いWriteデータはＳＳＤに書き込まれず、アクセス性能の向上、ＳＳＤの長寿命化につながる。一方で、更新、削除が行われない生存期間の長いWriteデータはバッファから溢れてＳＳＤに書き込まれる。その結果、生存期間の長いWriteデータのみがＳＳＤに書き込まれるため、ＧＣにおけるデータ退避の負荷を低減できる。
【００３４】
また、本実施形態は、ＳＳＤ内部のNANDフラッシュにおける断片化状況の推定、解消、および生存期間の短いWriteデータの選択的なバッファによって、ＳＳＤ内部のＧＣにおけるデータ退避処理の負荷を低減してＳＳＤのアクセス性能向上、長寿命化を図る。そのために、断片化状態推定機能と、断片化状態管理機能と、断片化解消制御機能とを備える。断片化状態推定機能は、ＳＳＤに対するWriteデータの格納による断片化状態の変化を推定する。断片化状態管理機能は、ＳＳＤのＬＢＡ空間上の各領域に対する断片化状態、あるいはファイルなどの連続領域毎のWriteアクセスに関する実行状況の情報を管理する。断片化解消制御機能は、断片化が一定以上進行した連続領域に対して領域内のデータをまとめて再格納する。また、断片化状態の情報を基にＳＳＤに対するWriteデータをバッファに格納すべきか判定して格納先を決定する格納先決定機能を、さらに備える。
【００３５】
断片化状態推定機能は、ＳＳＤの提供するＬＢＡの空間を分割した一定の領域毎、あるいはファイルなどの一連の連続領域ごとに、WriteデータがNANDフラッシュ上で新たに断片化を引き起こしているか推定する。ＳＳＤ内部のNANDフラッシュの各ブロックに対してWriteデータが追記形式で格納される場合、格納先のＬＢＡによらず連続的に格納されたWriteデータは同一ブロックに格納される。逆に、ＳＳＤに対する2つのWriteデータの間に、ＳＳＤ全体でブロックサイズ以上のWriteが行われた場合は、2つのWriteデータは異なるブロックに分かれて格納される。つまり、ＳＳＤに対して一定サイズ以上のWriteが行われた後のWrite要求のデータは異なるブロックに分かれて格納されるため、ＳＳＤに対する総Write量を調べることで各領域に対するWriteデータの大まかな断片数、およびファイルなどの連続データの断片化状態を調べることができる。そこで、断片化状態推定機能では、ＳＳＤに対するWrite要求について、Write先の領域に対して前回のWriteが行われた時点と、現時点のＳＳＤに対して行われた全Write要求の総容量を調べる。そして、前回のWriteから事前に定めた一定の容量以上のWriteがＳＳＤに対して行われていた場合は、NANDフラッシュ上の新たな記憶領域に対してデータが格納されたと見做して、断片数を1増加させる。あるいは、ファイルなどの連続データの断片化状況を推定する場合は、並列にWriteされるファイル数、データ量が増加するほど断片化の度合が大きいと判断する。
【００３６】
断片化状態管理機能は、ＳＳＤの提供するＬＢＡの空間を分割した一定の領域ごとに、データが格納されたNANDフラッシュ上の断片数の情報を記録する。あるいはファイルなどの一連の連続領域ごとに、断片化状況の推定に必要な、並列に行われるWriteアクセスの実行状況を表す情報を記録する。また、ＳＳＤに対する総Write量を管理し、各領域について最後にWrite要求が行われた時点の総Write量に関する情報を記録する。加えて、各領域について直近の断片化頻度、つまり断片化を発生させるWriteの頻度を記録する。
【００３７】
断片化解消制御機能は、ＳＳＤ上の連続領域ごとに、断片化状態管理機能に記録された情報を参照して、断片化が一定以上の場合に領域内のデータをＳＳＤに対して連続的に再格納する。再格納では領域内の各データを読み出し、他の書き込みを制限しながら、元々格納されていたＬＢＡ、あるいはファイルに対して領域内の全データをそのままWriteする。再格納されたデータはNANDフラッシュ上の同一ブロック内に再配置して連続的に格納されるため、断片化を解消できる。
【００３８】
格納先決定機能は、ＳＳＤに対する各Write要求について格納先のＬＢＡ空間上の領域における断片化頻度の情報を断片化状態管理機能から取得して、断片化頻度が一定以上の場合にWriteデータの格納先をバッファに変更する。
【００３９】
以下、図２乃至図９Ｂを参照して、本実施形態の記憶制御装置の構成と動作とを詳細に説明する。
【００４０】
《情報処理システム》
図２は、本実施形態に係る情報処理システム２００の構成を示す図である。
【００４１】
図２を参照すると、本実施形態の情報処理システム２００は、１台以上のホストコンピュータ２１０と、記憶媒体２４０と、ホストコンピュータ２１０と記憶媒体２４０とを接続するネットワーク２５０を含む。
【００４２】
ホストコンピュータ２１０は、ＯＳ(Operating System)２１１およびＯＳ２１１上で動作するソフトウェアであるアプリケーション２１２と、本実施形態の記憶制御部２２０と、を備える。記憶制御部２２０は、ＯＳ２１１およびアプリケーション２１２の処理における、記憶媒体２４０へのReadおよびWriteを含むアクセス処理を制御する。
【００４３】
記憶媒体２４０は、NANDフラッシュを記憶素子として用いたＳＳＤなどの記憶媒体である。なお、記憶媒体２４０は、媒体本体２４１とキャッシュ２４２とを有してもよい。また、ネットワーク２５０の形態は特に限定されず、ホストコンピュータ２１０と記憶媒体２４０とが直接接続される形態であってもよい。また、ホストコンピュータ２１０はネットワーク２５０によって接続された複数の装置、あるいは、システムで構成されてもよい。
【００４４】
《記憶制御装置の機能構成》
図３は、本実施形態に係る記憶制御装置としての記憶制御部２２０の機能構成を示すブロック図である。
【００４５】
図３を参照すると、記憶制御部２２０は、アクセス実行部３０１と、断片化状態推定部３０２と、断片化状態管理テーブル３０３と、断片化解消制御部３０４と、を備える。
【００４６】
アクセス実行部３０１は、ホストコンピュータ２１０で動作するＯＳ２１１またはアプリケーション２１２からのアクセス要求を受け取り、記憶媒体２４０に対して必要なアクセス処理を行う。また、アクセス実行部３０１は、断片化解消制御部３０４によって指示された記憶媒体２４０上の領域に対してデータを読み出して、再格納処理を行う記憶媒体２４０の領域に対するデータの読み出しは、記憶媒体２４０に対して直接要求を行う以外に、不図示の記憶媒体２４０に対するキャッシュメモリに対して要求を行うことでも代用できる。
【００４７】
断片化状態推定部３０２は、アクセス実行部３０１がＯＳ２１１またはアプリケーション２１２から受け取ったWrite要求のデータについて、格納を行うことで記憶媒体２４０の内部で断片化が発生するか否かを推定する断片化状態推定機能を実現する。まず、断片化状態推定部３０２は断片化状態管理テーブル３０３を参照する。そして、記憶媒体２４０上のデータの格納先となるＬＢＡ空間上の領域に対して前回のWriteを行った時点の記憶媒体２４０全体の総Write量と、現時点の記憶媒体２４０全体の総Write量とを比較する。比較の結果、現時点の総Write量が前回のWriteを行った時点の総Write量から一定以上増加していた場合は、ＯＳ２１１またはアプリケーション２１２から受け取ったWrite要求のデータを記憶媒体２４０に格納することで断片化が発生すると判断する。そして、断片化状態管理テーブル３０３に格納された格納先領域に対応する断片数を“１”増加させる。
【００４８】
断片化状態管理テーブル３０３は、記憶媒体２４０の提供するＬＢＡ空間を区切った一定の領域ごとに関する、断片化状態推定部３０２によるNANDフラッシュ上での断片化状態の推定結果、各領域に対してWrite要求が最後に行われた時点の記憶媒体２４０の総Write量、および、直近の断片化の発生頻度の情報を記録する。
【００４９】
断片化解消制御部３０４は、記憶媒体２４０のＬＢＡ空間上の領域について、断片化状態管理テーブル３０３の対応するエントリに記録された断片数が一定以上の場合に、アクセス実行部３０１に対して領域内の全データを読み出す。そして、他の書き込みを制限して、記憶媒体２４０上の領域に対応したＬＢＡを指定して、再度Writeするように指示する。
【００５０】
（断片化状態管理テーブル）
図４は、本実施形態に係る断片化状態管理テーブル３０３の構成を示す図である。断片化状態管理テーブル３０３は、断片化状態推定部３０２が記憶媒体２４０の内部で断片化が発生するか否かを推定するために参照する。
【００５１】
断片化状態管理テーブル３０３は、記憶媒体２４０全体の情報として、現在の記憶媒体２４０に対する総Write量４１０を格納する。また、断片化状態管理テーブル３０３は、ＬＢＡ空間を区切った領域ごとにエントリを持つ。各エントリは、先頭ＬＢＡ４２１と、断片数４２２と、直前総Write量４２３と、断片化頻度４２４と、を格納する。先頭ＬＢＡ４２１は、エントリに対応する領域を表す。断片数４２２は、断片化状態推定部３０２によるNANDフラッシュ上での断片化状態になっている領域数の推定結果の値である。直前総Write量４２３は、断片化を発生させたWrite要求が最後に行われた時点における記憶媒体２４０の総Writeデータ量を表す。断片化頻度４２４は、断片化の発生頻度を表す情報として、一定時間あたりに断片化を発生させたWriteの頻度を表す。
【００５２】
ここで、断片数４２２は、ＬＢＡ空間上の各領域に対して何もデータを格納していない初期状態の値を“０”とし、初めてデータが格納された時点の断片数を“１”とする。以降、断片化状態推定部３０２によって、新たなWriteによって領域において断片化が発生したと判定された場合、データが記憶媒体２４０の内部で格納されている物理領域が１箇所増加したことを表すために、断片数４２２に対して“１”を加算する。断片化頻度４２４は、例えばＳＳＤに対する総Write量が一定容量分変化する間の、ＬＢＡ空間上の各領域に対して断片化を発生させたWriteの回数を格納する。
【００５３】
なお、断片化状態管理テーブル３０３に格納されるデータの形式は、図４に示した形式に限定されず、例えば各エントリの先頭ＬＢＡ４２１は、エントリがＬＢＡ空間のアドレス順に並んでいる場合は省略可能である。また、各エントリに含まれる情報についても、例えば断片化頻度４２４は、単位時間あたりのWrite回数のように頻度を直接表す値を格納せずに、直前総Write量４２３などと同様に、前回断片化を発生させたWriteを行った際のＳＳＤ全体の総Write量のような形式で表すことも可能である。
【００５４】
《ホストコンピュータのハードウェア構成》
図５は、本実施形態に係る記憶制御部２２０を含むホストコンピュータ２１０のハードウェア構成を示すブロック図である。なお、図５においては、記憶制御部２２０はホストコンピュータ２１０のソフトウェア処理として図示するが、記憶制御部２２０を、ホストコンピュータ２１０とは独立したワンチップのコンピュータで実現してもよい。
【００５５】
図５で、ＣＰＵ(Central Processing Unit)５１０は演算制御用のプロセッサであり、プログラムを実行することで図３の記憶制御部２２０の機能構成部を実現する。ＲＯＭ(Read Only Memory)５２０は、初期データおよびプログラムなどの固定データおよびプログラムを記憶する。また、通信制御部５３０は、ネットワーク２５０を介して記憶媒体２４０と通信する。なお、ＣＰＵ５１０は１つに限定されず、複数のＣＰＵであっても、あるいは画像処理用のＧＰＵ(Graphics Processing Unit)を含んでもよい。また、通信制御部５３０は、ＣＰＵ５１０とは独立したＣＰＵを有して、ＲＡＭ(Random Access Memory)５４０の領域に送受信データを書き込みあるいは読み出しするのが望ましい。また、ＲＡＭ５４０とストレージ５５０との間でデータを転送するＤＭＡＣ(Direct Memory Access Controller)を設けるのが望ましい（図示なし）。さらに、入出力インタフェース５６０は、ＣＰＵ５１０とは独立したＣＰＵを有して、ＲＡＭ５４０の領域に入出力データを書き込みあるいは読み出しするのが望ましい。したがって、ＣＰＵ５１０は、ＲＡＭ５４０にデータが受信あるいは転送されたことを認識してデータを処理する。また、ＣＰＵ５１０は、処理結果をＲＡＭ５４０に準備し、後の送信あるいは転送は通信制御部５３０やＤＭＡＣ、あるいは入出力インタフェース５６０に任せる。
【００５６】
ＲＡＭ５４０は、ＣＰＵ５１０が一時記憶のワークエリアとして使用するランダムアクセスメモリである。ＲＡＭ５４０には、本実施形態の実現に必要なデータを記憶する領域が確保されている。論理アドレス５４１は、ＯＳ２１１またはアプリケーション２１２から記憶媒体２４０にアクセスしたアドレスである。物理アドレス５４２は、論理アドレス５４１から変換された記憶媒体２４０にアクセスするためのアドレスである。断片化状態閾値５４３は、断片化状態を表わす断片化状態管理テーブル３０３の断片数４２２から、断片化解消のための再配置実行を判定するための閾値である。断片化解消フラグ５４４は、断片数４２２が断片化状態閾値５４３を超えた場合に設定される、断片化解消のための再配置実行を示すフラグである。読み出し情報５４５は、ＯＳ２１１またはアプリケーション２１２からの要求に基づき記憶媒体２４０からReadした情報である。読み込み情報５４６は、ＯＳ２１１またはアプリケーション２１２からの要求に基づき記憶媒体２４０にWriteする情報である。入出力データ５４７は、入出力インタフェース５６０を介して入出力されるデータである。送受信データ５４８は、通信制御部５３０を介して送受信されるデータである。アプリケーション使用領域５４９は、記憶制御以外の処理でアプリケーションが使用するエリアである。
【００５７】
ストレージ５５０には、データベースや各種のパラメータ、あるいは本実施形態の実現に必要な以下のデータまたはプログラムが記憶されている。論理アドレス／物理アドレス変換テーブル５５１は、ＯＳ２１１またはアプリケーション２１２からアクセス要求した論理アドレス５４１を、記憶媒体２４０にアクセスする物理アドレス５４２に変換するテーブルであり、アドレス空間の対応に従って変化する。断片化状態管理テーブル３０３は、図４に図示した構成のテーブルである。ストレージ５５０には、以下のプログラムが格納される。ＯＳ２１１は、本ホストコンピュータ２１０の全体を制御する基礎プログラムである。アプリケーション２１２は、現在、本ホストコンピュータ２１０が実行中のプログラムである。記憶制御プログラム５５２は、ＯＳ２１１やアプリケーション２１２からの記憶媒体２４０へのアクセスを受けて、本実施形態のアクセス制御を実現するプログラムである。Read制御モジュール５５３は、記憶制御プログラム５５２における、記憶媒体２４０からのReadを制御するモジュールである。Write制御モジュール５５４は、記憶制御プログラム５５２における、記憶媒体へのWriteを制御するモジュールである。断片化管理モジュール５５５は、断片化状態を監視して、断片化状態を解消するために物理アドレスにおける記憶領域の再配置を行なうモジュールである。
【００５８】
入出力インタフェース５６０は、入出力機器との入出力データをインタフェースする。入出力インタフェース５６０には、表示部５６１、操作部５６２、が接続される。また、入出力インタフェース５６０には、さらに、記憶媒体２４０が接続されてもよい。さらに、音声出力部であるスピーカや、音声入力部であるマイク、あるいは、ＧＰＳ位置判定部が接続されてもよい。
【００５９】
なお、図５のＲＡＭ５４０やストレージ５５０には、ホストコンピュータ２１０が有する汎用の機能や他の実現可能な機能に関連するプログラムやデータは図示されていない。
【００６０】
《記憶制御部の処理手順》
図６は、本実施形態に係る記憶制御部２２０の処理手順を示すフローチャートである。このフローチャートは、図５のＣＰＵ５１０がＲＡＭ５４０を使用して実行し、図３の機能構成部を実現する。
【００６１】
ホストコンピュータ２１０の記憶制御部２２０は、ステップＳ６１１において、ＯＳ２１１またはアプリケーション２１２からのRead要求であるか否かを判定する。Read要求であれば、記憶制御部２２０は、ステップＳ６１３において、記憶媒体２４０からのRead処理を実行する。Read要求でなければ、記憶制御部２２０は、ステップＳ６２１において、ＯＳ２１１またはアプリケーション２１２からのWrite要求であるか否かを判定する。Write要求であれば、記憶制御部２２０は、ステップＳ６２３において、記憶媒体２４０へのWrite処理を実行する。
【００６２】
（Ｒｅａｄ処理）
図７は、本実施形態に係るＲｅａｄ処理（Ｓ６１３）の手順を示すフローチャートである。図７は、図６のステップＳ６１３において、例えば、ＯＳからRead要求を受け取り、要求されたデータを返す手順である。
【００６３】
記憶制御部２２０のアクセス実行部３０１は、ホストコンピュータ２１０で動作するソフトウェアやＯＳからのRead要求を受け取ると、記憶媒体２４０に対して要求先のアドレスについてデータのReadを行い、結果をアクセス元のソフトウェアやＯＳに結果を返して処理を終了する（ステップＳ７０１）。
【００６４】
以上のステップＳ７０１の処理を行い、本実施形態においてホストコンピュータ２１０で動作するソフトウェアやＯＳからRead要求を受け取り、要求されたデータを返す動作が完了する。
【００６５】
（Ｗｒｉｔｅ処理）
図８Ａおよび図８Ｂは、本実施形態に係るＷｒｉｔｅ処理（Ｓ６２３）の手順を示すフローチャートである。図８Ａおよび図８Ｂは、例えば、図６のステップＳ６２３において、ＯＳからWrite要求を受け取り、Write処理を完了する手順である。
【００６６】
記憶制御部２２０のアクセス実行部３０１は、受け取ったWriteデータの格納先ＬＢＡを断片化状態推定部３０２に通知する。断片化状態推定部３０２は、記憶媒体２４０に対してアクセス実行部３０１から受け取ったＬＢＡにWriteデータが格納された場合に、記憶媒体２４０の内部で新たに断片化を引き起こすか否かを推定する（ステップＳ８０１）。
【００６７】
新たに断片化が発生するか否かを判定し（ステップＳ８０３）、Writeデータの格納によって記憶媒体２４０で新たに断片化が発生しないと判定された場合（ステップＳ８０３のＮＯ判定）、ステップＳ８０７以降の処理を実行する。一方、Writeデータの格納によって記憶媒体２４０で新たに断片化が発生すると判定された場合（ステップＳ８０３のＹＥＳ判定）、断片化状態推定部３０２は、Writeデータの記憶媒体２４０における格納先ＬＢＡを断片化解消制御部３０４に通知する。断片化解消制御部３０４は、断片化状態推定部３０２から受け取ったＬＢＡに対応する記憶媒体２４０のＬＢＡ空間上の領域について、断片化の解消が必要であるか否かの判定を行う（ステップＳ８０５）。具体的には、断片化状態管理テーブル３０３の先頭ＬＢＡ４２１に対応するエントリに記録された断片数４２２と、事前に定めた断片化解消が必要と判断する基準の断片数閾値とを比較して、エントリに記録された断片数４２２が基準の断片数以上となった場合に、断片化解消が必要と判定する。
【００６８】
断片化解消が必要か否かを判定し（ステップＳ８０７）、断片化状態管理テーブル３０３の対応するエントリに記録された断片数４２２が基準の断片数閾値未満の場合（ステップＳ８０７のＮＯ判定）、図８ＢのステップＳ８１１以降の処理を実行する。断片化状態管理テーブル３０３の対応するエントリに記録された断片数４２２が基準の断片数閾値以上の場合（ステップＳ８０７のＹＥＳ判定）、断片化解消制御部３０４は、アクセス実行部３０１に対して記憶媒体２４０に対して行われたWrite要求以外に、追加で必要なRead、およびWriteアクセスを指示する（ステップＳ８０９）。具体的には、断片化解消制御部３０４はＬＢＡ空間上の領域について、Write要求によって更新されるデータ以外の全てを記憶媒体２４０からReadするように、アクセス実行部３０１に指示する。また、断片化解消制御部３０４はＬＢＡ空間上の領域について、アクセス実行部３０１に対してReadを指示したデータとWrite要求によって更新されるデータとを組み合わせた、ＬＢＡ空間上の領域全体のデータを作成し、他の書き込みを制限して記憶媒体２４０のＬＢＡ空間上の同じ位置にWriteするように指示する。
【００６９】
断片化状態推定部３０２は、アクセス実行部３０１に対して断片化状態推定部３０２における処理の完了を通知する。アクセス実行部３０１は、記憶媒体２４０に対して断片化解消制御部３０４から指示された、追加のReadアクセスおよびWriteアクセスが存在する場合には実行する。また、アクセス実行部３０１は、記憶媒体２４０に対して要求されたデータの格納を行う（ステップＳ８１１）。
【００７０】
アクセス実行部３０１は、記憶媒体２４０に対する断片化解消制御部３０４から指示されたアクセスおよび要求されたデータの格納を完了すると、断片化状態推定部３０２に格納の完了を通知する。断片化状態推定部３０２は、断片化状態管理テーブル３０３に格納されている、記憶媒体２４０の総Write量４１０に、ステップＳ８１１において実行した断片化解消制御部３０４から指示されたWriteアクセスおよび要求されたWriteデータの合計容量を追加する（ステップＳ８１３）。
【００７１】
新たな断片化が発生するか否かを判定する（ステップＳ８１５）。ステップＳ８０１における断片化状態推定部３０２による断片化状態の推定の結果、Write要求によって新たな断片化が発生しないと判定された場合（ステップＳ８１５のＮＯ判定）、ステップＳ８１９以降の処理を実行する。ステップＳ８０３における断片化状態推定部３０２による断片化状態の推定の結果、Write要求によって新たな断片化が発生すると判定された場合（ステップＳ８１５のＹＥＳ判定）、断片化状態推定部３０２は、断片化状態管理テーブル３０３上のデータ格納を行ったＬＢＡに対応するエントリの更新処理をする（ステップＳ８１７）。
【００７２】
アクセス実行部３０１は、Write要求の完了をアクセス元のＯＳ２１１またはアプリケーション２１２に通知して（ステップＳ８１９）、処理を終了する。
【００７３】
以上のステップＳ８０１からＳ８１９までの処理を行い、本実施形態においてホストコンピュータ２１０の記憶制御部２２０で動作するＯＳ２１１またはアプリケーション２１２からWrite要求を受け取り、完了するまでの動作が完了する。
【００７４】
（断片化判定処理）
図９Ａは、本実施形態に係る断片化判定処理（Ｓ８０１）の手順を示すフローチャートである。図９Ａは、図８ＡのステップＳ８０１において、断片化状態推定部３０２が、アクセス実行部３０１がホストコンピュータ２１０から受け取ったWrite要求のデータを格納することで、記憶媒体２４０に断片化が発生するか推定する手順である。
【００７５】
記憶制御部２２０の断片化状態推定部３０２は、断片化状態管理テーブル３０３を参照して、記憶媒体２４０に関する総Write量４１０と、Write要求先のＬＢＡに対応するエントリの直前総Write量４２３との差から、Write要求先が含まれるＬＢＡ空間上の領域において、最後に断片化が発生してから記憶媒体２４０に対して行われたWrite量を計算する（ステップＳ９１１）。
【００７６】
断片化状態推定部３０２は、ステップＳ９１１で求められた、最後に断片化が発生してから記憶媒体２４０に対して行われたWrite量と、事前に定めた断片化が発生したと判断する基準のWrite量とを比較する（ステップＳ９１３）。基準のWrite量は、例えば記憶媒体２４０がＳＳＤであり、NANDフラッシュのブロックに対して追記形式でデータを格納する場合は、基準のWrite量をNANDフラッシュのブロックサイズ以上に設定することで、ＬＢＡ空間上の同じ領域に対応するデータがNANDフラッシュの複数ブロックに格納される、データの断片化の発生を判定可能である。
【００７７】
ステップＳ９１３における比較の結果をステップＳ９１５において判定する。そして、最後に断片化が発生してからの記憶媒体２４０のWrite量が基準のWrite量以上である場合（ステップＳ９１５のＹＥＳ判定）、断片化状態推定部３０２は、Write要求先が含まれるＬＢＡ空間上の領域において断片化が発生したと判定して（ステップＳ９１７）、処理を終了する。ステップＳ９１３における比較の結果、最後に断片化が発生してからの記憶媒体２４０のWrite量が基準のWrite量未満である場合（ステップＳ９１５のＮＯ判定）、断片化状態推定部３０２は、Write要求先が含まれるＬＢＡ空間上の領域において断片化が発生していないと判定して（ステップＳ９１９）、処理を終了する。
【００７８】
以上のステップＳ９１１からＳ９１９までの処理を行い、ステップＳ８０１において断片化状態推定部３０２が、アクセス実行部３０１がホストコンピュータ２１０のＯＳ２１１またはアプリケーション２１２から受け取ったWrite要求のデータを格納することで記憶媒体２４０に断片化が発生するか推定する動作が完了する。
【００７９】
（断片化管理テーブル更新処理）
図９Ｂは、本実施形態に係る断片化管理テーブル更新処理（Ｓ８１３）の手順を示すフローチャートである。図９Ｂは、図８ＢのステップＳ８１３において断片化状態推定部３０２が、断片化状態管理テーブル３０３を更新する手順である。
【００８０】
断片化状態推定部３０２は、断片化状態管理テーブル３０３に格納された総Write量４１０を、アクセス実行部３０１が受け取ったWrite要求のサイズを加算した値で更新する（ステップＳ９２１）。
【００８１】
次に、断片化状態推定部３０２は、断片化解消が必要と判定されたか否かを判定する（ステップＳ９２３）。ステップＳ８０７において、断片化解消制御部３０４によってアクセス実行部３０１が受け取ったWrite要求先のＬＢＡに対応する領域の断片化解消が必要と判定された場合（ステップＳ９２３のＹＥＳ判定）、断片化状態推定部３０２は、領域に対応する、断片化状態管理テーブル３０３のエントリについて、断片数４２２を“１”に設定する。また、エントリについて、断片化頻度４２４の値に“１"を加算して、ステップＳ９２９以降の処理を実行する（ステップＳ９２５）。ステップＳ８０７において、断片化解消制御部３０４によってアクセス実行部３０１が受け取ったWrite要求先のＬＢＡに対応する領域の断片化解消が不要と判定された場合（ステップＳ９２３のＮＯ判定）、断片化状態推定部３０２は、領域に対応する、断片化状態管理テーブル３０３のエントリについて、断片数４２２に“１”を加算する。また、エントリについて、断片化頻度４２４の値に“１”を加算する（ステップＳ９２７）。
【００８２】
断片化状態推定部３０２は、ステップＳ９２５またはステップＳ９２７において断片数４２２を更新した断片化状態管理テーブル３０３のエントリに対して、直前総Write量４２３を、総Write量４１０と同じ値に更新して（ステップＳ９２９）、処理を終了する。
【００８３】
以上のステップＳ９２１からＳ９２９までの処理を行い、ステップＳ８０５において断片化状態推定部３０２が、断片化状態管理テーブル３０３を更新する動作が完了する。なお、ステップＳ９２１からＳ９２９の処理における、断片化状態管理テーブル３０３に格納された情報の更新順序は、必ずしも図９Ｂに示した順序である必要はない。例えばステップＳ９２１の処理はステップＳ９２３からＳ９２７の処理と同時期、あるいは後に実行してもよい。
【００８４】
本実施形態によれば、各領域についてWrite処理量の履歴を収集して、断片化の発生頻度が高い領域を推定して、あらかじめ断片化の発生頻度が高いと推定された領域を再配置して断片化を解消することにより、記憶媒体のアクセス性能の向上および長寿命化を図ることができる。
【００８５】
すなわち、本実施形態による方法を適用することで、ＳＳＤの内部で実行される、NANDフラッシュの記憶領域に対するＧＣにおいて、回収対象のブロックから有効なデータを退避するための処理に伴う負荷を軽減し、ＳＳＤのアクセス性能の向上、長寿命化を実現する。また、本実施形態による方法は、ＳＳＤに対するアクセスプロトコル、およびＳＳＤに対する変更を伴わず、さらにＳＳＤに対してアクセスを行うアプリケーションの実行状況、組み合わせなどの環境変化によらず適用が可能である。
【００８６】
［第３実施形態］
次に、本発明の第３実施形態に係る記憶制御装置を記憶制御部としてホストコンピュータ内に含む情報処理システムについて説明する。本実施形態に係る情報処理システムは、上記第２実施形態と比べると、断片化が著しいと推定される領域へのWrite処理を代替するためのバッファを有する点で異なる。その他の構成および動作は、第２実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
【００８７】
《情報処理システム》
図１０は、本実施形態に係る情報処理システム１０００の構成を示す図である。なお、図１０において、図３と同様の機能構成部には同じ参照番号を付して、説明を省略する。
【００８８】
図１０の情報処理システム１０００は、バッファ１０６０を含む。バッファ１０６０は、記憶媒体２４０に対するWriteデータのうち、断片化頻度の高い領域に対するWrite要求に対応したデータを格納する。バッファ１０６０は、ＤＲＡＭ(Dynamic Random Access Memory)などの記憶媒体２４０より高性能な記憶媒体を用いる以外に、記憶媒体２４０と同様にＳＳＤを用いることも可能である。また、バッファ１０６０は、記憶媒体２４０の一部領域を割り当てた形でもよい。
【００８９】
ホストコンピュータ１０１０は、第２実施形態の処理に加えて、記憶媒体２４０またはバッファ１０６０へのWrite処理を制御する記憶制御部１０２０を有する。
【００９０】
《記憶制御装置の機能構成》
図１１は、本実施形態に係る記憶制御装置としての記憶制御部１０２０の機能構成を示すブロック図である。なお、図１１において、図３と同様の機能構成部には同じ参照番号を付して、説明を省略する。
【００９１】
図１１を参照すると、ホストコンピュータ１０１０の記憶制御部１０２０は、アクセス実行部１１０１に、さらに、格納先決定部１１０５と、バッファ領域管理部１１０６と、バッファ管理テーブル１１０７と、バッファデータ移動指示部１１０８と、を備える。
【００９２】
アクセス実行部１１０１は、ホストコンピュータ１０１０で動作するＯＳ２１１またはアプリケーション２１２からのアクセス要求を受け取り、記憶媒体２４０および／またはバッファ１０６０に対して必要なアクセス処理を行う。また、アクセス実行部１１０１は、バッファ１０６０から溢れたデータの記憶媒体２４０に対する格納処理、および、断片化解消制御部３０４によって指示された記憶媒体２４０上の領域に対してデータの読み出しと再格納処理とを行う。なお、記憶媒体２４０の領域に対するデータの読み出しは、記憶媒体２４０の媒体本体２４１に対して直接要求を行う以外に、記憶媒体２４０のキャッシュ２４２に対して要求を行うことでも代用できる。
【００９３】
格納先決定部１１０５は、アクセス実行部１１０１がＯＳ２１１またはアプリケーション２１２から受け取った各Write要求のデータについて、格納先を記憶媒体２４０とバッファ１０６０のどちらに格納するか決定する。まず、格納先決定部１１０５は、断片化状態管理テーブル３０３から断片化頻度４２４を取得する。また、格納先決定部１１０５は、バッファ管理テーブル１１０７を参照してバッファの空き容量を取得する。受け取ったWrite要求に対応するＬＢＡ空間上の領域についての断片化発生頻度が事前に決定された一定以上の頻度であり、かつ、バッファ１０６０にWriteデータの格納に十分な空き容量が存在する場合、格納先決定部１１０５は、Writeデータの格納先としてアクセス実行部１１０１に対してバッファ１０６０を指定する。それ以外の場合、格納先決定部１１０５は、記憶媒体２４０を格納先として指定する。
【００９４】
バッファ領域管理部１１０６は、アクセス実行部１１０１が受け取ったRead要求対象のデータがバッファ１０６０に格納されているか否かを検索し、格納されている場合は格納先のアドレスを指示し、格納されていない場合は要求対象のデータが存在しないことを表す応答を返す。また、バッファ領域管理部１１０６は、アクセス実行部１１０１がバッファ１０６０に格納するWriteデータについて、バッファ１０６０上の格納先アドレスを指定し、バッファ管理テーブル１１０７を更新する。
【００９５】
バッファ管理テーブル１１０７は、バッファ１０６０に格納された各データについて、記憶媒体２４０上での格納先ＬＢＡと、バッファ１０６０上での格納先アドレスの対応関係を記録する。また、バッファ管理テーブル１１０７は、バッファ１０６０において新規にデータを格納可能な領域、および空き容量の管理を行う。
【００９６】
バッファデータ移動指示部１１０８は、バッファ管理テーブル１１０７を参照して空き容量を取得し、空き容量が事前に決定した一定容量以下の場合にバッファ１０６０に格納されたデータから記憶媒体２４０に移動するデータを決定する。そして、アクセス実行部１１０１に対してバッファ１０６０から記憶媒体２４０への移動を指示する。移動対象のデータとして、例えば、断片化状態管理テーブル３０３を参照してバッファ１０６０に格納された各データに関する断片化発生頻度を比較して最も低いデータを選択する。または一般的なキャッシュ、バッファと同様にＦＩＦＯ(First-In First-Out)、ＬＲＵ(Least Recently Used)などのアルゴリズムを用いて移動対象のデータを決定してもよい。
【００９７】
（バッファ管理テーブル）
図１２は、本実施形態に係るバッファ管理テーブル１１０７の構成を示す図である。バッファ管理テーブル１１０７は、バッファデータ移動指示部１１０８がバッファ１０６０に格納されたデータから記憶媒体２４０に移動するデータを決定するために使用される。
【００９８】
バッファ管理テーブル１１０７は、バッファ１０６０全体の空き容量１２１０と、バッファアドレス１２２１と、記憶媒体アドレス１２２２と、有効フラグ１２２３と、を格納する。バッファアドレス１２２１は、バッファ１０６０上の記憶領域を表す。記憶媒体アドレス１２２２は、バッファ１０６０に格納された各データに対して記憶媒体２４０上での格納先を表す。有効フラグ１２２３は、バッファアドレス１２２１に対応するバッファ１０６０上の記憶領域が使用済であるか示す。
【００９９】
なお、バッファ管理テーブル１１０７に格納されるデータの形式は、図１２に示した形式に限定されず、例えば、記憶媒体アドレス１２２２を記憶媒体２４０のＬＢＡの空間上に存在しない特定の値とした場合に、バッファアドレス１２２１に新規データを格納可能である状態と定義することで、有効フラグ１２２３を省略できる。また、バッファ１０６０に格納されたデータの検索性を高めるために、例えば、ハッシュテーブルなどのデータ構造を用いてもよい。
【０１００】
《記憶制御部のハードウェア構成》
本実施形態の記憶制御部１０２０のハードウェア構成は、図５のハードウェア構成にバッファ１０６０と記憶媒体とを選択する構成や、バッファ１０６０を管理する構成や、バッファ１０６０から記憶媒体２４０へのデータ移動を制御する構成を付加したものとなる。例えば、ストレージにバッファ管理テーブル１１０７が格納される。
【０１０１】
《記憶制御部の処理手順》
図１３は、本実施形態に係る記憶制御部１０２０の処理手順を示すフローチャートである。このフローチャートは、図５のＣＰＵ５１０がＲＡＭ５４０を使用して実行し、図１１の機能構成部を実現する。なお、図１３において、図６と同様のステップには同じステップ番号を付加して、説明を省略する。
【０１０２】
Read処理と判定されれば、記憶制御部１０２０は、ステップＳ１３１３において、Read処理を実行する。また、Write処理と判定されれば、記憶制御部１０２０は、ステップＳ１３２３において、Write処理を実行する。
【０１０３】
記憶制御部１０２０は、ステップＳ１３３１において、バッファ空き容量が閾値α未満になったか否かを判定する。バッファ空き容量が閾値α未満になった場合、記憶制御部１０２０は、ステップＳ１３３３において、バッファ１０６０から記憶媒体２４０へのデータ移動処理を実行し、バッファ空き容量を増加させる。
【０１０４】
（Ｒｅａｄ処理）
図１４は、本実施形態に係るＲｅａｄ処理（Ｓ１３１３）の手順を示すフローチャートである。なお、図１４において、図７と同様のステップには同じステップ番号を付して、説明を省略する。
【０１０５】
記憶制御部１０２０のアクセス実行部１１０１は、ホストコンピュータ１０１０で動作するＯＳ２１１またはアプリケーション２１２からのRead要求を受け取ると、バッファ領域管理部１１０６に対してバッファ１０６０に要求されたデータがバッファ１０６０に格納されているか否かと、バッファ１０６０における格納先のアドレスとを問い合わせる（ステップＳ１４０１）。
【０１０６】
バッファ領域管理部１１０６からの応答を判定する（ステップＳ１４０３）。そして、要求されたデータがバッファ１０６０に格納されていた場合（ステップＳ１４０３のＹＥＳ判定）、アクセス実行部１１０１はバッファ領域管理部１１０６から指示されたアドレスを用いてバッファ１０６０に対してReadを行う。Read結果をアクセス元のＯＳ２１１またはアプリケーション２１２に結果を返して（ステップＳ１４０５）、処理を終了する。
【０１０７】
要求されたデータがバッファ１０６０に格納されていない場合（ステップＳ１４０３のＮＯ判定）、アクセス実行部１１０１は記憶媒体２４０に対して要求先のアドレスについてデータのReadを行い、Read結果をアクセス元のＯＳ２１１またはアプリケーション２１２に結果を返して（ステップＳ７０１）、処理を終了する。
【０１０８】
以上のステップＳ１４０１からＳ１４０５、Ｓ７０１の処理を行い、本実施形態においてホストコンピュータ１０１０で動作するＯＳ２１１またはアプリケーション２１２からRead要求を受け取り、要求されたデータを返す動作が完了する。
【０１０９】
（Ｗｒｉｔｅ処理）
図１５Ａおよび図１５Ｂは、本実施形態に係るＷｒｉｔｅ処理（Ｓ１３２３）の手順を示すフローチャートである。なお、図１５Ａおよび図１５Ｂにおいて、図８Ａおよび図８Ｂと同様のステップには同じステップ番号を付して、説明を省略する。
【０１１０】
記憶制御部１０２０のアクセス実行部１１０１は、ホストコンピュータ１０１０で動作するＯＳ２１１またはアプリケーション２１２からのWrite要求を受け取ると、格納先決定部１１０５を通してWrite要求を記憶媒体２４０とバッファ１０６０とのどちらに格納するか決定する（ステップＳ１５０１）。
【０１１１】
次に、記憶媒体２４０とバッファ１０６０とのどちらに格納するかを判定する（ステップＳ１５０３）。そして、ステップＳ１５０１における処理の結果、ＯＳ２１１またはアプリケーション２１２から受け取ったWrite要求のデータを記憶媒体２４０に格納する場合（ステップＳ１５０３のＮＯ判定）、ステップＳ８０１以降の処理を実行する。
【０１１２】
一方、ステップＳ１５０３における処理の結果、ＯＳ２１１またはアプリケーション２１２から受け取ったWrite要求のデータをバッファ１０６０に格納する場合（ステップＳ１５０３のＹＥＳ判定）、アクセス実行部１１０１はWriteデータの格納先アドレスをバッファ領域管理部１１０６に問い合わせる。バッファ領域管理部１１０６は、Writeデータの格納先となるバッファ１０６０のアドレスを決定してアクセス実行部１１０１に指示する（ステップＳ１５０５）。アクセス実行部１１０１は、バッファ１０６０におけるバッファ領域管理部１１０６から指示されたアドレスに、ＯＳ２１１またはアプリケーション２１２からWrite要求されたデータを格納する（ステップＳ１５０７）。
【０１１３】
アクセス実行部１１０１は、バッファ１０６０に対するデータの格納を完了すると、バッファ領域管理部１１０６に格納の完了を通知する。バッファ領域管理部１１０６は、完了の通知を受け取り、バッファ管理テーブル１１０７上の、新規データ格納先のバッファアドレス１２２１に対応するエントリの記憶媒体アドレス１２２２を更新する。また、エントリの有効フラグ１２２３が無効状態となっている場合は、有効状態に変更し、空き容量１２１０を更新する（ステップＳ１５０９）。アクセス実行部１１０１は、Write要求の完了をアクセス元のＯＳ２１１またはアプリケーション２１２に結果を通知して（ステップＳ１５１１）、処理を終了する。
【０１１４】
ステップＳ８０１以降の記憶媒体２４０への断片化推定および解消処理を含むWrite処理は、図８Ａおよび図８Ｂと基本的に同様である。ただし、オプションとして、ステップＳ８０７において記憶媒体２４０の断片化解消処理の実行を判定した場合に（ステップＳ８０７のＹＥＳ判定）、ステップＳ１５２１において、バッファデータ移動指示部１１０８により、再配置領域に含まれるバッファデータの記憶媒体２４０への移動を指示する。このように、断片化解消処理の実行時に同じ記憶領域のバッファ解放処理を同期させることで、断片化解消処理やバッファ解放処理によるアクセス遅延およびアクセス回数を削減することによって、記憶媒体のアクセス性能の向上および長寿命化を図ることができる。
【０１１５】
以上の、ステップＳ８０１からＳ８１９、および、ステップＳ１５０１からＳ１５１１、Ｓ１５２１の処理を行い、本実施形態においてホストコンピュータ１０１０で動作するＯＳ２１１またはアプリケーション２１２からWrite要求を受け取り、完了するまでの動作が完了する。
【０１１６】
（格納先決定処理）
図１６は、本実施形態に係る格納先決定処理（Ｓ１５０１）の手順を示すフローチャートである。図１６は、図１５ＡのステップＳ１５０１において、格納先決定部１１０５がWrite要求を記憶媒体２４０とバッファ１０６０とのどちらに格納するか決定する手順である。
【０１１７】
記憶制御部１０２０の格納先決定部１１０５は、断片化状態管理テーブル３０３からアクセス実行部１１０１が要求するWrite先の記憶媒体の物理領域の断片化発生頻度を取得する（ステップＳ１６０１）。格納先決定部１１０５は、取得した断片化発生頻度が閾値βを超えているか否かを判定する（ステップＳ１６０３）。
【０１１８】
断片化発生頻度が閾値βを超えている場合（ステップＳ１６０３のＹＥＳ判定）、格納先決定部１１０５は、バッファ管理テーブル１１０７からバッファ１０６０の空き容量１２１０を取得する（ステップＳ１６０５）。そして、格納先決定部１１０５は、取得した空き容量がWrite処理のデータを記憶する十分な容量であるか否かを判定する（ステップＳ１６０７）。バッファ１０６０の空き容量が十分であれば（ステップＳ１６０７のＹＥＳ判定）、格納先決定部１１０５は、アクセス実行部１１０１に対してバッファ１０６０への格納を指示する（ステップＳ１６０９）。
【０１１９】
断片化発生頻度が閾値βを超えていない場合（ステップＳ１６０３のＮＯ判定）、または、バッファ１０６０の空き容量が十分でない場合（ステップＳ１６０７のＮＯ判定）、格納先決定部１１０５は、アクセス実行部１１０１に対して記憶媒体２４０への格納を指示する（ステップＳ１６１１）。
【０１２０】
以上の、ステップＳ１６０１からＳ１６１１までの処理を行い、本実施形態においてＯＳ２１１またはアプリケーション２１２からWrite要求を受け取り、格納先をバッファ１０６０とするか記憶媒体２４０とするかを判定するまでの動作が完了する。
【０１２１】
（バッファ解放処理）
図１７は、本実施形態に係るバッファ解放処理（Ｓ１３３３）の手順を示すフローチャートである。図１７は、バッファデータ移動指示部１１０８が、バッファ１０６０の空き容量の不足を解消するために、バッファ１０６０に格納されたデータを記憶媒体２４０に移動する手順である。
【０１２２】
記憶制御部１０２０のバッファデータ移動指示部１１０８は、バッファ管理テーブル１１０７を参照して、バッファ１０６０に格納されているデータを列挙する。また、バッファデータ移動指示部１１０８は断片化状態管理テーブル３０３を参照して、バッファ１０６０に格納された各データについて断片化頻度４２４を取得する（ステップＳ１７０１）。そして、バッファデータ移動指示部１１０８は、バッファ１０６０に格納された各データを、ステップＳ１７０１で取得した、断片化頻度４２４の低い順番に整列する（ステップＳ１７０３）。
【０１２３】
バッファデータ移動指示部１１０８は、バッファ管理テーブル１１０７を参照してバッファ１０６０の空き容量１２１０を取得する。そして、バッファデータ移動指示部１１０８は、取得したバッファ１０６０の空き容量の値と、バッファ１０６０から記憶媒体２４０に対してデータの移動処理を行うための条件として、事前に定めた空き容量の基準値を比較する（ステップＳ１７０５）。比較結果を判定し（ステップＳ１７０７）、空き容量が基準値よりも大きい場合（ステップＳ１７０７のＹＥＳ判定）、バッファデータ移動指示部１１０８は、バッファ１０６０の格納データの移動指示を行う処理を終了する。
【０１２４】
空き容量が基準値以下の場合（ステップＳ１７０７のＮＯ判定）、バッファデータ移動指示部１１０８は断片化頻度４２４の最も低いデータを、バッファ１０６０から記憶媒体２４０に移動するデータとして選択する。そして、バッファデータ移動指示部１１０８は、バッファ管理テーブル１１０７から選択したデータに対する記憶媒体アドレス１２２２を参照し、アクセス実行部１１０１に対して選択したデータを記憶媒体２４０に書き込むように指示する（ステップＳ１７０９）。
【０１２５】
なお、記憶媒体２４０に書き込むように指示を受けたアクセス実行部１１０１は、指示に対して図１５ＡのステップＳ８０１以降の、ホストコンピュータ１０１０で動作するＯＳ２１１またはアプリケーション２１２から受け取ったWrite要求のデータと同様の手順で処理を行う。したがって、バッファ１０６０から記憶媒体２４０へのデータ移動におけるWrite処理時にも、断片化状態の推定および解消の処理が実行される。
【０１２６】
バッファデータ移動指示部１１０８は、ステップＳ１７０９において記憶媒体２４０に対する書き込みが完了したデータに対応する、バッファ管理テーブル１１０７の有効フラグ１２２３を無効状態に切り替える。また、バッファ１０６０全体の空き容量１２１０に、記憶媒体２４０に対する書き込みが完了したデータのサイズを加算する。さらに、バッファ１０６０がNANDフラッシュのように直接的なデータの上書きが困難なデバイスで構成される場合、データを格納するバッファ１０６０の記憶領域に対してデータ削除処理を行う（ステップＳ１７１１）。バッファデータ移動指示部１１０８は、ステップＳ１７０３で整列したバッファ１０６０に格納された各データの列から、先頭の断片化頻度４２４が最も低いデータを削除してステップＳ１７０３から処理を再開する（ステップＳ１７１３）。
【０１２７】
以上のステップＳ１７０１からＳ１７１３までの処理を行い、バッファデータ移動指示部１１０８が、バッファ１０６０の空き容量の不足を解消するためにバッファ１０６０に格納されたデータを記憶媒体２４０に移動する動作が完了する。
【０１２８】
本実施形態によれば、断片化発生頻度の高い領域に対するWriteデータをバッファとして用意した記憶領域に格納して、あらかじめ断片化の発生頻度が高いと推定された領域への格納を回避することにより、さらに記憶媒体のアクセス性能の向上および長寿命化を図ることができる。
【０１２９】
［第４実施形態］
次に、本発明の第４実施形態に係る記憶制御装置としての記憶制御部について説明する。本実施形態に係る記憶制御部は、上記第２実施形態および第３実施形態と比べると、ファイルなどの連続格納に対応して断片化状態を推定して再配置する点で異なる。その他の構成および動作は、第２実施形態や第３実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
【０１３０】
《情報処理システム》
本実施形態に係る記憶制御装置としての記憶制御部を含む情報処理システムは、図２と同様であるので、重複する説明は避ける。なお、本実施形態を第３実施形態に適用して、図１０のようなバッファを有する情報処理システムとしてもよい。
【０１３１】
《記憶制御装置の機能構成》
図１８は、本実施形態に係る記憶制御装置としての記憶制御部１８２０の機能構成を示すブロック図である。
【０１３２】
図１８を参照すると、記憶制御部１８２０は、アクセス実行部１８０１と、断片化状態推定部１８０２と、断片化状態管理テーブル１８０３と、断片化解消制御部１８０４と、格納開始終了検出部１８０５と、を備える。なお、アクセス実行部１８０１と、断片化状態推定部１８０２と、断片化解消制御部１８０４とは、図３のアクセス実行部３０１と、断片化状態推定部３０２と、断片化解消制御部３０４とに対応し、その動作は、ＯＳ２１１またはアプリケーション２１２から受け取った、連続した一連のデータのWrite要求に対応するものである。
【０１３３】
アクセス実行部１８０１は、ＯＳ２１１またはアプリケーション２１２からのアクセス要求を受け取り、記憶媒体２４０に対して必要なアクセス処理を行う。また、アクセス実行部１８０１は、断片化解消制御部１８０４によって指示された記憶媒体２４０上の領域に対してデータの読み出し、および、他の書き込みを制限した再格納処理を行う。記憶媒体２４０の領域に対するデータの読み出しは、記憶媒体２４０に対して直接要求を行う以外に、不図示の記憶媒体２４０に対するキャッシュ２４２に対して要求を行うことでも代用できる。
【０１３４】
断片化状態推定部１８０２は、アクセス実行部１８０１がＯＳ２１１またはアプリケーション２１２から受け取ったWrite要求の連続した一連のデータについて、断片化状態を推定するための情報を記録する。まず、断片化状態推定部１８０２は、アクセス実行部１８０１からWrite要求のアクセス先アドレス、Writeデータのサイズの情報を受け取り、断片化状態管理テーブル１８０３に格納された各連続データに関する格納開始時期、サイズ、および総Write量の情報の更新、削除を行う。また、断片化状態推定部１８０２は、断片化状態管理テーブル１８０３に格納された各連続データに関するサイズおよび総Write量の情報から、各連続データが記憶媒体２４０内部での格納状態を推定する。具体的には、各連続データと記憶媒体２４０に対する全Writeデータの格納状況を比較して、例えば、Writeデータ量、並列に格納される連続データの数などから、各連続データが格納されている記憶媒体２４０の記憶領域における、他のデータとの混在状況を調べることで断片化状態を推定する。例えば、記憶媒体２４０がNANDフラッシュを記憶素子として用いるＳＳＤである場合、NANDフラッシュの各ブロックにおける各連続データが容量、もしくは並列に格納される連続データ数に占める比率などから断片化状態を推定する。
【０１３５】
断片化状態管理テーブル１８０３は、断片化状態推定部１８０２によって更新される、記憶媒体２４０に対する連続した一連のデータに関する、格納開始時期、サイズを各データの断片化状態を表す情報として記憶する。
【０１３６】
断片化解消制御部１８０４は、格納開始終了検出部１８０５から連続データの格納終了の通知を受けて、断片化状態管理テーブル１８０３に格納された情報から断片化状態推定部１８０２が推定した、連続データの断片化状況に関する情報を取得する。次に、断片化解消制御部１８０４は、断片化状況に関する情報から連続データの記憶媒体２４０における断片化を解消すべきか判断し、解消が必要と判断された場合にはアクセス実行部１８０１に対して、連続データを記憶媒体２４０から読み出す。そして、記憶媒体２４０に対して、他の書き込みを制限して途中に他のWriteを挟まないように再度Writeすることを指示する。例えば、連続データがファイルである場合は、現在格納中のファイルと同一の識別子でアクセスが可能となる形で連続データを先頭から再格納する。また、連続データが先頭アドレスと、連続して格納されたWriteデータ量によって表される場合は、一連の連続データを先頭アドレスから同一アドレスに対して再格納する。
【０１３７】
格納開始終了検出部１８０５は、アクセス実行部１８０１における記憶媒体２４０に対するWrite要求から、連続データの格納開始、および終了を検出する。まず、格納開始終了検出部１８０５は、連続データの格納開始を検出すると、断片化状態管理テーブル１８０３に対して連続データに対応するエントリを追加する。また、格納開始終了検出部１８０５は、連続データの格納終了を検出すると、断片化解消制御部１８０４に対して連続データの格納終了を通知する。また、格納開始終了検出部１８０５は、連続データの格納開始、終了をアクセス実行部１８０１における記憶媒体２４０に対するWrite要求を監視する以外に、アクセス実行部１８０１が受け取ったＯＳ２１１またはアプリケーション２１２などからのWrite要求、もしくはＯＳ２１１またはアプリケーション２１２などから明示的に連続データのWrite開始、終了の通知を検出することで、連続データの格納開始、終了を判定してもよい。さらに、格納開始終了検出部１８０５は、記憶媒体２４０に対する連続データのWrite要求が一定期間、あるいは一定量のWriteアクセスの間に行われないことをもって、連続データの格納終了を判定してもよい。
【０１３８】
（断片化状態管理テーブル）
図１９は、本実施形態に係る断片化状態管理テーブル１８０３の構成を示す図である。断片化状態管理テーブル１８０３は、断片化状態推定部１８０２が記憶媒体２４０の内部で断片化が発生するか否かを推定するために参照する。なお、図１９において、図４と同様の構成要素には同じ参照番号を付す。
【０１３９】
断片化状態管理テーブル１８０３は、記憶媒体２４０全体の情報として、現在の記憶媒体２４０に対する総Write量４１０を格納する。また、断片化状態管理テーブル１８０３は、連続した一連のデータの集合であるファイルごとにエントリを持つ。各エントリは、ファイルＩＤ１９２１と、ファイルサイズ１９２２と、開始時総Write量１９２３と、を格納する。ファイルＩＤ１９２１は、エントリに対応するファイルを一意に特定する識別子である。ファイルサイズ１９２２は、各ファイルが現時点までに先頭から連続的に格納された総容量を表す。開始時総Write量１９２３は、各エントリに対応するファイルの格納を開始した時期を記憶媒体２４０の総Writeデータ量を表す。
【０１４０】
なお、断片化状態管理テーブル１８０３に格納されるデータの形式は、図１９に示した形式に限定されず、例えば各エントリにおけるファイルサイズ１９２２、開始時総Write量１９２３、および、総Write量４１０は、図１９ではKB(キロバイト)単位で表されているが、異なる単位を用いてもよい。また、図１９では各エントリに対応するファイルの格納開始時期を開始時総Write量１９２３で表しているが、例えば、時刻情報を用いることも可能である。さらに、図１９では断片化状態管理テーブル１８０３の各エントリに対応する連続した一連のデータをファイル単位で表しているが、例えば、ホストコンピュータが記憶媒体２４０に対してデータをオブジェクト単位で格納するオブジェクトストレージとして動作する場合は、連続した一連のデータをオブジェクト単位で表してもよい。また、Writeを開始した先頭のアドレスと連続的にWriteを行ったサイズを連続した一連のデータに関する断片化状況を表す情報として各エントリに記録することも可能である。
【０１４１】
《記憶制御部の処理手順》
図２０は、本実施形態に係る記憶制御部１８２０の処理手順を示すフローチャートである。このフローチャートは、図５のＣＰＵ５１０がＲＡＭ５４０を使用して実行し、図１８の機能構成部を実現する。なお、図２０において、図６と同様のステップには同じステップ番号を付して、説明を省略する。
【０１４２】
記憶制御部１８２０は、ＯＳ２１１またはアプリケーション２１２からのWrite処理と判定すれば、ステップＳ２０２３において、Write処理を実行する。記憶制御部１８２０は、ステップＳ２０３１において、連続データの格納終了を、断片化を判定するタイミングと判断して、ステップＳ２０３３において、断片化解消処理を実行する。
【０１４３】
（Ｗｒｉｔｅ処理）
図２１は、本実施形態に係るＷｒｉｔｅ処理（Ｓ２０２３）の手順を示すフローチャートである。図２１は、ホストコンピュータで動作するＯＳ２１１またはアプリケーション２１２からWrite要求を受け取り、記憶媒体２４０に対してWrite要求されたデータを格納しつつ、格納された連続データの断片化状態を推定するための情報を記録する手順である。
【０１４４】
記憶制御部１８２０のアクセス実行部１８０１は、ホストコンピュータで動作するＯＳ２１１またはアプリケーション２１２からのWrite要求を受け取ると、記憶媒体２４０の要求先アドレス（ＬＢＡ）に対してWrite要求を実行する（ステップＳ２１０１）。
【０１４５】
格納開始終了検出部１８０５は、アクセス実行部１８０１がステップＳ２１０１で受け取ったWrite要求を検出すると、断片化状態管理テーブル１８０３を参照して、Write要求が断片化状態管理テーブル１８０３において記録された連続データに対応するエントリが存在するか否か、各エントリのファイルＩＤ１９２１を用いて判定する（ステップＳ２１０３）。連続データに対応するエントリが存在するか否かの判定結果により（ステップＳ２１０５）、対応するエントリが存在しない場合（ステップＳ２１０５のＹＥＳ判定）、ステップＳ２１１５以降の処理を実行する。
【０１４６】
対応するエントリが存在した場合（ステップＳ２１０５のＮＯ判定）、格納開始終了検出部１８０５は、断片化状態管理テーブル１８０３を参照して、Write要求が断片化状態管理テーブル１８０３において記録された連続データに対する後続データであるか否かを、各エントリのファイルＩＤ１９２１およびファイルサイズ１９２２を用いて判定する（ステップＳ２１０７）。連続データに対する後続データであるか否かの判定結果から（ステップＳ２１０９）、Write要求が断片化状態管理テーブル１８０３のエントリで管理された連続データに対する後続のWriteである場合（ステップＳ２１０９のＮＯ判定）、ステップＳ２１１１以降の処理を続ける。断片化状態推定部１８０２は、断片化状態管理テーブル１８０３におけるステップＳ２１０１で受け取ったWrite要求に対応するエントリについて、ファイルサイズ１９２２の値にWrite要求のサイズを加算する（ステップＳ２１１１）。
【０１４７】
Write要求が断片化状態管理テーブル１８０３のエントリで管理された連続データに対する後続のWriteではなく、例えば先頭から再書き込みを行うようなWriteであった場合（ステップＳ２１０９のＹＥＳ判定）、格納開始終了検出部１８０５は、断片化状態管理テーブル１８０３における、ステップＳ２１０１で受け取ったWrite要求に対応するエントリを削除する（ステップＳ２１１３）。
【０１４８】
格納開始終了検出部１８０５は、断片化状態管理テーブル１８０３に対して新規エントリを作成した後に、ファイルＩＤ１９２１を登録し、ファイルサイズ１９２２をステップＳ２１０１において受け取ったWrite要求のデータサイズに設定する。また、格納開始終了検出部１８０５は、作成した新規エントリの開始時総Write量１９２３を、総Write量４１０と等しい値に設定して、ステップＳ２１１７以降の処理を続行する（ステップＳ２１１５）。
【０１４９】
断片化状態推定部１８０２は、断片化状態管理テーブル１８０３における記憶媒体２４０に対応する総Write量４１０について、ステップＳ２１０１で受け取ったWrite要求のサイズを加算する（ステップＳ２１１７）。アクセス実行部１８０１は、Write要求の完了をアクセス元のＯＳ２１１またはアプリケーション２１２に通知して（ステップＳ２１１９）、処理を終了する。
【０１５０】
以上のステップＳ２１０１からＳ２１１９までの処理を行い、本実施形態においてホストコンピュータで動作するＯＳ２１１またはアプリケーション２１２からWrite要求を受け取り、記憶媒体２４０に対してWrite要求されたデータを格納しつつ、格納された連続データの断片化状態を推定するための情報を記録する動作が完了する。ステップＳ２１１９におけるWrite要求の完了通知は、ステップＳ２１０１において記憶媒体２４０に対して実行したWrite要求が完了した時点で、ステップＳ２１０３からＳ２１１７までの処理と同時、あるいは、先に行ってもよい。
【０１５１】
（断片化解消処理）
図２２は、本実施形態に係る断片化解消処理（Ｓ２０３３）の手順を示すフローチャートである。図２２は、本実施形態において格納開始終了検出部１８０５が連続データの格納の完了を検出して、記憶媒体２４０における連続データの断片化状況の推定結果に応じて、連続データの再格納処理を実行する処理の手順である。
【０１５２】
記憶制御部１８２０の格納開始終了検出部１８０５は、アクセス実行部１８０１のWrite処理の実行状況から連続データの格納終了を検出して断片化解消制御部１８０４に通知する（ステップＳ２２０１）。例えば、連続データの末尾を表すWrite要求、もしくは、要求元のＯＳ２１１またはアプリケーション２１２などから連続データの格納終了の指示を受け取ることで、連続データのWrite終了を検出できる。また、格納開始終了検出部１８０５は、断片化状態管理テーブル１８０３において各連続データに対応するエントリに対して、不図示の最終アクセス時刻、もしくは、前回Write時の総Write量の値を項目として追加することで、現在の時刻、もしくは、断片化状態管理テーブル１８０３に格納された総Write量４１０と比較して、長期間Writeが行われていない連続データについて、格納の終了を検出してもよい。
【０１５３】
断片化解消制御部１８０４は、格納終了が通知された連続データについて、断片化状態推定部１８０２に対して断片化度合の推定を要求する（ステップＳ２２０３）。断片化状態推定部１８０２は、断片化状態管理テーブル１８０３を参照して、要求された連続データに対応するエントリからファイルサイズ１９２２および開始時総Write量１９２３を取得する。また、記憶媒体２４０に対応する総Write量４１０を取得する（ステップＳ２２０５）。断片化状態推定部１８０２は、ステップＳ２２０５で取得したファイルサイズ１９２２、開始時総Write量１９２３、および、総Write量４１０から連続データの記憶媒体２４０における断片化度合を推定して、断片化解消制御部１８０４に返す。また、断片化状態推定部１８０２は、断片化状態管理テーブル１８０３から連続データに対応するエントリを削除する（ステップＳ２２０７）。
【０１５４】
断片化解消制御部１８０４は、ステップＳ２２０７において断片化状態推定部１８０２から返された、断片化度合の値をもとに連続データの再格納を行うべきか否かを判定する（ステップＳ２２０９）。判定は、例えば、断片化度合の値と基準値の大小を比較することで実現可能である。また他の例として、断片化度合の値を用いて連続データの再格納を行った場合の記憶媒体２４０に対するWrite量と、再格納を行わなかった場合に連続データの断片化が原因で発生する、記憶媒体２４０内部のデータ移動に伴うWrite量の期待値を比較して、記憶媒体２４０に対して内部処理を含めて発生するWrite量が少なくなるように、再格納を行うべきか判定してもよい。連続データの再格納を行うべきか否かの判定結果により（ステップＳ２２１１）、ステップＳ２２０９において連続データの再格納を行うべきではないと判定した場合（ステップＳ２２１１のＹＥＳ判定）、断片化解消制御部１８０４は連続データの再格納を行わずに処理を終了する。
【０１５５】
ステップＳ２２０９において連続データの再格納を行うべきと判定した場合（ステップＳ２２１１のＮＯ判定）、断片化解消制御部１８０４は、アクセス実行部１８０１に対して、記憶媒体２４０に連続データのRead、および、先頭からの再格納を行うように指示する（ステップＳ２２１３）。アクセス実行部１８０１は、断片化解消制御部１８０４から指示された連続データのRead、および、先頭からの再格納を行うWriteを記憶媒体２４０において実行する（ステップＳ２２１５）。記憶媒体２４０に対して連続データの再格納を行うWriteは、再格納途中に他のデータが格納されることによる断片化が発生しないように、他の書き込みを制限する、あるいは、他のWrite要求に比べて優先的に行う。連続データの再格納が完了すると、処理を終了する。
【０１５６】
（断片化度合の値）
なお、ステップＳ２２０７において推定する、格納が終了した連続データの断片化度合の値は、例えば、連続データの記憶媒体２４０の記憶領域における分布が利用できる。
【０１５７】
連続データのサイズを表すファイルサイズ１９２２を“Ｓ”、開始時総Write量１９２３を“Ｗ0”、総Write量４１０を“Ｗ”とすると、連続データの記憶領域における分布状況を分布比率として、（分布比率）＝Ｓ／（Ｗ−Ｗ0）として求められる。（Ｗ−Ｗ0）は、記憶媒体２４０が連続データの格納を開始してから完了するまでの総Writeデータ量を表す。
【０１５８】
記憶媒体２４０がNANDフラッシュを記憶素子として用いるＳＳＤである場合、Writeデータが追記形式で格納されるため、NANDフラッシュのブロックに対して並列にWrite要求を行われたデータが混在した状態で格納される。つまり、連続データは格納されている各ブロックにおいて平均で分布比率の分だけ容量を占有している。よって、分布比率が小さくなるにつれて、連続データが格納されるブロック数が多くなるため、断片化が進んでいることが分かる。あるいは、ステップＳ２２０５において、断片化状態管理テーブル１８０３に記録された各連続データに対応するエントリを調べることで、連続データの平均同時格納数を取得し、断片化度合の値としてもよい。
【０１５９】
以上のステップＳ２２０１からＳ２２１５までの処理を行い、本実施形態において格納開始終了検出部１８０５が連続データの格納の完了を検出して、記憶媒体２４０における連続データの断片化状況の推定結果に応じて、連続データの再格納処理を実行する動作が完了する。
【０１６０】
なお、ステップＳ２２０９において、断片化解消制御部１８０４が再格納を行うべきか判定を行っているが、断片化状態推定部１８０２がステップＳ２２０７において推定した連続データの断片化度合から直接再格納を行うべきか判定してもよい。また、ステップＳ２２０３において、断片化解消制御部１８０４が格納開始終了検出部１８０５から連続データの格納終了の検出を受けて、断片化状態推定部１８０２に対して連続データの断片化度合の推定を要求している。しかし、格納開始終了検出部１８０５が断片化状態推定部１８０２に対して直接要求を行い、断片化度合の推定結果を断片化解消制御部１８０４に通知する手順であってもよい。
【０１６１】
本実施形態によれば、連続データのWriteアクセスにおいて断片化の発生頻度が高い領域を推定して、あらかじめ断片化の発生頻度が高いと推定された領域を再配置して断片化を解消することにより、記憶媒体のアクセス性能の向上および長寿命化を図ることができる。
【０１６２】
［第５実施形態］
次に、本発明の第５実施形態に係る記憶制御装置を記憶制御部としてホストコンピュータ内に含む情報処理システムについて説明する。本実施形態に係る情報処理システムは、上記第２実施形態乃至第４実施形態と比べると、記憶制御部が記憶媒体側にある点、あるいは、ネットワークを介してホストコンピュータの外部にある点で異なる。その他の構成および動作は、第２実施形態から第４実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
【０１６３】
《情報処理システムの構成》
図２３は、本実施形態に係る記憶制御部２３４３または２３２０を含む情報処理システム２３００の構成を示す図である。なお、図２３において、図２と同様の構成要素には同じ参照番号を付して、説明を省略する。
【０１６４】
図２３においては、ホストコンピュータ２３１０は本実施形態の記憶制御部を有しない。一例として、本実施形態の記憶制御部２３４３は、記憶媒体２３４０に搭載されている。また、他の例として、本実施形態の記憶制御部２３２０は、ネットワーク２５０を介して独立した装置として接続されている。かかる記憶制御部２３４３または２３２０は、ソフトウェアで実現されても、ワンチップのプロセッサで実現されてもよい。
【０１６５】
本実施形態によれば、第２乃至第４実施形態のようにホストコンピュータによる処理に限定されず、記憶媒体への書き込みにおける領域の断片化状態を推定して、断片化状態を再配置により解消することで、記憶媒体のアクセス性能の向上、長寿命化を図ることができる。
【０１６６】
［他の実施形態］
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。また、それぞれの実施形態に含まれる別々の特徴を如何様に組み合わせたシステムまたは装置も、本発明の範疇に含まれる。
【０１６７】
また、本発明は、複数の機器から構成されるシステムに適用されてもよいし、単体の装置に適用されてもよい。さらに、本発明は、実施形態の機能を実現する制御プログラムが、システムあるいは装置に直接あるいは遠隔から供給される場合にも適用可能である。したがって、本発明の機能をコンピュータで実現するために、コンピュータにインストールされるプログラム、あるいはそのプログラムを格納した媒体、そのプログラムをダウンロードさせるＷＷＷ(World Wide Web)サーバも、本発明の範疇に含まれる。特に、少なくとも、上述した実施形態に含まれる処理ステップをコンピュータに実行させるプログラムを格納した非一時的コンピュータ可読媒体（non-transitory computer readable medium）は本発明の範疇に含まれる。
【０１６８】
この出願は、２０１５年４月２８日に出願された日本国特許出願  特願２０１５−０９１７５２号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2016175028.tif 000003
【図２】
2016175028.tif 000004
【図３】
2016175028.tif 000005
【図４】
2016175028.tif 000006
【図５】
2016175028.tif 000007
【図６】
2016175028.tif 000008
【図７】
2016175028.tif 000009
【図８Ａ】
2016175028.tif 000010
【図８Ｂ】
2016175028.tif 000011
【図９Ａ】
2016175028.tif 000012
【図９Ｂ】
2016175028.tif 000013
【図１０】
2016175028.tif 000014
【図１１】
2016175028.tif 000015
【図１２】
2016175028.tif 000016
【図１３】
2016175028.tif 000017
【図１４】
2016175028.tif 000018
【図１５Ａ】
2016175028.tif 000019
【図１５Ｂ】
2016175028.tif 000020
【図１６】
2016175028.tif 000021
【図１７】
2016175028.tif 000022
【図１８】
2016175028.tif 000023
【図１９】
2016175028.tif 000024
【図２０】
2016175028.tif 000025
【図２１】
2016175028.tif 000026
【図２２】
2016175028.tif 000027
【図２３】
2016175028.tif 000028
【手続補正書】
【提出日】平成29年10月10日(2017.10.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を備え、
前記判定手段は、
前記複数の物理アドレス領域の数を断片数として推定し、
前記記憶媒体に対する連続する２回のWriteアクセス間におけるWrite量の差分が第２閾値以上である場合に、前記断片数として推定される値をカウントアップし、
前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する記憶制御装置。
【請求項２】
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を備え、
前記判定手段は、一つのファイルを連続データとして書き込むWriteアクセスが終了した際に、前記ファイルのサイズと、前記Writeアクセスの開始時の前記記憶媒体に対する総Write量と、前記Writeアクセスの終了時の前記記憶媒体に対する総Write量と、に基づいて、前記連続データの前記記憶媒体における断片化度合を推定して、前記断片化度合が第３閾値より小さくなった場合に、断片化していると推定する、請求項１に記載の記憶制御装置。
【請求項３】
前記連続データのWriteアクセスをファイルまたはオブジェクト単位で管理する、請求項２に記載の記憶制御装置。
【請求項４】
前記断片化度合は、前記ファイルのサイズを“Ｓ”、前記開始時の総Write量を“Ｗ0”、前記終了時の総Write量を“Ｗ”とすると、Ｓ／（Ｗ−Ｗ0）で表される、請求項２または３に記載の記憶制御装置。
【請求項５】
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を備え、
前記判定手段は、前記複数の物理アドレス領域の数を断片数として推定し、前記断片数が第１閾値以上となった場合に、断片化を推定できると判定し、
前記データ再配置手段は、断片化されていると推定されたデータ全体を読み出して再度Writeアクセスすることにより、データの再配置を行なう記憶制御装置。
【請求項６】
前記データ再配置手段は、断片化されていると推定されたデータ全体を読み出して再度Writeアクセスすることにより、データの再配置を行なう、請求項１または２に記載の記憶制御装置。
【請求項７】
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
断片化が推定されるWriteデータをバッファ領域に対して書き込むように制御する格納先決定手段と、
を備え、
前記判定手段は、前記複数の物理アドレス領域の数を断片数として推定し、前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する記憶制御装置。
【請求項８】
断片化が推定されるWriteデータをバッファ領域に対して書き込むように制御する格納先決定手段を、さらに備える請求項１または２に記載の記憶制御装置。
【請求項９】
前記格納先決定手段は、前記バッファ領域の空き容量が第４閾値より小さい場合に、格納先を前記記憶媒体に決定する、請求項７または８に記載の記憶制御装置。
【請求項１０】
前記バッファ領域の空き容量が第４閾値より小さくなったことを検出した場合に、前記バッファ領域に格納されたデータを前記記憶媒体に移動するデータ移動手段を、さらに備える請求項７乃至９のいずれか１項に記載の記憶制御装置。
【請求項１１】
前記データ再配置手段による前記記憶媒体における記憶領域の再配置と、前記データ移動手段による前記バッファ領域に格納されたデータの前記記憶媒体への移動と、を関連して実行させる、請求項１０に記載の記憶制御装置。
【請求項１２】
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定ステップと、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置ステップと、
を含み、
前記判定ステップにおいては、
前記複数の物理アドレス領域の数を断片数として推定し、
前記記憶媒体に対する連続する２回のWriteアクセス間におけるWrite量の差分が第２閾値以上である場合に、前記断片数として推定される値をカウントアップし、
前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する記憶制御方法。
【請求項１３】
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定ステップと、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置ステップと、
をコンピュータに実行させる記憶制御プログラムであって、
前記判定ステップにおいては、
前記複数の物理アドレス領域の数を断片数として推定し、
前記記憶媒体に対する連続する２回のWriteアクセス間におけるWrite量の差分が第２閾値以上である場合に、前記断片数として推定される値をカウントアップし、
前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する記憶制御プログラム。
【請求項１４】
記憶媒体と、
論理アドレス空間の論理アドレス領域を指定して、前記記憶媒体へのアクセスを行うアクセス手段と、
前記アクセス手段において指定された論理アドレス領域に基づいて、前記記憶媒体からのデータの読み出しおよび前記記憶媒体へのデータの書き込みを行う記憶制御手段と、
を備えた情報処理システムであって、
前記記憶制御手段は、
前記アクセス手段が前記記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を含み、
前記判定手段は、
前記複数の物理アドレス領域の数を断片数として推定し、
前記記憶媒体に対する連続する２回のWriteアクセス間におけるWrite量の差分が第２閾値以上である場合に、前記断片数として推定される値をカウントアップし、
前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する情報処理システム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
上記目的を達成するため、本発明に係る記憶制御装置は、
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を備え、
前記判定手段は、
前記複数の物理アドレス領域の数を断片数として推定し、
前記記憶媒体に対する連続する２回のWriteアクセス間におけるWrite量の差分が第２閾値以上である場合に、前記断片数として推定される値をカウントアップし、
前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する。
また、ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を備え、
前記判定手段は、前記複数の物理アドレス領域の数を断片数として推定し、前記断片数が第１閾値以上となった場合に、断片化を推定できると判定し、
前記データ再配置手段は、断片化されていると推定されたデータ全体を読み出して再度Writeアクセスすることにより、データの再配置を行なう。
また、ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
断片化が推定されるWriteデータをバッファ領域に対して書き込むように制御する格納先決定手段と、
を備え、
前記判定手段は、前記複数の物理アドレス領域の数を断片数として推定し、前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
上記目的を達成するため、本発明に係る記憶制御方法は、
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定ステップと、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置ステップと、
を含み、
前記判定ステップにおいては、
前記複数の物理アドレス領域の数を断片数として推定し、
前記記憶媒体に対する連続する２回のWriteアクセス間におけるWrite量の差分が第２閾値以上である場合に、前記断片数として推定される値をカウントアップし、
前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
上記目的を達成するため、本発明に係る記憶制御プログラムは、
ホストコンピュータが記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定ステップと、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置ステップと、
をコンピュータに実行させる記憶制御プログラムであって、
前記判定ステップにおいては、
前記複数の物理アドレス領域の数を断片数として推定し、
前記記憶媒体に対する連続する２回のWriteアクセス間におけるWrite量の差分が第２閾値以上である場合に、前記断片数として推定される値をカウントアップし、
前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】変更
【補正の内容】
【００１３】
上記目的を達成するため、本発明に係る情報処理システムは、
記憶媒体と、
論理アドレス空間の論理アドレス領域を指定して、前記記憶媒体へのアクセスを行うアクセス手段と、
前記アクセス手段において指定された論理アドレス領域に基づいて、前記記憶媒体からのデータの読み出しおよび前記記憶媒体へのデータの書き込みを行う記憶制御手段と、
を備えた情報処理システムであって、
前記記憶制御手段は、
前記アクセス手段が前記記憶媒体にアクセスする際に用いる論理アドレス空間における論理アドレス領域に対応するデータが、前記記憶媒体の内部で使用される物理アドレス空間において、複数の物理アドレス領域に断片化されて記憶されていると推定できるか否かを判定する判定手段と、
前記物理アドレス空間において断片化されて記憶されていると推定できると判定したデータに対応する論理アドレス領域を指定して、前記データを読み出し、前記データが前記記憶媒体の内部の連続した物理アドレス領域に書き込まれるように、他の書き込みを制限しつつ、前記論理アドレス領域への書き込みを前記記憶媒体に指示するデータ再配置手段と、
を含み、
前記判定手段は、
前記複数の物理アドレス領域の数を断片数として推定し、
前記記憶媒体に対する連続する２回のWriteアクセス間におけるWrite量の差分が第２閾値以上である場合に、前記断片数として推定される値をカウントアップし、
前記断片数が第１閾値以上となった場合に、断片化を推定できると判定する。
【国際調査報告】
2016175028.tif 000029
2016175028.tif 000030
2016175028.tif 000031
2016175028.tif 000032