(57)【要約】  計算機は、第１メモリと、第１メモリよりもＩ／Ｏ速度が遅い第２メモリと、記憶デバイスと、プロセッサとを備える。第１メモリは、ワーク領域と、記憶デバイスに対して入出力されるデータが一時格納される第１キャッシュ領域とを有し、第２メモリは、記憶デバイスに対して入出力されるデータが一時格納される第２キャッシュ領域と、ワーク領域に格納されるデータの退避先であるスワップ領域とを有する。プロセッサは、記憶デバイスに対して入出力されたデータ量である入出力量が所定の入出力量よりも大きい場合にワーク領域を縮小し第１キャッシュ領域を拡大する。
2015132877.tif 000002
【特許請求の範囲】
【請求項１】
第１メモリと、
前記第１メモリよりもＩ／Ｏ速度が遅い第２メモリと、
前記第１メモリ、前記第２メモリ及び記憶デバイスに接続されたプロセッサと
を備え、
前記第１メモリは、ワーク領域と、前記記憶デバイスに対して入出力されるデータが一時格納される第１キャッシュ領域とを有し、
前記第２メモリは、前記記憶デバイスに対して入出力されるデータが一時格納される第２キャッシュ領域と、前記ワーク領域に格納されるデータの退避先であるスワップ領域とを有し、
前記プロセッサは、
前記記憶デバイスに対して入出力されたデータ量である入出力量が所定の入出力量よりも大きい場合に、前記ワーク領域を縮小し前記第１キャッシュ領域を拡大する第１キャッシュ領域拡大処理を実行する、
計算機。
【請求項２】
前記プロセッサは、
前記スワップ領域へのデータ退避の発生頻度が所定の発生頻度以下ならば、前記第１キャッシュ領域拡大処理を実行する、
請求項１に記載の計算機。
【請求項３】
前記プロセッサは、
ライトバックモードが設定されているならば、前記第１キャッシュ領域拡大処理を実行し、
前記ライトバックモードが設定されている場合、前記プロセッサは、ライトデータを前記第１キャッシュ領域又は前記第２キャッシュ領域にライトした場合、ライト完了とし、その後、前記ライトデータを前記第１キャッシュ領域又は前記第２キャッシュ領域から前記記憶デバイスへライトするようになっている、
請求項２に記載の計算機。
【請求項４】
前記プロセッサは、
ライトスルーモードが設定されており、且つ、キャッシュリードミス量が所定のキャッシュリードミス量よりも大きいならば、前記第１キャッシュ領域拡大処理を実行し、
前記ライトスルーモードが設定されている場合、前記プロセッサは、ライトデータを前記記憶デバイスへライトした場合に、ライト完了とし、
前記キャッシュリードミス量は、前記第１キャッシュ領域及び第２キャッシュ領域に格納されているデータの何れにもヒットしなかったリードデータの総量である、
請求項２に記載の計算機。
【請求項５】
前記プロセッサは、
前記ワーク領域及びスワップ領域の合計量に対する使用量の割合が第１の割合よりも大きい場合、前記スワップ領域を拡大し前記第２キャッシュ領域を縮小し、
前記使用量の割合が第２の割合よりも小さい場合、前記スワップ領域を縮小し前記第２キャッシュ領域を拡大し、
前記第２の割合は、前記第１の割合よりも小さい、
請求項２に記載の計算機。
【請求項６】
前記プロセッサによって複数の仮想マシンが実行されるようになっており、
前記ワーク領域は、前記複数の仮想マシンの各々の仮想メモリに割り当てられた仮想メモリ割当領域を含み、
前記第２メモリは、前記複数の仮想マシンの各々に割り当てられた仮想マシン用スワップ領域をさらに有し、
前記第１キャッシュ領域拡大処理は、
前記複数の仮想マシンのうち縮小対象の仮想マシンに割り当てられている仮想メモリ割当領域を縮小することにより、前記第１メモリに占めるワーク領域を縮小し前記第１キャッシュ領域を拡大する処理であり、
前記縮小対象の仮想マシンは、仮想マシン用スワップ領域へのスワップ発生頻度が所定のスワップ発生頻度以下の仮想マシンである、
請求項１に記載の計算機。
【請求項７】
前記プロセッサは、
前記複数の仮想マシンうち、前記仮想メモリ及び前記仮想マシン用スワップ領域の合計量のうちの使用量の割合が第３の割合よりも大きい仮想マシンを、スワップ拡大候補とし、
前記使用量の割合が第４の割合よりも小さい仮想マシンを、スワップ縮小候補とし、
前記スワップ拡大候補としての各仮想マシンに割り当てる仮想マシン用スワップ領域と、前記スワップ縮小候補としての各仮想マシンに割り当てる仮想マシン用スワップ領域との差に基づいて、前記第２メモリに占める前記第２キャッシュ領域のサイズを変更する
請求項６に記載の計算機。
【請求項８】
第１キャッシュ領域と第２キャッシュ領域とのうちの少なくとも１つを使用して記憶デバイスに入出力されたデータの量である入出力量が、所定の入出力量よりも大きいか否かを判定し、前記第１キャッシュ領域は第１メモリにあり、前記第２キャッシュ領域は前記第１メモリよりＩ／Ｏ速度が遅い第２メモリにあり、前記第１メモリは、更にワーク領域を有しており、前記第２メモリは、更に前記ワーク領域に格納されるデータの退避先であるスワップ領域を有しており、
前記入出力量が前記所定の入出力量よりも大きい場合に、前記ワーク領域を縮小し前記第１キャッシュ領域を拡大する第１キャッシュ領域拡大処理を実行する、
メモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、メモリの制御に関する。
【背景技術】
【０００２】
メモリとしてＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を、記憶デバイスとしてＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）を備える計算機において、ＨＤＤのＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）速度は、ＤＲＡＭと比較して遅い。そこで、ＨＤＤ内の一部のデータをＤＲＡＭのキャッシュ領域に格納しておき、リード対象のデータがＤＲＡＭのキャッシュ領域に存在する場合、ＨＤＤからではなく、そのキャッシュ領域からデータをリードするキャッシュ技術が知られている（特許文献１）。これにより、キャッシュがヒットした場合、ＨＤＤからリードする場合と比較して、高速にデータをリードすることができる。【０００３】
また、ＤＲＡＭは、キャッシュ領域の他に、アプリケーションプログラムなどのデータが格納されるワーク領域を有する。ＤＲＡＭの記憶領域は有限であるため、ワーク領域が不足する場合に備えて、ＨＤＤに、ワーク領域内のデータの退避先となるスワップ領域を設ける技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】ＵＳ５４２０９９８
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般的に、メモリでは、キャッシュ領域よりもワーク領域の方が優先的に確保される。スワップ領域の設けられているＨＤＤは、上記の通りＤＲＡＭと比べてＩ／Ｏ速度が遅いため、スワップが発生すると、アプリケーションプログラムをＨＤＤからワーク領域にロードする必要が生じる等の原因で、計算機の性能が低下してしまうからである。よって、できるだけスワップが発生しないようにすることが、計算機全体のパフォーマンスの低下を抑制する上で適切であると考えられる。【０００６】
しかし、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などの半導体記憶デバイスは、ＨＤＤと比べてＩ／Ｏ速度が速い。したがって、ＳＳＤなどの半導体記憶デバイス上にスワップ領域を設けた場合、できるだけスワップが発生しないようにするという考え方は、計算機全体の性能の低下を抑制する上で必ずしも適切とは限らない。【０００７】
そこで本発明の目的は、メモリ上のワーク領域のサイズとキャッシュ領域のサイズとを適切に調整することにより、計算機全体の性能の低下を抑制することにある。
【課題を解決するための手段】
【０００８】
一実施形態に係る計算機は、第１メモリと、第１メモリよりもＩ／Ｏ速度が遅い第２メモリと、記第１メモリ、第２メモリ及び記憶デバイスに接続されたプロセッサとを備える。第１メモリは、ワーク領域と、記憶デバイスに対して入出力されるデータが一時格納される第１キャッシュ領域とを有する。第２メモリは、記憶デバイスに対して入出力されるデータが一時格納される第２キャッシュ領域と、ワーク領域に格納されるデータの退避先であるスワップ領域とを有する。プロセッサは、記憶デバイスに対して入出力されたデータ量である入出力量が所定の入出力量よりも大きい場合に、ワーク領域を縮小し、第１キャッシュ領域を拡大する。
【発明の効果】
【０００９】
本発明によれば、メモリ上のワーク領域のサイズとキャッシュ領域のサイズとを適切に調整することができ、計算機全体の性能の低下を抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態に関する計算機の動作概要を説明する模式図である。
【図２】第１の実施形態に関する計算機の構成例を示すブロック図である。
【図３】第１の実施形態に関する割当調整部の構成例を示すブロック図である。
【図４】第１の実施形態に関するポリシ情報の一例を示す。
【図５】第１の実施形態に関する稼働情報の一例を示す。
【図６】第１の実施形態に関するメモリ調整処理の一例を示すフローチャートである。
【図７】第１の実施形態に関する第１キャッシュ領域調整処理の一例を示すフローチャートである。
【図８】第１の実施形態に関するスワップ領域調整処理の一例を示すフローチャートである。
【図９】第２の実施形態に関する計算機の構成例を示すブロック図である。
【図１０】第２の実施形態に係る割当調整部の構成例を示すブロック図である。
【図１１】第２の実施形態に関する稼働情報の一例を示す。
【図１２】第２の実施形態に関するメモリ調整処理の一例を示すフローチャートである。
【図１３】第２の実施形態に関する第１キャッシュ領域調整処理の一例を示すフローチャートである。
【図１４】第２の実施形態に関するスワップ領域調整処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、幾つかの実施形態について、図面を参照しながら説明する。以下において、プロセッサが行う処理の一部又は全部が、ハードウェア回路で行われてもよい。コンピュータプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【第１の実施形態】
【００１２】
第１の実施形態は、計算機において、メモリ上のワーク領域及びキャッシュ領域、並びに、スワップ用記憶デバイス上のスワップ領域及びキャッシュ領域を調整する方法を説明する。
【００１３】
図１は、第１の実施形態に関する計算機１の動作概要を説明する模式図である。
【００１４】
計算機１は、プロセッサ３と、第１メモリ８１０と、第２メモリ８２０とを有する。第１メモリ８１０は、例えば、ＤＲＡＭなどで構成されるメインメモリである。第２メモリ８２０は、例えば、ＳＳＤなどで構成される記憶デバイスである。つまり、第１メモリ８１０のＩ／Ｏ速度は、第２メモリ８２０よりも速い。
【００１５】
第１メモリ８１０の記憶領域は、例えば所定の大きさであり、システム領域８１１と、ワーク領域８１２と、第１キャッシュ領域８１４と、空き領域８１３とを含む。システム領域８１１は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）に関するプログラムが格納される領域である。ワーク領域８１２は、ＯＳ上で実行される実行プログラム（例えば、アプリケーションプログラム）、並びに、ＯＳ及び実行プログラムの少なくとも一方が使用するデータが一時的に格納される領域である。以下の説明では、ワーク領域８１２に格納されるデータは、プログラムであってもプログラムに使用されるデータであっても「データ」と総称することがある。第１キャッシュ領域８１４は、外部記憶デバイス８３０に対して入出力されるデータが一時的に格納される領域である。空き領域８１３は、第１記憶領域においてシステム領域８１１、ワーク領域８１２及び第１キャッシュ領域８１４以外の領域である。プロセッサ３は、第１メモリ８１０のうち少なくともワーク領域８１２及び第１キャッシュ領域８１４のそれぞれのサイズを変更することができる。
【００１６】
第２メモリ８２０の記憶領域は、例えば所定の大きさであり、スワップ領域８２１と、第２キャッシュ領域８２２とを含む。スワップ領域８２１は、ワーク領域８１２内のデータのスワップ用の領域（すなわち、ワーク領域８１２内のデータの退避先の領域）である。第２キャッシュ領域８２２は、外部記憶デバイス８３０に対して入出力されるデータが一時的に格納される領域である。第２キャッシュ領域８２２に格納されるデータは、第１キャッシュ領域８１４に格納されず、逆に、第１キャッシュ領域８１４に格納されるデータは、第２キャッシュ領域８２２に格納されないが、同じデータが第１キャッシュ領域８１４と第２キャッシュ領域８２２の両方に格納されてよい。プロセッサ３は、スワップ領域８２１及び第２キャッシュ領域８２２のそれぞれのサイズを変更することができる。
【００１７】
ワーク領域８１２及びスワップ領域８２１には、プロセッサ３によって実行される実行プログラムに係るデータが格納される。実行プログラムとは、例えば、ユーザによって実行されるアプリケーションプログラムなどである。
【００１８】
一般的に、プロセッサ３は、ワーク領域８１２が不足傾向を示すと、ワーク領域８１２を拡大する。しかし、それでもワーク領域８１２が不足する場合、プロセッサ３は、ワーク領域８１２内の一部のデータ（例えば実行プログラム）をスワップ領域８２１に退避させることで、ワーク領域８１２の不足を解消する。
【００１９】
一方で、プロセッサ３は、外部記憶デバイス８３０に対するＩ／Ｏ量を削減するため、外部記憶デバイス８３０に格納されている一部のデータを、第１キャッシュ領域８１４又は第２キャッシュ領域８２２にキャッシュデータとして格納する。プロセッサ３は、外部記憶デバイス８３０からデータをリードする際、第１キャッシュ領域８１４又は第２キャッシュ領域８２２内のキャッシュデータがヒットしたならば、そのキャッシュデータをリードする。これにより、外部記憶デバイス８３０に対するＩ／Ｏ量は削減される。すなわち、第１キャッシュ領域８１４及び第２キャッシュ領域８２２の少なくとも１つを拡大することにより、キャッシュヒット率が高まり、外部記憶デバイス８３０に対するＩ／Ｏ量が削減される。
【００２０】
一般的に、第１メモリ８１０（例えばＤＲＡＭ）と比較してＩ／Ｏ速度の遅い外部記憶デバイス８３０（例えばＨＤＤ）にスワップ領域が設けられるので、ワーク領域８１２のサイズをできるだけ大きくし、外部記憶デバイス８３０のスワップ領域をできるだけ使用しないことが適切である。しかし、本実施形態では、図１に示すように、第１メモリ８１０よりＩ／Ｏ速度が遅いが外部記憶デバイス８３０よりＩ／Ｏ速度の速い第２メモリ８２０（例えばＳＳＤ）にスワップ領域８２１が設けられる。この場合、必ずしもワーク領域８１２のサイズをできるだけ大きくするという考え方が適切であるとは限らない。例えば、外部記憶デバイス８３０に対するＩ／Ｏ量が大きい場合、第１メモリ８１０の第１キャッシュ領域８１４のサイズを大きくすることでキャッシュヒット率が上がり、それにより外部記憶デバイス８３０に対するＩ／Ｏ量を削減することができる。第１メモリ８１０の第１キャッシュ領域８１４のサイズを大きくすることにより、ワーク領域８１２のサイズが小さくなり、スワップ領域８２１にスワップが発生する可能性は高くなるが、上記のとおり、第２メモリ８２０のＩ／Ｏ速度は比較的速いため、必ずしもそれが性能の低下につながるとは限らない。
【００２１】
以下、プロセッサ３が状況に応じて、第１メモリ８１０のワーク領域８１２及び第１キャッシュ領域８１４、並びに、第２メモリ８２０のスワップ領域８２１及び第２キャッシュ領域８２２を適切にサイズ変更することにより、計算機１における性能の低下を抑制する方法について詳細に説明する。
【００２２】
図２は、第１の実施形態に関する計算機１の構成例を示すブロック図である。
【００２３】
計算機１は、ハードウェアとして、メモリ２と、プロセッサ３と、デバイスコントローラ４と、デバイスコントローラ４に接続されるＳＳＤ６及びＨＤＤ５と、を備える。ＳＳＤ６及びＨＤＤ５は、計算機１の内部及び外部の何れに備えられてもよい。
【００２４】
プロセッサ３は、演算回路又はコンピュータプログラムに従って様々な演算を実行し、他の要素２、４、５、６を制御することにより、計算機１の有する様々な機能を実現する。
【００２５】
メモリ２と、プロセッサ３と、デバイスコントローラ４とは、双方向にデータを伝送可能な内部バス１１で接続されている。内部バス１１は、例えば、メモリバス及びＰＣＩ−Ｅｘｐｒｅｓｓバスなどで構成される。
【００２６】
外部記憶デバイスの一例であるＨＤＤ５は、プロセッサ３からのＩ／Ｏ要求に従って、データをリード及びライトする。ＨＤＤ５は、例えばＳＳＤ６など、他の不揮発性記憶デバイスであってもよい。
【００２７】
第２メモリの一例であるＳＳＤ６は、データのスワップ領域及びキャッシュ領域として利用される。ＳＳＤ６は、例えば、ＰＲＡＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  ＲＡＭ）、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ＲｅＲＡＭ（ｒｅｓｉｓｔａｎｃｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、又はＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）など、他の不揮発性記憶バイスであってもよい。
【００２８】
デバイスコントローラ４は、そのデバイスコントローラ４に接続されているＳＳＤ６及びＨＤＤ５を制御する。デバイスコントローラ４は、例えば、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）、ＳＣＳＩ、ｉＳＣＳＩ、又はＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）など、接続方式に準拠する制御機能を有する。
【００２９】
ＨＤＤ５とＳＳＤ６とが、別々のデバイスコントローラ４に接続されてもよい。例えば、デバイスコントローラ４をＰＣＩ−Ｅｘｐｒｅｓｓインタフェースとし、ＳＳＤ６をフラッシュメモリチップとしてもよい。ＨＤＤ５及びＳＳＤ６は、複数の計算機１から共有されてもよい。
【００３０】
第１メモリの一例であるメモリ２は、プロセッサ３が使用するコンピュータプログラム及びデータなどを記憶する。メモリ２は、例えば、ＤＤＲ３−ＤＲＡＭ、ＭＲＡＭ又はＦｅＲＡＭなどで構成される。メモリ２における記憶領域は、所定の大きさの複数のページによって構成されてもよい。
【００３１】
メモリ２は、システム領域１０と、ワーク領域３０と、キャッシュ領域２０と、空き領域４０とを有する。システム領域１０には、ＯＳに関するプログラムが保持される。ＯＳは、割当調整部１００、メモリ制御部２１０、ＳＳＤ制御部２３０、およびＩ／Ｏ制御部２２０を有する（或いは、ＯＳが提供する機能とＯＳ上で実行されるコンピュータプログラムにより、割当調整部１００、メモリ制御部２１０、ＳＳＤ制御部２３０、およびＩ／Ｏ制御部２２０が実現される）。これらの機能の詳細については後述する。
【００３２】
第１キャッシュ領域２０には、ＨＤＤ５に対して入出力される一部のデータがキャッシュデータとして格納される。ワーク領域３０には、アプリケーションプログラム３１などが格納される。空き領域４０は、まだ使用されていない領域である。
【００３３】
Ｉ／Ｏ制御部２２０は、ＨＤＤ５へのＩ／Ｏを制御する。Ｉ／Ｏ制御部２２０は、アプリケーションプログラム３１から発行されたＩ／Ｏ要求に基づき、ＨＤＤ５にＩ／Ｏ要求を発行する。Ｉ／Ｏ制御部２２０は、ＨＤＤ５に対するリードデータ及びライトデータを、第１キャッシュ領域２０又は第２キャッシュ領域８に格納してもよい。そして、Ｉ／Ｏ制御部２２０は、リード要求されたデータが第１キャッシュ領域２０又は第２キャッシュ領域８に存在する場合（つまり、キャッシュがヒットした場合）、そのキャッシュ領域２０、８からデータをリードしてもよい。これにより、ＨＤＤ５に対するＩ／Ｏ量が削減される。
【００３４】
Ｉ／Ｏ制御部２２０は、ＨＤＤ５に対するＩ／Ｏ量を計測してもよい。Ｉ／Ｏ量とは、例えば、単位時間当たりにおけるＩ／Ｏ要求の発行数又は転送データ量などである。Ｉ／Ｏ制御部２２０は、計測したＩ／Ｏ量を割当調整部１００に提供してもよい。Ｉ／Ｏ制御部２２０は、割当調整部１００から指定された上限値を超えないように、単位時間当たりのＩ／Ｏ量を調整してもよい。
【００３５】
メモリ制御部２１０は、メモリ２を制御する。メモリ制御部２１０は、メモリ２の記憶領域に対してデータのライト、リード及び消去などを行う。メモリ制御部２１０は、ワーク領域３０に格納されているデータと、スワップ領域７に格納されているデータとをスワップさせる。メモリ制御部２１０は、割当調整部１００からの指示に基づいて、メモリ２の記憶領域に占めるワーク領域３０及び第１キャッシュ領域２０の大きさを変更する。すなわち、メモリ制御部２１０は、ワーク領域３０及び第１キャッシュ領域２０に割り当てるページ数を変更する。
【００３６】
ＳＳＤ制御部２３０は、ＳＳＤ６を制御する。ＳＳＤ制御部２３０は、ＳＳＤ６の記憶領域に対してデータのライト、リード及び消去などを行う。ＳＳＤ制御部２３０は、ＳＳＤ６の記憶領域に、スワップ領域７及び第２キャッシュ領域８を確保したり、割当調整部１００からの指示に基づいて、ＳＳＤ６の記憶領域に占めるスワップ領域７及び第２キャッシュ領域８の大きさを変更する。ＳＳＤ制御部２３０は、ＳＳＤ６のデバイスドライバの一種であっても良いし、Ｉ／Ｏ制御部２２０とＳＳＤ６のデバイスドライバとの間に介在する所定のプログラムであっても良い。
【００３７】
例えば、ＯＳがＬｉｎｕｘ（登録商標）である場合、ＳＳＤ制御部１３０は、ＬＶＭ（ｌｏｇｉｃａｌ  ｖｏｌｕｍｅ  ｍａｎａｇｅｒ）を用いて、ｌｖｒｅｓｉｚｅコマンド又はｌｖｃｒｅａｔｅコマンドなどを実行し、スワップ領域７及び第２キャッシュ領域８を確保又は変更してもよい。例えば、ＳＳＤ制御部１３０は、ＧＮＵ  Ｐａｒｔｅｄを用いて、ｆｄｉｓｋコマンドなどを実行し、スワップ領域７及び第２キャッシュ領域８を確保又は変更してもよい。例えば、ＳＳＤ制御部１３０は、ｓｗａｐｐｏｎコマンド及びｓｗａｐｐｏｆｆコマンドなどを実行し、スワップ領域７に係るページの有効及び無効を変更してもよい。
【００３８】
割当調整部１００は、メモリ２の記憶領域に占めるワーク領域３０及び第１キャッシュ領域２０、並びに、ＳＳＤ６の記憶領域に占めるスワップ領域７及び第２キャッシュ領域８を調整する。以下、割当調整部１００の詳細について説明する。
【００３９】
図３は、割当調整部１００の構成例を示すブロック図である。割当調整部１００は、ポリシ設定部１１０と、稼働状況観測部１２０と、メモリ調整部１３０と、スワップデバイス調整部１４０と、ポリシ情報１１１と、稼働情報１５０とを有する。
【００４０】
図４は、ポリシ情報１１１の一例を示す。ポリシ情報１１１は、ワーク領域３０及び第１キャッシュ領域２０、並びに、スワップ領域７及び第２キャッシュ領域８を変更するにあたっての基準となる情報を有する。ポリシ情報１１１は、例えば、計算機１の利用者によって設定されても良いし、外部のサーバなどから通信ネットワークを介して取得されてもよい。
【００４１】
ポリシ情報１１１は、ＨＤＤのＩ／Ｏ基準量１１２と、スワップ頻度基準量１１３と、スワップ確保基準値１１４と、スワップ使用上限値１１５と、スワップ使用下限値１１６と、を属性として有する。
【００４２】
ＨＤＤのＩ／Ｏ基準量１１２は、ＨＤＤ５のＩ／Ｏ量が大きすぎるか否かの判定に用いられる。ＨＤＤのＩ／Ｏ基準量１１２は、例えば、１秒間当たりのデータ量で表される。
【００４３】
スワップ頻度基準量１１３は、スワップの発生頻度が大きすぎるか否かの判定に用いられる。スワップ頻度基準量１１３は、例えば、１秒間当たりのスワップの発生回数で表される。
【００４４】
スワップ確保基準値１１４は、スワップ領域７に確保されるべき不使用領域の基準に用いられる。スワップ確保基準値１１４は、例えば、スワップ領域７に対する使用領域の割合で表される。
【００４５】
スワップ使用上限値１１５は、スワップ領域７を拡大すべきか否かの判定に用いられる。スワップ使用上限値１１５は、例えば、スワップ領域７に対する使用領域の割合で表される。
【００４６】
スワップ使用下限値１１６は、スワップ領域７を縮小すべきか否かの判定に用いられる。スワップ使用下限値１１６は、例えば、スワップ領域７に対する使用領域の割合で表される。
【００４７】
ポリシ設定部１１０は、ポリシ情報１１１を取得する。ポリシ設定部１１０は、例えば、計算機１の利用者が入力したポリシ情報１１１を取得したり、外部の装置などから通信ネットワークを通じてポリシ情報１１１を取得する。ポリシ設定部１１０は、ポリシ情報１１１に含まれるＨＤＤ５のＩ／Ｏ基準量１１２を、Ｉ／Ｏ制御部２２０に渡しても良い。Ｉ／Ｏ制御部２２０は、このＨＤＤ５のＩ／Ｏ基準量１１２を超えないように、ＨＤＤ５のＩ／Ｏ量を調整してもよい。
【００４８】
図５は、稼働情報１５０の一例を示す。稼働情報１５０は、計算機１の稼働状況に関する情報を有する。稼働情報１５０は、メモリ２の記憶領域に占めるワーク領域３０及び第１キャッシュ領域２０のサイズ、並びに、ＳＳＤ６の記憶領域に占めるスワップ領域７及び第２キャッシュ領域８のサイズを変更すべきか否かの判定、並びに、どのくらいサイズ変更するべきかの算出などに用いられる。
【００４９】
稼働情報１５０は、ワーク領域量１５１と、スワップ領域量１５２と、スワップ使用量１５３と、スワップ頻度１５４と、第２キャッシュリードヒット量１５５と、第２キャッシュリードミス量１５６と、第２キャッシュライトヒット量１５７と、第２キャッシュライトミス量１５８と、を属性として有する。
【００５０】
ワーク領域量１５１は、或る時点におけるワーク領域３０の大きさを表す。スワップ領域量１５２は、或る時点におけるスワップ領域７の大きさを表す。スワップ使用量１５３は、或る時点におけるスワップ領域量１５７のうちの使用量を表す。
【００５１】
スワップ頻度１５４は、単位時間当たりに発生したスワップの頻度を表す。スワップ頻度１５４は、例えば、１秒間当たりのスワップの発生回数で表される。
【００５２】
第２キャッシュリードヒット量１５５は、単位時間（例えば１秒間）当たりのリード要求に対して第２キャッシュ領域８のキャッシュデータがヒットしたデータ量を表す。
【００５３】
第２キャッシュリードミス量１５６は、単位時間当たりのリード要求に対して第２キャッシュ領域８のキャッシュデータがヒットしなかった（ミスした）量を表す。つまり、第２キャッシュリードミス量は、ＨＤＤ５からリードされたデータ量を表す。
【００５４】
第２キャッシュライトヒット量１５７は、単位時間当たりのライト要求に対して第２キャッシュ領域８のキャッシュデータがヒットした量を表す。
【００５５】
第２キャッシュライトミス量１５８は、単位時間当たりのライト要求に対して第２キャッシュ領域８のキャッシュデータがヒットしなかった（ミスした）量を表す。つまり、第２キャッシュライトミス量１５８は、ＨＤＤ５にライトされたデータ量を表す。
【００５６】
例えば、ワーク領域量１５１、スワップ領域量１５２、スワップ使用量１５３及びスワップ頻度１５４は、メモリ制御部２１０によって測定されてもよい。例えば、第２キャッシュの各ヒット量１５５、１５７及びミス量１５６、１５８は、ＳＳＤ制御部６及びＩ／Ｏ制御部２２０によって測定されてもよい。
【００５７】
第１キャッシュ領域２０と第２キャッシュ領域８は、１つのキャッシュメモリ領域として使用され使い分けされなくてもよいし、或いは、プロセッサ３による使い分けがされてもよい。使い分けとして、例えば、キャッシュヒット率が比較的高いキャッシュデータが第１キャッシュ領域２０に格納されキャッシュヒット率が比較的低いキャッシュデータが第２キャッシュ領域８に格納されてもよいし、リードデータが第１キャッシュ領域２０に格納されライトデータが第２キャッシュ領域８に格納されてもよい。第２キャッシュ領域８でリードヒットしたキャッシュデータ（或いは、第２キャッシュ領域８におけるキャッシュデータのうちリードヒット率が閾値より高いキャッシュデータ）は、第２キャッシュ領域８から第１キャッシュ領域２０へ移動されてもよい。その際、第１キャッシュ領域２０において最もヒット率の低いデータが第２キャッシュ領域８へ移動されてもよい。
【００５８】
単位時間当たりのＨＤＤ５のＩ／Ｏ量は、計算機１におけるライトモードによって異なり得る。ライトモードとして、例えば、ライトバックモードとライトスルーモードがある。「ライトバックモード」では、Ｉ／Ｏ制御部２２０は、アプリケーションプログラム３１からのライト要求に従うライトデータを第２キャッシュ領域８又は第１キャッシュ領域２０にライトしたときにライト完了をアプリケーションプログラム３１に応答し、その後に、そのライトデータ（キャッシュデータ）をＨＤＤ５にライトする。
【００５９】
一方、「ライトスルーモード」では、Ｉ／Ｏ制御部２２０は、アプリケーションプログラム３１からのライト要求に従うライトデータを第２キャッシュ領域８又は第１キャッシュ領域２０にライトし（又はライトデータをキャッシュ領域８及び２０のいずれにライトすることなく）、そのライトデータをＨＤＤ５にライトしたときに、ライト完了をアプリケーションプログラム３１に応答する。
【００６０】
ライトモードが「ライトスルーモード」の場合、「ＨＤＤのＩ／Ｏ量＝第２キャッシュリードミス量＋第２キャッシュライトヒット量＋第２キャッシュライトミス量」として算出される。
【００６１】
ライトモードが「ライトバックモード」の場合、「ＨＤＤのＩ／Ｏ量＝第２キャッシュリードミス量＋第２キャッシュライトミス量」として算出される。なぜなら、「ライトバックモード」の場合、キャッシュヒットした同じライトデータは、その後に非同期で１回だけＨＤＤ５にライトされれば良いからである。
【００６２】
稼働状況観測部１２０は、稼働情報１５０に関連する情報１５１〜１５８を観測し、その観測結果に基づいて稼働情報１５０を更新する。稼働状況観測部１２０は、Ｉ／Ｏ制御部２２０、メモリ制御部２１０およびＳＳＤ制御部２３０などから稼働情報１５０に関連する情報１５１〜１５８を所定のタイミング（例えば一定周期）で取得してもよい。
【００６３】
メモリ調整部１３０は、稼働情報１５０を参照し、メモリ２のページを、ワーク領域３０及び第１キャッシュ領域２０にどのように割り当てるかを調整する。割り当てるページ数を増やすと領域は拡大し、割り当てるページ数を減らすと領域は縮小する。
【００６４】
メモリ調整部１３０は、「スワップ頻度１５４＞スワップ頻度基準量１１３」の場合、ワーク領域３０を拡大してもよい。すなわち、メモリ調整部１３０は、スワップが発生しにくいようにしてもよい。例えば、ＯＳがＬｉｎｕｘの場合、メモリ調整部１３０は、「ｓｗａｐｐｉｎｅｓｓ値」を変更し、ワーク領域３０のデータのスワップの発生のしやすさを調整してもよい。ｓｗａｐｐｉｎｅｓｓ値が小さいほど、ワーク領域３０内のデータはスワップされにくくなり、反対にｓｗａｐｐｉｎｅｓｓ値が大きいほど、ワーク領域３０内のデータはスワップされやすくなる。よって、メモリ調整部１３０は、ｓｗａｐｐｉｎｅｓｓ値を小さくして、ワーク領域３０内のデータがスワップされにくいようにすることにより、ワーク領域３０を拡大してもよい。
【００６５】
メモリ調整部１３０は、「ＨＤＤのＩ／Ｏ量＞ＨＤＤのＩ／Ｏ基準量１１２」の場合、ワーク領域３０を縮小してもよい。すなわち、メモリ調整部１３０は、キャッシュヒット率が所定の基準値よりも小さい場合、ワーク領域３０を縮小してもよい。メモリ調整部１３０がｓｗａｐｐｉｎｅｓｓ値を大きくすると、ワーク領域３０内のデータがスワップされやすくなり、結果的にワーク領域３０が縮小する。メモリ制御部２１０は、メモリ２の記憶領域の内、ワーク領域３０を確保して残った領域（ワーク領域３０の縮小前後の差分としての領域）を第１キャッシュ領域２０の一領域として割り当てる。したがって、ワーク領域３０が縮小すると、それに伴って第１キャッシュ領域２０が拡大する。第１キャッシュ領域２０が拡大すると、キャッシュヒット率が向上し得るので、ＨＤＤのＩ／Ｏ量が削減され得る。
【００６６】
実際にワーク領域３０及び第１キャッシュ領域２０を変更する処理は、メモリ制御部２１０が実行してもよい。すなわち、メモリ調整部１３０がｓｗａｐｐｉｎｅｓｓ値を変更し、メモリ制御部２１０がその変更されたｓｗａｐｐｉｎｅｓｓ値に従って、実際にメモリ上のワーク領域３０及び第１キャッシュ領域２０を変更してもよい。メモリ制御部２１０は、ｓｗａｐｐｉｎｅｓｓ値に従って、メモリ２の記憶領域に対する、ワーク領域３０及び第１キャッシュ領域２０の割合を変更してもよい。
【００６７】
スワップデバイス調整部１４０は、稼働情報１５０を参照し、ＳＳＤ６におけるスワップ領域７及び第２キャッシュ領域８を調整する。スワップデバイス調整部１４０は、「（（ワーク領域量１５１＋スワップ使用量１５３）／（ワーク領域量１５１＋スワップ領域量１５２）×１００（％）」を算出する。この算出値を「ワーク＆スワップ使用割合」という。
【００６８】
スワップデバイス調整部１４０は、「ワーク＆スワップ使用割合＞スワップ使用上限値１１５」の場合、スワップ領域７を拡大し、第２キャッシュ領域８を縮小する。スワップ領域７が不足傾向にあるためである。
【００６９】
スワップデバイス調整部１４０は、「ワーク＆スワップ使用割合＜スワップ使用下限値１１６」の場合、スワップ領域７を縮小し、第２キャッシュ領域８を拡大する。スワップ領域７の未使用な領域を第２キャッシュ領域８に割り当てることにより、キャッシュヒット率が向上し得るためである。
【００７０】
実際にスワップ領域７及び第２キャッシュ領域８を変更する処理は、ＳＳＤ制御部２３０が実行してもよい。すなわち、スワップデバイス調整部１４０がスワップ領域７の大きさを決定し、ＳＳＤ制御部１３０がその決定されたスワップ領域７の大きさに従って、実際にＳＳＤ６上のスワップ領域７及び第２キャッシュ領域８を変更してもよい。
【００７１】
ワーク領域３０のサイズの変化量と、第１キャッシュ領域２０のサイズの変化量とが異なってもよい。また、ワーク領域３０の拡大又は縮小と、第１キャッシュ領域２０の縮小又は拡大とは、必ずしも連動しなくてよい。例えば、空き領域４０のサイズが十分に大きい場合、ワーク領域３０と第１キャッシュ領域２０とは共に拡大され、空き領域４０が縮小されてもよい。
【００７２】
同様に、スワップ領域７のサイズの変化量と、第２キャッシュ領域２０のサイズの変化量とが異なってもよい。また、スワップ領域７のサイズの拡大又は縮小と、第２キャッシュ領域８の縮小又は拡大とは、必ずしも連動しなくてよい。
【００７３】
図６は、メモリ調整処理の一例を示すフローチャートである。この処理は、例えば、一定の周期で実行される。
【００７４】
メモリ調整部１３０は、稼働情報１５０を取得し、「スワップ頻度＞スワップ頻度基準値」であるか否かを判定する（Ｓ１０１）。
【００７５】
「スワップ頻度＞スワップ頻度基準値」の場合（Ｓ１０１：ＹＥＳ）、メモリ調整部１３０は、メモリ制御部２１０にワーク領域３０を拡大するよう指示し（ｓｗａｐｐｉｎｅｓｓ値を小さくし）（Ｓ１０２）、処理を終了する（ＥＮＤ）。
【００７６】
「スワップ頻度≦スワップ頻度基準値」の場合（Ｓ１０１：ＮＯ）、メモリ調整部１３０は、「ＨＤＤのＩ／Ｏ量＞ＨＤＤのＩ／Ｏ基準量」であるか否かを判定する（Ｓ１０３）。
【００７７】
「ＨＤＤのＩ／Ｏ量＞ＨＤＤのＩ／Ｏ基準量」の場合（Ｓ１０３：ＹＥＳ）、メモリ調整部１３０は、第１キャッシュ領域調整処理を実行し（Ｓ１０４）、処理を終了する（ＥＮＤ）。第１キャッシュ領域調整処理の詳細については後述する。
【００７８】
「ＨＤＤのＩ／Ｏ量≦ＨＤＤのＩ／Ｏ基準量」の場合（Ｓ１０３：ＮＯ）、メモリ調整部１３０は、処理を終了する（ＥＮＤ）。
【００７９】
以上の処理により、スワップ発生頻度が所定の基準値と比べて大きい場合、メモリ２のワーク領域２０が拡大する。これにより、スワップの発生頻度が減少する。
【００８０】
図７は、第１キャッシュ領域調整処理の一例を示すフローチャートである。この処理は、図５のＳ１０４に該当する。
【００８１】
メモリ調整部１３０は、ライトモードが「ライトバックモード」又は「ライトスルーモード」の何れであるか判定する（Ｓ１１１）。
【００８２】
ライトモードが「ライトバックモード」である場合（Ｓ１１１：ライトバック）、メモリ調整部１３０は、メモリ制御部２１０に、ワーク領域３０を縮小するよう指示し（ｓｗａｐｐｉｎｅｓｓ値を大きくし）（Ｓ１１３）、この処理を終了する（ＥＮＤ）。
【００８３】
ライトモードが「ライトスルーモード」である場合（Ｓ１１１：ライトスルー）、メモリ調整部１３０は、稼働情報１５０を参照し、「第２キャッシュリードミス量＞（ＨＤＤのＩ／Ｏ量−ＨＤＤのＩ／Ｏ基準量）」であるか否かを判定する（Ｓ１１２）。
【００８４】
「第２キャッシュリードミス量＞（ＨＤＤのＩ／Ｏ量−ＨＤＤのＩ／Ｏ基準量）」の場合（Ｓ１１２：ＹＥＳ）、メモリ調整部１３０は、メモリ制御部２１０に、ワーク領域３０を縮小するよう指示し（ｓｗａｐｐｉｎｅｓｓ値を大きくし）（Ｓ１１３）、この処理を終了する（ＥＮＤ）。
【００８５】
「第２キャッシュリードミス量≦（ＨＤＤのＩ／Ｏ量−ＨＤＤのＩ／Ｏ基準量）」の場合（Ｓ１１２：ＮＯ）、メモリ調整部１３０は、この処理を終了する（ＥＮＤ）。
【００８６】
以上の処理により、ＨＤＤのＩ／Ｏ量が所定の基準量と比べて大きい場合、メモリ２の第１キャッシュ領域２０が拡大する。これにより、キャッシュヒット率が向上し、ＨＤＤのＩ／Ｏ量が削減され得る。
【００８７】
図８は、スワップ領域調整処理の一例を示すフローチャートである。この処理は、例えば、一定の周期で実行される。
【００８８】
スワップデバイス調整部１４０は、稼働情報１５０を参照し、「ワーク＆スワップ使用割合＞スワップ使用上限値」であるか否かを判定する（Ｓ２０１）。
【００８９】
「ワーク＆スワップ使用割合＞スワップ使用上限値」の場合（Ｓ２０１：ＹＥＳ）、スワップデバイス調整部１４０は、ＳＳＤ６のスワップ領域７を拡大し、第２キャッシュ領域８を縮小する処理を実行し（Ｓ２０３）、処理を終了する（ＥＮＤ）。
【００９０】
「ワーク＆スワップ使用割合≦スワップ使用上限値」の場合（Ｓ２０１：ＮＯ）、スワップデバイス調整部１４０は、「ワーク＆スワップ使用割合＜スワップ使用下限値」であるか否かを判定する（Ｓ２０２）。
【００９１】
「ワーク＆スワップ使用割合＜スワップ使用下限値」の場合（Ｓ２０２：ＹＥＳ）、スワップデバイス調整部１４０は、ＳＳＤ６のスワップ領域７を縮小し、第２キャッシュ領域８を拡大する処理を実行し（Ｓ２０４）、処理を終了する（ＥＮＤ）。
【００９２】
「ワーク＆スワップ使用割合≧スワップ使用下限値」の場合（Ｓ２０２：ＮＯ）、スワップデバイス調整部１４０は、処理を終了する（ＥＮＤ）。
【００９３】
以上の処理により、スワップ領域７が不足傾向の場合、ＳＳＤ６のスワップ領域７は拡大される。これにより、スワップ領域７が不足することを回避できる。スワップ領域７が過剰傾向の場合、ＳＳＤ６のスワップ領域７は縮小される。これにより、第２キャッシュ領域８が拡大され、ＨＤＤ５に対するキャッシュヒット率が向上され得る。つまり、ＨＤＤのＩ／Ｏ量が削減され得る。
【第２の実施形態】
【００９４】
第２の実施形態は、仮想マシンを実行する計算機において、メモリ上のワーク領域及びキャッシュ領域、並びに、スワップ用記憶デバイス上のスワップ領域及びキャッシュメモリを調整する方法を説明する。以下、第１の実施形態と同様の要素には同じ符号を付し、説明を省略する。
【００９５】
図９は、第２の実施形態に関する計算機１の構成例を示すブロック図である。計算機１のハードウェア構成は、図１に示す計算機１と同様である。
【００９６】
メモリ２は、システム領域１０と、ワーク領域３０と、空き領域４０と、第１キャッシュ領域２０とを有する。プロセッサ３は、ワーク領域２０において、ハイパバイザ５０を実行する。ハイパバイザ５０は、仮想マシンを実現するためのベースとなるアプリケーションプログラムである。
【００９７】
ハイパバイザ５０上では複数の仮想マシン５１Ａ、５１Ｂが実行され、各仮想マシン５１Ａ、５１Ｂでは独立した仮想ＯＳが実行される。ハイパバイザ５０は、仮想マシンメモリマネージャ５２を有する。
【００９８】
仮想マシンメモリマネージャ５２は、仮想マシン５１Ａ、５１Ｂの有する仮想的なメモリ（「仮想メモリ」という）に物理的なメモリ２のページを割り当てたり、仮想メモリに割り当てた物理的なメモリ２のページを回収したりする。メモリ２において仮想マシンの仮想メモリに割り当てられた領域を「仮想メモリ割当領域」という。図９において、仮想メモリ割当領域５３Ａ及び５３Ｂはそれぞれ、仮想マシン５１Ａ及び５１Ｂの仮想メモリに割り当てられている。
【００９９】
ＳＳＤ６は、各仮想マシン上の仮想ＯＳから使用される仮想マシン用スワップ領域６１Ａ及び６１Ｂと、計算機１上のＯＳから使用されるスワップ領域７と、第２キャッシュ領域８とを有する。図９において、仮想マシン用スワップ領域６１Ａ及び６１Ｂはそれぞれ、仮想マシン５１Ａ及び５１Ｂの仮想ＯＳから使用される。第２キャッシュ領域８は、仮想マシンごとに確保されなくてもよい。なぜなら、仮想マシン５１Ａ、５１Ｂから発行されたリード及びライト要求は、最終的には計算機１のＩ／Ｏとして実行されるからである。
【０１００】
計算機１上のＯＳは、ワーク領域３０内のデータを、ＳＳＤ６のスワップ領域７に退避する。しかし、仮想メモリ割当領域５３Ａ、５３Ｂのデータがスワップ領域７に退避されることは望ましくない。なぜなら、仮想メモリに割り当てられた仮想メモリ割当領域５３Ａ、５３Ｂがメモリ２よりもＩ／Ｏ速度の遅いＳＳＤ６のスワップ領域７に退避されてしまうと、仮想メモリのＩ／Ｏ速度はスワップ領域よりも速いと想定して動作している仮想マシン上の仮想ＯＳが、想定外の動作をするおそれがあるためである。
【０１０１】
このような問題の発生を回避するために、仮想マシン上の仮想ＯＳ上で、バルーンドライバと呼ばれるプログラムが実行される。バルーンドライバは、仮想マシンメモリマネージャ５２が、仮想メモリの不必要ページを回収する際に用いられる。例えば、仮想マシンメモリマネージャ５２が、仮想マシン５１Ａ上の仮想ＯＳに対して不必要ページの回収を指示すると、仮想マシン５１Ａ上のバルーンドライバは、仮想メモリのページを大量に確保する。すると、仮想マシン５１Ａ上の仮想ＯＳは、仮想メモリにおけるスワップ領域に退避しても問題ないデータを、仮想マシン用スワップ領域６１Ａへ退避する。次に、仮想マシンメモリマネージャ５２は、バルーンドライバが確保した仮想メモリのページに割り当てられている、仮想メモリ割当領域５３Ａのページを回収する。これにより、仮想メモリ割当領域５３Ａが縮小され、仮想メモリ割当領域５３Ａのデータがスワップ領域７へ退避されることを回避できる。
【０１０２】
図１０は、第２の実施形態に係る割当調整部３００の構成例を示すブロック図である。割当調整部３００は、ポリシ設定部３１０と、稼働状況観測部３２０と、メモリ調整部３３０と、スワップデバイス調整部３４０と、ポリシ情報１１１と、稼働情報１６０とを有する。ここでは、第１の実施形態と相違する部分について説明する。
【０１０３】
図１１は、第２の実施形態に関する稼働情報１６０の一例を示す。
【０１０４】
稼働情報１６０は、仮想マシン５１Ａ、５１Ｂの稼働状況及び計算機１の稼働状況に関する情報を有する。稼働情報１６０は、仮想マシン毎に、仮想メモリ使用量１６１と、スワップ領域量１６２と、スワップ使用量１６３と、スワップ頻度１６４とを、属性として有する。そして、稼働情報１６０は、図５と同様に、第２キャッシュリードヒット量１５５と、第２キャッシュリードミス量１５６と、第２キャッシュライトヒット量１５７と、第２キャッシュライトミス量１５８と、を属性として有する。
【０１０５】
仮想メモリ使用量１６１、スワップ領域量１６２、スワップ使用量１６３及びスワップ頻度１６４は、仮想マシン上の仮想ＯＳと仮想マシンメモリマネージャ５２とによって測定されてもよい。
【０１０６】
稼働状況観測部３２０は、稼働情報１６０に関する情報を観測し、その観測結果に基づいて稼働情報１６０を更新する。稼働状況観測部３２０は、仮想マシンメモリマネージャ５２を通じて、各仮想マシンの稼働情報１６０に関する情報を所定のタイミング（例えば一定周期）で取得してもよい。
【０１０７】
メモリ調整部３３０は、稼働情報１６０を参照し、メモリ２のページを、仮想マシン割当領域５３Ａ、５３Ｂ及び第１キャッシュ領域２０にどのように割り当てるかを調整する。
【０１０８】
メモリ調整部３３０は、仮想マシン５１Ａ、５１Ｂのそれぞれについて「スワップ頻度１６１＞スワップ頻度基準値１１３」の場合（つまり、仮想マシン上の仮想ＯＳのスワップ頻度が大きい場合）、その仮想マシン５１Ａ、５１Ｂの仮想メモリに割り当てる仮想メモリ割当領域５３Ａ、５３Ｂを拡大してもよい。例えば、メモリ調整部３３０は、仮想マシンメモリマネージャ５２を通じて、仮想マシン５１Ａ、５１Ｂ上のバルーンドライバにバルーンの縮小を指示する。バルーンドライバは、バルーンの縮小指示を受けると、確保していた仮想メモリのページを開放する。これにより、仮想マシン上の仮想ＯＳは、利用可能な仮想メモリが増加するので、スワップの発生を減らすことができる。
【０１０９】
メモリ調整部３３０は、仮想マシン５１Ａ、５１Ｂのそれぞれについて「スワップ頻度１６１≦スワップ頻度基準値１１３」の場合（つまり、仮想マシン上の仮想ＯＳのスワップ頻度が小さい場合）、その仮想マシン５１Ａ、５１Ｂを仮想マシン割当領域５３Ａ、５３Ｂの縮小候補に登録してもよい。そして、メモリ調整部３３０は、「ＨＤＤのＩ／Ｏ量＞ＨＤＤのＩ／Ｏ基準量１１２」の場合、仮想マシンメモリマネージャ５２を通じて、縮小候補に登録された仮想マシン上のバルーンドライバに、バルーンの拡大を指示してもよい。バルーンドライバは、バルーンの拡大指示を受けると、仮想メモリのページを新たに確保する。そして、メモリ調整部３３０は、バルーンドライバにより確保された仮想メモリのページに対応する仮想メモリ割当領域５３Ａ、５３Ｂを回収する。これにより、仮想メモリ割当領域５３Ａ、５３Ｂが縮小され、それに伴って第１キャッシュ領域２０が拡大される。第１キャッシュ領域２０が拡大すると、キャッシュヒット率が向上し得るので、ＨＤＤのＩ／Ｏ量が削減され得る。
【０１１０】
なお、実際にワーク領域３０及び第１キャッシュ領域２０を変更する処理は、第１の実施形態と同様に、メモリ制御部２１０が実行してもよい。
【０１１１】
スワップデバイス調整部３４０は、仮想マシン５１Ａ、５１Ｂのそれぞれについて「（仮想メモリ使用量１６１＋スワップ使用量１６３）／（仮想メモリ使用量１６１＋スワップ領域量１６２）×１００（％）」を算出する。この算出値を「仮想マシン＆スワップ使用割合」という。
【０１１２】
スワップデバイス調整部３４０は、仮想マシン５１Ａ、５１Ｂのそれぞれについて「仮想マシン＆スワップ使用割合＞スワップ使用上限値１１５」の場合、その仮想マシン５１Ａ、５１Ｂを、スワップ拡大候補に登録する。スワップデバイス調整部３４０は、仮想マシン５１Ａ、５１Ｂのそれぞれについて「仮想マシン＆スワップ使用割合＜スワップ使用下限値１１６」の場合、その仮想マシン５１Ａ、５１Ｂを、スワップ縮小候補に登録する。
【０１１３】
そして、スワップデバイス調整部３４０は、スワップ拡大候補に登録された仮想マシン５１Ａ、５１Ｂの仮想マシン用スワップ領域６１Ａ、６１Ｂの合計（「拡大合計」という）と、スワップ縮小候補に登録された仮想マシン５１Ａ、５１Ｂの仮想マシン用スワップ領域６１Ａ、６１Ｂの合計（「縮小合計」という）との差に基づいて、ＳＳＤ６の第２キャッシュ領域８のサイズの変化量を算出する。例えば、スワップデバイス調整部３４０は、「拡大合計−縮小合計＝変化量」を算出し、その変化量が正の場合は第２キャッシュ領域８のサイズを縮小し、その変化量が負の場合は第２キャッシュ領域８のサイズを拡大する。第２キャッシュ領域の拡大又は縮小のサイズは、その変化量に基づいて決定されてもよい。
【０１１４】
図１２は、第２の実施形態に係るメモリ調整処理の一例を示すフローチャートである。この処理は、例えば、一定の周期で実行される。
【０１１５】
メモリ調整部３３０は、未処理の仮想マシンの中から処理対象の仮想マシン（「対象仮想マシン」という）を決定し、対象仮想マシンに関する稼働情報１６０を取得する（Ｓ３０１）。
【０１１６】
メモリ調整部３３０は、対象仮想マシンにおいて「スワップ頻度１６４＞スワップ頻度基準値１１３」であるか否かを判定する（Ｓ３０２）。
【０１１７】
「スワップ頻度＞スワップ頻度基準値」の場合（Ｓ３０２：ＹＥＳ）、メモリ調整部３３０は、仮想マシンメモリマネージャ５２を通じて、対象仮想マシンのバルーンドライバにバルーン縮小を指示し（Ｓ３０３）、Ｓ３０５へ進む。
【０１１８】
「スワップ頻度≦スワップ頻度基準値」の場合（Ｓ３０２：ＮＯ）、メモリ調整部３３０は、対象仮想マシンをバルーン拡大候補に登録し（Ｓ３０４）、Ｓ３０５へ進む。
【０１１９】
Ｓ３０５において、メモリ調整部３３０は、未処理の仮想マシンが存在しているか否かを判定する（Ｓ３０５）。未処理の仮想マシンが存在している場合（Ｓ３０５：ＹＥＳ）、メモリ調整部１３０は、Ｓ３０１へ戻る。
【０１２０】
未処理の仮想マシンが存在しない場合（Ｓ３０５：ＮＯ）、メモリ調整部３３０は、第１キャッシュ領域調整処理を実行し（Ｓ３０７）、処理を終了する（ＥＮＤ）。第１キャッシュ調整処理の詳細については後述する。
【０１２１】
以上の処理により、仮想マシンにおけるスワップ発生頻度が所定の基準値と比べて大きい場合、仮想マシン上のバルーンドライバがバルーンを縮小し、仮想メモリ上の使用可能なページが増加する。これにより、仮想マシンにおけるスワップ発生頻度が減少する。
【０１２２】
図１３は、第１キャッシュ領域調整処理の一例を示すフローチャートである。この処理は、図１０のＳ３０７に該当する。
【０１２３】
メモリ調整部３３０は、図６と同様の処理を実行するが、Ｓ１１３に代えて以下の処理を実行する。つまり、メモリ調整部３３０は、仮想マシンメモリマネージャ５２を通じて、バルーン縮小候補に登録されている仮想マシンのバルーンドライバに、バルーン拡大を指示し（Ｓ３１３）、この処理を終了する（ＥＮＤ）。
【０１２４】
以上の処理により、ＨＤＤのＩ／Ｏ量が所定の基準量と比べて大きい場合、仮想マシン上のバルーンドライバがバルーンを拡大し、仮想メモリ割当領域のページが回収可能となる。よって、仮想メモリ割当領域が縮小され、それに伴ってメモリ２の第１キャッシュ領域２０が拡大される。これにより、キャッシュヒット率が向上し、ＨＤＤのＩ／Ｏ量が削減され得る。
【０１２５】
図１４は、スワップ領域調整処理の一例を示すフローチャートである。この処理は、例えば、一定の周期で実行される。
【０１２６】
スワップデバイス調整部３４０は、未処理の仮想マシンの中から対象仮想マシンを決定し、対象仮想マシンの稼働情報１６０を取得する（Ｓ４０１）。
【０１２７】
スワップデバイス調整部３４０は、対象仮想マシンについて「仮想マシン＆スワップ使用割合＞スワップ使用上限値１１５」であるか否かを判定する（Ｓ４０２）。
【０１２８】
「仮想マシン＆スワップ使用割合＞スワップ使用上限値１１５」の場合（Ｓ４０２：ＹＥＳ）、スワップデバイス調整部３４０は、この仮想マシンをスワップ拡大候補に登録し（Ｓ４０３）、Ｓ４０６へ進む。
【０１２９】
「仮想マシン＆スワップ使用割合≦スワップ使用上限値１１５」の場合（Ｓ４０２：ＮＯ）、スワップデバイス調整部３４０は、「仮想マシン＆スワップ使用割合＜スワップ使用下限値１１６」であるか否かを判定する（Ｓ４０４）。
【０１３０】
「仮想マシン＆スワップ使用割合＜スワップ使用下限値１１６」の場合（Ｓ４０４：ＹＥＳ）、スワップデバイス調整部３４０は、この仮想マシンをスワップ縮小候補に登録し（Ｓ４０５）、Ｓ４０６へ進む。
【０１３１】
「仮想マシン＆のスワップ使用割合≧スワップ使用下限値１１６」の場合（Ｓ４０４：ＮＯ）、スワップデバイス調整部３４０は、Ｓ４０６へ進む。
【０１３２】
Ｓ４０６において、スワップデバイス調整部３４０は、未処理の仮想マシンが存在するか否かを判定する（Ｓ４０６）。未処理の仮想マシンが存在する場合（Ｓ４０６：ＹＥＳ）、スワップデバイス調整部３４０は、Ｓ４０１へ戻る。
【０１３３】
未処理の仮想マシンが存在しない場合（Ｓ４０６：ＮＯ）、スワップデバイス調整部３４０は、スワップ拡大候補及びスワップ縮小候補に登録された仮想マシンの仮想マシン用スワップ領域のサイズに基づいて、ＳＳＤ６の第２キャッシュ領域６の変化量を算出する。そして、スワップデバイス調整部３４０は、各仮想マシン用スワップ領域のサイズを変更すると共に、その変化量に基づいて第２キャッシュ領域８のサイズを変更し（Ｓ４０８）、処理を終了する（ＥＮＤ）。
【０１３４】
以上の処理により、不足傾向の仮想マシン用スワップ領域が拡大される。これにより、仮想マシン用スワップ領域が不足することを回避できる。また、過剰傾向の仮想マシン用スワップ領域は縮小される。これにより、第２キャッシュ領域８が拡大され、ＨＤＤ５に対するキャッシュヒット率が向上され得る。つまり、ＨＤＤのＩ／Ｏ量が削減され得る。
【０１３５】
上述した幾つかの実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【０１３６】
例えば、第１及び第２の実施形態で説明した計算機１は、複数の記憶デバイス（例えばＨＤＤ又はＳＳＤ）とそれらに対するＩ／Ｏを制御するストレージコントローラとを有するストレージ装置（例えばディスクアレイ装置）内のストレージコントローラに適用されてもよいし、ストレージ装置（外部記憶デバイス）にＩ／Ｏ要求を発行するホスト計算機に適用されてもよい。
【０１３７】
また、例えば、第２メモリ（例えばＳＳＤ）よりもＩ／Ｏ速度が遅い記憶デバイスは、必ずしも計算機１の外部記憶デバイスでなくてもよく、計算機１に内蔵されていてもよい。
【符号の説明】
【０１３８】
１：計算機  ２：メモリ  ３：プロセッサ  ４：デバイスコントローラ、５：ＨＤＤ  ６：ＳＳＤ  ７：スワップ領域  ８：第２キャッシュ領域  ２０：第１キャッシュ領域  ３０：ワーク領域  ４０：空き領域  ５１Ａ，５１Ｂ：仮想マシン  ５２：仮想マシンメモリマネージャ  ５３Ａ，５３Ｂ：仮想メモリ割当領域  ６１Ａ，６１Ｂ：仮想マシン用スワップ領域
【図１】
2015132877.tif 000003
【図２】
2015132877.tif 000004
【図３】
2015132877.tif 000005
【図４】
2015132877.tif 000006
【図５】
2015132877.tif 000007
【図６】
2015132877.tif 000008
【図７】
2015132877.tif 000009
【図８】
2015132877.tif 000010
【図９】
2015132877.tif 000011
【図１０】
2015132877.tif 000012
【図１１】
2015132877.tif 000013
【図１２】
2015132877.tif 000014
【図１３】
2015132877.tif 000015
【図１４】
2015132877.tif 000016
【国際調査報告】
2015132877.tif 000017
2015132877.tif 000018
2015132877.tif 000019
2015132877.tif 000020