(57)【要約】【課題】仮想ストレージへの負荷等により生じるアクセス性能の低下を改善する。【解決手段】仮想マシンに対してストレージ装置の仮想化を行う仮想ストレージが、前記仮想マシンからの前記ストレージ装置へのライトデータ、及び、前記ストレージ装置から読み出されたリードデータを一時的に蓄積するキャッシュメモリと、前記仮想マシンから前記ストレージ装置への複数のアクセス要求を解析し、アクセスのパタンがランダムであるか解析するアクセスパタン解析手段と、前記アクセス解析手段により前記ストレージ装置へのアクセスがランダムであると判定された場合、前記キャッシュメモリの利用度に応じて前記キャッシュメモリのメモリ容量の増減を制御するキャッシュ管理手段と含む。【選択図】図１１
2014178975.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンに対してストレージ装置の仮想化を行う仮想ストレージを備え、
前記仮想化ストレージが、
前記仮想マシンからの前記ストレージ装置へのライトデータ、及び、前記ストレージ装置から読み出されたリードデータを一時的に蓄積するキャッシュメモリと、
前記仮想マシンから前記ストレージ装置への複数のアクセス要求を解析しアクセスのパタンがランダムであるか否か判定するアクセスパタン解析手段と、
前記アクセスパタン解析手段により、前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、前記キャッシュメモリの利用度に応じて、前記キャッシュメモリのメモリ容量の増減を制御するキャッシュ管理手段と、
を含むコンピュータ装置。
【請求項２】
前記キャッシュ管理手段は、前記アクセスパタン解析手段により、前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、
前記キャッシュメモリの利用度が予め定められた第１の閾値以上の場合、前記キャッシュメモリのメモリ容量を増大させ、
前記キャッシュメモリの利用度が予め定められた第２の閾値（但し、前記第２の閾値は前記第１の閾値よりも小）以下の場合には、前記キャッシュメモリのメモリ容量を減少させる制御を行う請求項１記載のコンピュータ装置。
【請求項３】
前記キャッシュ管理手段は、前記アクセスパタン解析手段により、前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムでないと判定された場合、前記キャッシュ管理手段は、前記キャッシュメモリのメモリ容量を減少させる請求項１又は２記載のコンピュータ装置。
【請求項４】
前記キャッシュ管理手段は、前記キャッシュメモリのメモリ容量の増大を、前記コンピュータ装置の物理メモリから取得したメモリ領域を前記キャッシュメモリへ追加することで行い、
前記キャッシュメモリのメモリ容量の減少を、前記キャッシュメモリのメモリ領域の一部を削除し、前記物理メモリへ返却することで行う、請求項１乃至３のいずれか１項に記載のコンピュータ装置。
【請求項５】
前記キャシュメモリに保持されているライトデータに関して、前記キャシュメモリに格納後、予め定められた所定時間経過したライトデータを、アクセスアドレス順に並び替えた順番で、アクセス要求を、前記ストレージ装置に接続するデバイスドライバ又はネットワークに向けて出力するストレージアクセス手段を備えた請求項１乃至４のいずれか１項記載のコンピュータ装置。
【請求項６】
前記キャッシュ管理手段は、前記ストレージから読み出され前記キャッシュメモリ上に保持されているリードデータに関して、参照頻度の大小に基き、前記キャッシュメモリに残すか、破棄するかを決定する請求項５記載のコンピュータ装置。
【請求項７】
前記仮想ストレージは、複数の仮想マシンのうちの１つの仮想マシンのオペーレーティングシステムに対してユーザプロセスとして配置され、
前記仮想ストレージは、他の仮想マシンからのストレージへのアクセス要求を受け、前記１つの仮想マシンのストレージデバイスドライバを介して接続されるローカルストレージ、又は、前記１つの仮想マシンの仮想ネットワークを介してアクセスされる外部ネットワークに接続するリモートストレージにアクセスする、請求項６記載のコンピュータ装置。
【請求項８】
仮想マシンからのストレージ装置へのライトデータ、及び、前記ストレージ装置から読み出されたリードデータを一時的に蓄積するキャッシュメモリを備え、前記仮想マシンに対して前記ストレージ装置の仮想化を行う仮想ストレージによる制御方法であって、
前記仮想マシンから前記ストレージ装置への複数のアクセス要求を解析しアクセスのパタンがランダムであるか否か判定し、
前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、前記キャッシュメモリの利用度に応じて、前記キャッシュメモリのメモリ容量の増減を制御する、制御方法。
【請求項９】
前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、
前記キャッシュメモリの利用度が予め定められた第１の閾値以上の場合、前記キャッシュメモリのメモリ容量を増大させ、
前記キャッシュメモリの利用度が予め定められた第２の閾値（但し、前記第２の閾値は前記第１の閾値よりも小）以下の場合には、前記キャッシュメモリのメモリ容量を減少させる制御を行う請求項８記載の制御方法。
【請求項１０】
前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムでないと判定された場合、
前記キャッシュメモリのメモリ容量を減少させる請求項８又は９記載の制御方法。
【請求項１１】
前記キャッシュメモリのメモリ容量の増大を、コンピュータ装置の物理メモリから取得したメモリ領域を前記キャッシュメモリへ追加することで行い、
前記キャッシュメモリのメモリ容量の減少を、前記キャッシュメモリのメモリ領域の一部を削除し、前記物理メモリへ返却することで行う、請求項８乃至１０のいずれか１項に記載の制御方法。
【請求項１２】
前記キャシュメモリに保持されているライトデータに関して、前記キャシュメモリに格納後、予め定められた所定時間経過したライトデータを前記ストレージ装置に書き出すにあたり、前記ライトデータをアドレス順に並び替えた順番でアクセス要求を、前記ストレージ装置のデバイスドライバに向けて出力する請求項８乃至１１のいずれか１項記載の制御方法。
【請求項１３】
前記ストレージから読み出され前記キャッシュメモリ上に保持されているリードデータに関して、参照頻度の大小に基き、前記キャッシュメモリに残すか、破棄するかを決定する請求項１２記載の制御方法。
【請求項１４】
仮想マシンからのストレージ装置へのライトデータ、及び、前記ストレージ装置から読み出されたリードデータを一時的に蓄積するキャッシュメモリを備え、前記仮想マシンに対して前記ストレージ装置の仮想化を行う仮想ストレージを備えたコンピュータに、
前記仮想マシンから前記ストレージ装置への複数のアクセス要求を解析しアクセスのパタンがランダムであるか否か判定する処理と、
前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、前記キャッシュメモリの利用度に応じて、前記キャッシュメモリのメモリ容量の増減を制御する処理と、
を実行させるプログラム。
【請求項１５】
前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、前記キャッシュメモリの利用度が予め定められた第１の閾値以上の場合、前記キャッシュメモリのメモリ容量を増大させ、前記キャッシュメモリの利用度が予め定められた第２の閾値（但し、前記第２の閾値は前記第１の閾値よりも小）以下の場合には、前記キャッシュメモリのメモリ容量を減少させる処理を、前記コンピュータに実行させる請求項１４記載のプログラム。
【請求項１６】
前記仮想マシンから前記ストレージ装置へのアクセスがランダムでないと判定された場合、前記キャッシュ管理手段は、前記キャッシュメモリのメモリ容量を減少させる処理を前記コンピュータに実行させる請求項１４又は１５記載のプログラム。
【請求項１７】
前記キャッシュメモリのメモリ容量の増大を、前記コンピュータの物理メモリから取得したメモリ領域を前記キャッシュメモリへ追加することで行い、
前記キャッシュメモリのメモリ容量の減少を、前記キャッシュメモリのメモリ領域の一部を削除し、前記物理メモリへ返却することで行う処理を前記コンピュータに実行させる請求項１４又は１５記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ装置と方法とプログラムに関する。
【０００２】
近時、クラウドコンピューティング、シンクライアントシステム等のＩＴ（Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ）システムにおいて、サーバ仮想化技術が重要となっている。サーバ仮想化によれば、１台の物理的なサーバが、複数台のコンピュータであるかのように論理的に分割され、分割されたそれぞれのコンピュータでＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）やアプリケーションが実行される。それぞれのコンピュータを仮想マシンという。
【０００３】
サーバ仮想化では、例えばハードウェアとＯＳ間に仮想化レイヤを設け、その上に複数の仮想マシンが実装され、ハードウェア・リソースの仮想化が行われる。ハードウェア・リソースの仮想化として、特に制限されないが、例えばボード単位（システムボード、ＩＯボード、ネットワークインタフェースボード等）に複数のパーティションに分割し、各パーティションを独立した仮想マシンとして利用可能としたもののほか、ソフトウェアにより、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリデバイス、ネットワークインタフェースデバイス（カード）、ディスク等のハードウェア・リソースを論理的に分割して、仮想マシンを構成する仮想マシンモニタ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ：ＶＭＭ）がある。
【０００４】
仮想マシンモニタ（ＶＭＭ）には、代表的には、
（ａ）ハードウェア上で直接動作するハイパーバイザ（Ｈｙｐｅｒｖｉｓｏｒ）型仮想マシンモニタ（「ハイパーバイザ」ともいう）と、
（ｂ）サーバのＯＳ上のアプリケーションとして実装されているホストＯＳ型仮想マシンモニタ等がある。
【０００５】
図９は、ハイパーバイザ（Ｈｙｐｅｒｖｉｓｏｒ）型仮想マシンモニタ構成のサーバ仮想化技術のいくつかの典型例のうちの一例（関連技術１）を模式的に示す図である。図９を参照すると、サーバ１０Ｂにおいて、ハードウェア１５Ｂの上に、ハイパーバイザ型仮想マシンマシンモニタ（単に「ハイパーバイザ」という）１４Ｂを備えている。ハイパーバイザ１４Ｂの上に複数の仮想マシンが実装される。複数の仮想マシンは、管理ＯＳ用仮想マシン１１Ｂ、ゲストＯＳ用仮想マシン１２Ｂ、１３Ｂを備えている。仮想マシンを管理するドメインはドメイン０ともいう。また、例えば業務等を稼動させるドメインは、ゲストドメインともいう。ドメイン０では管理ＯＳ１１５Ｂ（例えばＬｉｎｕｘ：登録商標等）が動作し、ゲストドメインを管理する。ゲストドメインでは、例えばサーバ１０Ｂで動作するＯＳがゲストＯＳ１２５、１３５として動作する。なお、ゲストＯＳ用仮想マシンは２つに限定されるものでないことは勿論である。
【０００６】
図９の例では、管理ＯＳ用仮想マシン１１Ｂは、管理ＯＳ１１５Ｂ、仮想ＣＰＵ１１１、メモリ１１２、ネットワークデバイスドライバ１１３、実デバイスドライバ１１４Ｂ、仮想ネットワーク１１６、仮想デバイス１１７Ｂを備えている。
【０００７】
ゲストＯＳ用仮想マシン１２Ｂ（１３Ｂ）は、アプリケーション（Ａｐｐｌｉｃａｔｉｏｎ）１２６（１３６）、ゲストＯＳ１２５（１３５）、仮想ネットワークインタフェース（Ｖｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  ）１２３（１３３）、仮想デバイスドライバ１２４Ｂ（１３４Ｂ）、仮想ＣＰＵ１２１（１３１）、メモリ１２２（１３２）を備えている。なお、アプリケーション１２６（１３６）とゲストＯＳ１２５（１３５）の間には、例えばミドルウェア、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｉｎｔｅｒｆａｃｅ）等が配置されるが、図９では省略されている（他の図も同様とされる）。
【０００８】
ハードウェア１５Ｂは、ＣＰＵ（物理ＣＰＵ）１５１、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等からなるメモリ１５２、ネットワークインタフェース１５３、デバイスインタフェース１５４Ｂ、デバイスインタフェース１５４Ｂに接続される実デバイス２０Ｂ等を含むハードウェア装置群からなる。ただし、ハードウェア１５Ｂが、これらのハードウェア装置に制限されるものでないことは勿論である。ＣＰＵ１５１は、複数のＣＰＵ（ＣＰＵコア）で構成してもよい。特に制限されないが、実デバイス２０Ｂは、例えばＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）からなるローカルストレージ（例えばサーバコンピュータに直接接続されたストレージ（内蔵又は外付ストレージ））や、その他の任意の周辺機器を含む。ローカルストレージは、デバイスインタフェース１５４Ｂとして例えばＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）等を用いファイバチャネル（ＦＣ）等で接続されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）装置を備えた構成としてもよい（ＳＡＮでは遠隔のストレージがローカルストレージとして扱われる）。
【０００９】
ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）等のネットワークインタフェース１５３は、特に制限されないが、例えばＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等のネットワーク３０に接続される。ネットワーク３０には、ネットワークノード（デバイス）４０Ｂ、５０Ｂが接続される。ネットワークノード４０Ｂ、５０Ｂとして、例えばＴＣＰ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ネットワークに接続され、例えばＮＦＳ（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）プロトコル等でアクセスされるＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）装置等をサーバのリモートストレージとして接続してもよい。
【００１０】
特に制限されないが、ハイパーバイザ１４Ｂは、ＣＰＵ１５１、メモリ１５２、ネットワーク３０、実デバイス２０Ｂ等のハードウェアリソース（物理的資源）を仮想資源に分割し、仮想資源を単位として、仮想マシンへの仮想化資源の割り当ての制御・管理を行う。図９では、仮想マシンに、ＣＰＵ１５１の割当をスケジュールするＣＰＵスケジューラ１４１、メモリ１５２の割当を行うメモリ管理ユニット１４２Ｂを備えたハイパーバイザ１４Ｂが例示されている。
【００１１】
ハイパーバイザ１４Ｂにおいて、ＣＰＵスケジューラ１４１は、仮想マシン１１Ｂ、１２Ｂ、１３Ｂに対して、仮想ＣＰＵ１１１、１２１、１３１の割当てのスケジューリングを行う。すなわち、ＣＰＵスケジューラ１４１では、仮想ＣＰＵ１１１、１２１、１３１として、ＣＰＵ（物理ＣＰＵ）１５１をどれだけ割当てるか、その配分を決定する。配分としては、仮想マシンに割当てる、単位仮想ＣＰＵの個数の比、あるいは、ＣＰＵ能力の配分比（ウェイト）が用いられる。なお、ＣＰＵスケジューラ１４１として、仮想マシンの負荷等に応じて、仮想マシンへのＣＰＵ１５１の割当（配分比）を動的に調整する構成等を用いてもよい。
【００１２】
またハイパーバイザ１４Ｂにおいて、メモリ管理部１４２Ｂは、メモリ（物理メモリ）１５２を分割し、分割したメモリ領域を、仮想マシン１１Ｂ、１２Ｂ、１３Ｂに割り当てる。図９の例において、仮想マシン１１Ｂ、１２Ｂ、１３Ｂに割当てられるメモリの容量の合計は、例えば、メモリ１５２のメモリ容量以下となるように設定される。仮想マシン１１Ｂ、１２Ｂ、１３Ｂは、各仮想マシンに割り当てられたメモリをそれぞれ占有する（ただし、メモリは仮想マシン間で共有される共有メモリ構成としてもよい）。仮想マシン１１Ｂ、１２Ｂ、１３Ｂへのメモリの割当ては、例えば、
・仮想マシンを停止した状態等で設定するものや、あるいは、
・仮想マシンの稼動状況（現在のワークロード）に基づいて仮想マシンへ割当てるリソース（メモリ割当て量）を動的に変更する機能が実装される場合もある。
【００１３】
ゲストＯＳ用仮想マシン１２Ｂ（１３Ｂ）において、仮想ネットワークインタフェース（仮想ネットワークデバイスドライバ）１２３（１３３）は、仮想デバイスドライバ方式で各ドメインに割当てられたネットワークインタフェースである。
【００１４】
ゲストＯＳ用仮想マシン１２Ｂ（１３Ｂ）は、仮想デバイスドライバ１２４Ｂ（１３４Ｂ）を介して、バックエンド（ドメイン０）側の実デバイス２０Ｂにアクセスする。
【００１５】
ハードウェアを完全に仮想化しゲストＯＳの改造等を不要とした完全仮想化方式（Ｆｕｌｌ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）でサーバ仮想化を実現する場合、管理ＯＳ用仮想マシン１１Ｂ上の仮想デバイス１１７Ｂは、デバイスエミュレータとして実装してもよい。デバイスエミュレータで構成された仮想デバイス１１７Ｂは、実デバイス２０Ｂのエミュレーションを行う。ここでエミュレーションとは、特定のハードウェア向けのソフトウェアを別のハードウェアで実行することをいう。デバイスエミュレータは、例えば、デバイス内のコントローラ（ストレージデバイスでは、ストレージコントローラ）における割り込み等のエミュレーションを行う。
【００１６】
特に制限されないが、図９に示したサーバ仮想化の関連技術において、デバイスエミュレータとして実装された仮想デバイス１１７Ｂは、ユーザプロセスとしてユーザ空間（Ｕｓｅｒ  Ｓｐａｃｅ）上で動作する。この場合、仮想ネットワーク１１６も同様とされる。管理ＯＳ用仮想マシン１１Ｃの仮想デバイス１１７Ｂは、管理用ＯＳ１１５Ｂの上層のユーザ空間に配置され、ゲストＯＳ用仮想マシン１２Ｂ、１３Ｂのアプリケーション１２６、１３６と同様のレイヤとして図示されている。
【００１７】
管理ＯＳ用仮想マシン１１Ｂの仮想デバイス１１７Ｂは、物理的な実デバイス２０ＢをゲストＯＳ用仮想マシン１２、１３に対して、仮想的なデバイスとして見せる。後述される本発明の実施形態では、仮想デバイス１１７Ｂを、仮想ストレージとした例が説明される。
【００１８】
仮想マシン１２Ｂ（１３Ｂ）上のアプリケーション１２６（１３６）は、以下の手順で、実デバイス２０Ｃにアクセスする。以下では、仮想マシン１２Ｂからのアクセスを例に説明するが、仮想マシン１３Ｂについても、同様とされる。また、アクセスの順序を示す番号は、図９の矢線に付加された番号（括弧内の数字）に対応する。
【００１９】
（１）仮想マシン（ゲストＯＳ用仮想マシン）１２Ｂ上で実行されるアプリケーション１２６からのデバイスアクセス要求は、ゲストＯＳ１２５に入力されて解析され、ゲストＯＳ１２５から、仮想デバイスドライバ１２４Ｂに対して、アクセス要求が発行される。なお、アプリケーション１２６のアクセス要求は、コンパイラ等で当該アクセスに対応するシステムコールあるいはＳＶＣ（Ｓｕｐｅｒｖｉｓｏｒ  Ｃａｌｌ）命令に展開され、アクセス要求実行時は、当該システムコール（ＳＶＣ命令）がゲストＯＳ１２５に発行される。
【００２０】
（２）仮想デバイスドライバ１２４Ｂはアクセス要求を受け、該アクセス要求をハイパーバイザ１４Ｂに出力する。
【００２１】
（３）ハイパーバイザ１４Ｂでは、仮想デバイスドライバ１２４Ｂからのアクセス要求を、管理ＯＳ用仮想マシン１１Ｂの管理ＯＳ１１５Ｂを介して、デバイスエミュレータからなる仮想デバイス１１７Ｂに渡す。
【００２２】
（４）仮想デバイス１１７Ｂは、アクセス要求を受信すると、実デバイスドライバ１１４Ｂに、アクセス要求を発行する。
【００２３】
（５）実デバイスドライバ１１４Ｂからのアクセス要求は、デバイスインタフェース１５４Ｂを介して、実デバイス２０Ｂに設定され、実デバイス２０Ｂで実際のアクセスが行われる。実デバイス２０Ｂをストレージデバイスとし、仮想デバイス１１７Ｂを仮想ストレージとした場合、同様な手順で、アクセスが行われる（アクセスコマンドは、例えばＯｐｅｎ／Ｃｌｏｓｅ、Ｒｅａｄ／Ｗｒｉｔｅ等からなる）。
【００２４】
特に制限されないが、上記（２）において、例えば以下の実装が用いられる。仮想デバイスドライバ１２４Ｂは、アプリケーション１２６からゲストＯＳ１２５を介して伝達されたアクセス要求を受け、ハードウェア命令（例えばトラップ命令等）に変換し、ハイパーバイザ１４Ｂを経由して、ＣＰＵ１５１に渡す。当該ハードウェア命令（トラップ命令等）は、例えばＣＰＵ１５１に例外（ｅｘｃｅｐｔｉｏｎ）を発生させる所定の命令（例えばＣＰＵ１５１で直接実行できない命令等）とする。ＣＰＵ１５１で、当該ハードウェア命令（トラップ命令等）を実行し、例外（ｅｘｃｅｐｔｉｏｎ）発生時（ソフトウェア割り込み発生時）、ＣＰＵ１５１では、ＣＰＵ１５１の現在の（その時点における）状態レジスタ等を退避して、コンテキスト・スイッチングを行い、当該例外（ｅｘｃｅｐｔｉｏｎ）に関連付けされたハイパーバイザ１４Ｂ内の例外処理ハンドラ（トラップハンドラ）に制御を移す。
【００２５】
ハイパーバイザ１４Ｂにおける例外処理ハンドラは、当該アクセス要求（システムコールで指定されたパラメータやデータあるいはアドレスポインタ等を含む）を、管理ＯＳ用仮想マシン１１ＢのゲストＯＳ１２５を介して、例えば、ユーザプロセスでアクセス可能なアドレス空間（ユーザ空間）に変換した上で、仮想デバイス１１７Ｂに、当該アクセス要求を渡す。ハイパーバイザ１４Ｂにおける例外処理ハンドラでは、この段階で、例外処理を終了し（ソフトウェア割り込み処理終了）、先に退避しておいた状態レジスタ等を復帰し、ＣＰＵ１５１では、前記例外トラップを発生させた命令の次の命令の実行等が行われる。アクセス要求に対する実デバイス２０Ｂからの完了通知等の応答は、実デバイスドライバ１１４Ｂから、例えば割り込み等を用いて、アクセス要求とは反対方向に、アプリケーション１２６にまで通知される。
【００２６】
仮想マシン１２Ｂの仮想デバイスドライバ１２４Ｂでは、アクセス要求に対して、ＣＰＵ１５１に例外を発生させるトラップ命令を生成するが、仮想マシン１１Ｂの仮想デバイス１１７Ｂでは、ハイパーバイザ１４Ｂから渡されたアクセス要求を解釈し、ＣＰＵ１５１で実行可能な命令に変換した上、実デバイスドライバ１１４Ｂに渡す（上記（４））。仮想マシン１１Ｂの実デバイスドライバ１１４Ｂでは、アクセス要求に対応して、ＣＰＵ１５１で実行可能な命令を実行することで、デバイスインタフェース１５４Ｂを制御する。
【００２７】
入出力デバイス（ハードウェア）の仮想化において、仮想デバイス１１７Ｂをデバイスエミュレーションにて構成するのではなく、図１０に示す例のように、ゲストＯＳ用仮想マシン１２Ｃ、１３Ｃにおいて、準仮想化方式（Ｐａｒａ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）の仮想デバイスドライバであるフロントエンドデバイスドライバ１２８、１３８の出力を、ハイパーバイザ１４Ｃを介して、管理ＯＳ用仮想マシン１１Ｃのバックエンドデバイスドライバ（ｂａｃｋ  ｅｎｄ  ｄｅｖｉｃｅ  ｄｒｉｖｅｒ）１１８に入力し、バックエンドデバイスドライバ１１８から、実デバイスドライバ１１４Ｃにアクセス要求を転送する構成としてもよい。なお、図１０では、仮想ネットワーク、ネットワークデバイスドライバ、ネットワークインタフェース等は省略されている。
【００２８】
図９において、管理ＯＳ用マシン１１Ｂ（ドメイン０）の仮想ネットワーク１１６は、仮想マシン１２Ｂ、１３Ｂと外部のネットワーク３０を接続するためのネットワークである。特に制限されないが、仮想ネットワーク１１６は、例えば、仮想マシン１２Ｂ、１３Ｂの仮想ネットワークインタフェース１２３、１３３と、ネットワークインタフェース（物理ネットワークインタフェース）１５３間の通信接続を制御する仮想ブリッジ（仮想スイッチ）として構成してもよい。各仮想マシン１２Ｂ、１３Ｂは、仮想ネットワーク１１６を介して外部のネットワーク３０へのアクセスを行う。また仮想ネットワーク１１６を介して、仮想マシン間通信が行われる。なお、仮想マシン１２Ｂ、１３Ｂの仮想ネットワークインタフェース１２３、１３３は、管理ＯＳ１１５（例えばＬｉｎｕｘ：登録商標）内のＴＡＰデバイス（Ｅｔｈｅｒｎｅｔ（登録商標）をシミュレートするデバイス）を介して仮想ブリッジ（仮想ネットワーク１１６）に接続するようにしてもよい。特に制限されないが、例えば、この仮想ブリッジにＩＰアドレスを割り振り、仮想マシン１２Ｂ、１３Ｂから仮想ネットワーク１１６に到着したパケットの送信元アドレス（ｓｏｕｒｃｅ  ａｄｄｒｅｓｓ）を、ネットワークインタフェース１５３のＩＰアドレスに変換してネットワーク３０に送出するようにしてもよい。あるいは、仮想ブリッジを、ネットワークインタフェース１５３に接続し、仮想マシンに、ネットワーク３０と同じサブネットのＩＰアドレスを割当てるようにしてもよい。なお、図９では、仮想ネットワーク１１６をデバイスエミュレーション方式の仮想デバイス１１７Ｂに対応させて図示しているが、仮想ネットワーク１１６を、管理ＯＳ１１５Ｂ内に組み込んだ構成としてもよい。あるいは、仮想マシン１２Ｂ、１３Ｂの仮想ネットワークインタフェース１２３、１３３を、図１０のフロントエンドドライバ１２８、１３８で構成し、管理ＯＳ用仮想マシン１１Ｂにバックエンドドライバ（図１０のバックエンドドライバ１１８）を備え、管理ＯＳ用仮想マシン１１Ｂのバックエンドデバイスドライバから、実デバイスドライバであるネットワークデバイスドライバにアクセス要求を渡す構成としてもよい。
【００２９】
なお、仮想化されたハードウェア資源の仮想マシンへの動的割り当てに関して例えば特許文献１が参照される。また、特許文献２には、ファイルシステムのデータキャッシングが開示され、ディスクアレイ装置がホストコンピュータからの情報によってキャッシュメモリ上に配置するデータの優先度を決定してキャッシュメモリを効果的に使用する例として、シーケンシャルアクセスの頻度が高ければ、キャッシュメモリには、なるべく多くのデータは残さないように、逆に、ランダムアクセスの頻度が高ければ、キャッシュメモリにできるように多くのデータを配置し、ホストコンピュータ側のデータ使用上の特性に応じてキャッシュするデータを選定し、データアクセス要求に対し高速な応答が可能となることが記載されている。特許文献３には、情報収集部が定期的にまたは不定期に、各サーバ管理部、各ストレージ管理部から、情報（負荷状態を示す情報、リソースの分配状況を示す情報、物理的または論理的な各要素の接続関係を示す情報等）を収集し、配置管理部が、各管理部にそれぞれリソースの再配置を要求し、どのリソースを削除するか、どのリソースを追加するか等は、情報収集部によって収集された情報に基づいて決定し、ストレージシステム内の各リソースの負荷状態に基づいて、アプリケーションプログラム単位で、リソースを再配置させる、構成が開示されている。
【先行技術文献】
【特許文献】
【００３０】
【特許文献１】特開２００９−１１０５１８号公報
【特許文献２】特開２００２−２０７６２０号公報
【特許文献３】特開２００７−０４７９８６号公報
【発明の概要】
【発明が解決しようとする課題】
【００３１】
以下に関連技術の分析を与える。
【００３２】
インターネットのサービスを行う際に必要となるＷｅｂサービスやシンクライアント等の利用者数や時間帯やアプリケーションの特性等によって負荷の変動が大きなサービス等に、サーバ仮想化技術を用いる場合、負荷のピーク等に必要なハードウェア・リソースを仮想マシンに動的に割当てることが必要とされる。これは、インターネット等のネットワークでは、負荷変動の幅が広く、全体から見れば、一部のアプリケーションやユーザが突出して負荷ピークを発生することが多い。予め負荷のピークに対応させてリソースを仮想マシンに対して用意しておくことは、システム上大きな無駄となる。このため、仮想マシンのワークロード等に基づいたＣＰＵ、メモリの動的割当機能を備えたサーバ仮想化技術の実用化研究が行われている。
【００３３】
しかしながら、サーバ仮想化でサーバ上に実装される仮想デバイス、例えば仮想ストレージ等での負荷等により生じるアクセス性能の低下を改善する具体的な手法は提案されていないというのが実情である。
【００３４】
本発明は、上記課題に鑑みて創案されたものであって、その目的は、仮想ストレージへの負荷等により生じるアクセス性能の低下を改善するコンピュータ装置、方法、プログラムを提供することにある。
【課題を解決するための手段】
【００３５】
本発明に関連するいくつかの側面の１つよれば、仮想マシンに対してストレージ装置の仮想化を行う仮想ストレージを備え、
前記仮想化ストレージが、
前記仮想マシンからの前記ストレージ装置へのライトデータ、及び、前記ストレージ装置から読み出されたリードデータを一時的に蓄積するキャッシュメモリと、
前記仮想マシンから前記ストレージ装置への複数のアクセス要求を解析しアクセスのパタンがランダムであるか否か判定するアクセスパタン解析手段と、
前記アクセスパタン解析手段により、前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、前記キャッシュメモリの利用度に応じて、前記キャッシュメモリのメモリ容量の増減を制御するキャッシュ管理手段と、を備えたコンピュータ装置が提供される。
【００３６】
本発明の別の側面によれば、仮想マシンからのストレージ装置へのライトデータ、及び、前記ストレージ装置から読み出されたリードデータを一時的に蓄積するキャッシュメモリを備え、前記仮想マシンに対して前記ストレージ装置の仮想化を行う仮想ストレージによる制御方法であって、
前記仮想マシンから前記ストレージ装置への複数のアクセス要求を解析しアクセスのパタンがランダムであるか否か判定し、
前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、前記キャッシュメモリの利用度に応じて、前記キャッシュメモリのメモリ容量の増減を制御する、制御方法が提供される。
【００３７】
本発明のさらに別の側面によれば、
仮想マシンからのストレージ装置へのライトデータ、及び、前記ストレージ装置から読み出されたリードデータを一時的に蓄積するキャッシュメモリを備え、前記仮想マシンに対して前記ストレージ装置の仮想化を行う仮想ストレージを備えたコンピュータに、
前記仮想マシンから前記ストレージ装置への複数のアクセス要求を解析しアクセスのパタンがランダムであるか否か判定する処理と、
前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、前記キャッシュメモリの利用度に応じて、前記キャッシュメモリのメモリ容量の増減を制御する処理と、
を実行させるプログラムが提供される。また本発明の別の側面によれば、該プログラムを記録した記録媒体（半導体メモリ、磁気／光ディスク等）が提供される。
【発明の効果】
【００３８】
本発明によれば、仮想ストレージへの負荷等により生じるアクセス性能の低下を改善することができる。
【図面の簡単な説明】
【００３９】
【図１】実施形態１の構成を示す図である。
【図２】仮想ストレージの構成を示す図である。
【図３】実施形態１の動作を説明する流れ図である。
【図４】実施形態１の動作を説明する流れ図である。
【図５】ライトキャッシュの管理テーブルの例を示す図である。
【図６】リードキャッシュの管理テーブルの例を示す図である。
【図７】実施形態２の構成を示す図である。
【図８】仮想ストレージの構成を示す図である。
【図９】サーバ仮想化技術１を説明する図である。
【図１０】サーバ仮想化技術２を説明する図である。
【図１１】本発明に形態の基本概念を説明する図である。
【発明を実施するための形態】
【００４０】
いくつかの好ましい形態の１つにおいては、図１１を参照すると、サーバ等のコンピュータ装置（１０）は、仮想マシン（ＶＭ）に対してストレージ装置の仮想化を行う仮想ストレージ（１１７）を備えている。前記仮想化ストレージ（１１７）は、
・仮想マシン（ＶＭ）からのストレージ装置へのライトデータ、及び、前記ストレージ装置から読み出されたリードデータを一時的に蓄積するキャッシュメモリ（１１７−１）と、
・仮想マシン（ＶＭ）から前記ストレージ装置への複数のアクセス要求を解析しアクセスのパタンがランダムであるか否か判定するアクセスパタン解析手段（１１７−２）と、
・前記アクセスパタン解析手段（１１７−２）により、前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、前記キャッシュメモリ（１１７−１）の利用度に応じて、前記キャッシュメモリ（１１７−１）のメモリ容量の増減を制御するキャッシュ管理手段（１１７−３）と、
を備えている。
【００４１】
好ましい形態の１つにおいて、前記キャッシュ管理手段（１１７−３）は、
・前記アクセスパタン解析手段（１１７−２）により、前記仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、
前記キャッシュメモリ（１１７−１）の利用度が予め定められた第１の閾値以上の場合、前記キャッシュメモリ（１１７−１）のメモリ容量を増大させ、
前記キャッシュメモリ（１１７−１）の利用度が予め定められた第２の閾値（第１の閾値よりも小）以下の場合には、前記キャッシュメモリ（１１７−１）のメモリ容量を減少させる構成としてもよい。
【００４２】
好ましい形態の１つにおいて、前記キャッシュ管理手段（１１７−３）は、前記アクセスパタン解析手段（１１７−２）により、前記仮想マシン（ＶＭ）から前記ストレージ装置へのアクセスのパタンがランダムでないと判定された場合、
前記キャッシュ管理手段（１１７−３）は、前記キャッシュメモリ（１１７−１）のメモリ容量を減少させる構成としてもよい。
【００４３】
好ましい形態の１つにおいて、前記キャッシュ管理手段（１１７−３）は、
・前記キャッシュメモリ（１１７−１）のメモリ容量の増大を、
前記コンピュータ装置（１０）の物理メモリから取得したメモリ領域を、前記キャッシュメモリへ追加することで行い、
・前記キャッシュメモリ（１１７−１）のメモリ容量の減少を、
前記キャッシュメモリ（１１７−１）のメモリ領域の一部を削除し、前記物理メモリへ返却することで行う
構成としてもよい。
【００４４】
いくつかの実施形態の１つにおいて、サーバ（図１の１０）上の仮想マシン（ＶＭ）に対して、ストレージ装置（例えば図１の２０）の仮想化を行う仮想ストレージ（例えば図１の１１７）は、
・前記仮想マシンのアプリケーションからの前記ストレージ装置へのライトデータ、及び、前記ストレージ装置から読み出されたリードデータを一時的に蓄積するキャッシュメモリ（図２の１１７−１）と、
・前記仮想マシンのアプリケーションから前記ストレージ装置へのアクセス要求を解析し、アクセスのパタンがランダムであるか否かを判定するアクセスパタン解析手段（図２の１１７−２）と、
・前記アクセスパタン解析手段（図２の１１７−２）により、仮想マシンから前記ストレージ装置へのアクセスのパタンがランダムであると判定された場合、
前記キャッシュメモリ（図２の１１７−１）の利用率が予め定められた第１の閾値以上の場合、前記キャッシュメモリのメモリ容量を増大させ、
前記キャッシュメモリの利用率が予め定められた第２の閾値未満（第２の閾値＜第１の閾値）の場合には、前記キャッシュメモリのメモリ容量を減少させる、
制御を行うキャッシュ管理手段（図２の１１７−３）と、
を備えている。
【００４５】
いくつかの実施形態の１つにおいて、仮想マシンのアプリケーションからの仮想ストレージに対するアクセスについて、アクセスパタン解析手段（図２の１１７−２）でアクセスパタンの解析を行い。解析の結果、
ランダムアクセスに関して、仮想ストレージのキャッシュメモリ（図２の１１７−１）の利用率が第１の閾値以上の場合、
キャッシュ管理手段（図２の１１７−３）は、ＶＭＭ（ハイパーバイザ）（図１の１４）に依頼して、キャッシュメモリ（図２の１１７−１）のメモリ容量を増加させ、
仮想ストレージのキャッシュメモリ（図２の１１７−１）の利用率が第２の閾値に満たない場合、
キャッシュ管理手段（図２の１１７−３）は、キャッシュメモリ（図２の１１７−１）の余剰メモリをＶＭＭ（ハイパーバイザ）（例えば図１の１４）を介して物理メモリ（例えば図１の１５２）に返却する。シーケンシャルなアクセスに関して、キャッシュによる性能改善効果が見込めないと判定し、キャッシュ管理手段（図２の１１７−３）は、仮想ストレージのキャッシュメモリ（図２の１１７−１）のメモリ容量を減らす。
【００４６】
例えば複数の情報源からストレージへの書き込み等により、負荷が高い場合には、ストレージアクセスとして、ランダムライトとなる。例えば、ハードディスクドライブ（ＨＤＤ）等の媒体（ディスク）において、シーク時間（磁気ヘッドをアクセス対象データのトラックまで移動）、サーチ時間（アクセス対象データが磁気ヘッドの下に来るまでの時間）等により、ランダムライトでは、先頭のアクセスアドレスから順に書き込むシーケンシャルなライトよりも、アクセス性能が低くなる。そこで、一実施形態では、ランダムライトのアクセス要求に対して、キャッシュメモリにキャッシュされたライトデータを、アクセスアドレス順にソートし、アクセスアドレス順に、ライトコマンドをデバイスドライバに出力し、ストレージに書き出すことで、ストレージの性能、スループットを改善する。このとき、仮想ストレージのキャッシュメモリのメモリ容量を多く確保した方が、アクセス性能上、有利であることから、ＶＭＭ（ハイパーバイザ）に依頼して、仮想ストレージのキャッシュメモリのメモリ容量を増加させる。
【００４７】
また、例えばサーバでＷｅｂアクセス等のサービス等の実行により負荷が高い場合、ストレージのアクセスパタンとしては、ストレージのデータを参照するリードアクセスが多くなる。サーバ仮想化技術において、複数の仮想マシン上でこれらのサービスが行うと、ストレージへのアクセスはランダムリードとなる。
【００４８】
Ｗｅｂアクセスにおいて、同一のＷｅｂページが参照されることで、負荷が急増する場合がある。一実施形態では、同一Ｗｅｂページのデータ（リードデータ）等、参照頻度の高いデータをキャッシュメモリ上に保持し、参照頻度の低いデータを消去することで、仮想マシンのアクセス応答が改善される。
【００４９】
上記の通り、実施形態によれば、ランダムなライトあるいはランダムなリードアクセスの場合、ストレージのキャッシュメモリの利用率が予め定められた第１の閾値以上である場合、キャッシュメモリのメモリ容量の拡張を行う。
【００５０】
シーケンシャルライトの場合、キャッシュメモリ上でのアドレス順による並び替えによるアクセス時間の短縮効果や、同一データ読み出しによる性能改善は見込めない。また、シーケンシャルアクセスのデータに対して、キャッシュメモリのメモリ容量を多く確保すると、ＶＭＭ（ハイパーバイザ）で管理するメモリ容量を使い果たす可能性もある。
【００５１】
そこで、実施形態によれば、シーケンシャルアクセスでは、ランダムアクセスとは異なり、ＶＭＭ（ハイパーバイザ）に対して、キャッシュメモリのメモリの容量を削減する依頼を行い、その分、他の仮想マシン上のメモリ割当容量を増加させる。実施形態によれば、仮想ストレージへのアクセスにおいて、例えば仮想マシン上の特定のアプリケーションの負荷が増加（ピークの発生）した際に、仮想マシンでの仮想ストレージへのアクセスのボトルネックを改善する。ＶＭＭ（ハイパーバイザ）のＣＰＵスケジューラ、メモリ管理部は、ボトルネックとなりやすい仮想ストレージに対するリソースを、動的に増減し、アプリケーションの負荷のピークに対応可能としている。以下、実施形態について詳細に説明する。
【００５２】
＜実施形態１＞
図１は、実施形態１の構成を示す図である。図１において、図９と同一の要素には同一参照符号が付されている。実施形態１では、前述したように、図９の仮想デバイス１１７Ｂを仮想ストレージ１１７とし、図９の管理ＯＳ用仮想マシン１１Ｂの実デバイスドライバ１１４Ｂを、ストレージデバイスドライバ１１４とし、図９のデバイスインタフェース１５４Ｂを、ストレージインタフェース１５４とし、ゲストＯＳ用仮想マシン１２Ｂ、１３Ｂの仮想デバイスドライバ１２４Ｂ、１３４Ｂを、仮想ストレージデバイスドライバ１２４、１３４とし、図９のハイパーバイザ１４Ｂのメモリ管理部１４２Ｂをメモリ管理部１４２とし、図９の実デバイス２０Ｂを、ストレージデバイス２０（ローカルストレージ）としている。ストレージデバイス２０は、サーバ１０内に内蔵又は外付けされ、コントローラ（ストレージコントローラ）２１と、１台以上で構成されるＨＤＤやＳＳＤ等の媒体２２を備えている。
【００５３】
仮想ストレージ１１７は、物理的なストレージデバイス２０のコントローラ２１を、ゲストＯＳ用仮想マシン１２、１３に対して、仮想的なストレージとして見せる。ストレージデバイス２０の仮想化は、ディスク、イメージファイル（ディスク等と同じ構造を持つファイル）、パーティション（物理ディスクを論理的に区分した領域）、ＬＶＭ（Ｌｏｇｉｃａｌ  Ｖｏｌｕｍｅ  Ｍａｎａｇｅｒ：複数のディスクやパーティションの記憶領域を１つの論理的ディスクとして扱う）等の形式で割当が行われる。以下では、主に、図９との相違点について説明し、同一部分の説明は重複を回避するため、適宜省略する。
【００５４】
管理ＯＳ用仮想マシン１１（ドメイン０）の仮想ストレージ１１７は、特に制限されないが、例えば図９と同様に、デバイスエミュレーション方式で構成され、仮想マシン１２、１３に対して、仮想的なストレージとして見せる。仮想マシンのアプリケーション１２６（１３６）は、ゲストＯＳ１２５（１３５）を経由して仮想ストレージ１１７にアクセスする。
【００５５】
仮想マシン１２又は１３のアプリケーション１２６（１３６）からのアクセス要求を、管理ＯＳ１１５を介して受け取った仮想ストレージ１１７は、ストレージデバイスドライバ１５４を介してストレージデバイス２０にアクセスする。以下、仮想マシン１２（又は１３）からストレージデバイス２０のアクセスの手順を説明する。
【００５６】
（１）仮想マシン（ゲストＯＳ用仮想マシン）１２（１３）のアプリケーション１２６（１３６）で発行されたストレージアクセス要求は、ゲストＯＳ１２５（１３５）に入力されて解析され、仮想ストレージデバイスドライバ１２４（１３４）のアクセス要求が入力される。
【００５７】
（２）仮想ストレージデバイスドライバ１２４（１３４）は、アクセス要求をハイパーバイザ１４に渡す。
【００５８】
（３）ハイパーバイザ１４は、アクセス要求を、管理ＯＳ用仮想マシン１１の管理ＯＳ１１５を介して仮想ストレージ１１７に入力する。
【００５９】
（４）ストレージデバイス２０へのアクセス要求は、仮想ストレージ１１７から管理ＯＳ１１５に発行され、ストレージデバイスドライバ１１４に入力され、
【００６０】
（５）ストレージインタフェース１５４からローカルなストレージデバイス２０のコントローラ２１に転送され、媒体２２へのアクセスが行われる。
【００６１】
ストレージデバイス２０からのアクセスの応答（リードアクセスの場合、リードデータ）は、ストレージデバイスドライバ１１４、管理ＯＳ用仮想マシン１１の仮想ストレージ１１７、ハイパーバイザ１４を介して、アクセス要求と逆順の経路で仮想マシン１２のアプリケーション１２６に転送される。
【００６２】
完全仮想化方式でサーバ仮想化を構成し、仮想ストレージ１１７をデバイスエミュレータで構成した場合、前述したように、仮想ストレージデバイスドライバ１２４（１３４）は、アクセス要求をハードウェア命令（トラップ命令）に変換し、ハイパーバイザ１４を経由してＣＰＵ１５１に渡し、ＣＰＵ１５１では例えば例外トラップを発生させ、ハイパーバイザ１４は、該アクセス要求を管理ＯＳ用仮想マシン１１の管理ＯＳ１１５に渡し、仮想ストレージ１１７に入力する。実施形態において、ハードウェア仮想化の実装方式は、特定の方式に制限されない。例えば、図１０に示したような準仮想化方式（Para  Virtualization）において、ゲストＯＳ用仮想マシンの仮想ストレージデバイスドライバであるフロントエンドドライバの出力をハイパーバイザを介して、管理ＯＳ用仮想マシンのバックエンドデバイスドライバに入力し、バックエンドデバイスドライバから実デバイスドライバ（図１のストレージデバイスドライバ１１４）に転送する構成としてもよい。この場合、管理ＯＳ用仮想マシン１１のバックエンドデバイスドライバに、図１の仮想ストレージ１１７が実装される。バックエンドデバイスドライバ（仮想ストレージ）は、ユーザ空間で走行するユーザデバイスドライバとして実装する構成としてもよい（あるいは、カーネル空間に実装する構成としてもよい）。また、図１では、ハーパイバイザ型ＶＭＭを例に説明したが、ＶＭＭは、ハーパイバイザに制限されるものでなく、ホストＯＳ型ＶＭＭに対しても適用可能であることは勿論である。
【００６３】
図２は、図１の実施形態１の仮想ストレージ１１７を例示する図である。図２を参照すると、仮想ストレージ１１７は、キャッシュメモリ１１７−１、アクセスパタン解析手段１１７−２、キャッシュ管理手段１１７−３、アクセス要求処理手段１１７−４、コマンド・キャッシュ管理用の管理テーブル１１７−５、ストレージアクセス手段１１７−６を備えている。
【００６４】
アクセス要求処理手段１１７−４は、仮想マシン（図１の１２又は１３）からハイパーバイザ１４を経由して転送されたアクセス要求を受ける。また、該アクセス要求に対する応答を仮想マシン１２、１３に返す。アクセス要求処理手段１１７−４は、各仮想マシン１２、１３からのアクセス要求を受けると、アクセスコマンドを例えばキャッシュにプールする。特に制限されないが、アクセスコマンド（コマンド種別、先頭アクセスアドレス、データサイズ（バイト長）等）は、コマンドをプールするバッファとしても機能する管理テーブル１１７−５に格納し、ライトコマンドの場合、ライトデータを、データキャッシュとして機能するキャッシュメモリ１１７−１に格納する。
【００６５】
ライトアクセスの場合、アクセス要求処理手段１１７−４は、ライトデータを一時的にキャッシュメモリ１１７−１に蓄積するが、その際、管理テーブル１１７−５を参照して、キャッシュメモリ１１７−１にライトデータを格納するに足る空き領域があるか否か、すなわち、Ｗｒｉｔｅ  Ｈｉｔ／Ｍｉｓｓを判定する。十分な空き領域がある場合（Ｗｒｉｔｅ  Ｈｉｔ）、ライトデータを未使用領域（ページ）に格納し、当該ライトデータ格納先の先頭キャッシュアドレスを管理テーブル１１７−５の該当するアクセスコマンドのエントリに設定する。ライトデータのキャッシュへの書き込みが完了した時点で、アクセス要求処理手段１１７−４は、要求元である仮想マシンに対してライトアクセスの応答を返すようにしてもよい。
【００６６】
十分な空き領域がない場合（Ｗｒｉｔｅ  Ｍｉｓｓ）、アクセス要求処理手段１１７−４は、キャッシュ管理手段１１７−３に依頼して、キャッシュメモリ１１７−１からライトデータを格納するのに必要な領域分（ページ）のストレージへの書き出しを行うことで空き領域（空ページ）を確保する。アクセス要求処理手段１１７−４は、空き領域へのライトデータの書き込みを行う。この場合も、Ｗｒｉｔｅ  Ｈｉｔ時と同様、ライトデータのキャッシュへの書き込みが完了した時点で、アクセス要求処理手段１１７−４は、当該アクセス要求元の仮想マシンに応答を返す。
【００６７】
仮想マシン（図１の１２又は１３）からのアクセス要求がリードアクセス要求である場合、アクセス要求処理手段１１７−４は、アクセス対象のリードデータがキャッシュメモリ１１７−１に保持されている場合（Ｒｅａｄ  Ｈｉｔ）、キャッシュメモリ１１７−１に保持されているＨｉｔしたリードデータを、要求元の仮想マシンに応答として返す。一方、アクセス対象のリードデータがキャッシュメモリ１１７−１に保持されていない場合（Ｒｅａｄ  Ｍｉｓｓ）、ストレージアクセス手段１１７−６を介してストレージデバイス２０に対してリードアクセス要求が発行され、ストレージデバイス２０から読み出されたリードデータを、アクセス要求処理手段１１７−４を介して、当該リードアクセスの要求元の仮想マシンに応答として返却するとともに、キャッシュメモリ１１７−１に格納する。
【００６８】
本実施形態において、キャッシュメモリ１１７−１は、図１のハイパーバイザ１４のメモリ管理部１４２で割当てられたメモリ１５２の一部のメモリ領域を用いる。なお、管理テーブル１１７−５も、図１のメモリ１５２の一部のメモリ領域を用いてもよいし、図１の管理ＯＳ用仮想マシン１１に確保されたメモリ１１２の一部を専用で用いてもよい。また、仮想のストレージキャッシュを構成するキャッシュメモリ１１７−１として、ライトキャッシュとリードキャッシュをそれぞれ別々に備え、管理テーブル１１７−５として、ライトキャッシュ、リードキャッシュに対応して別々に備えた構成としてもよい。なお、本実施形態では、図１のメモリ管理部１４２は、キャッシュメモリ１１７−１のメモリ容量の増減によるメモリ（物理メモリ）１５２の増減管理、及び、仮想マシン１１、１２、１３の全て又は一部に対するメモリの容量の動的な割り当てを行う。
【００６９】
アクセスパタン解析手段１１７−２は、仮想マシン１２、１３から仮想ストレージ１１７に入力された一連のアクセスコマンド群（例えば数個ないし数十個のアクセスコマンド）を解析し、それがランダムアクセスであるかそれともシーケンシャルアクセスであるか判定する。アクセスパタン解析手段１１７−２はコマンドバッファ（管理テーブル１１７−５）にプールされているアクセスコマンド群（例えばライトアクセスの場合、ストレージへの書き出しを行う前の待機状態のコマンド群）を解析し、それがランダムアクセスであるかそれともシーケンシャルアクセスであるか判定する。アセスパタン解析手段１１７−５は、解析対象のアクセスコマンド群から、アクセスアドレスが連続である（すなわち、先頭アクセスアドレスが、一連のアクセスコマンド間で昇順に並ぶか、又は降順に並ぶ）場合に、シーケンシャルと判定し、それ以外はランダムと判定する。
【００７０】
なお、特に制限されないが、図２の管理テーブル１１７−５（コマンドバッファ）にプールされているアセスコマンドは、アクセスパタン解析手段１１７−２による解析が終了し、キャッシュメモリ１１７−１において、保持された当該アクセスコマンド（ライトコマンド）で指定したライトデータのストレージデバイス２０への書き込みが完了し、キャッシュメモリ１１７−１においてライトデータを格納していた領域（ページ）を、未使用領域とする時点で、クリア（削除）する構成としてもよい。リードアクセスの場合、リード処理が完了した時点（仮想マシンに応答返却時）で、アクセスパタン解析手段１１７−２は、コマンドバッファ（管理テーブル１１７−５）にプールされているリードコマンドをクリア（削除）するようにしてもよい。
【００７１】
アクセスパタン解析手段１１７−２により、アクセス状況がランダムアクセスであると判定されると、これを受けて、キャッシュ管理手段１１７−３は、キャッシュメモリ１１７−１の利用率の判定を行う。
【００７２】
キャッシュメモリ１１７−１は、例えば所定サイズ（例えば５１２バイト、１０２４バイト（＝１Ｋバイト）、４Ｋバイト、８Ｋバイト等）のページ単位でキャッシュ管理手段１１７−３内に記憶管理される、管理テーブル１１７−５で管理される。この場合、アクセス対象データは、ページアドレスとページ内のオフセットアドレスでアクセスされる。キャッシュメモリ１１７−１のデータの置換（追い出し）は、ページ単位に行われる。
【００７３】
キャッシュメモリ１１７−１の利用率（％）は、例えば、キャッシュメモリ１１７−１の全ページのうちどれだけのページが使用されているかを表し、次式で与えられる。
【００７４】
利用率＝（使用ページ数／ページ総数）×１００
【００７５】
キャッシュ管理手段１１７−３は、キャッシュメモリ１１７−１の利用率が予め定められた第１の閾値以上（例えば８０％以上）である場合、ハイパーバイザ１４のメモリ管理部１４２に対して、キャッシュメモリ１１７−１に用いるメモリ１５２の一部の領域の取得を依頼する。メモリ１５２の一部の領域が獲得されると、キャッシュ管理手段１１７−３は、獲得したメモリ領域を、キャッシュメモリ１１７−１の新たなデータ格納領域として配置し、管理テーブル１１７−５を更新する。なお、管理ＯＳ用仮想マシン１１に割当てられたメモリ１１２からキャッシュメモリ１１７−１用のメモリ領域を割当てるようにしてもよい。
【００７６】
キャッシュメモリ１１７−１の利用率が第２の閾値未満（例えば６０％未満）の場合、キャッシュ管理手段１１７−３は、ハイパーバイザ１４のメモリ管理部１４２に、キャッシュメモリ１１７−１において、不要なメモリ領域（ページ）を解放する旨をハイパーバイザ１４のメモリ管理部１４２に通知する。メモリ管理部１４２は、解放されたメモリ領域をメモリ１５２に戻す。なお、キャッシュメモリ１１７−１の不要メモリ領域を、管理ＯＳ用仮想マシン１１に割当てられたメモリ１１２に戻すようにしてもよい。
【００７７】
キャッシュ管理手段１１７−３は、キャッシュ管理手段１１７−３内の管理テーブル（不図示）を参照して、キャッシュメモリ１１７−１上のデータのアクセス頻度のチェックを行う。
【００７８】
管理テーブル１１７−５には、ライトコマンド用に、特に制限されないが、各エントリ毎に、
・アクセス時間
・アクセスアドレス(論理アドレス)、
・ライトデータを格納したキャッシュメモリ１１７−１の先頭アドレス（ページアドレス）、
・ライトデータのサイズ（バイト長、ブロック長、又はページ数）
等を含むようにしてもよい。
【００７９】
アクセス時間は、キャッシュメモリ１１７−１において当該ライトデータを格納したキャッシュ領域に対して最後にアクセスが行われた時間（例えば当該ライトデータがキャッシュ領域に格納された時間）である。アクセス時間が過去であればあるほど、アクセス頻度は低いことになる。なお、アクセス時間を、置換優先度情報（例えば非負の整数）に置き換えてもよい。
【００８０】
管理テーブル１１７−５は、特に制限されないが、リードコマンド用に、各エントリ毎に、
・アクセス時間
・アクセスアドレス(論理アドレス)、
・参照頻度
・リードデータを格納したキャッシュメモリ１１７−１の先頭アドレス（ページアドレス）、
・リードデータのサイズ（バイト長、ブロック長、又はページ数）
等を含むようにしてもよい。参照頻度は、現時点から過去所定時間内に当該ページが参照された回数である。なお、参照頻度を、置換優先度情報（例えば非負の整数）に置き換えてもよい。
【００８１】
キャッシュ管理手段１１７−３は、任意のタイミングでキャッシュメモリ１１７−１上のデータ（ページ）のチェックを行う。例えばライトアクセスに対してライトデータを格納するに足るキャッシュ領域が存在しない場合（Ｗｒｉｔｅ  Ｍｉｓｓ）、キャッシュ管理手段１１７−３は、ライトデータを格納する領域を確保するため、ページ置換を行う。あるいは、キャッシュ管理手段１１７−３は、定期的に（例えば一定時間間隔で）、キャッシュメモリ１１７−１上のデータ（ページ）のチェックを行う。キャッシュ管理手段１１７−３は、例えばキャッシュメモリ１１７−１に格納されてからその時点までに経過した時間が長いページから順に（あるいは、予め定められた所定時間を経過したページを全て）追い出しを行う。
【００８２】
キャッシュ管理手段１１７−３からのページ追い出しの指示を受けたストレージアクセス手段１１７−６は、追い出し対象ページのライトデータに関して、アクセスアドレスの順に、ストレージデバイス２０への書き出し(ディステージ)処理を行う。その際、ストレージアクセス手段１１７−６は、アクセスアドレスの最も小さい順ものから昇順、あるいは、アクセスアドレスの最も大きいものから降順にソートし、順次、ストレージデバイス２０に書き出すようにしてもよい。ソート用のワークメモリは、仮想ストレージ１１７内に専用で設けるようにしてもよいし、管理ＯＳ用仮想マシン１１のメモリ１１２のメモリ領域をワークメモリとして用いてもよい。
【００８３】
ストレージアクセス手段１１７−６は、キャッシュメモリ１１７−１のライトデータをストレージデバイス２０に書き出すディステージ処理にあたり、アクセスコマンド（ライトコマンド、アクセスアドレス、データサイズ等）をライトデータからなるアクセス要求を、書き込み対象ストレージデバイス２０のデバイスドライバであるストレージデバイスドライバ１１４に出力する。
【００８４】
キャッシュ管理手段１１７−３は、キャッシュメモリ１１７−１において、ストレージデバイス２０への書き出しが行われた格納領域（ページ）を、空領域（未使用ページ）として管理テーブルで管理する。
【００８５】
ストレージデバイスドライバ１１４はストレージインタフェース１５４を介してストレージデバイス２０のコントローラ２１へアクセス要求を転送し、該当する媒体２２へのアクセス（ライトアクセス）を行う。
【００８６】
キャッシュ管理手段１１７−３は、キャッシュメモリ１１７−１上のデータ（ページ）のチェックを行った結果、キャッシュメモリ１１７−１上に、蓄積されたリードデータについて、参照頻度の高いデータ（ページ）は保持し、参照頻度の低いデータ（ページ）を破棄する。破棄された参照頻度の低いページは、空ページとされる。
【００８７】
図３は、本実施形態の仮想ストレージ１１７の動作を説明する流れ図である。図１乃至図３を参照して、仮想ストレージ１１７の動作を説明する。
【００８８】
仮想ストレージ１１７のアクセス要求処理手段１１７−４は、仮想マシン１２又は１３からのアクセス要求を受信すると、管理テーブル１１７−５にコマンドを蓄積し、ライトデータの場合、キャッシュメモリ１１７−１（ライトキャッシュ）でＷｒｉｔｅ  Ｈｉｔするか否か（ライトデータを書き込むだけの十分な空き領域（ページ）があるか否か）を判定し、Ｗｒｉｔｅ  Ｈｉｔの場合、ライトデータをキャッシュメモリ１１７−１の空き領域（ページ）に書き込む。Ｗｒｉｔｅ  Ｍｉｓｓの場合、キャッシュメモリ１１７−１内のライトキャッシュのページの追い出しを行い空き領域を作成する。
【００８９】
仮想ストレージ１１７のアクセス要求処理手段１１７−４は、リードアクセスの場合、管理テーブル１１７−５（リードキャッシュの管理テーブル）を参照して、キャッシュメモリ１１７−１にリードデータを格納したページが存在するか（Ｒｅａｄ  Ｈｉｔするか）否かを判定し、Ｒｅａｄ  Ｈｉｔの場合、リードデータをキャッシュメモリ１１７−１から読み出し、要求元の仮想マシンに返し、Ｒｅａｄ  Ｍｉｓｓの場合、ストレージからデータを読み出し、空き領域（ページ）に書き込むとともに、要求元の仮想マシンにリードデータを応答として返す。
【００９０】
アセスパタン解析手段１１７−２は、その時点で、管理テーブル１１７−５にプールされている所定個数コマンド（Read/Write、アクセスアドレス等）を解析し、ランダムなアクセスか、シーケンシャルなアクセスであるか判定を行う（図３のＳ１０１）。
【００９１】
アクセスパタン解析手段１１７−２でランダムであると判定すると（図３のＳ１０２のＹｅｓ分岐）、キャッシュ管理手段１１７−３を介してキャッシュメモリ１１７−１の利用率の判定を行う（図３のＳ１０３）。
【００９２】
キャッシュメモリ１１７−１の利用率が第１の閾値以上（例えば８０％以上）である場合（図３のＳ１０４のＹｅｓ分岐）、ハイパーバイザ１４のメモリ管理部１４２に対してキャッシュメモリ１１７−１に用いるメモリ領域の割当を要求する（図３のＳ１０５）。
【００９３】
キャッシュ管理手段１１７−３は、メモリ領域が確保できると（図３のＳ１０６のＹｅｓ分岐）、キャッシュメモリ１１７−１の領域として配置する。
【００９４】
キャッシュメモリ１１７−１の利用率が第１の閾値未満（例えば８０％未満以上）である場合（図３のＳ１０４のＮｏ分岐）の場合、キャッシュメモリ１１７−１の利用率が閾値未満（例えば６０％以下）である場合（図３のＳ１０８のＹｅｓ分岐）、キャッシュ管理手段１１７−３は、メモリ管理部１４２に不要になったキャッシュメモリ１１７−１の領域を返却（解放）する旨を通知し（図３のＳ１０９）、キャッシュメモリ１１７−１の総メモリ容量を縮小する（図３のＳ１１０）。メモリ管理部１４２は、キャッシュ管理手段１１７−３から返却されたメモリを、サーバ１０全体の物理メモリとする。
【００９５】
アクセスパタン解析手段１１７−２でランダムアクセスでない（シーケンシャルアクセス）と判定すると（図３のＳ１０２のＮｏ分岐）、キャッシュ管理手段１１７−３は、メモリ管理部１４２に不要になったキャッシュメモリ１１７−１の領域を返却する旨を通知し（図３のＳ１０９）、キャッシュメモリ１１７−１の総メモリ容量を縮小する（図３のＳ１１０）。メモリ管理部１４２は、キャッシュ管理手段１１７−３から返却されたメモリを、サーバ１０全体の物理メモリとする。
【００９６】
次に、仮想ストレージ１１７において、キャッシュメモリ１１７−１上のデータのチェックを行う場合の処理について図４を参照して説明する。
【００９７】
キャッシュ管理手段１１７−３は、キャッシュメモリ１１７−１上のデータのチェックを行う（図４のＳ２０１）。
【００９８】
ライトデータの場合（図４のＳ２０２のＹｅｓ分岐）、例えば、キャッシュメモリ１１７−１（ライトキャッシュ）に格納された状態でストレージデバイス２０に書き込まれないまま一定時間経過したライトデータであるか否か判定し、一定時間経過したライトデータの場合（図４のＳ２０３のＹｅｓ分岐）、ストレージアクセス手段１１７−６は、アクセスアドレス順に並び替え（図４のＳ２０４）。そして、ストレージアクセス手段１１７−６は、アクセスアドレス順に、ストレージデバイスドライバ１１４にアクセス要求を出力し、アクセスアドレス順に、ライトデータをストレージデバイス２０へ書き出す（図４のＳ２０５）。
【００９９】
また、キャッシュメモリ１１７−１上に蓄積されたリードデータの場合は、参照頻度の高いページをキャッシュメモリ１１７−１に保存し（図４のＳ２０６のＮｏ分岐）。参照頻度の低い（一定期間の参照回数が所定値以下）のページの破棄を行う（図４のＳ２０７）。
【０１００】
ライトアクセスのあった場合は、キャッシュ管理手段１１７−３により、ライトキャッシュの管理テーブル１１７−５として、例えば図５に模式的に示すような、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）リストが作成される。図５のＬＲＵリストは、ライト管理テーブル内のエントリを、置換優先度の値の順に、各エントリを、線形に繋いで示したものである（先頭のエントリが最も置換され易く（追い出され易い）、最後尾のエントリが最も置換され難い）。
【０１０１】
図５の例では、ＬＲＵリストの先頭のエントリから先に、キャッシュメモリ１１７−１から追い出される。なお、図５では、ＬＲＵリストが構成された状態が模式的に示されているが、アクセスがあると、例えばＬＲＵリストの最後（エントリＮ４０４の直後）に追加が行われる。ＬＲＵリストに登録されたエントリと同じ場所にアクセスのあった場合は、そのエントリを再びリストの最後尾に接続する。図５の先頭で示される直後のエントリが一番アクセスされていないエントリになる。それぞれのエントリには、アクセスアドレス（ストレージアクセスアドレス）と、アクセス時間情報、ライトデータを格納するキャッシュメモリ１１７−１のアドレス（ページアドレス）を含む。
【０１０２】
キャッシュ管理の書き出し処理（ディステージ）は、例えば、一定時間毎のインターバル時間（通常数百ｍｓ〜数秒）を設け、該一定時間毎に、ＬＲＵリストの先頭から、エントリ中のアクセス時間情報を利用し、ある時間以上（通常数秒程度）経っているエントリを対象に、ストレージアクセス手段１１７−６で、アクセスアドレス順に、ライトデータの書き出しを実行する。その際、ストレージアクセス手段１１７−６は当該ライトデータのライトアクセス要求をストレージデバイスドライバ１１４に出力する。
【０１０３】
仮想ストレージ１１７において、アクセス要求処理手段１１７−４で受信されるランダムライトアクセス（仮想マシン１２、１３からのライトアクセス要求）が多い場合、キャッシュメモリ１１７−１に一旦蓄積される処理に、掃き出し（ディステージ）処理が間に合わず、ライトデータがキャッシュメモリ１１７−１に蓄積される割合が多くなる。この場合に、キャッシュ管理手段１１７−３では、キャッシュメモリ１１７−１の利用率が第１の閾値以上となると、ハイパーバイザ１４のメモリ管理部１４２に依頼して、メモリ１５２のメモリ領域をキャッシュメモリ１１７−１（ライトキャッシュ）に割り当てる。このため、キャッシュメモリ１１７−１において、より多くのライトデータ（ページ）の蓄積（プール）、及び、掃き出し（ディステージ）が可能となり、一時的なライトアクセスのピークを吸収可能とし、ライトデータをアクセスアドレス順に、ストレージデバイス２０に掃き出されることになる。この結果、ストレージデバイス２０へのスループットの向上が期待される。
【０１０４】
ライトアクセスのピークを越えると、キャッシュメモリ１１７−１からのディステージ量が、キャッシュメモリ１１７−１（ライトキャッシュ）へのライトデータ蓄積量を上回り、空き領域（空ページ）が増大し、キャッシュメモリ１１７−１（ライトキャッシュ）の利用率が下がる。キャッシュメモリ１１７−１（ライトキャッシュ）の利用率が低下し第２の閾値を下回ると、キャッシュ管理手段１１７−３は、キャッシュメモリ１１７−１（ライトキャッシュ）における余剰のメモリ領域をメモリ１５２に返却する。この結果、キャッシュメモリ１１７−１（ライトキャッシュ）における余剰のメモリ領域を、仮想ストレージ１１７のキャッシュメモリ１１７−１以外の用途への利用が可能となる。
【０１０５】
リードアクセスの場合には、ライトアクセスと同様に、キャッシュ管理手段１１７−３により、リードキャッシュの管理テーブル１１７−５の情報から、図６に模式的に示すようなＬＲＵリストが作成される。図６は、既にＬＲＵリストが構成された状態であるが、アクセスがあると、ＬＲＵリストの最後（最後尾のエントリＮ５０４の直後）に追加が行われる。ＬＲＵリストに登録されたエントリと同じ場所にアクセスのあった場合は、そのエントリを再びリストの最後尾に接続する。図６の先頭で示される直後のエントリが一番アクセスされていないエントリになる。それぞれのエントリには、ストレージのアクセスアドレス、アクセス時間情報、リードアクセスの頻度情報（同一アドレスのデータに何回アクセスを行ったか）、データを格納するキャッシュメモリ１１７−１のアドレス（ページアドレス）を含む。
【０１０６】
キャッシュメモリ１１７−１（リードキャッシュ）に保持されるリードデータは、一定時間参照されない状態の場合（あるいは参照頻度が所定値以下の場合）、キャッシュ管理手段１１７−３は、ライトアクセスとは異なり、そのまま破棄（キャッシュデータとしては無効にする）する。キャッシュメモリ１１７−１において、破棄されたリードデータをそれまで格納していた領域（ページ）は空き領域ジとなり、キャッシュメモリ１１７−１上で未使用領域（未使用ページ）となる。
【０１０７】
リードキャッシュの破棄の処理は、キャッシュ管理手段１１７−３が、例えば一定時間毎（数秒程度）、図６のＬＲＵの先頭からたどり、エントリ中のアクセス時間情報を参照して、ある時間以上（通常数秒程度）経っているエントリを対象に、アクセス頻度の少ないエントリから破棄の処理を行う。破棄にあたり、当該エントリに格納されているキャッシュメモリ１１７−１のアドレスで示されるメモリ領域（ページ）を解放する。この結果、キャッシュメモリ１１７−１内に空領域（未使用領域）が確保される。
【０１０８】
ライトアクセスと同様に、アクセス要求処理手段１１７−４で受信されるランダムリードアクセスが多い場合、キャッシュメモリ１１７−１（リードキャッシュ）において、参照頻度の低い格納領域（ページ）の破棄よりも、ストレージデバイス２０から読み出されキャッシュメモリ１１７−１（リードキャッシュ）に保持されるリードデータの蓄積量が多くなる。キャッシュ管理手段１１７−３で、キャッシュメモリ１１７−１（リードキャッシュ）の利用率が第１の閾値を超えると、メモリ管理部１４２は、キャッシュメモリ１１７−１にメモリを割り当てられることで、より多くのリードデータを蓄積可能となる。この状態では、各種雑多なリードデータがキャッシュされることになり、より多くのキャッシュメモリ１１７−１（リードキャッシュ）に保持される。しかしながら、参照頻度の低いデータは破棄され、キャッシュメモリ１１７−１（リードキャッシュ）には、参照頻度が相対的に高いリードデータが残ることとなる。この結果、キャッシュメモリ１１７−１（リードキャッシュ）は、利用効率の良い状態に近づく。
【０１０９】
リードアクセスのピークを越えると、キャッシュメモリ１１７−１（リードキャッシュ）において、データ格納領域（ページ）の破棄の処理が、リードデータの蓄積を上回るため、キャッシュメモリ１１７−１の利用率が下がる。メモリ管理部１４２は、余分に確保されていたキャッシュメモリ１１７−１の一部がハイパーバイザ１４のメモリ管理部１４２を介してメモリ１５２に返却され、仮想ストレージ１１７以外の用途に利用可能となる。
【０１１０】
仮想ストレージ１１７のアクセスパタン解析手段１１７−２で、シーケンシャルアクセスの判定を行った場合、ランダムアクセスの場合のような、並び替えによるアクセス時間の短縮効果や同一データ読み出しによる性能改善が見込めず、逆に、これらのデータに対してキャッシュメモリの容量を多く確保すると、サーバ１０のメモリ１５２が枯渇してしまう可能性がある。このため、ランダムアクセスの場合と異なり、キャッシュ管理手段１１７−３は、ハイパーバイザ１４のメモリ管理部１４２に対して、キャッシュメモリ１１７−１（リードキャッシュ）のメモリ容量を削減する依頼を行い、解放したメモリの、仮想マシンのメモリへの割当を可能とする。
【０１１１】
実施形態１によれば、仮想マシンが仮想ストレージにアクセスを行うに際して、仮想マシン上の特定アプリケーションの負荷が増加（ピークの発生）した際に、ボトルネックとなりやすいストレージのキャッシュメモリ容量を動的に増減し、これらのピークへの対応を可能とし、仮想ストレージへの負荷等により生じるアクセス性能の低下を改善可能としている。
【０１１２】
なお、上記実施形態１において、サーバ１０における仮想ストレージ１１７は、コンピュータプログラムで実現される。実施形態１によれば、仮想ストレージ１１７を実現するプログラムは、該プログラムを記録した記録媒体（半導体メモリ、磁気／光ディスク）として提供される。
【０１１３】
＜実施形態２＞
図７は、実施形態２の構成を示す図である。図７において、図１と同一の要素には同一の参照番号が付されている。実施形態２において、仮想ストレージ１１７Ａは、ネットワーク３０に接続されるストレージデバイス４０、５０を、仮想マシン１２、１３に対して仮想化して見せる。なお、ネットワーク３０に接続されるストレージデバイスは２台に制限されるものでなく１台であってもよいし、３台以上であってもよい。また、ストレージデバイス４０、５０において、媒体４２、５２を複数備えた構成が例示されているが、それぞれ１台の媒体で構成してもよいことは勿論である（ただし、媒体４２（５２）の本数を増やした方が、一般に、Ｗｒｉｔｅ（書き込み）のパーフォマンスは向上する。図７において、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）等のネットワークインタフェース１５３は、特に制限されないが、例えばＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等のネットワーク３０に接続される。ネットワークストレージデバイス４０、５０として、例えばＴＣＰ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ネットワークに接続され、ＮＦＳ（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）プロトコル等でアクセスされるＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）装置としてもよい。ストレージデバイス４０（５０）はコントローラ４１（５１）とＨＤＤ、ＳＳＤ等の媒体４２（５２）を備えている。なお、媒体４２（５２）は１つであってもよい。ストレージデバイス４０（５０）はＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋ  Ａｒｒａｙ）構成等としてもよい。サーバ１０Ａは、ストレージデバイス４０（５０）の論理ボリューム等がマウントされ、ファイルのトリー構造に繋がれ、ローカルなストレージとしてアクセスが行われる。特に制限されないが、仮想ストレージ１１７Ａは、図１と同様、ストレージのデバイスエミュレータとして構成されている。ただし、仮想ストレージ１１７Ａを、図１０のバックエンドドライバ１１８に実装する構成としてもよいことは勿論である。また、ＶＭＭをハイパーバイザのかわりに、ホストＯＳ型としてもよいことは勿論である。また、図７は、仮想ストレージ１１７Ａが、ネットワーク接続されるストレージを仮想化させたものである点を例示したものであり、サーバ１０Ｂは、内蔵ストレージ、あるいはローカストレージを備えた構成としてもよい。
【０１１４】
ゲストＯＳ用仮想マシン１２（１３）の仮想ストレージデバイスドライバ１２４（１３４）からのアクセス要求は、ハイパーバイザ１４、管理ＯＳ１１５を介して仮想ストレージ１１７Ａに受け渡される。仮想ストレージ１１７Ａは、当該アクセス要求がネットワーク３０に接続されたストレージデバイス４０又は５０宛てのアクセス要求であると判定すると、アクセス要求を、ネットワーク３０及びストレージデバイス４０又は５０の通信プロトコルに対応してパケット化し（例えばパケットヘッダをＴＣＰヘッダとし、ペイロードにハイパーバイザ１４から受信したアクセス要求（アクセスコマンド）を格納する）、このアクセス要求パケットをハイパーバイザ１４を介して仮想ネットワーク１１６Ａに転送する（図７）。仮想ネットワーク１１６Ａは、仮想ストレージ１１７Ａからのハイパーバイザ１４を介して転送されたアクセス要求を、仮想マシン１２（１３）の仮想ネットワークインタフェース１２３（１３３）からハイパーバイザ１４を経由して転送されたネットワークアクセス要求と同様に処理し、アクセス要求パケット（送信先（ｄｅｓｔｉｎａｔｉｏｎ）アドレスはストレージデバイス４０又は５０）を、ネットワークデバイスドライバ１１３、ネットワークインタフェース１５３を介してネットワーク３０に送出する。なお、アクセス要求パケットの送信元（ｓｏｕｒｃｅ）アドレスとしては、例えばネットワークインタフェース１５３のＩＰアドレスが設定される。なお、仮想ストレージ１１７Ａは、アクセス要求がローカルストレージ宛ての場合、実施形態１で説明したのと同様に、ストレージデバイスドライバにアクセス要求を出力する
【０１１５】
以下では、実施形態２を、主に実施形態１との相違点について説明する。実施形態２のストレージのアクセスの手順を説明する。
【０１１６】
（１）仮想マシン（ゲストＯＳ用仮想マシン）１２（１３）のアプリケーション１２６（１３６）で発行されたストレージアクセス要求（システムコール）は、ゲストＯＳ１２５（１３５）に入力されて解析され、仮想ストレージデバイスドライバ１２４（１３４）のアクセス要求が入力される。
【０１１７】
（２）仮想ストレージデバイスドライバ１２４（１３４）は、アクセス要求をハイパーバイザ１４に渡す。
【０１１８】
（３）ハイパーバイザ１４は、アクセス要求を、管理ＯＳ用仮想マシン１１の管理ＯＳ１１５を介して仮想ストレージ１１７に入力する。
【０１１９】
管理ＯＳ用仮想マシン１１Ａの仮想ストレージ１１７Ａは、アクセス要求を解析し、デバイス名等から、アクセス対象は、ネットワーク３０に接続されたストレージデバイス４０、５０であるかを判別する。なお、ローカルストレージへのアクセス要求は、前記実施形態１と同様、仮想ストレージ１１７Ａから管理ＯＳ１１５に発行され、図１と同様、ストレージデバイスドライバに入力され、ストレージインタフェースからローカルストレージに転送される。
【０１２０】
（４）ネットワーク３０経由のストレージへのアクセス要求は、仮想ストレージ１１７Ａからハイパーバイザ１４を介して仮想ネットワーク１１６Ａに転送される。仮想ストレージ１１７Ａから仮想ネットワーク１１６Ａに転送されるアクセス要求は、ゲストＯＳ用仮想マシン１２（１３）上のアプリケーション１２６（１３６）で発行されたネットワークアクセス要求を仮想ネットワークインタフェース（仮想ネットワークデバイスドライバ）１２３（１３３）、ハイパーバイザ１４を経由して仮想ネットワーク１１６Ａに転送される形式と同様のパケット形式とされる。
【０１２１】
（５）仮想ネットワーク１１６Ａは転送先としてストレージデバイス４０又は５０を指定したネットワークアクセス要求を、ネットワークデバイスドライバ１１３に転送する。
【０１２２】
（６）ネットワークデバイスドライバ１１３は、アクセス要求パケットを、ネットワーク３０を介して宛先のストレージデバイス４０又は５０に送信する。ストレージデバイス４０又は５０は、サーバ１０Ａから送信されたアクセス要求を受け、アクセス要求をデコードし、アクセス対象の論理ユニット番号（ＬＵＮ）等に対応した媒体へのアクセスが行われる。
【０１２３】
ストレージデバイス４０（又は５０）のコントローラ４１（又は５１）は、ネットワークアクセス要求パケットをデパケット化し、ペイロードに含まれるストレージアクセス要求に基づき、媒体４２（又は５２）へのアクセスを行う。
【０１２４】
ストレージデバイス４０又は５０からのアクセスの応答（リードの場合、リードデータ）は、ネットワーク３０、ネットワークデバイスドライバ１１３、仮想ネットワーク１１６Ａから仮想ストレージ１１７Ａに転送され、ハイパーバイザ１４を介してアクセス要求と逆順の経路で仮想マシン１２のアプリケーション１２６に転送される。
【０１２５】
完全仮想化方式でサーバ仮想化を構成し、仮想ストレージ１１７Ａをデバイスエミュレータで構成した場合、仮想ストレージデバイスドライバ１２４（１３４）は、アクセス要求をハードウェア命令（トラップ命令）に変換し、ハイパーバイザ１４を経由してＣＰＵ１５１に渡し、ＣＰＵ１５１で該命令の実行により例外トラップが発生し、ハイパーバイザ１４の例外処理ハンドラで、該アクセス要求を管理ＯＳ用仮想マシン１１の管理ＯＳ１１５に渡し、仮想ストレージ１１７Ａに入力する構成とされる。
【０１２６】
実施形態２においても、ハードウェア仮想化の実装方式自体は特定の方式に制限されない。例えば、上記（３）の手順で、また、図１０に示したような準仮想化方式（ｐａｒａ−ｖｉｒｔｕａｌｉｚａｔｉｏｎ）において、ゲストＯＳ用仮想マシン１２の仮想ストレージデバイスドライバ（ｆｒｏｎｔ  ｅｎｄ  ｄｅｖｉｃｅ  ｄｒｉｖｅｒ）の出力をハイパーバイザ１４を介して、管理ＯＳ用仮想マシンのバックエンドデバイスドライバ（ｂａｃｋ  ｅｎｄ  ｄｅｖｉｃｅ  ｄｒｉｖｅｒ）に入力し、バックエンドデバイスドライバから、実デバイスドライバ（ネットワークデバイスドライバ１１４）に転送する構成としてもよい。この場合、管理ＯＳ用仮想マシンのバックエンドデバイスドライバに、図１の仮想ストレージ１１７が実装される。なお、図１では、ハーパイバイザ型ＶＭＭを例に説明したが、ホストＯＳ型ＶＭＭに対しても適用可能であることは勿論である。
【０１２７】
図８は、実施形態２の仮想ストレージ１１７Ａの構成を示す図である。図８において、図２との相違点は、
・アクセス要求変換手段１１７−７をさらに備え、
・ストレージアクセス手段１１７−６が、アクセス要求を仮想ネットワーク１１７Ａに出力してネットワーク３０に接続されたストレージデバイス４０又は５０にアクセスする、
点である。
【０１２８】
ストレージアクセス手段１１７−６からライトデータをストレージに書き出すディステージ処理において、アクセス要求を、アクセス要求変換手段１１７−７で、仮想ネットワーク１１６Ａのプトロコルスタックに対応した形式にパケット化（Ｐａｃｋｅｔｉｚｉｎｇ）した上で、ストレージアクセス手段１１７−６から、仮想ネットワーク１１６Ａに出力する。
【０１２９】
また、ストレージアクセス手段１１７−６が仮想ネットワーク１１６Ａから受け取ったストレージデバイス４０又は５０からのパケット化されたリードデータを、アクセス要求変換手段１１７−７で、デパケット化（De-Packetizing）してリードデータを取り出し、キャッシュメモリ１１７−１に格納する。なお、アクセス要求がローカルストレージ宛ての場合、ストレージアクセス手段１１７−６は、ストレージデバイスドライバにアクセス要求を出力しローカルストレージにアクセスする。
【０１３０】
アクセスパタン、利用率に応じたキャッシュメモリ１１７−１のメモリ容量の増減制御、キャッシュメモリ１１７−１のディステージ処理におけるアクセスアドレス順の書き出し制御等は、前記実施形態１と同様であるため、説明を省略する。なお、仮想ストレージ１１７Ａにおいて、ネットワーク３０を介して接続される複数のストレージデバイス４０と５０を仮想的な１つの擬似ファイルとして扱う構成としてもよいことは勿論である。
【０１３１】
図７では、仮想ストレージ１１７Ａをストレージデバイス４０、５０等に対して共通に１つ備えた構成としているが、各ストレージに対応させて仮想ストレージをそれぞれ備えた構成としてもよいことは勿論である。
【０１３２】
本発明によれば、複数の仮想マシンを実行可能なサーバコンピュータで少なくとも１台以上のＨＤＤやＳＳＤ装置を内蔵するか、外部にストレージを持つコンピュータシステムに適用可能である。
【０１３３】
実施形態２によれば、サーバシステム外のネットワークを介して接続するストレージ（ネットワークストレージ）を仮想化した、仮想化ネットワークストレージにアクセスを行うに際して、仮想マシン上の特定アプリケーションの負荷が増加（ピークの発生）した際に、ボトルネックとなりやすいストレージのキャッシュメモリ容量を動的に増減し、これらのピークへの対応を可能とし、仮想化ネットワークストレージへの負荷等により生じるアクセス性能の低下を改善可能としている。
【０１３４】
なお、上記の特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施例の各要素、各図面の各要素等を含む）の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１３５】
１０  サーバ（コンピュータ装置）
１０Ａ、１０Ｂ、１０Ｃ  サーバ
１１、１１Ａ、１１Ｂ、１１Ｃ、１２、１２Ｂ、１２Ｃ、１３、１３Ｂ、１３Ｃ  仮想マシン
１４、１４Ｂ、１４Ｃ  ハイパーバイザ（仮想マシンモニタ）
１５、１５Ａ、１５Ｂ、１５Ｃ  ハードウェア
２０  ストレージデバイス（ストレージ）
２０Ｂ、２０Ｃ  実デバイス
２１  コントローラ（ストレージコントローラ）
２２  媒体
３０  ネットワーク
４０、５０  ストレージ（ネットワークストレージデバイス）
４０Ｂ、５０Ｂ  ネットワークノード
４１、５１  コントローラ（ストレージコントローラ）
４２、５２  媒体
１１１、１２１、１３１  仮想ＣＰＵ
１１２、１２２、１３２  メモリ
１１３  ネットワークデバイスドライバ
１１４  ストレージデバイスドライバ
１１４Ｂ、１１４Ｃ  実デバイスドライバ
１１５、１１５Ｂ、１１５Ｃ  管理用ＯＳ
１１６、１１６Ａ  仮想ネットワーク
１１７、１１７Ａ、１１７Ｂ  仮想ストレージ
１１７−１  キャッシュメモリ
１１７−２  アクセスパタン解析手段
１１７−３  キャッシュ管理手段
１１７−４  アクセス要求処理手段
１１７−５  管理テーブル（コマンドバッファ）
１１７−６  ストレージアクセス手段
１１７−７  アクセス要求変換手段
１１７Ｂ  仮想デバイス
１１８  バックエンドデバイスドライバ
１２３、１３３  仮想ネットワークインタフェース
１２４、１３４  仮想ストレージデバイスドライバ
１２４Ｂ、１３４Ｂ  仮想デバイスドライバ
１２５、１３５  ゲストＯＳ
１２６、１３６  アプリケーション（Ａｐｐｌｉｃａｔｉｏｎ）
１２８、１３８  フロントエンドデバイスドライバ
１４１  ＣＰＵスケジューラ
１４２、１４２Ｂ  メモリ管理部
１５１  ＣＰＵ
１５２  メモリ（物理メモリ）
１５３  ネットワークインタフェース（物理ネットワークインタフェース）
１５４  ストレージインタフェース
１５４Ｂ、１５４Ｃ  デバイスインタフェース
４０１〜４０４、５０１〜５０４  エントリ１〜Ｎ
【図１】
2014178975.tif 000003
【図２】
2014178975.tif 000004
【図３】
2014178975.tif 000005
【図４】
2014178975.tif 000006
【図５】
2014178975.tif 000007
【図６】
2014178975.tif 000008
【図７】
2014178975.tif 000009
【図８】
2014178975.tif 000010
【図９】
2014178975.tif 000011
【図１０】
2014178975.tif 000012
【図１１】
2014178975.tif 000013