(57)【要約】  本発明の装置は、記憶媒体に対する格納処理全体を通したWriteデータ量を小さくする記憶制御装置である。記憶制御装置は、ホストコンピュータによる仮想媒体へのデータ書込指示を受信する受信部と、データ書込指示に応じて、仮想媒体のアドレス空間と、仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択部と、書込アドレス選択部による選択に応じて、仮想媒体への書込アドレスまたは仮想キャッシュへの書込アドレスを記憶媒体に対する書込アドレスに変換して、記憶媒体に対してデータを書き込むよう指示する書込指示部と、を備える。
2016002325.tif 000002
【特許請求の範囲】
【請求項１】
ホストコンピュータによる仮想媒体へのデータ書込指示を受信する受信手段と、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択手段と、
前記書込アドレス選択手段による選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを記憶媒体に対する書込アドレスに変換して、前記記憶媒体に対してデータを書き込むよう指示する書込指示手段と、
を備える記憶制御装置。
【請求項２】
前記受信手段は、前記仮想媒体からのデータ読出指示を受信し、
前記データ読出指示に応じて、前記仮想媒体のアドレス空間と、前記仮想キャッシュのアドレス空間とのいずれからデータを読み込むかを、キャッシュヒットしたか否かに基づいて選択する読出アドレス選択手段と、
前記読出アドレス選択手段による選択に応じて、前記仮想媒体への読出アドレスまたは前記仮想キャッシュへの読出アドレスを前記記憶媒体に対する読出アドレスに変換して、前記記憶媒体に対してデータを読み出すよう指示する読出指示手段と、
をさらに備える請求項１に記載の記憶制御装置。
【請求項３】
前記仮想媒体におけるデータ格納の最小単位と前記仮想キャッシュにおけるデータ格納の最小単位とが異なる請求項１または２に記載の記憶制御装置。
【請求項４】
前記記憶媒体はＮＡＮＤフラッシュメモリであって、
前記仮想媒体におけるデータ格納の最小単位は前記記憶媒体のブロックであり、前記仮想キャッシュにおけるデータ格納の最小単位は前記記憶媒体のページである請求項３に記載の記憶制御装置。
【請求項５】
前記記憶媒体はＮＡＮＤフラッシュメモリであって、
前記書込データ量の総量は、前記ＮＡＮＤフラッシュメモリのイレース回数に関連する請求項１乃至４のいずれか１項に記載の記憶制御装置。
【請求項６】
前記受信手段は、前記ホストコンピュータから前記データ書込指示と共に後続のデータ書込指示の書込データ量の予測値を受信する請求項１乃至５のいずれか１項に記載の記憶制御装置。
【請求項７】
前記受信手段は、前記データ書込指示と共に後続のデータ書込指示におけるデータ更新頻度の予測値を受信し、
前記書込アドレス選択手段は、前記データ更新頻度から将来的に発生する書込データ量の期待値を算出して、該期待値に基づき前記仮想媒体のアドレス空間と前記仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを選択する請求項１乃至６のいずれか１項に記載の記憶制御装置。
【請求項８】
前記仮想キャッシュに記憶された有効なデータ量に基づいて、前記仮想キャッシュへの負荷を算出する算出手段を備え、
前記書込アドレス選択手段は、前記負荷が閾値を上回った場合に前記仮想キャッシュが高負荷であると判定して、前記仮想媒体のアドレス空間にデータを書き込むよう選択する、請求項１乃至７のいずれか１項に記載の記憶制御装置。
【請求項９】
前記仮想キャッシュに記憶された有効なデータ量に基づいて、前記仮想キャッシュへの負荷を算出する算出手段を備え、
前記負荷を前記ホストコンピュータに通知する通知手段と、
を備える請求項１乃至８のいずれか１項に記載の記憶制御装置。
【請求項１０】
前記算出手段は、前記負荷を、前記仮想キャッシュに割り当てられた記憶容量に対する、前記仮想キャッシュに記憶された有効なデータ量の比率に基づき算出する請求項８または９に記載の記憶制御装置。
【請求項１１】
ホストコンピュータによる仮想媒体へのデータ書込指示を受信する受信ステップと、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択ステップと、
前記書込アドレス選択ステップにおける選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを記憶媒体に対する書込アドレスに変換して、前記記憶媒体に対してデータを書き込むよう指示する書込指示ステップと、
を含む記憶制御装置の制御方法。
【請求項１２】
ホストコンピュータによる仮想媒体へのデータ書込指示を受信する受信ステップと、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択ステップと、
前記書込アドレス選択ステップにおける選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを記憶媒体に対する書込アドレスに変換して、前記記憶媒体に対してデータを書き込むよう指示する書込指示ステップと、
をコンピュータに実行させる記憶制御装置の制御プログラム。
【請求項１３】
ホストコンピュータと、
記憶媒体と、
前記ホストコンピュータによる前記記憶媒体へのアクセスを制御する記憶制御装置と、
を備え、
前記記憶制御装置が、
前記ホストコンピュータによる仮想媒体へのデータ書込指示を受信する受信手段と、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択手段と、
前記書込アドレス選択手段による選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを前記記憶媒体に対する書込アドレスに変換して、前記記憶媒体に対してデータを書き込むよう指示する書込指示手段と、
を備える情報処理システム。
【請求項１４】
前記記憶制御装置が、
前記仮想キャッシュに割り当てられた記憶容量に対する、前記仮想キャッシュに記憶された有効なデータ量の比率を算出する算出手段と、
前記比率を前記ホストコンピュータに通知する通知手段と、
を備え、
前記ホストコンピュータが、前記比率に基づいて前記仮想媒体に対するデータ書込指示の発行頻度を抑制する請求項１３に記載の情報処理システム。
【請求項１５】
前記記憶媒体は、記憶素子としてＮＡＮＤフラッシュを使用し、前記記憶媒体の外部に対してNANDフラッシュを動的にマッピングする機能、および、記憶領域の間の更新回数を均一化する機能を持つＳＳＤ（Solid State Drive）である請求項１３または１４に記載の情報処理システム。
【請求項１６】
前記記憶制御装置と前記記憶媒体とがネットワークを介して接続される請求項１３乃至１５のいずれか１項に記載の情報処理システム。
【請求項１７】
複数の前記記憶媒体を備え、
前記記憶制御装置は、前記複数の記憶媒体に対して共有の仮想キャッシュのアドレス空間を生成する請求項１３乃至１６のいずれか１項に記載の情報処理システム。
【請求項１８】
ホストコンピュータが、仮想媒体からのデータ読出指示または前記仮想媒体へのデータ書込指示を発行する発行ステップと、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択ステップと、
前記書込アドレス選択ステップにおける選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを記憶媒体に対する書込アドレスに変換して、前記記憶媒体にデータを書き込む書込ステップと、
を含む情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理方法、記憶制御装置およびその制御方法と制御プログラムに関する。
【背景技術】
【０００２】
昨今の計算システムの処理能力向上に伴い、情報を保存する記憶媒体の性能向上が求められている。その結果、従来の情報処理システムでは記憶媒体として主にＨＤＤ（Hard Disk Drive）が使用されてきたが、近年はより高性能な記憶媒体として、記憶素子にNANDフラッシュを用いたＳＳＤ（Solid State Drive）が普及している。【０００３】
上記技術分野において、特許文献１および特許文献２には、一般にＦＴＬ（Flash Translation Layer）と呼ばれ、ＳＳＤにおいてマッピング処理をNANDフラッシュのブロック単位で行う技術が開示されている。具体的には、ＳＳＤが提供する論理アドレス空間に対してデータを格納していない状態のNANDフラッシュの記憶領域を動的にマッピングすることで、同じアドレスの格納データに対する更新ごとに異なるブロックにデータを格納する。【０００４】
また、ＦＴＬにおけるNANDフラッシュのブロック単位、およびページ単位のマッピングでそれぞれ発生する問題を解決するマッピング方式が、非特許文献１および非特許文献２に示されている。これらの方式では、ブロック単位のマッピングを基本とする一方で、ブロックより小さなサイズのランダムWriteアクセスが行われる論理アドレスに対して、ページ単位のマッピングを行う。ページ単位のマッピングを行う領域を一部に限定することで、マッピングテーブルの容量増加を抑えつつ、ランダムWriteに対する処理効率の向上を実現している。【０００５】
また、非特許文献３には、ＨＤＤに対して記憶領域の一部を論理的なキャッシュとして使用し、一定サイズよりも小さなWriteアクセスデータを追記形式で格納することで、アクセス性能を向上させる技術が示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許5404485号（特開平０８−５１００７２号公報）
【特許文献２】米国特許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
【非特許文献２】S. Lee, D. Shin, Y.-J. Kim, and J. Kim, LAST: Locality-Aware Sector Translation for NAND Flash Memory-Based Storage Systems, SIGOPS Oper. Syst. Rev. 42, 6 (October 2008), 36-42
【非特許文献３】Y. Hu and Q. Yang. DCD - Disk Caching Disk: A New Approach for Boosting I/O Performance. In Proceedings of the International Symposium on Computer Architecture, pages 169-178, 1996.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記文献に記載の技術には、各ブロックを可能な限り均等に使用する技術や、ランダムWriteに対する処理効率の向上を実現する技術、アクセス性能を向上させる技術が示されているが、記憶媒体に対するWriteデータ量を小さくするために必要な処理は行われていなかった。例えば、非特許文献３では、ＨＤＤに対してWriteされたデータを一旦キャッシュ領域に格納し、アクセス要求による負荷がなくなった時点で、本来データが格納されるべき領域に対する書き込みを行う。ランダムWriteデータを最初に格納する際のWriteデータ量の削減は行われているが、一時格納されたデータを再度格納し直す処理を含めた、格納処理全体を通したWriteデータ量の最小化は行われていない。【０００９】
本発明の目的は、上述の課題を解決する技術を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明に係る記憶制御装置は、
ホストコンピュータによる仮想媒体へのデータ書込指示を受信する受信手段と、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択手段と、
前記書込アドレス選択手段による選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを記憶媒体に対する書込アドレスに変換して、前記記憶媒体に対してデータを書き込むよう指示する書込指示手段と、
を備える。【００１１】
上記目的を達成するため、本発明に係る記憶制御装置の制御方法は、
ホストコンピュータによる仮想媒体へのデータ書込指示を受信する受信ステップと、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択ステップと、
前記書込アドレス選択ステップにおける選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを記憶媒体に対する書込アドレスに変換して、前記記憶媒体に対してデータを書き込むよう指示する書込指示ステップと、
を含む。【００１２】
上記目的を達成するため、本発明に係る記憶制御装置の制御プログラムは、
ホストコンピュータによる仮想媒体へのデータ書込指示を受信する受信ステップと、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択ステップと、
前記書込アドレス選択ステップにおける選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを記憶媒体に対する書込アドレスに変換して、前記記憶媒体に対してデータを書き込むよう指示する書込指示ステップと、
をコンピュータに実行させる。【００１３】
上記目的を達成するため、本発明に係る情報処理システムは、
ホストコンピュータと、
記憶媒体と、
前記ホストコンピュータによる前記記憶媒体へのアクセスを制御する記憶制御装置と、
を備え、
前記記憶制御装置が、
前記ホストコンピュータによる仮想媒体へのデータ書込指示を受信する受信手段と、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択手段と、
前記書込アドレス選択手段による選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを前記記憶媒体に対する書込アドレスに変換して、前記記憶媒体に対してデータを書き込むよう指示する書込指示手段と、
を備える。【００１４】
上記目的を達成するため、本発明に係る情報処理方法は、
ホストコンピュータが、仮想媒体からのデータ読出指示または前記仮想媒体へのデータ書込指示を発行する発行ステップと、
前記データ書込指示に応じて、前記仮想媒体のアドレス空間と、前記仮想媒体に対応して生成された仮想キャッシュのアドレス空間とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量を考慮して選択する書込アドレス選択ステップと、
前記書込アドレス選択ステップにおける選択に応じて、前記仮想媒体への書込アドレスまたは前記仮想キャッシュへの書込アドレスを記憶媒体に対する書込アドレスに変換して、前記記憶媒体にデータを書き込む書込ステップと、
を含む。
【発明の効果】
【００１５】
本発明によれば、記憶媒体に対する格納処理全体を通したWriteデータ量を小さくすることができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１実施形態に係る記憶制御装置の構成を示すブロック図である。
【図２Ａ】本発明の第２実施形態に係る情報処理システムの構成を示すブロック図である。
【図２Ｂ】本発明の第２実施形態に係る記憶制御装置の機能構成を示すブロック図である。
【図３】本発明の第２実施形態に係るバッファメモリの構成を示す図である。
【図４】本発明の第２実施形態に係る仮想媒体マッピングテーブルの構成を示す図である。
【図５】本発明の第２実施形態に係る仮想キャッシュマッピングテーブルの構成を示す図である。
【図６】本発明の第２実施形態に係るヒット判定テーブルの構成を示す図である。
【図７Ａ】本発明の第２実施形態に係る有効データテーブルの構成を示す図である。
【図７Ｂ】本発明の第２実施形態に係る格納先決定テーブルの構成を示す図である。
【図８Ａ】本発明の第２実施形態に係る記憶制御部を含むホストコンピュータのハードウェア構成を示すブロック図である。
【図８Ｂ】本発明の第２実施形態に係る記憶制御部の処理手順を示すフローチャートである。
【図９】本発明の第２実施形態に係るＲｅａｄ処理の手順を示すフローチャートである。
【図１０】本発明の第２実施形態に係るＷｒｉｔｅ処理の手順を示すフローチャートである。
【図１１Ａ】本発明の第２実施形態に係る仮想媒体への格納処理の手順を示すフローチャートである。
【図１１Ｂ】本発明の第２実施形態に係る仮想キャッシュへの格納処理の手順を示すフローチャートである。
【図１２】本発明の第２実施形態に係る格納先領域の決定処理の手順を示すフローチャートである。
【図１３】本発明の第２実施形態に係るデータ移動処理の手順を示すフローチャートである。
【図１４】本発明の第２実施形態に係るソフトウェアからのアクセス要求順序の具体例を示す図である。
【図１５】本発明の第２実施形態に係る仮想媒体マッピングテーブルの具体例を示す図である。
【図１６】本発明の第２実施形態に係る仮想キャッシュマッピングテーブルの具体例を示す図である。
【図１７】本発明の第２実施形態に係るヒット判定テーブルの具体例を示す図である。
【図１８】本発明の第２実施形態に係る有効データテーブルの具体例を示す図である。
【図１９】本発明の第３実施形態に係る情報処理システムの構成を示すブロック図である。
【図２０】本発明の第４実施形態に係る情報処理システムの構成を示すブロック図である。
【図２１】本発明の第４実施形態に係る仮想媒体マッピングテーブルおよび仮想キャッシュマッピングテーブルの構成を示す図である。
【発明を実施するための形態】
【００１７】
以下に、図面を参照して、本発明の実施の形態について例示的に詳しく説明する。ただし、以下の実施の形態に記載されている構成要素は単なる例示であり、本発明の技術範囲をそれらのみに限定する趣旨のものではない。なお、本明細書では、記憶素子としてNANDフラッシュを用いた記憶媒体を総称してＳＳＤ（Solid State Drive）と表す。なお、ＳＳＤは、一般に、記憶媒体の外部に対してNANDフラッシュを動的にマッピングする機能、および、記憶領域の間の更新回数を均一化する機能を持っている。
【００１８】
［第１実施形態］
本発明の第１実施形態としての記憶制御装置１００について、図１を用いて説明する。記憶制御装置１００は、記憶媒体へのアクセスアドレスを制御する装置である。
【００１９】
図１に示すように、記憶制御装置１００は、受信部１１０と、書込アドレス選択部１２０と、書込指示部１３０と、を含む。受信部１１０は、ホストコンピュータ１０１による仮想媒体へのデータ書込指示１１１を受信する。書込アドレス選択部１２０は、データ書込指示１１１に応じて、仮想媒体のアドレス空間１２１と、仮想媒体に対応して生成された仮想キャッシュのアドレス空間１２２とのいずれにデータを書き込むかを、現在の書込データ量と将来発生する書込データ量との総量１２３を考慮して選択する。書込指示部１３０は、書込アドレス選択部１２０による選択に応じて仮想媒体への書込アドレス１３１または仮想キャッシュへの書込アドレス１３２を記憶媒体１０３に対する書込アドレス１３３に変換して、記憶媒体１０３にデータを書き込むよう指示する。
【００２０】
本実施形態によれば、仮想媒体への書き込みと仮想キャッシュへの書き込みとを現在の書込データ量と将来発生する書込データ量との総量を考慮して選択するので、記憶媒体に対する格納処理全体を通したWriteデータ量を小さくすることができる。
【００２１】
［第２実施形態］
次に、本発明の第２実施形態に係る記憶制御装置を含む情報処理システムについて説明する。本実施形態に係る記憶制御装置を含む情報処理システムは、仮想的な記憶媒体（仮想媒体）への書き込みと仮想的なキャッシュ（仮想キャッシュ）への書き込みとを、仮想キャッシュの使用状況や負荷判定結果などに基づいて、格納先を決定する。また、仮想キャッシュの使用状況や負荷判定結果などに基づいて、データ移動を決定する。さらに、仮想キャッシュポインタを有して、キャッシュへの格納領域をまとめる。
【００２２】
例えば、本実施形態においては、ＳＳＤにアクセスを行うホストから、ＳＳＤのハードウェア構成、コントローラの動作に関する正確な情報、およびＳＳＤにおけるランダムWriteデータを格納する記憶領域の使用状況に関する情報を用いずに、ＳＳＤ内部のNANDフラッシュに対してWriteされるデータ量を最小化するための構成を提供する。
【００２３】
具体的には、ＳＳＤの記憶領域を表す論理アドレス空間内に、仮想的な記憶媒体（仮想媒体）、および仮想的なキャッシュ（仮想キャッシュ）を定義する。仮想的な記憶媒体、および仮想的なキャッシュに対するＳＳＤからの記憶領域割り当て単位を仮想ブロック（以下、vBlock）として事前に定義する。また、仮想的な記憶媒体、および仮想的なキャッシュに対するデータ格納の最小単位を仮想ページ（以下、vPage）として定義する。vBlockには連続したアドレスを持つnページ（nは自然数）のvPageが含まれるものとする。
【００２４】
そして、既にデータを格納済のvPageに対してデータをWriteする場合は、vPageを含むvBlockの先頭のvPageから順番にWriteを行うものとする。このようなWrite動作を行うことで、ＳＳＤ内部のNANDフラッシュ（NANDフラッシュメモリ）の同一ブロックの各ページに連続的にデータが格納される。そのためＳＳＤの同一論理アドレスに対するデータの上書きによって発生する、ＳＳＤ内部のNANDフラッシュ間のデータ移動に伴うWrite量を削減できる。vPage、vBlockのサイズはＳＳＤ内部におけるNANDフラッシュのページに格納されるデータ本体のサイズ、およびブロックに格納されるデータサイズに等しいことが望ましいが、例えば2のn乗倍（nは自然数）などのサイズであってもNANDフラッシュに対する一定のWrite量の削減効果が期待できる。
【００２５】
また、ホストにおいてＳＳＤの論理アドレスをマッピングした仮想媒体、および仮想媒体に対する仮想キャッシュを構築する手段を提供する。そして、ホストからWriteアクセスの性質に応じてWriteされるデータを最小化するように、ソフトウェア、ＯＳからの、後続のWrite要求に関する補助的な情報を用いてWriteデータの格納先を仮想媒体、および仮想キャッシュから最適に選択する手段を提供する。さらに、仮想媒体と仮想キャッシュにおける記憶領域の使用状況に応じて、仮想媒体と仮想キャッシュ間でWriteデータ量を最小化するように格納データを最適に移動する構成を提供する。
【００２６】
なお、Read処理においては、仮想的な記憶媒体からのデータ読出指示に応じて、仮想的な記憶媒体のアドレス空間と、仮想的なキャッシュのアドレス空間とのいずれからデータを読み込むかを、キャッシュヒットしたか否かに基づいて読出アドレス選択をする。そして、読出選択に応じて、仮想的な記憶媒体への読出アドレスまたは仮想的なキャッシュへの読出アドレスを記憶媒体に対する読出アドレスに変換して、記憶媒体に対してデータを読み出すよう読出指示をする。
【００２７】
《前提技術》
本実施形態の記憶制御を説明する前に、まず、本実施形態の前提技術を説明する。
【００２８】
ＳＳＤの記憶素子であるNANDフラッシュは、データを更新する際に格納済の古いデータを消去するEraseと呼ばれる操作が必要である。しかし、NANDフラッシュに対するEraseは、一般的にReadおよびWriteを行うページと呼ばれる単位よりも大きく、複数のページを含むブロックと呼ばれる単位で行う必要がある。そのため、NANDフラッシュのページに格納されたデータを更新する場合は、同一ブロックに含まれる他のページがEraseによって失われないようにデータの退避、および再格納を行う必要がある。
【００２９】
また、NANDフラッシュのブロックに対する消去は、ページのRead、Writeに比べて一般に大きな時間を要することが知られている。加えてブロックに対するErase回数が増加することで、NANDフラッシュはデータを正しく保持することが困難になる。つまりErase回数の増加は、性能低下だけでなく寿命消費の原因となるため、特定のブロックの寿命を消費しないように、各ブロックを可能な限り均等に使用する必要がある。
【００３０】
一般的なＳＳＤでは、ＨＤＤ等従来の記憶媒体と共通のインタフェース、およびプロトコルを用いてアクセスを行えるように、NANDフラッシュに関する特有のアクセス操作、およびブロック消去に伴う寿命消費の問題を隠蔽している。具体的には、ＳＳＤが提供する論理アドレス空間に対してデータを格納していない状態のNANDフラッシュの記憶領域を動的にマッピングすることで、同じアドレスの格納データに対する更新ごとに異なるブロックにデータを格納する。
【００３１】
これらのＦＴＬは、NANDフラッシュのブロック単位でマッピングを行うため、ＬＢＡ(Logical Block Address)上で連続したデータが同一ブロックに含まれる各ページに格納される。これらのＦＴＬを持つＳＳＤに対してランダムWriteを行った場合、各Writeデータの格納先である論理アドレスの指し示す領域に対して異なるブロックが割り当てられる。この場合、連続する論理アドレスに対してWriteを行う場合に比べて、頻繁に未使用状態のブロックのマッピングが発生する。ブロックのマッピングでは、古いブロックに格納された有効なページのデータを新しいブロックに退避、再格納する処理、および古いブロックを再利用可能な状態にするためのErase処理が発生する。つまり、ブロック単位でマッピングを行うＦＴＬでは、ランダムWriteに対する処理効率の低さが問題である。
【００３２】
この問題に対して、ＦＴＬにおいて論理アドレスに対するNANDフラッシュの記憶領域をページ単位でマッピングする方法が挙げられる。Read、Writeの単位と同等であるページ単位のマッピングを行うことで、ブロックよりも小さなサイズのランダムWriteに対して単一のブロックに連続して複数のWriteデータを格納できる。つまり、データ退避、再格納が発生せず、ブロックのErase回数（イレース回数）を抑えることで、ランダムWriteに対する処理効率が向上する。しかし、ページ単位のマッピングを行った場合、マッピングテーブルにおいてブロック単位のマッピングよりも多くのエントリ数を必要とする。そのため、マッピング状態を管理するテーブルの容量が増加して、ＳＳＤにおいてマッピングテーブルを格納するために大量のメモリ消費、および制御処理が発生する点が問題である。
【００３３】
ＦＴＬにおけるNANDフラッシュのブロック単位、およびページ単位のマッピングでそれぞれ発生する問題を解決するマッピング方式が示されている。これらの方式では、ブロック単位のマッピングを基本とする一方で、ブロックより小さなサイズのランダムWriteアクセスが行われる論理アドレスに対して、ページ単位のマッピングを行う。ページ単位のマッピングを行う領域を一部に限定することで、マッピングテーブルの容量増加を抑えつつ、ランダムWriteに対する処理効率の向上を実現している。つまり、ＳＳＤにおいてＦＴＬは、NANDフラッシュ特有のアクセス処理、およびNANDフラッシュにおいて多くの処理を伴うランダムWriteアクセスに対する最適化を隠蔽する役割を持つ。よって、ＳＳＤにアクセスするホストはNANDフラッシュのアクセス特性、ページ、ブロックのサイズといったアクセス単位、およびＳＳＤ内部の構成情報を知ることなくアクセスすることが可能である。
【００３４】
しかしながら、近年、NANDフラッシュの大容量化が進んだ結果、ＳＳＤの大容量化が進んでいる。一方でNANDフラッシュを大容量化するための製造プロセス微細化、およびメモリセルに格納される情報量の多値化によって、更新可能な回数が減少する問題が発生している。特に、近年、ＳＳＤで用いられる機会が増加した、メモリセルに格納されるビットを多値化した、ＭＬＣ(Multi Level Cell)、もしくはＴＬＣ(Triple Level Cell)と呼ばれるNANDフラッシュは、大容量化、低コスト化を実現する一方で更新可能な回数の制限が特に少ない。つまり、ＳＳＤに対するデータ更新頻度、つまりWriteデータ量の削減は、性能だけでなく寿命、信頼性の観点から特に重要性を増している。
【００３５】
ＳＳＤに含まれる NANDフラッシュに対するWriteデータ量を削減するために、ＦＴＬにおいて発生する、ブロック間のデータ移動等に伴う、本来のWriteデータ以外を格納するために発生するWriteアクセスの最小化が必要である。そのために、ＳＳＤ内部のＦＴＬにおけるランダムWriteに対する処理の効率化に加えて、ホストで動作するソフトウェア、Operating System （ＯＳ）からのＳＳＤに対するWriteアクセスについての最適化が不可欠である。例えば、ＦＴＬにおける最小マッピング単位はページであるため、ホストからＳＳＤに対するWriteは少なくともページサイズでアライメントされており、Writeデータのサイズはページサイズのn倍（nは自然数）であることが求められる。また、ＳＳＤのＦＴＬはページ以外にブロック単位で記憶領域のマッピングを行うため、ブロック間のデータ移動を最小化するためには格納データをブロックサイズの単位で連続的に格納する必要がある。
【００３６】
一方で、ＳＳＤに対するブロックサイズよりも小さいランダムWriteアクセスは、可能な限り避ける必要がある。ＳＳＤのＦＴＬにおいてランダムWriteアクセスに対する最適化を行う場合、ランダムWriteによって格納されたデータは、ブロックよりも細かいページ単位で管理される。しかしランダムWriteされたデータに対して更新が行われた場合、古いデータが格納されていた領域を再利用するためにブロックのEraseが必要である。よってＦＴＬはデータが格納されていた領域の再利用を行うために、一般にGarbage Collection（ＧＣ）、あるいはMergeと呼ばれるブロック間のデータ移動を行う。ＧＣ、およびMergeの処理量はランダムWriteされるデータ量に比例する。
【００３７】
さらに、並列にアクセス可能な複数のNANDフラッシュにおけるブロック、もしくはページで構成されたストライプを単位としてマッピングを行うようにＦＴＬを構成することも可能である。ストライプを単位としてマッピングを行うことで、連続アクセス性能の向上、マッピングテーブルの容量削減が可能である。一方で、論理アドレスに対するマッピング単位が大きくなる。そのため、ストライプサイズが大きくなるほどＦＴＬのマッピング単位よりも小さいサイズのWriteアクセスの割合が増加する。マッピング単位よりも小さなWriteアクセスが行われた場合、ＳＳＤ内部でWriteデータの格納先に相当する周辺のデータのコピーが発生し、NANDフラッシュに対するWriteアクセスが増加する。
【００３８】
よって、ＳＳＤ内部のNANDフラッシュに対するWriteを最小化するために、ホストで動作するソフトウェア、ＯＳにおいてＳＳＤ内部のNANDフラッシュのページサイズ、ブロックサイズ等の情報、ＦＴＬにおけるマッピング単位、および小さいランダムWriteアクセスに対する処理手順、Garbage Collectionの動作条件といったハードウェア構成、コントローラの動作に関する情報が必要である。しかし、通常ＳＳＤはホストに対してハードウェア構成、コントローラの動作を隠蔽しており、これらの情報取得が困難なことが課題である。また、ＳＳＤごとにハードウェア構成、コントローラの動作は異なるため、様々な環境構成で動作するソフトウェア、ＯＳにおいて事前に前提となる情報の設定は困難である。
【００３９】
また、小さいランダムWriteデータに対応するためにページ単位でマッピングを行うＦＴＬを持つＳＳＤでは、記憶領域の再利用において発生するＧＣ、もしくはMergeによるWrite量の増加を防ぐために、NANDフラッシュに対するランダムWriteデータを格納する記憶領域の使用量の把握が必要である。しかし、これらの情報は、通常ＳＳＤ内部のＦＴＬにおいて管理されているため、ホスト側で動作するソフトウェア、ＯＳから把握が困難なことも課題である。一方で、ホストからＳＳＤに対してWriteを行うソフトウェアは、各Writeアクセスが連続であるか、ランダムであるか、後続のWriteアクセスによってどの程度の頻度で更新されるかといった情報を事前に把握することが可能であるため、格納領域を効率的に決定、管理することが可能である。しかし、ＳＳＤ内部においてNANDフラッシュに対してデータを格納するＦＴＬは、Writeされたデータが連続であるか、ランダムであるか知ることが困難である。
【００４０】
《本実施形態の概略》
本実施形態によれば、アクセス元のホストから、ＳＳＤのハードウェア構成、コントローラの動作に関する正確な情報、およびＳＳＤにおけるランダムWriteデータを格納する記憶領域の使用状況に関する情報を用いずに、ＳＳＤ内部のNANDフラッシュに対してWriteされるデータ量を最小化する。そのために、記憶媒体の論理アドレス空間上に仮想的な記憶媒体（仮想媒体）、および仮想的なキャッシュ（仮想キャッシュ）を定義する。そして、記憶制御装置は、マッピング機能と、アクセス実行機能と、ヒット判定機能と、キャッシュ使用状況管理機能と、負荷判定機能と、処理順序決定機能と、格納先決定機能と、データ移動機能と、記憶媒体アクセス機能とを備える。
【００４１】
（マッピング機能）
マッピング機能は、仮想媒体、および仮想キャッシュに対する記憶媒体の論理アドレス空間のマッピングを管理する。すなわち、マッピング機能は、記憶媒体の論理アドレス空間上に仮想的な記憶媒体（仮想媒体）、および仮想的なキャッシュ（仮想キャッシュ）を定義する。記憶媒体の論理アドレスをＬＡ（Logical Address）とした場合、ＬＡをマッピングした仮想媒体の論理アドレス（ＶＤＡ: Virtual Drive Address）の空間、および仮想キャッシュの論理アドレス（ＶＣＡ: Virtual Cache Address）の空間を構築する。仮想媒体はホスト上のソフトウェア、ＯＳから参照可能な仮想的な記憶媒体として動作する。つまりユーザはＶＤＡを用いて仮想媒体にアクセスを行う。一方で仮想キャッシュは、ホスト上のソフトウェアからは不可視であり、仮想媒体に対するキャッシュとして動作する。また仮想キャッシュは、Writeされた細かなvBlockより小さいWriteデータを仮想媒体の代わりに格納することで、記憶媒体の特性上発生する内部のWriteデータ量を削減する役割を持つ。マッピング機能は、仮想媒体のＶＤＡ、および仮想キャッシュのＶＣＡに対して記憶媒体のＬＡをvBlock単位で割り当てる。
【００４２】
（アクセス実行機能）
アクセス実行機能は、ホストのアクセス要求を受け取り、処理の実行状況を管理して結果を応答する。すなわち、アクセス実行機能は、ソフトウェア、ＯＳから仮想媒体に対するRead、Write要求を受け取り、記憶媒体に対して必要なアクセス処理を行う。また、アクセスの実行状況を管理して、アクセス要求に関する処理の実行完了の応答をホストに対して行う。また、アクセス実行機能は、Write要求と共にアクセス要求元であるソフトウェア、ＯＳによる、後続のWrite要求を含めた連続Writeサイズの予測値、および後続のWrite要求による更新頻度の予測値を受け取る。
【００４３】
（ヒット判定機能）
ヒット判定機能は、仮想キャッシュにおけるキャッシュヒットを判定する。すなわち、ヒット判定機能は、ホストからのアクセス要求に対応したデータが仮想キャッシュに格納されているか判定する。また、判定で使用する、仮想媒体のＶＤＡに対応するデータが格納された、仮想キャッシュ内のＶＣＡのマッピング情報を管理する。
【００４４】
（キャッシュ使用状況管理機能）
キャッシュ使用状況管理機能は、仮想キャッシュ上に格納された各データの仮想媒体上の対応アドレスを管理する。すなわち、キャッシュ使用状況管理機能は、仮想キャッシュのＶＣＡごとに格納データの、有効・無効の状態、および各データが対応する仮想媒体のＶＤＡの対応を管理する。また、キャッシュ使用状況管理機能は、仮想キャッシュに対して割り当てられた記憶領域のサイズ、および記憶領域に対するキャッシュデータの格納の分布を管理する。
【００４５】
（負荷判定機能）
負荷判定機能は、仮想キャッシュの使用量から記憶媒体に関する負荷を判定する。すなわち、負荷判定機能は、仮想キャッシュに対して割り当てられた記憶領域のサイズ、および記憶領域に対するキャッシュデータの格納状態から、仮想媒体に対するＧＣ処理が必要となるまでに格納可能なデータ量を算出し、データ量が事前に定めた条件と比べて減少した場合に負荷状態であると判定する。また、負荷判定機能は、ホストで動作するソフトウェア、ＯＳに対して負荷状態を通知する。
【００４６】
（処理順序決定機能）
処理順序決定機能は、次に処理するホストのWrite要求を決定する。すなわち、処理順序決定機能は、ホスト上のソフトウェア、ＯＳからのWriteについて、ソフトウェア、ＯＳから予告される後続のＶＤＡに対するWrite要求の発行予測、更新に関する予測の情報を利用して、各Write要求に対する処理の優先度を算出し、優先度の最も高いWrite要求を次の処理対象として選択する。
【００４７】
（格納先決定機能）
格納先決定機能は、格納対象のWriteデータについて仮想媒体、および仮想キャッシュのいずれかから格納先アドレスを決定する。すなわち、格納先決定機能は、処理順序決定機能によって選択されたWrite要求について、Writeデータを仮想キャッシュに対して一時格納するか、仮想キャッシュを経由せずに仮想媒体の指定された格納先ＶＤＡに格納するか決定する。仮想キャッシュにWriteデータを一時格納する場合、格納先決定機能は仮想キャッシュにおけるWriteデータの格納先ＶＣＡを決定する。一方仮想媒体にWriteデータを直接格納する場合、格納先決定機能は連続Writeサイズの予測値を参照して、現在仮想媒体のＶＤＡとして割り当て済の記憶媒体のＬＡに上書きするか、マッピング機能を通じて新たな格納先として割り当てられた記憶領域を書き込み先とするようにWriteデータの格納先を決定する。
【００４８】
（データ移動機能）
データ移動機能は、仮想キャッシュに格納されたデータを仮想媒体または仮想キャッシュの他の領域に移動する。すなわち、データ移動機能は、負荷判定機能によって判定される負荷が増加して一定の条件を満たした場合に、仮想キャッシュに格納されたデータから移動対象となるデータを選択し、移動先を仮想媒体または仮想キャッシュの他の領域から決定する。
【００４９】
（記憶媒体アクセス機能）
記憶媒体アクセス機能は、記憶媒体に対してアクセスを行う。すなわち、記憶媒体アクセス機能は、アクセス実行機能、およびデータ移動機能からの指示を受けて、アクセス要求を記憶媒体に対して発行し、Readアクセスを行った場合は結果を取得する。
【００５０】
本実施形態による方法は、本実施形態の適用を行わない場合に比べて、ランダムWriteアクセスに対する最適化が不十分なＳＳＤに対して、ハードウェア構成、コントローラの動作に関する情報を用いずにＳＳＤ内部で発生するNANDフラッシュ間のデータ移動を削減する。また、ＳＳＤに対して発行されたランダムWrite要求のデータ量をホストから可視化することで、Garbage Collectionなどの領域管理処理によるＳＳＤ内部の急激な負荷増加を防止可能とすることが効果として挙げられる。
【００５１】
《本実施形態の構成》
次に、本実施形態に係る記憶制御装置２２０を含む情報処理システム２００の構成について図面を参照して説明する。なお、以下、独立した装置である場合を記憶制御装置２２０、他の装置に含まれる場合を記憶制御部２２０と表現するが、基本的な構成は同様である。
【００５２】
《情報処理システムの構成》
図２Ａは、本実施形態に係る記憶制御部２２０を含む情報処理システム２００の構成を示すブロック図である。
【００５３】
図２Ａを参照すると、本実施形態においてシステム全体の構成は、データにアクセスする１台以上のホストコンピュータ２１０、記憶媒体２４０、および、ホストコンピュータ２１０と記憶媒体２４０とを接続するネットワーク２５０を含む。
【００５４】
記憶媒体２４０は、例えばNANDフラッシュで構成されたＳＳＤのような単体または複数の記憶媒体から構成される。記憶制御部２２０は、記憶媒体２４０の記憶領域内に、仮想的な記憶媒体として仮想媒体２４１、および、仮想キャッシュ２４２を定義する。仮想媒体２４１、および、仮想キャッシュ２４２に対する記憶媒体２４０からの記憶領域割り当て単位を仮想ブロック（vBlock）として事前に定義する。また、仮想媒体２４１、および、仮想キャッシュ２４２に対するデータ格納の最小単位を仮想ページ（vPage）として定義する。vBlockには連続したアドレスを持つｎページ（ｎは自然数）のvPageが含まれるものとする。
【００５５】
本実施形態においては、ホストコンピュータ２１０に記憶制御部２２０が搭載されており、ＯＳ２１１やソフトウェア（アプリケーション）２１２からの仮想的な記憶媒体へのアクセスを受けて、仮想媒体２４１あるいは仮想キャッシュ２４２のいずれにアクセスするかを決定して、割り当てられた記憶媒体２４０の記憶領域をアクセスするようにアドレス制御を行なう。
【００５６】
ネットワーク２５０の形態は特に限定されず、ホストコンピュータ２１０と記憶媒体２４０とが直接接続される形態であってもよい。また、ホストコンピュータ２１０はネットワーク２５０によって接続された複数の装置あるいはシステムによって構成されてもよい。
【００５７】
なお、図２Ａにおいては、記憶媒体２４０は仮想媒体２４１と仮想キャッシュ２４２のみを図示しているが、記憶媒体２４０がNANDフラッシュで構成されたＳＳＤである場合には、ＦＴＬ（Flash Translation Layer）などによるマッピング処理が実行されており、それらの既存技術は図示されていない。
【００５８】
《記憶制御部の機能構成》
図２Ｂは、本実施形態に係る記憶制御部２２０の機能構成を示すブロック図である。
【００５９】
図２Ｂを参照すると、記憶制御部２２０は、バッファメモリ２２１と、マッピング部２２２と、アクセス実行部２２３と、ヒット判定部２２４と、キャッシュ使用状況管理部２２５と、負荷判定部２２６と、処理順序決定部２２７と、格納先決定部２２８と、データ移動部２２９と、記憶媒体アクセス部２３０と、仮想キャッシュポインタ２３１と、を備える。以下、これら機能構成部について、順次にその構成と動作を詳細に説明する。
【００６０】
（バッファメモリ）
バッファメモリ２２１は、ホストコンピュータ２１０で動作するソフトウェアやＯＳなどからのWrite要求について、記憶媒体２４０に対する書き込みが完了するまでWriteを行うデータを保持する。また、バッファメモリ２２１は、アクセス要求元であるソフトウェアやＯＳによる、後続のWrite要求を含めた連続Writeサイズの予測値と、後続のWrite要求によって更新される頻度の予測値とを保持する。バッファメモリ２２１は、ホストコンピュータ２１０のメモリとして現在多く用いられるＤＲＡＭ(Dynamic Random Access Memory)以外に、例えばＭＲＡＭ(Magnetoresistive Random Access Memory)などの不揮発性を持つメモリデバイスなどでもよい。
【００６１】
図３は、本実施形態に係るバッファメモリ２２１の構成を示す図である。図３には、バッファメモリ２２１の構成の概要３１０と、バッファメモリ２２１のテーブル構成３２０と、を図示している。
【００６２】
バッファメモリ２２１は、仮想媒体２４１におけるWrite先の論理アドレス（ＶＤＡ）
を表す、Write先アドレス３１１と、対応するWriteデータ３１２と、を格納する。併せて、アクセス要求元であるソフトウェアやＯＳによる、後続のWrite要求を含めた予測Writeサイズ３１３と、後続のWrite要求によって更新される頻度の予測値であるデータ更新頻度３１４と、を格納する。
【００６３】
また、バッファメモリ２２１におけるWrite要求されたデータは、図３に示した形式に限定されない。テーブル構成３２０には、例えば、格納されたWriteデータの処理順序をアクセス要求の時刻を用いて決定するために、アクセス要求を受け付けた時刻情報であるアクセス要求時刻３２３に加えて、使用中か空きかを表わすフラグ３２１や後述の処理順序決定部２２７の決定に従う処理順序３２２が記憶されている。
【００６４】
（マッピング部）
マッピング部２２２は、仮想媒体２４１の論理アドレス（ＶＤＡ）空間、および仮想キャッシュ２４２の論理アドレス（ＶＣＡ）空間をそれぞれ定義する。また、ＶＤＡ、ＶＣＡの空間に対する、記憶媒体２４０のＬＡの割り当てをマッピングとして管理する。マッピング部２２２は、仮想媒体２４１および仮想キャッシュ２４２に対して、ホストコンピュータ２１０に接続された記憶媒体２４０の記憶領域を、ＬＡのvBlock単位で割り当てる。また、マッピング部２２２は、ＶＤＡ、ＶＣＡに対応する各vBlockについて、vBlockに含まれる各vPageに対してデータを格納済みであるか管理する。仮想媒体２４１、仮想キャッシュ２４２に割り当てた記憶領域は、割り当てた際と同一単位で開放、あるいは再確保を行うことで、仮想媒体２４１、仮想キャッシュ２４２の容量を可変としてもよい。
【００６５】
図４および図５は、本実施形態に係る仮想媒体マッピングテーブル４００と、仮想キャッシュマッピングテーブル５００の構成を示す図である。なお、図４と図５とに記載した数値は一例であってこれに限定されない。
【００６６】
仮想媒体マッピングテーブル４００は、仮想媒体２４１のＶＤＡに対して割り当てられた、記憶媒体２４０の各vBlockのＬＡを格納する。また、仮想媒体マッピングテーブル４００は、各vBlockについて、先頭からWrite済みのvPageの数を格納する。同様に、仮想キャッシュマッピングテーブル５００についても、仮想キャッシュ２４２の各ＶＣＡに対して割り当てられた、記憶媒体２４０のvBlockのＬＡ、および各vBlockの先頭からWrite済みのvPage数を格納する。なお、記憶媒体２４０が複数存在する場合、図４および図５において図示していないが、各記憶媒体を識別するためのIDなどをＬＡと併せて格納する。
【００６７】
仮想媒体マッピングテーブル４００、仮想キャッシュマッピングテーブル５００のデータ形式は、図４、図５に示した形式に限定されず、例えば、記憶媒体２４０に対するアクセスを表す識別子は数字のIDに限らず、任意の形式でよい。また、図４、図５では仮想媒体２４１、仮想キャッシュ２４２に割り当てられたvBlockについて、vBlockに含まれる各vPageに対してデータを格納済みであるか否かについて、vBlockの先頭からWrite済みのvPageの数で管理を行っている。しかし、例えば、ビットマップで各vPageに対してデータがWrite済みであるか否かを管理してもよい。さらに、図４、図５では、仮想媒体２４１、仮想キャッシュ２４２に割り当てられた全てのvBlockについて、データを格納済であるか否かを管理しているが、最近Writeされた一部のvBlockのみを管理対象としてもよい。
【００６８】
（アクセス実行部）
アクセス実行部２２３は、ホストコンピュータ２１０で動作するソフトウェアやＯＳからのアクセス要求を受け取り、記憶媒体２４０に対して必要なアクセス処理を行う。また、アクセス実行部２２３は、Write要求と共にアクセス要求元であるソフトウェアやＯＳによる、後続のWrite要求を含めた連続Writeサイズの予測値と、後続のWrite要求によって更新される頻度の予測値とを受け取る。なお、記憶制御部２２０が連続Writeサイズの予測値や更新される頻度の予測値を算出できる場合は、アクセス実行部２２３が連続Writeサイズの予測値や更新される頻度の予測値を受け取る必要はない。
【００６９】
アクセス実行部２２３は、受け取ったアクセス要求がReadである場合は、バッファメモリ２２１に格納されたWriteデータにヒットしているか否か確認を行い、ヒットしている場合はバッファメモリ２２１からデータを読み出して結果を返す。バッファメモリ２２１に格納されたWriteデータにヒットしていない場合は、ヒット判定部２２４によって仮想キャッシュ２４２にヒットしているか否か確認を行う。仮想キャッシュ２４２にヒットしている場合は、仮想キャッシュ２４２のＶＣＡ用いてマッピング部２２２を通じてアドレス変換を行い、記憶媒体アクセス部２３０を介して記憶媒体２４０から要求されたデータを読み出して結果を返す。仮想キャッシュ２４２にヒットしない場合は、アクセス要求の仮想媒体２４１のＶＤＡを用いてマッピング部２２２を通じてアドレス変換を行い、記憶媒体アクセス部２３０を介して記憶媒体２４０から要求されたデータを読み出して結果を返す。
【００７０】
一方、アクセス要求がWriteである場合、アクセス実行部２２３はWriteデータをバッファメモリ２２１に格納する。その後、処理順序決定部２２７によってWrite対象に決定された後に、格納先決定部２２８を介してWriteデータの格納先となる仮想キャッシュ２４２のＶＣＡ、または、仮想媒体２４１のＶＤＡを決定する。アクセス実行部２２３は、仮想媒体２４１のＶＤＡからマッピング部２２２を介して、対応する記憶媒体２４０のＬＡを求め、記憶媒体アクセス部２３０を介して記憶媒体２４０に格納する。また、マッピング部２２２を介して仮想媒体マッピングテーブル４００における、データ格納先となったvBlockに含まれる各vPageに対してデータを格納済みであるか否かを示す情報を更新する。加えて、ヒット判定部２２４およびキャッシュ使用状況管理部２２５に対して、Writeの反映を指示して完了を通知する。最後に、アクセス実行部２２３は、記憶媒体２４０に対する格納が完了したWriteデータをバッファメモリ２２１から削除する。
【００７１】
（ヒット判定部）
ヒット判定部２２４は、アクセス要求が仮想キャッシュ２４２に格納されているか否かを判定して、判定結果を応答する。また、ヒット判定部２２４は、仮想キャッシュ２４２に格納された各データに対応する仮想媒体２４１のＶＤＡを管理する。そして、ヒット判定部２２４は、仮想キャッシュ２４２に対する新規データの格納、および、仮想キャッシュ２４２から仮想媒体２４１に対するデータの移動に伴い、格納データの仮想媒体２４１上のＶＤＡ、および、キャッシュされたデータの仮想キャッシュ２４２におけるＶＣＡを更新する。
【００７２】
図６は、本実施形態に係るヒット判定テーブル６００の構成を示す図である。ヒット判定テーブル６００は、ヒット判定部２２４におけるヒット判定に使用される。
【００７３】
ヒット判定テーブル６００は、キャッシュに格納されたデータに対応する仮想媒体２４１のＶＤＡを格納する。また、ヒット判定テーブル６００は、仮想媒体２４１のvBlockごとにキャッシュされているvPageの数を格納する（６０１参照）。そして、キャッシュされているvPageの数だけ、仮想媒体におけるvPageのＶＤＡ６０３と仮想キャッシュにおけるvPageのＶＣＡ６０４との組がリンクされる（６０２参照）。図６におけるヒット判定テーブル６００は、仮想媒体２４１において同一vBlock内のvPageが同じハッシュ値を持つハッシュテーブルの形式であるが、図６のデータ形式に限定されない。
【００７４】
（キャッシュ使用状況管理部）
キャッシュ使用状況管理部２２５は、仮想キャッシュ２４２の各ＶＣＡにおける格納データの有効あるいは無効の状態、および有効な各データに対する、仮想媒体２４１におけるＶＤＡの対応関係を管理する。また、キャッシュ使用状況管理部２２５は、仮想キャッシュ２４２のＶＣＡの空間における有効なキャッシュデータの分布情報として、一定サイズの領域ごとに有効なキャッシュデータ量を管理する。さらにキャッシュ使用状況管理部２２５は、仮想キャッシュ２４２に割り当てられた記憶媒体２４０の記憶領域の容量を記録する。
【００７５】
図７Ａは、本実施形態に係る有効データテーブル７００の構成を示す図である。有効データテーブル７００は、キャッシュ使用状況管理部２２５により参照される。
【００７６】
有効データテーブル７００は、仮想キャッシュ２４２における各vPageのＶＣＡに対応した、仮想媒体２４１におけるvPageのＶＤＡ、およびvBlock毎の有効なvPageの数を記録する。有効データテーブル７００のデータ形式は、図７に示された形式に限定されず、例えば有効なvPageの数、仮想キャッシュ２４２に割り当てられた記憶媒体２４０の記憶領域の容量をvBlock以外の単位で管理してもよい。
【００７７】
（負荷判定部）
負荷判定部２２６は、キャッシュ使用状況管理部２２５を介して有効データテーブル７００を参照して、仮想キャッシュ２４２のＶＣＡの空間内で有効なキャッシュデータ容量の合計を取得する。負荷判定部２２６は、取得された容量が事前に決定された基準の容量を上回った場合に、仮想キャッシュ２４２を多く使用している高負荷状態と判定する。なお、高負荷状態の判定は、仮想キャッシュ２４２に割り当てられた記憶容量に対する、仮想キャッシュ２４２に記憶された有効なデータ量の比率が閾値を超えた場合としてもよい。負荷判定部２２６は、高負荷状態と判定された場合に、ホストコンピュータ２１０で動作する仮想媒体２４１に対するアクセスを行うソフトウェアやＯＳに対して、比率通知などにより高負荷状態を通知して、高負荷状態を解消するようにWrite要求の発行頻度の抑制を促す。
【００７８】
また、負荷判定部２２６は、判定された負荷が高い場合に、仮想キャッシュ２４２の容量追加を行う。具体的には、マッピング部２２２の仮想キャッシュマッピングテーブル５００に対して、対応するエントリが存在せず記憶領域が未割当の仮想キャッシュ２４２のＶＣＡに対して新たなエントリを定義する。そして、記憶媒体２４０のvBlockのうち、仮想媒体２４１および仮想キャッシュ２４２のいずれにも未割当のものを選択して、対応するＬＡを定義済みのエントリに格納する。
【００７９】
さらに、負荷判定部２２６は、判定された負荷が低い場合に、仮想キャッシュ２４２の容量削減を行う。具体的には、有効データテーブル７００を参照して、仮想キャッシュ２４２のＶＣＡ上において有効なvPage数が少ないvBlockを選択し、vBlockに格納されたデータの移動をデータ移動部２２９に指示する。負荷判定部２２６は、データ移動部２２９によるvBlockに格納されたデータの移動が完了した後に、マッピング部２２２の仮想キャッシュマッピングテーブル５００にアクセスを行い、vBlockに対応するエントリを削除して、記憶媒体２４０のvBlockを解放する。
【００８０】
（処理順序決定部）
処理順序決定部２２７は、バッファメモリ２２１に格納されたWriteデータのうち、次に仮想媒体２４１または仮想キャッシュ２４２に格納するデータを選択する。具体的には、各Writeデータが仮想媒体２４１にWriteされる際に占有するvPage数と、バッファメモリ２２１にWriteデータと共に格納された、連続Writeデータのアクセス長の予測値に相当するWriteデータが到着した後に仮想媒体２４１にWriteされた場合に占有されるvPage数とを比較する。比較の結果、vPage数が同一であるWriteデータから、WriteデータがvBlockにおいて占有するvPageの数が最も多いWriteデータを選択する。一方、比較の結果、vPage数が同一となるWriteデータが存在しない場合は、Write要求と共に受け取った、連続Writeデータのアクセス長の予測値から得られる占有予定のvPageの数と、現在のWriteデータが占有するvPageの数を比較して、vPageの数の差が最小のWriteデータを選択する。すなわち、後続のWriteデータが到着する前にWriteしてしまうと、同じvBlockに対して何度も更新が発生してしまうため、後続のデータが到着する予定のない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は負荷値に関係なく直接、仮想媒体に格納する、などが考えられる。
【００８６】
格納先決定部２２８は、格納先が仮想媒体２４１と決定した場合、アクセス実行部２２３に格納先として指定されたvBlockのＶＤＡを格納先決定結果として返す。
【００８７】
一方、格納先決定部２２８は、仮想キャッシュ２４２にWriteデータを格納すると決定した場合、格納先vBlockのＶＣＡを記録する仮想キャッシュポインタ２３１からの情報を待つ。格納先決定部２２８は、格納先が仮想キャッシュ２４２である場合、仮想キャッシュポインタ２３１からデータを格納中のvBlockのＶＣＡを取得する。そして、格納先決定部２２８は、マッピング部２２２によってvBlockにおいて次のWriteデータを格納すべき、かつ、データを格納していないvPageのうち最も先頭に近いものを特定して、アクセス実行部２２３にvPageに対応するＶＣＡを格納先決定結果として返す。最後に、格納先決定部２２８は、vPageを含むvBlockの全てのページにデータを格納済の状態となった場合、キャッシュ使用状況管理部２２５を介して有効データテーブル７００を参照する。そして、仮想キャッシュ２４２のvBlockにおいて有効なデータを格納するvPage数が最も少ないvBlockを選択し、仮想キャッシュポインタ２３１をvBlockのＶＣＡで更新する。
【００８８】
（データ移動部）
データ移動部２２９は、負荷判定部２２６によって判定される負荷が増加して一定の条件を満たした場合に、仮想キャッシュ２４２から仮想媒体２４１に移動するデータの選択を開始する。まず、データ移動部２２９は、仮想媒体２４１のＶＤＡの空間上のvBlock単位の各領域について、ヒット判定部２２４のヒット判定テーブル６００を参照する。そして、仮想キャッシュ２４２にキャッシュされているデータ量（vPage数）が最も多い、仮想媒体２４１のvBlockに着目する。データ移動部２２９は、仮想キャッシュ２４２のvPageから、仮想媒体２４１において着目したvBlockに格納される有効なvPage全てを移動対象として選択する。そして、データ移動部２２９は、マッピング部２２２によってvPage、およびvBlockを指し示す記憶媒体２４０のＬＡを取得して、記憶媒体アクセス部２３０に対してＬＡの指し示すvBlockに対するデータ移動を指示する。その後、データ移動部２２９は、マッピング部２２２、ヒット判定部２２４、キャッシュ使用状況管理部２２５を介して、データ移動の対象となった仮想キャッシュ２４２のvPageに関する管理情報を更新する。
【００８９】
また、データ移動部２２９は、負荷判定部２２６から仮想キャッシュ２４２のＶＣＡによって指定されるvBlockについて、仮想キャッシュ２４２から仮想媒体２４１に対するデータの移動、あるいは仮想キャッシュ２４２の異なるvBlockに対する移動を行う。データ移動部２２９は、vBlockに含まれる各vPageについて、マッピング部２２２によってvPageおよびvBlockを指し示す記憶媒体２４０のＬＡを取得して、記憶媒体アクセス部２３０に対してＬＡの指し示すvBlockに対するデータ移動を指示する。その後、データ移動部２２９は、マッピング部２２２、ヒット判定部２２４、キャッシュ使用状況管理部２２５を介してデータ移動の対象となった仮想キャッシュ２４２のvPageに関する管理情報を更新する。
【００９０】
（記憶媒体アクセス部）
記憶媒体アクセス部２３０は、アクセス実行部２２３およびデータ移動部２２９からの指示を受けて、アクセス要求を記憶媒体２４０に対して発行する。Readアクセスを行った場合は、Read結果について、アクセス指示を行ったアクセス実行部２２３、またはデータ移動部２２９に返す。
【００９１】
《ホストコンピュータのハードウェア構成》
図８Ａは、本実施形態に係る記憶制御部２２０を含むホストコンピュータ２１０のハードウェア構成を示すブロック図である。なお、図８Ａにおいては、記憶制御部２２０はホストコンピュータ２１０のソフトウェア処理として図示するが、記憶制御部２２０を、ホストコンピュータ２１０とは独立したワンチップのコンピュータで実現してもよい。
【００９２】
図８Ａで、ＣＰＵ(Central Processing Unit)８１０は演算制御用のプロセッサであり、プログラムを実行することで図２Ｂの記憶制御部２２０の機能構成部を実現する。ＲＯＭ(Read Only Memory)８２０は、初期データおよびプログラムなどの固定データおよびプログラムを記憶する。また、通信制御部８３０は、ネットワーク２５０を介して記憶媒体２４０と通信する。なお、ＣＰＵ８１０は１つに限定されず、複数のＣＰＵであっても、あるいは画像処理用のＧＰＵを含んでもよい。また、通信制御部８３０は、ＣＰＵ８１０とは独立したＣＰＵを有して、ＲＡＭ(Random Access Memory)８４０の領域に送受信データを書き込みあるいは読み出しするのが望ましい。また、ＲＡＭ８４０とストレージ８５０との間でデータを転送するＤＭＡＣを設けるのが望ましい（図示なし）。さらに、入出力インタフェース８６０は、ＣＰＵ８１０とは独立したＣＰＵを有して、ＲＡＭ８４０の領域に入出力データを書き込みあるいは読み出しするのが望ましい。したがって、ＣＰＵ８１０は、ＲＡＭ８４０にデータが受信あるいは転送されたことを認識してデータを処理する。また、ＣＰＵ８１０は、処理結果をＲＡＭ８４０に準備し、後の送信あるいは転送は通信制御部８３０やＤＭＡＣ、あるいは入出力インタフェース８６０に任せる。
【００９３】
ＲＡＭ８４０は、ＣＰＵ８１０が一時記憶のワークエリアとして使用するランダムアクセスメモリである。ＲＡＭ８４０には、本実施形態の実現に必要なデータを記憶する領域が確保されている。バッファメモリ２２１は、ソフトウェアやＯＳから仮想的な記憶媒体へのアクセスをバッファする。仮想媒体マッピングテーブル４００は、仮想媒体２４１のアドレス（ＶＤＡ）を記憶媒体２４０のアドレス（ＬＡ）にマッピングするためのテーブルである。仮想キャッシュマッピングテーブル５００は、仮想キャッシュ２４２のアドレス（ＶＣＡ）を記憶媒体２４０のアドレス（ＬＡ）にマッピングするためのテーブルである。仮想キャッシュポインタ２３１は、仮想キャッシュの次に格納するアドレスを記憶する。ヒット判定テーブル６００は、仮想的な記憶媒体へのアクセスが仮想キャッシュ２４２にエントリされたデータであるか否かを判定し、ヒットした場合に仮想キャッシュ２４２のアドレス（ＶＣＡ）を提供するテーブルである。有効データテーブル７００は、仮想キャッシュ２４２に格納された有効データを示すテーブルである。格納先決定テーブル７１０は、格納先を仮想媒体とするか、仮想キャッシュを介するかを決定するための条件と、その条件に基づき格納先決定に使用されるデータと、を記憶するテーブルである。送受信データ８４１は、通信制御部８３０を介して通信されるデータである。入出力データ８４２は、入出力インタフェース８６０を介して入出力されるデータである。ワークエリア８４３は、記憶制御以外の処理で使用するエリアである。
【００９４】
ストレージ８５０には、データベースや各種のパラメータ、あるいは本実施形態の実現に必要な以下のデータまたはプログラムが記憶されている。アプリケーション格納部８５１は、ホストコンピュータ２１０が提供するアプリケーションソフトウェアを検索可能に格納している。ストレージ８５０には、以下のプログラムが格納される。ＯＳ８５２は、本ホストコンピュータ２１０の全体を制御する基礎プログラムである。アプリケーションソフトウェア８５３は、現在、本ホストコンピュータ２１０が実行中のアプリケーションプログラムである。記憶制御プログラム８５４は、ＯＳ８５２やアプリケーションソフトウェア８５３からの仮想的な記憶媒体へのアクセスを受けて、本実施形態のアクセス制御を実現するプログラムである。Write制御モジュール８５５は、記憶制御プログラム８５４における、仮想的な記憶媒体へのWriteを制御するモジュールである。Read制御モジュール８５６は、記憶制御プログラム８５４における、仮想的な記憶媒体からのReadを制御するモジュールである。データ移動モジュール８５７は、所定条件を満たせば、仮想キャッシュ２４２から仮想媒体２４１へのデータ移動、あるいは、仮想キャッシュ２４２内のデータ移動を行なうモジュールである。通信制御プログラム８５８は、通信制御部８３０を介した記憶媒体２４０との通信を制御するプログラムである。
【００９５】
入出力インタフェース８６０は、入出力機器との入出力データをインタフェースする。入出力インタフェース８６０には、表示部８６１、操作部８６２、が接続される。また、本ホストコンピュータ２１０には、さらに、音声出力部であるスピーカや、音声入力部であるマイク、あるいは、ＧＰＳ位置判定部が接続されてもよい。
【００９６】
なお、図８ＡのＲＡＭ８４０やストレージ８５０には、ホストコンピュータ２１０が有する汎用の機能や他の実現可能な機能に関連するプログラムやデータは図示されていない。
【００９７】
《記憶制御部の処理手順》
次に、図２Ａ〜図８Ａの構成要素を使用した本実施形態の記憶制御の処理手順を、図８Ｂ〜図１３を参照して説明する。
【００９８】
図８Ｂは、本実施形態に係る記憶制御部２２０の処理手順を示すフローチャートである。このフローチャートは、図８ＡのＣＰＵ８１０がＲＡＭ８４０を用いて実行し、図２Ｂの機能構成部の処理を実現する。
【００９９】
記憶制御部２２０は、ステップＳ８１１において、バッファメモリ２２１の次の処理順序の処理命令を判定して、仮想的な記憶媒体からのRead命令であるか否かを判定する。Read命令と判定した場合、記憶制御部２２０は、ステップＳ８１３において、Read命令に従った仮想媒体からのRead処理を実行する。
【０１００】
Read命令でないと判定した場合、記憶制御部２２０は、ステップＳ８２１において、仮想的な記憶媒体からのWrite命令であるか否かを判定する。Write命令と判定した場合、記憶制御部２２０は、ステップＳ８２３において、Write命令に従った仮想媒体へのWrite処理を実行する。仮想キャッシュの負荷が閾値よりも大きいか否かを判定する。負荷が閾値よりも大きいと判定した場合、記憶制御部２２０は、ステップＳ８３３において、仮想キャッシュのデータ移動処理を実行する。
【０１０１】
（Ｒｅａｄ処理）
図９は、本実施形態に係るＲｅａｄ処理（Ｓ８１３）の手順を示すフローチャートである。図９のフローチャートは、ホストコンピュータ２１０で動作するソフトウェアやＯＳからRead要求を受け取り、Read結果を応答する。
【０１０２】
記憶制御部２２０のアクセス実行部２２３は、ホストコンピュータ２１０で動作するソフトウェアやＯＳからの仮想記憶媒体へのRead要求を受け取ると、バッファメモリ２２１に格納されたWriteデータにヒットしているか確認を行う（ステップＳ９０１）。バッファメモリ２２１に格納されたWriteデータにヒットしていた場合（ステップＳ９０３のYes判定）、アクセス実行部２２３はバッファメモリ２２１からヒットしたWriteデータを読み出し、アクセス元のソフトウェアやＯＳに結果を返して処理を終了する（ステップＳ９０５）。
【０１０３】
バッファメモリ２２１に格納されたWriteデータにヒットしていない場合（ステップＳ９０３のNo判定）、アクセス実行部２２３はヒット判定部２２４によって仮想記憶媒体へのRead要求が仮想キャッシュ２４２に格納されたアドレスにヒットしているか確認を行う（ステップＳ９０７）。仮想キャッシュ２４２に格納されたアドレスにヒットした場合（ステップＳ９０９のYes判定）、アクセス実行部２２３はマッピング部２２２によって、ヒットしたデータが格納された仮想キャッシュ２４２上のＶＣＡを、記憶媒体２４０のＬＡに変換する（ステップＳ９１１）。そして、アクセス実行部２２３は、ステップＳ９１１で変換したＬＡを指定して、記憶媒体アクセス部２３０を通じて記憶媒体２４０に格納されたデータを読み出し、アクセス元のソフトウェアやＯＳに結果を返して処理を終了する（ステップ９１３）。
【０１０４】
仮想キャッシュ２４２に格納されたアドレスにヒットしなかった場合（ステップＳ９０９のNo判定）、アクセス実行部２２３はマッピング部２２２によって、ホストコンピュータ２１０からのアクセス要求において指定された仮想媒体２４１のＶＤＡを、記憶媒体２４０のＬＡに変換する（ステップＳ９１５）。そして、アクセス実行部２２３は、ステップＳ９１５で変換したＬＡを指定して、記憶媒体アクセス部２３０を通じて記憶媒体２４０に格納されたデータを読み出し、アクセス元のソフトウェアやＯＳに結果を返して処理を終了する（ステップＳ９１７）。
【０１０５】
以上のステップＳ９０１からＳ９１７までの処理を行い、本実施形態においてホストコンピュータ２１０で動作するソフトウェアやＯＳから仮想的な記憶媒体からのRead要求を受け取り、Read結果を応答する動作が完了する。
【０１０６】
（Ｗｒｉｔｅ処理）
図１０は、本実施形態に係るＷｒｉｔｅ処理（Ｓ８２３）の手順を示すフローチャートである。
【０１０７】
記憶制御部２２０のアクセス実行部２２３は、ホストコンピュータ２１０で動作するソフトウェアやＯＳからのWrite要求を受け取る。併せて、アクセス実行部２２３は、アクセス要求元であるソフトウェアやＯＳによって予測されている、後続のWrite要求を含めた連続Writeサイズの予測値と、後続のWrite要求によって上書きされる頻度との情報を受け取る。そして、アクセス実行部２２３は、バッファメモリ２２１に格納されたWriteデータにヒット、または結合可能なWrite要求が存在するか確認を行う（ステップＳ１００１）。
【０１０８】
バッファメモリ２２１に格納されたWriteデータがヒット、または結合可能なWrite要求が存在した場合（ステップＳ１００３のYes判定）、アクセス実行部２２３はヒットしたWriteデータを上書き、または結合して新たなWriteデータをバッファメモリ２２１に格納する（ステップＳ１００５）。一方、バッファメモリ２２１に格納されたWriteデータがヒットしていない場合（ステップＳ１００３のNo判定）、アクセス実行部２２３はステップＳ１００１で受け取ったWriteデータを新たなWriteデータとしてバッファメモリ２２１に格納する（ステップＳ１００７）。
【０１０９】
ステップＳ１００１で受け取ったWrite要求が、処理順序決定部２２７によって次に仮想媒体２４１と仮想キャッシュ２４２のいずれかに格納する対象として選択されると、アクセス実行部２２３は、格納先決定部２２８を用いて、Writeデータの格納先領域（仮想媒体２４１か仮想キャッシュ２４２か）、および格納先領域における論理アドレス（ＶＤＡ／ＶＣＡ）を決定する（ステップＳ１００９）。
【０１１０】
格納先決定部２２８によって決定された格納先領域が仮想媒体２４１である場合（ステップＳ１０１１のYes判定）、アクセス実行部２２３は、ステップＳ１００９で決定された仮想媒体２４１のＶＤＡに対して処理順序決定部２２７によって選択されたWriteデータの格納処理を行う（ステップＳ１０１３）。一方、格納先決定部２２８によって決定された格納先領域が仮想キャッシュ２４２である場合（ステップＳ１０１１のNo判定）、アクセス実行部２２３は、ステップＳ１０１１で決定された仮想キャッシュ２４２のＶＣＡに対して処理順序決定部２２７によって選択されたWriteデータの格納処理を行う（ステップＳ１０１５）。
【０１１１】
アクセス実行部２２３は、ステップＳ１０１３またはステップＳ１０１５において格納処理が完了したWriteデータをバッファメモリ２２１から削除し、アクセス元のソフトウェアやＯＳに完了を通知して処理を終了する（ステップＳ１０１７）
以上のステップＳ１００１からＳ１０１７までの処理を行い、本実施形態においてホストコンピュータ２１０で動作するソフトウェアやＯＳからWrite要求を受け取り、処理を完了するまでの動作が完了する。また、ステップＳ１０１７において行う、アクセス元のソフトウェアやＯＳに対するWrite要求の完了通知は、バッファメモリ２２１にWriteデータが格納されるステップＳ１００５またはステップＳ１００７の時点で行ってもよい。
【０１１２】
（仮想媒体への格納処理）
図１１Ａは、本実施形態に係る仮想媒体への格納処理（Ｓ１０１３）の手順を示すフローチャートである。
【０１１３】
記憶制御部２２０のアクセス実行部２２３は、ステップＳ１００９で取得した仮想媒体２４１のＶＤＡを、マッピング部２２２によって記憶媒体２４０のＬＡに変換する（ステップ１１０１）。次に、アクセス実行部２２３は、記憶媒体アクセス部２３０を介して、処理順序決定部２２７によって選択されたWrite要求のWriteデータを、ステップＳ１１０１で変換されたＬＡが指し示す、記憶媒体２４０のvBlockに格納する（ステップＳ１１０３）。そして、アクセス実行部２２３は、マッピング部２２２を介して仮想媒体マッピングテーブル４００における、Writeデータの格納先となった、ステップＳ１００９で取得した仮想媒体２４１のＶＤＡが指し示すvBlockに対して、データがvBlock内のvPageに格納された状態に更新する。具体的には、図４の仮想媒体マッピングテーブル４００で示される、vBlockの先頭からWrite済みのvPageの数に対して、ステップＳ１１０３において記憶媒体アクセス部２３０によってWriteデータが書き込まれたvPageの値に変更する（ステップＳ１１０５）。
【０１１４】
アクセス実行部２２３はヒット判定部２２４により、処理順序決定部２２７によって選択されたWrite要求について、更新前のWriteデータが仮想キャッシュ２４２に格納されたアドレスにヒットしているか確認を行う（ステップＳ１１０７）。Write要求が仮想キャッシュ２４２に格納されたアドレスにヒットしなかった場合（ステップＳ１１０９のYes判定）、アクセス実行部２２３は、ステップＳ１０１３における、アクセス実行部２２３によるWriteデータの格納処理を実行する処理を完了する。
【０１１５】
一方、Write要求が仮想キャッシュ２４２に格納されたアドレスにヒットした場合（ステップＳ１１０９のNo判定）、アクセス実行部２２３は、ヒット判定部２２４を介して、ヒット判定テーブル６００における更新前のWriteデータを表すエントリである、ステップＳ１００９で取得した仮想媒体２４１のＶＤＡに等しいエントリを削除する（ステップＳ１１１１）。アクセス実行部２２３は、キャッシュ使用状況管理部２２５を介して、有効データテーブル７００における、更新前のWriteデータに対応したエントリを更新する。具体的には、ステップＳ１１０７において得られた、キャッシュヒットしたエントリを表す仮想キャッシュ２４２のＶＣＡに対応する、有効データテーブル７００のエントリを無効状態に変更する。また、ＶＣＡを含む、vBlock毎の有効なvPageの数を、無効になったキャッシュエントリのvPageの数を引いた値に変更して、ステップＳ１０１３における、アクセス実行部２２３によるWriteデータの仮想媒体への格納処理を実行する処理を完了する（ステップＳ１１１３）。
【０１１６】
以上のステップＳ１１０１からＳ１１１３までの処理を行い、本実施形態においてステップＳ１０１３における、記憶制御部２２０のアクセス実行部２２３によるWriteデータの仮想媒体への格納処理を実行する動作が完了する。また、ステップＳ１１１１とステップＳ１１１３の実行順序は、入れ替えてもよい。
【０１１７】
（仮想キャッシュへの格納処理）
図１１Ｂは、本実施形態に係る仮想キャッシュへの格納処理（Ｓ１０１５）の手順を示すフローチャートである。
【０１１８】
記憶制御部２２０のアクセス実行部２２３は、ステップＳ１００９で取得した仮想キャッシュ２４２のＶＣＡを、マッピング部２２２によって記憶媒体２４０のＬＡに変換する（ステップＳ１１２１）。次に、アクセス実行部２２３は、記憶媒体アクセス部２３０を介して、処理順序決定部２２７によって選択されたWrite要求のWriteデータを、ステップＳ１１２１で変換されたＬＡが指し示す、記憶媒体２４０のvPageに格納する（ステップＳ１１２３）。そして、アクセス実行部２２３は、マッピング部２２２を介して仮想キャッシュマッピングテーブル５００における、Writeデータの格納先となった、ステップＳ１００９で取得した仮想キャッシュ２４２のＶＣＡが指し示すvPageのエントリについて、データが格納された状態に更新する。具体的には、図５の仮想キャッシュマッピングテーブル５００で示される、vBlockの先頭からWrite済みのvPageの数に対して、ステップＳ１１２３において記憶媒体アクセス部２３０によってWriteデータが書き込まれたvPageの値を加算する（ステップＳ１１２５）。
【０１１９】
アクセス実行部２２３はヒット判定部２２４により、処理順序決定部２２７によって選択されたWrite要求について、更新前のWriteデータが仮想キャッシュ２４２に格納されたアドレスにヒットしているか確認を行う（ステップＳ１１２７）。Write要求が仮想キャッシュ２４２に格納されたアドレスにヒットしなかった場合（ステップＳ１１２９のNo判定）、ステップＳ１１３３以降の処理を実行する。
【０１２０】
一方、Write要求が仮想キャッシュ２４２に格納されたアドレスにヒットした場合（ステップＳ１１２９のYes判定）、アクセス実行部２２３は、キャッシュ使用状況管理部２２５を介して、有効データテーブル７００における、更新前のWriteデータに対応したエントリを更新する。具体的には、ステップＳ１１２７において得られた、キャッシュヒットしたエントリを表す仮想キャッシュ２４２のＶＣＡに対応する、有効データテーブル７００のエントリを無効状態に変更する。また、ＶＣＡを含む、vBlock毎の有効なvPageの数を、無効になったキャッシュエントリのvPageの数を引いた値に変更する（ステップＳ１１３１）。
【０１２１】
アクセス実行部２２３は、ヒット判定部２２４を介してヒット判定テーブル６００に対して、処理順序決定部２２７によって選択されたWrite要求のWrite先アドレスとして指定された、仮想媒体２４１のＶＤＡに等しいエントリを追加、または修正する（ステップＳ１１３３）。アクセス実行部２２３は、キャッシュ使用状況管理部２２５を介して、有効データテーブル７００における、更新後のWriteデータに対応したエントリを更新する。具体的には、ステップＳ１１２７において得られた、キャッシュヒットしたエントリを表す仮想キャッシュ２４２のＶＣＡに対応する、有効データテーブル７００のエントリを、Write要求のWrite先アドレスとして指定された、仮想媒体２４１のＶＤＡに変更する。また、ＶＣＡを含む、vBlock毎の有効なvPageの数に、新たに仮想キャッシュ２４２に格納したvPageの数を加算して、ステップＳ１０１５における、アクセス実行部２２３によるWriteデータの仮想キャッシュへの格納処理を実行する処理を完了する（ステップＳ１１３５）。
【０１２２】
以上のステップＳ１１２１からＳ１１３５までの処理を行い、本実施形態においてステップＳ１０１５における、記憶制御部２２０のアクセス実行部２２３によるWriteデータの仮想キャッシュへの格納処理を実行する動作が完了する。
【０１２３】
（格納先領域の決定処理）
図１２は、本実施形態に係る格納先領域の決定処理（Ｓ１００９）の手順を示すフローチャートである。
【０１２４】
記憶制御部２２０の格納先決定部２２８は、アクセス実行部２２３からWrite要求の仮想媒体２４１に対する格納先ＶＤＡ、データ長を受け取る。併せて、格納先決定部２２８は、アクセス要求元であるソフトウェアやＯＳによる、後続のWrite要求を含めた連続Writeサイズの予測値と、後続のWrite要求によって上書きされる頻度の予測値とを受け取る（ステップＳ１２０１）。
【０１２５】
格納先決定部２２８は、負荷判定部２２６から負荷情報を取得し、事前に定めた負荷の基準値と比較する（ステップＳ１２０３）。負荷が基準値を上回った場合（ステップＳ１２０５のNo判定）、格納先決定部２２８は、ステップＳ１２１５以降の処理を実行する。
【０１２６】
一方、負荷が基準値以下の場合（ステップＳ１２０５のYes判定）、格納先決定部２２８は、Writeデータが直接、仮想媒体２４１にWriteされる場合の記憶媒体２４０に対する総Write量の期待値を計算する。Writeデータを直接、仮想媒体２４１にWriteする場合はvBlock単位で処理を行うため、Writeデータの格納以外に、vBlock内のWriteデータが格納されないvPageに対する退避処理が発生する。そのため、現在のWriteデータを直接、仮想媒体２４１に格納した時点で、Writeデータ量はvBlockの容量に等しくなる。しかし、一方で、後続で連続的にWriteされる予定のWriteデータが存在する場合、それらのWriteデータが格納される予定のvPageに対する退避処理は不要である。つまり、後続のWrite要求を含めた連続Writeサイズの予測値を“Ａ”、vBlockのサイズを“Ｂ”とした場合に、Writeデータ量の期待値はｎ×Ｂ（ｎ≧Ａ／Ｂを満たす最小の自然数）で求められる（ステップＳ１２０７）。
【０１２７】
次に、格納先決定部２２８は、Writeデータが仮想キャッシュ２４２に格納され、その後、仮想媒体２４１にWriteされる場合の記憶媒体２４０に対する総Write量の期待値を計算する。まず、Writeデータを仮想キャッシュ２４２に格納する場合はvPage単位でデータがWriteされるため、仮想キャッシュ２４２において発生するWriteデータ量は、最終的に後続のWrite要求を含めた連続Writeサイズの予測値に等しくなる。一方で、仮想媒体２４１にデータを移動する際に発生するWriteデータ量は、仮想媒体２４１に対するデータの格納がvBlock単位で行われることから、Writeデータ量はvBlockに等しい。また、ステップＳ１２０１で受け取った、後続のWrite要求によって上書きされる頻度の予測値から、仮想媒体２４１にWriteデータが移動する前に更新される確率を求める。つまり、後続のWrite要求を含めた連続Writeサイズの予測値を“Ａ”、vBlockのサイズを“Ｂ”、仮想媒体２４１にWriteデータが移動する前に更新される確率を“Ｐ”とした場合、Writeデータ量の期待値は｛Ａ＋Ｂ×(１−Ｐ)｝で求められる（ステップＳ１２０９）。
【０１２８】
格納先決定部２２８は、ステップＳ１２０７とステップＳ１２０９で求めたWriteデータ量の期待値を比較する（ステップＳ１２１１）。Writeデータが直接、仮想媒体２４１にWriteされる場合の記憶媒体２４０に対する総Writeデータ量の期待値の方が小さい場合（ステップＳ１２１３のYes判定）、格納先決定部２２８は、アクセス実行部２２３に対して、Writeデータの格納先として仮想媒体２４１、およびWrite要求でデータの格納先として指定されたＶＤＡを返して処理を終了する（ステップＳ１２１５）。
【０１２９】
一方、Writeデータが直接、仮想媒体２４１にWriteされる場合の記憶媒体２４０に対する総Writeデータ量の期待値の方が大きい場合（ステップＳ１２１３のNo判定）、格納先決定部２２８は、仮想キャッシュポインタ２３１からデータを格納中のvBlockのＶＣＡを取得する（ステップＳ１２１７）。次に、格納先決定部２２８は、ステップＳ１２１７において取得したＶＣＡが指すvBlock内部における、Writeデータを格納可能な最もvBlockの先頭に近いvPageを特定する（ステップＳ１２１９）。そして、格納先決定部２２８は、アクセス実行部２２３に対して、仮想キャッシュ２４２、およびステップＳ１２１９において特定したvPageのＶＣＡをWriteデータの格納先として返す（ステップＳ１２２１）。
【０１３０】
格納先決定部２２８は、ステップＳ１２２１において格納先として返したＶＣＡに対応するvPageに対してWriteデータの格納が完了した後に、ＶＣＡを含むvBlockにおいてデータを新たに格納可能なvPageが残されるか確認する（ステップＳ１２２３）。データを新たに格納可能なvPageが残っている場合（ステップＳ１２２５のYes判定）、格納先決定部２２８は、Writeデータの格納先を決定する処理を終了する。
【０１３１】
一方、データを新たに格納可能なvPageが残っていない場合（ステップＳ１２２５のNo判定）、格納先決定部２２８は、キャッシュ使用状況管理部２２５を介して有効データテーブル７００を参照する。そして、仮想キャッシュ２４２のvBlockにおいて有効なデータを格納するvPage数が最も少ないvBlockを選択し、仮想キャッシュポインタ２３１をvBlockのＶＣＡで更新して処理を終了する（ステップＳ１２２７）。
【０１３２】
以上のステップＳ１２０１からＳ１２２７までの処理を行い、本実施形態において記憶制御部２２０の格納先決定部２２８においてWriteデータの格納先を決定する処理を実行する動作が完了する。なお、ステップＳ１２０７とステップＳ１２０９の実行順序は、互いに入れ替えてもよい。
【０１３３】
（データ移動処理）
図１３は、本実施形態に係るデータ移動処理（Ｓ８３３）の手順を示すフローチャートである。
【０１３４】
記憶制御部２２０のデータ移動部２２９は、仮想媒体２４１のＶＤＡの空間上における、仮想キャッシュ２４２にキャッシュされているデータ量（vPage数）が最も多いvBlockを処理対象として選択する（ステップＳ１３０１）。次に、データ移動部２２９は、ヒット判定部２２４を介してヒット判定テーブル６００を参照して、ステップＳ１３０１において選択したvBlockにおける、仮想キャッシュ２４２にキャッシュされたvPageのＶＣＡを取得する（ステップＳ１３０３）。そして、データ移動部２２９は、マッピング部２２２によってステップＳ１３０３において取得した仮想キャッシュ２４２のvPageのＶＣＡを、記憶媒体２４０においてvPageを指し示すＬＡに変換する。また、データ移動部２２９は、マッピング部２２２によってステップＳ１３０１において選択したvBlockの仮想媒体２４１におけるＶＤＡを記憶媒体２４０のＬＡに変換する（ステップＳ１３０５）。
【０１３５】
データ移動部２２９は、記憶媒体アクセス部２３０を介して、仮想キャッシュ２４２のvPageをステップＳ１３０５で変換されたＬＡを用いて記憶媒体２４０から読み出す（ステップＳ１３０７）。また、データ移動部２２９は、記憶媒体アクセス部２３０を介して、ステップＳ１３０１において選択されたvBlockにおいて、仮想キャッシュ２４２にデータがキャッシュされていないvPageのデータをステップＳ１３０５で変換されたvBlockのＬＡを用いて記憶媒体２４０から読み出す（ステップＳ１３０９）。そして、データ移動部２２９は、記憶媒体アクセス部２３０に対してステップＳ１３０７およびステップＳ１３０９において読み出されたvPageのデータを、ステップＳ１３０１において選択されたvBlockに先頭のvPageから順番にWriteを指示する。なお、ステップＳ１３０７において読み出された仮想キャッシュ２４２の各データは、ヒット判定部２２４を介してヒット判定テーブル６００を参照して、仮想キャッシュ２４２の各データが対応するvPageに格納する。また、ステップＳ１３０９において読み出されたvPageのデータは、元のvPageに書き戻す（ステップＳ１３１１）。
【０１３６】
データ移動部２２９は、マッピング部２２２を介して仮想媒体マッピングテーブル４００における、ステップＳ１３１１におけるWrite先であるvBlockのデータをWrite済みのvPageの数を更新する。また、データ移動部２２９はヒット判定部２２４を介して、ヒット判定テーブル６００における、仮想媒体２４１にデータの移動を行った仮想キャッシュ２４２のvPageに対応するエントリを削除する。そして、データ移動部２２９はキャッシュ使用状況管理部２２５を介して、仮想媒体２４１にデータの移動を行った仮想キャッシュ２４２のvPageに対応する有効データテーブル７００のエントリを無効状態に変更する。さらに、データ移動部２２９は、有効データテーブル７００における、vBlock毎の有効なvPageの数を、仮想媒体２４１にデータの移動を行った仮想キャッシュ２４２のvPageの数を引いた値に更新して処理を完了する（ステップＳ１３１３）。
【０１３７】
以上のステップＳ１３０１からＳ１３１３までの処理を行い、本実施形態において記憶制御部２２０のデータ移動部２２９において仮想キャッシュ２４２から仮想媒体２４１にデータを移動する動作が完了する。なお、ステップＳ１３０７とステップＳ１３０９の実行順序は、互いに入れ替えてもよい。
【０１３８】
《本実施形態の記憶制御の具体例》
本実施形態による記憶制御をより明瞭にするため、図１４から図１８を用いて、ホストコンピュータ２１０で実行されるソフトウェアからの仮想的な記憶媒体からのRead要求の処理、および、仮想的な記憶媒体へのWrite要求されたデータを仮想媒体２４１または仮想キャッシュ２４２に格納する動作の具体例を示す。本具体例において使用する記憶媒体としては、NANDフラッシュを記憶素子としたＳＳＤを仮定する。ＳＳＤに含まれるNANDフラッシュのページの大きさとブロックの大きさがそれぞれ4KB、256KBであるとして、ＳＳＤ内部におけるRead、Writeはページ（4KB）単位、Eraseの単位はブロック（256KB）単位であると仮定する。また、本具体例で使用するvBlockはNANDフラッシュのブロックサイズに等しい256KB、vPageはNANDフラッシュのページサイズに等しい4KBとする。
【０１３９】
（アクセス要求順序）
図１４は、本発明の第２実施形態に係るソフトウェアからのアクセス要求順序１４００の具体例を示す図である。本具体例では、ID1からID4までのRead、Write要求を順番に処理する場合の動作を示す。本具体例では、各IDのWrite要求と共に受け取る、データ更新頻度に関する予測値をアクセス要求ｎ回毎（ｎは自然数）として表現している。つまり、ID2のWrite要求は１億回のアクセスごとに後続のWriteによって更新されるのに対し、ID3のWrite要求はアクセス要求３００回毎、つまり頻繁に後続のWriteによって上書きされることを表す。
【０１４０】
（各テーブル）
図１５から図１８は、それぞれ本具体例における初期状態と図１４のID1からID4を実行した場合の各テーブルの様子を示す。図１５は、図４に示した仮想媒体マッピングテーブル４００に対応するテーブル１５００である。図１６は、図５に示した仮想キャッシュマッピングテーブル５００に対応する具体例のテーブル１６００を表わす。図１７は、図６に示したヒット判定テーブル６００に対応する具体例のテーブル１７００を表わす。図１８は、図７に示した有効データテーブル７００に対応する具体例のテーブル１８００を表す。各テーブルにおけるアドレスは、全てセクタ（512バイト）単位で記述している。
【０１４１】
なお、格納先決定部２２８の仮想キャッシュポインタ２３１が格納する仮想キャッシュ２４２における、キャッシュされるデータを格納中のvBlockを表すＶＣＡは0x00000000とする。加えて、バッファメモリ２２１は、本具体例の初期状態ではWriteデータを格納していないものとする。また、本具体例において、処理順序決定部２２７は、バッファメモリ２２１に格納したホストコンピュータ２１０上のソフトウェアからのWrite要求を、到着順に処理対象として選択する。また、本具体例において負荷判定部２２６による負荷判定の結果が高負荷になることはないものとする。
【０１４２】
（ＩＤ１のＲｅａｄ）
まず、図１４におけるID1のRead要求を受け取った場合の動作を示す。図９のフローチャートに示された通り、仮想的な記憶媒体からのRead要求を受け取ったアクセス実行部２２３は、バッファメモリ２２１、仮想キャッシュ２４２の順番にヒットしているか否かの確認を行う。バッファメモリ２２１にはWriteデータは格納されていないため、アクセス実行部２２３は、ヒット判定テーブル１７００によって仮想キャッシュ２４２におけるヒット判定を行う。ID1のReadは仮想媒体のＶＤＡ 0x00000010に対するものである一方、ヒット判定テーブル１７００にはＶＤＡ 0x00000010に相当するエントリが存在せず、このReadは仮想媒体２４１のＶＤＡ 0x00000010に対して行われる。仮想媒体マッピングテーブル１５００によると、ＶＤＡ 0x00000000で表されるvBlockに対して、ＳＳＤの0x00000000のvBlockがマッピングされている。つまり、仮想媒体２４１のＶＤＡ 0x00000010に対する4KBのReadは、ＳＳＤの論理アドレス0x00000010に対する4KBのReadとして発行され、Read結果を要求元のソフトウェアに返す。
【０１４３】
（ＩＤ２のＷｒｉｔｅ）
次に、図１４におけるID2のWrite要求を受け取った場合の動作を示す。図１０のフローチャートに示された通り、仮想的な記憶媒体へのWrite要求を受け取ったアクセス実行部２２３は、WriteデータをはじめとしたID2のWrite要求をバッファメモリ２２１に格納してから処理を開始する。バッファメモリ２２１にはWriteデータは格納されていないため、アクセス実行部２２３は、処理順序決定部２２７によってID2のWrite要求が処理対象として選ばれることで処理を開始する。ID2のWriteは、ＶＤＡ 0x00000200、つまりvBlockの先頭から224KBのデータに対する格納要求である。
【０１４４】
アクセス実行部２２３から指示を受けた格納先決定部２２８は、ID2のWriteデータの格納先を決定する。まず、予測Writeサイズは256KBであり、vBlockの先頭からのWrite要求であるため、将来的にvBlock全体に対する256KBのWriteが行われることが分かる。よって直接、仮想媒体２４１にWriteデータを格納する場合にＳＳＤに対して発生するWrite量の期待値は、256KBと求められる。また、図１４におけるID2のWriteは１億回のアクセスごとに後続のWriteによる更新が行われる。そのため、仮想キャッシュ２４２にID2のWriteデータを格納している間に後続のWrite要求によって上書きが発生して仮想キャッシュ２４２上のデータが無効化される可能性はゼロに近い。そのため、仮想キャッシュ２４２に一時的にWriteデータを保存し、後から仮想媒体２４１にWriteデータを移動した場合にＳＳＤに対して発生するWrite量の期待値は、｛256KB＋256KB×(1-0)｝＝512KBと求められる。
【０１４５】
そのため、アクセス実行部２２３は、ID2のWriteデータを仮想媒体２４１におけるＶＤＡ 0x00000200の指し示すvBlockに直接格納する。仮想媒体マッピングテーブル１５００からＶＤＡ 0x00000200に対する224KBのWriteは、ＳＳＤの論理アドレス0x00000200に対する224KBのWriteとして発行される。また、仮想媒体マッピングテーブル１５００における、仮想媒体２４１のＶＤＡ 0x00000200が指し示すvBlockについて、Write済vPage数を（224KB／4KB）＝56に更新する（図１５の１５０１参照）。
【０１４６】
さらに、ID2のWriteデータ格納に伴い、仮想キャッシュ２４２に格納されたキャッシュデータの無効化処理として、ヒット判定テーブル１７００における、ＶＤＡ 0x00000230のエントリ削除とキャッシュされたvPage数の減算を行う（図１７の１７０１参照）。加えて、有効データテーブル１８００における、仮想キャッシュ２４２においてＶＣＡ 0x00000000で指し示されるvPageのエントリについて、データを無効状態に切り換え、vBlock内の有効ページ数を“１”から“０”に減少させる処理を完了して（図１８の１８０１参照）、Write完了を要求元のソフトウェアに通知する。
【０１４７】
（ＩＤ３のＷｒｉｔｅ）
続けて、図１４におけるID3のWrite要求を受け取った場合の動作を示す。ID2のWrite要求の処理時と同様に、バッファメモリ２２１にはWriteデータは格納されておらず、処理順序決定部２２７によってID3のWrite要求が処理対象として選ばれることでＳＳＤに対する格納処理を開始する。
【０１４８】
格納先決定部２２８によって、ID3のWriteデータの格納先を決定するために、直接、仮想媒体２４１にWriteデータを格納する場合にＳＳＤに対して発生するWrite量の期待値を求める。ID3のWriteに対する予測Writeサイズは4KBであるため、ＳＳＤに対して発生するWrite量の期待値は、256KBと求められる。
【０１４９】
続けて、仮想キャッシュ２４２に一時的にWriteデータを保存し、後から仮想媒体２４１にWriteデータを移動した場合のＳＳＤに対するWrite量の期待値を求める。図１４におけるID3のWriteは３００回のアクセスごとに後続のWriteによる更新が行われる予測値がアクセス要求元のソフトウェアから得られている。そのため、仮想キャッシュ２４２にID3のWriteデータを格納している間に後続のWrite要求によって上書きが発生することで、仮想媒体２４１にデータが移動する可能性は非常に低くなる。この確率を例えば１%と見積もると、ＳＳＤに対して発生するWrite量の期待値は、｛4KB＋256KB×(1-0.99)｝＝6.56KBと求められる。
【０１５０】
そのため、アクセス実行部２２３は、ID3のWriteデータを仮想キャッシュ２４２の、新たなデータを格納可能なvPageにキャッシュする。仮想キャッシュ２４２における、Writeデータの格納位置は、格納先決定部２２８の仮想キャッシュポインタ２３１の示す仮想キャッシュ２４２のＶＣＡが0x00000000であることから、仮想キャッシュ２４２のＶＣＡ 0x00000000の指すvBlock内の空いているvPageにID3のWriteデータを格納する。仮想キャッシュマッピングテーブル１６００から、vBlock内部のWrite済のvPageは１ページであるため、仮想キャッシュ２４２におけるＶＣＡ 0x00000008の指すvPageにWriteデータを格納する。つまり、vPageに対する4KBのWriteは、ＳＳＤの論理アドレス0x00200008に対する4KBのWriteとして発行される。
【０１５１】
また、仮想キャッシュマッピングテーブル１６００における、仮想キャッシュ２４２のＶＣＡ 0x00000000のvBlockについて、Write済vPage数を“２”に更新する（図１６の１６０１参照）。加えて、ID3のWriteデータを仮想キャッシュ２４２に格納したことによって、ヒット判定テーブル１７００に対して、ＶＤＡ 0x00000100と、それに対応するＶＣＡである0x00000008のエントリを追加し、キャッシュされたvPage数を“１→２”に“１”加算する（図１７の１７０２参照）。さらに、有効データテーブル１８００において、ＶＣＡ 0x00000008で指し示されるvPageのエントリについて、キャッシュしている仮想媒体２４１上のＶＤＡを0x00000100として記録し、vBlock内の有効ページ数を“１”加算して（図１８の１８０２参照）、ID3のWrite要求の完了を要求元のソフトウェアに通知する。
【０１５２】
（ＩＤ４のＲｅａｄ）
最後に、図１４におけるID4のRead要求を受け取った場合の動作を示す。図９のフローチャートに示された通り、Read要求を受け取ったアクセス実行部２２３は、バッファメモリ２２１、仮想キャッシュ２４２の順番にヒットしているか確認を行う。バッファメモリ２２１にはWriteデータは格納されていないため、アクセス実行部２２３は、ヒット判定テーブル１７００によって仮想キャッシュ２４２におけるヒット判定を行う。ID4のReadは仮想媒体２４１のＶＤＡ 0x00000100に対するものであり、ヒット判定テーブル１７００にはＶＤＡ 0x00000100に相当するエントリが存在する（図１７の１７０２参照）。つまり、仮想キャッシュ２４２においてRead要求されたデータはＶＣＡ 0x00000008のvPageに格納されていることが分かる。アクセス実行部２２３は、仮想キャッシュマッピングテーブル１６００によって、仮想キャッシュ２４２のvPageに対するＶＣＡをＳＳＤの論理アドレス0x00200008に変換して4KBのReadを行い、Read結果を要求元のソフトウェアに返す。
【０１５３】
以上の処理で、本具体例における動作を完了する。このように、仮想的な記憶媒体へのアクセスが仮想媒体と仮想キャッシュとに適切に選択されて実行される。なお、本具体例では考慮しなかった仮想キャッシュポインタ２３１、バッファメモリ２２１への格納と処理順序決定部２２７による順序決定などを適切に組み合わせることにより、さらに記憶媒体への格納処理全体を通した書込データ量を削減することができる。
【０１５４】
本実施形態によれば、仮想的な記憶媒体への書き込みと仮想的なキャッシュへの書き込みとを現在の書込データ量と将来発生する書込データ量との総量を考慮して選択するので、記憶媒体に対するWriteデータ量を小さくすることができる。
【０１５５】
そして、既にデータを格納済のvPageに対してデータをWriteする場合は、vPageを含むvBlockの先頭のvPageから順番にWriteを行うものとする。このようなWrite動作を行うことで、ＳＳＤ内部のNANDフラッシュの同一ブロックの各ページに連続的にデータが格納される。そのためＳＳＤの同一論理アドレスに対するデータの上書きによって発生する、ＳＳＤ内部のNANDフラッシュ間のデータ移動に伴うWrite量を削減できる。vPage、vBlockのサイズはＳＳＤ内部におけるNANDフラッシュのページに格納されるデータ本体のサイズ、およびブロックに格納されるデータサイズに等しいことが望ましいが、例えば2のn乗倍（nは自然数）などのサイズであってもNANDフラッシュに対する一定のWrite量の削減効果が期待できる。
【０１５６】
すなわち、本実施形態による方法は、本実施形態の適用を行わない場合に比べて、ランダムWriteアクセスに対する最適化が不十分なＳＳＤに対して、ハードウェア構成、コントローラの動作に関する情報を用いずにＳＳＤ内部で発生するNANDフラッシュ間のデータ移動を削減する。また、ＳＳＤに対して発行されたランダムWrite要求のデータ量をホストから可視化することで、Garbage Collectionなどの領域管理処理によるＳＳＤ内部の急激な負荷増加を防止可能とすることが効果として挙げられる。
【０１５７】
［第３実施形態］
次に、本発明の第３実施形態に係る記憶制御装置を含む情報処理システムについて説明する。本実施形態に係る記憶制御装置を含む情報処理システムは、上記第２実施形態と比べると、記憶制御装置が記憶媒体側にある点、あるいは、ネットワークを介してホストコンピュータの外部にある点で異なる。その他の構成および動作は、第２実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
【０１５８】
《情報処理システムの構成》
図１９は、本実施形態に係る記憶制御部１９４３または１９２０を含む情報処理システム１９００の構成を示すブロック図である。なお、図１９において、図２Ａと同様の構成要素には同じ参照番号を付して、説明を省略する。
【０１５９】
図１９においては、ホストコンピュータ１９１０は本実施形態の記憶制御部を有しない。一例として、本実施形態の記憶制御部１９４３は、記憶媒体１９４０に搭載されている。また、他例として、本実施形態の記憶制御部１９２０は、ネットワーク２５０を介して独立した装置として接続されている。かかる記憶制御部１９４３または１９２０は、ソフトウェアで実現されても、ワンチップのプロセッサで実現されてもよい。
【０１６０】
本実施形態によれば、第２実施形態のようにホストコンピュータによる処理に限定されず、仮想的な記憶媒体への書き込みと仮想的なキャッシュへの書き込みとを現在の書込データ量と将来発生する書込データ量との総量を考慮して選択し、記憶媒体に対する格納処理全体を通したWriteデータ量を小さくすることができる。
【０１６１】
［第４実施形態］
次に、本発明の第４実施形態に係る記憶制御装置を含む情報処理システムについて説明する。本実施形態に係る記憶制御装置を含む情報処理システムは、上記第２実施形態および第３実施形態と比べると、情報処理システムに、複数の記憶制御装置が接続している点、あるいは、複数のホストコンピュータが接続している点で異なる。その他の構成および動作は、第２実施形態、第３実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
【０１６２】
《情報処理システムの構成》
図２０は、本実施形態に係る情報処理システム２０００の構成を示すブロック図である。なお、図２０において、図２Ａまたは図１９と同様の構成要素には同じ参照番号を付して、説明を省略する。
【０１６３】
図２０においては、複数の記憶媒体、あるいは、複数のホストコンピュータがネットワーク２５０を介して接続されている。
【０１６４】
まず、複数に記憶媒体２４０、２０４０が接続されている場合、各ホストコンピュータ２１０や２０１０、あるいは、独立した記憶制御部１９２０は、複数に記憶媒体２４０、２０４０の全体を仮想媒体２０４１と仮想キャッシュ２０４２とに割り当てる。このような構成に場合には、仮想キャッシュ２０４２の必要とされる容量を複数に記憶媒体２４０、２０４０に少量ずつ分割して割り当てるので、仮想媒体２０４１の容量に余裕ができ処理の高速化が図れる。
【０１６５】
また、複数のホストコンピュータ２１０、２０１０による記憶制御において、各ホストコンピュータが排他的に仮想キャッシュを割り当てても、仮想キャッシュを共有してもよい。排他的に仮想キャッシュを割り当てる場合には、ホストコンピュータ２０１０もＯＳ２０１１やソフトウェア２０１２からの仮想的な記憶媒体へのアクセスを制御する独自の記憶制御部２０２０を有する。この場合には、外部の記憶制御部１９２０が統一的な仮想媒体と仮想キャッシュの制御を行なってもよい。
【０１６６】
（仮想媒体マッピングテーブおよび仮想キャッシュマッピングテーブル）
図２１は、本実施形態に係る仮想媒体マッピングテーブル２１１０および仮想キャッシュマッピングテーブル２１２０の構成を示す図である。なお、図２１において、図４または図５と同じ構成要素についての説明を省略する。
【０１６７】
仮想媒体マッピングテーブル２１１０および仮想キャッシュマッピングテーブル２１２０には、複数の記憶媒体を識別するための記憶媒体ＩＤ、あるいは、複数のホストコンピュータを識別するためのホストＩＤが付加される。
【０１６８】
本実施形態によれば、複数の記憶媒体、あるいは、複数のホストコンピュータが接続されたシステム構成であっても、仮想的な記憶媒体への書き込みと仮想的なキャッシュへの書き込みとを現在の書込データ量と将来発生する書込データ量との総量を考慮して選択し、記憶媒体に対する格納処理全体を通したWriteデータ量を小さくすることができる。
【０１６９】
［他の実施形態］
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。また、それぞれの実施形態に含まれる別々の特徴を如何様に組み合わせたシステムまたは装置も、本発明の範疇に含まれる。
【０１７０】
また、本発明は、複数の機器から構成されるシステムに適用されてもよいし、単体の装置に適用されてもよい。さらに、本発明は、実施形態の機能を実現する情報処理プログラムが、システムあるいは装置に直接あるいは遠隔から供給される場合にも適用可能である。したがって、本発明の機能をコンピュータで実現するために、コンピュータにインストールされるプログラム、あるいはそのプログラムを格納した媒体、そのプログラムをダウンロードさせるＷＷＷ(World Wide Web)サーバも、本発明の範疇に含まれる。特に、少なくとも、上述した実施形態に含まれる処理ステップをコンピュータに実行させるプログラムを格納した非一時的コンピュータ可読媒体（non-transitory computer readable medium）は本発明の範疇に含まれる。
【０１７１】
この出願は、２０１４年７月４日に出願された日本国特許出願  特願２０１４−１３８８７３号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2016002325.tif 000003
【図２Ａ】
2016002325.tif 000004
【図２Ｂ】
2016002325.tif 000005
【図３】
2016002325.tif 000006
【図４】
2016002325.tif 000007
【図５】
2016002325.tif 000008
【図６】
2016002325.tif 000009
【図７Ａ】
2016002325.tif 000010
【図７Ｂ】
2016002325.tif 000011
【図８Ａ】
2016002325.tif 000012
【図８Ｂ】
2016002325.tif 000013
【図９】
2016002325.tif 000014
【図１０】
2016002325.tif 000015
【図１１Ａ】
2016002325.tif 000016
【図１１Ｂ】
2016002325.tif 000017
【図１２】
2016002325.tif 000018
【図１３】
2016002325.tif 000019
【図１４】
2016002325.tif 000020
【図１５】
2016002325.tif 000021
【図１６】
2016002325.tif 000022
【図１７】
2016002325.tif 000023
【図１８】
2016002325.tif 000024
【図１９】
2016002325.tif 000025
【図２０】
2016002325.tif 000026
【図２１】
2016002325.tif 000027
【国際調査報告】
2016002325.tif 000028
2016002325.tif 000029
2016002325.tif 000030