(57)【特許請求の範囲】
【請求項１】
第１プロセッサと、
前記第１プロセッサに接続されたメモリと、
前記メモリに対するアクセスを行う仮想マシンを実行する第２プロセッサと、
を有し、
前記第１プロセッサが、
前記仮想マシンがアクセスする前記メモリの領域からデータを読み出し、
読み出した前記データを、前記第１プロセッサのキャッシュに格納する、
処理を実行し、
前記第１プロセッサ又は前記第２プロセッサが、
前記仮想マシンが前記メモリに対して行ったアクセスについての情報を取得し、
前記データを読み出す処理において、
前記アクセスについての情報に基づき、前記仮想マシンがアクセスする前記メモリの領域を特定し、
特定された前記メモリの領域から、前記データを読み出す、
情報処理装置。
【請求項２】
前記第１プロセッサ又は前記第２プロセッサが、
前記第２プロセッサのキャッシュミス回数の情報を取得し、
前記データを読み出す処理において、
取得された前記第２プロセッサのキャッシュミス回数の情報に基づき、前記データを読み出す方法を決定し、
特定された前記メモリの領域から、決定された前記方法によって前記データを読み出す、
請求項１記載の情報処理装置。
【請求項３】
第１プロセッサと、
前記第１プロセッサに接続されたメモリと、
前記メモリに対するアクセスを行う仮想マシンを実行する第２プロセッサと、
を有し、
前記第１プロセッサが、
前記仮想マシンがアクセスする前記メモリの領域からデータを読み出し、
読み出した前記データを、前記第１プロセッサのキャッシュに格納する、
処理を実行し、
前記第１プロセッサはメモリコントローラを有し、
前記メモリコントローラは、前記仮想マシンが前記メモリに対して行ったアクセスの履歴情報を取得し、
前記データを読み出す処理において、
前記メモリコントローラにより取得された前記アクセスの履歴情報に基づき、前記仮想マシンがアクセスするメモリアドレスを特定し、
特定された前記メモリアドレスを含む領域から前記データを読み出す
情報処理装置。
【請求項４】
前記メモリコントローラは、前記メモリに対するアクセスのうち前記仮想マシンによるアクセスを抽出するための条件を管理し、当該条件を満たすアクセスの履歴情報を取得する、
請求項３記載の情報処理装置。
【請求項５】
プロセッサが、
前記プロセッサに接続されたメモリに対するアクセスを行い且つ他のプロセッサにより実行される仮想マシンによってアクセスされる前記メモリの領域から、データを読み出し、
読み出した前記データを、前記プロセッサのキャッシュに格納する、
処理を実行するキャッシュ方法であって、
前記プロセッサ又は前記他のプロセッサが、
前記仮想マシンが前記メモリに対して行ったアクセスについての情報を取得し、
前記データを読み出す処理において、
前記アクセスについての情報に基づき、前記仮想マシンがアクセスする前記メモリの領域を特定し、
特定された前記メモリの領域から、前記データを読み出す、
キャッシュ方法。
【請求項６】
プロセッサが、
前記プロセッサに接続されたメモリに対するアクセスを行い且つ他のプロセッサにより実行される仮想マシンによってアクセスされる前記メモリの領域から、データを読み出し、
読み出した前記データを、前記プロセッサのキャッシュに格納する、
処理を実行するキャッシュ方法であって、
前記プロセッサはメモリコントローラを有し、
前記メモリコントローラは、前記仮想マシンが前記メモリに対して行ったアクセスの履歴情報を取得し、
前記データを読み出す処理において、
前記メモリコントローラにより取得された前記アクセスの履歴情報に基づき、前記仮想マシンがアクセスするメモリアドレスを特定し、
特定された前記メモリアドレスを含む領域から前記データを読み出す
キャッシュ方法。
【請求項７】
プロセッサに、
前記プロセッサに接続されたメモリに対するアクセスを行い且つ他のプロセッサにより実行される仮想マシンによってアクセスされる前記メモリの領域から、データを読み出し、
読み出した前記データを、前記プロセッサのキャッシュに格納する、
処理を実行させるキャッシュプログラムであって、
前記プロセッサ又は前記他のプロセッサに、
前記仮想マシンが前記メモリに対して行ったアクセスについての情報を取得させ、
前記データを読み出す処理において、
前記アクセスについての情報に基づき、前記仮想マシンがアクセスする前記メモリの領域を特定し、
特定された前記メモリの領域から、前記データを読み出す、
キャッシュプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュ方法、キャッシュプログラム及び情報処理装置に関する。
【背景技術】
【０００２】
クラウドサービス等を提供するためのシステムにおいては、プロセッサ及びメモリ等のハードウエア上で動作する仮想化ソフトウエア（例えばハイパバイザ）によって、各顧客のＶＭ（Virtual Machine）が生成される。ＶＭに割り当てられるプロセッサのコア数及びメモリサイズは契約等により決められるが、顧客の要求に応じて柔軟に変更することも可能である。
【０００３】
上記のようなシステムは通常はマルチプロセッサシステムであるが、マルチプロセッサシステムにおいては、リモートメモリへのアクセスが発生することが原因でＶＭのパフォーマンスが低下するという問題がある。ここで言う「リモートメモリ」とは、着目するプロセッサに接続されていないメモリのことである。このような問題に対して有効な技術を提示した文献は知られていない。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００９−５３７９２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、１つの側面では、リモートメモリに格納されたデータへのアクセスを高速化するための技術を提供することである。
【課題を解決するための手段】
【０００６】
本発明に係る情報処理装置は、第１プロセッサと、第１プロセッサに接続されたメモリと、メモリに対するアクセスを行う仮想マシンを実行する第２プロセッサとを有する。そして、上で述べた第１プロセッサが、仮想マシンがアクセスするメモリの領域からデータを読み出し、読み出したデータを、第１プロセッサのキャッシュに格納する処理を実行する。
【発明の効果】
【０００７】
１つの側面では、リモートメモリに格納されたデータへのアクセスを高速化できるようになる。
【図面の簡単な説明】
【０００８】
【図１】図１は、リモートメモリについて説明するための図である。
【図２】図２は、第１の実施の形態の情報処理装置の構成図である。
【図３】図３は、第１の実施の形態のリモートアクセス管理部が実行する処理の処理フローを示す図である。
【図４】図４は、ＣＰＵパッケージの割当とメモリの割当とを特定するためのデータの一例を示す図である。
【図５】図５は、アクセスデータ収集部が実行する処理の処理フローを示す図である。
【図６】図６は、ＥＰＴを使用した変換について説明するための図である。
【図７】図７は、アクセステーブルに格納されるデータの一例を示す図である。
【図８】図８は、アクセス管理テーブルに格納されるデータの一例を示す図である。
【図９】図９は、キャッシュミスデータ収集部が実行する処理の処理フローを示す図である。
【図１０】図１０は、キャッシュミステーブルに格納されるデータの一例を示す図である。
【図１１】図１１は、キャッシュミス管理テーブルに格納されるデータの一例を示す図である。
【図１２】図１２は、第１の実施の形態のキャッシュフィル部が実行する処理の処理フローを示す図である。
【図１３】図１３は、レイテンシの短縮について説明するための図である。
【図１４Ａ】図１４Ａは、第２の実施の形態の情報処理装置の構成図である。
【図１４Ｂ】図１４Ｂは、メモリアクセス監視部の構成図である。
【図１５】図１５は、第２の実施の形態のリモートアクセス管理部が実行する処理の処理フローを示す図である。
【図１６】図１６は、フィルタテーブルに格納されるデータの一例を示す図である。
【図１７】図１７は、メモリアクセス監視部が実行する処理の処理フローを示す図である。
【図１８】図１８は、アクセス履歴テーブルに格納されるデータの一例を示す図である。
【図１９】図１９は、第２の実施の形態のキャッシュフィル部が実行する処理の処理フローを示す図である。
【図２０】図２０は、第３の実施の形態の情報処理装置の構成図である。
【発明を実施するための形態】
【０００９】
例えばＩａａＳ（Infrastructure as a Service）を提供するシステムにおいては、ＶＭ（Virtual Machine）に割り当てられるＣＰＵ（Central Processing Unit）コアの数とメモリサイズとが顧客の要求に応じて決定される。ここで、図１に示すような情報処理装置１０００を考える。情報処理装置１０００は、ＣＰＵ１０ｐと、ＣＰＵ１０ｐに接続されたメモリ１０ｍと、ＣＰＵ２０ｐと、ＣＰＵ２０ｐに接続されたメモリ２０ｍとを有しており、これらのハードウエア上でハイパバイザ１００が動作する。ハイパバイザ１００はＶＭ１２０を生成する。
【００１０】
図１の例においては、ＣＰＵに関しては、ＶＭ１２０にＣＰＵ１０ｐのコアだけが割り当てられるケース、ＶＭ１２０にＣＰＵ２０ｐのコアだけが割り当てられるケース、及びＶＭ１２０にＣＰＵ１０ｐのコアとＣＰＵ２０ｐのコアとが割り当てられるケースのいずれもが発生し得る。また、メモリに関しては、ＶＭ１２０にメモリ１０ｍだけが割り当てられるケース、ＶＭ１２０にメモリ２０ｍだけが割り当てられるケース、及びＶＭ１２０にメモリ１０ｍとメモリ２０ｍとが割り当てられるケースのいずれもが発生し得る。
【００１１】
すると、ＶＭ１２０に割り当てられていないＣＰＵに接続されたメモリ（すなわちリモートメモリ）がＶＭ１２０に割り当てられる場合がある。例えば、ＶＭ１２０にＣＰＵ１０ｐが割り当てられており且つＶＭ１２０にメモリ１０ｍ及び２０ｍが割り当てられている場合、メモリ２０ｍはリモートメモリである。
【００１２】
なお、リモートメモリは、ＩａａＳを提供するシステムだけでなくその他のシステムにおいても生じることがある。例えばライセンスの料金がコアの数に応じて決定されるシステムにおいては、ＶＭに割り当てるコアの数を制限し且つメモリサイズを大きくする場合があり、このような場合にリモートメモリが生じる。
【００１３】
以下では、リモートメモリに格納されたデータへのアクセスを高速化するための方法を説明する。
【００１４】
［実施の形態１］
図２に、第１の実施の形態の情報処理装置１の構成図を示す。情報処理装置１は、ＣＰＵパッケージ１ｐと、例えばＤＩＭＭ（Dual Inline Memory Module）であるメモリ１ｍと、ＣＰＵパッケージ２ｐと、例えばＤＩＭＭであるメモリ２ｍとを有する。メモリ１ｍはＣＰＵパッケージ１ｐに接続され、メモリ２ｍはＣＰＵパッケージ２ｐに接続される。情報処理装置１は、ＰＣＩ（Peripheral Component Interconnect） Ｅｘｐｒｅｓｓの規格に対応している。
【００１５】
ＣＰＵパッケージ１ｐは、コア１１ｃ乃至１４ｃと、キャッシュ１ａと、メモリコントローラ（図２においては「ＭＣ」と略されている）１ｂと、Ｉ／Ｏ（Input/Output）コントローラ（図２においては「ＩＯＣ」と略されている）１ｒと、キャッシュコヒーレントインタフェース（図２においては「ＣＣＩ」と略されている）１ｑとを有する。同様に、ＣＰＵパッケージ２ｐは、コア２１ｃ乃至２４ｃと、キャッシュ２ａと、メモリコントローラ２ｂと、Ｉ／Ｏコントローラ２ｒと、キャッシュコヒーレントインタフェース２ｑとを有する。
【００１６】
コア１１ｃ乃至１４ｃ及びコア２１ｃ乃至２４ｃは、プログラムの命令を実行する。
【００１７】
キャッシュ１ａ及び２ａは、コアによるメモリアクセスに関する情報（例えば、アドレス及びデータそのもの）を格納する記憶領域である。第１の実施の形態においては、各ＣＰＵパッケージはＬ（Level）１キャッシュ、Ｌ２キャッシュ及びＬ３キャッシュを有するが、コア間で共有されるキャッシュはＬ３キャッシュである。
【００１８】
メモリコントローラ１ｂ及び２ｂはメモリに対するアクセスを制御するコントローラであり、メモリコントローラ１ｂはメモリ１ｍに接続され、メモリコントローラ２ｂはメモリ２ｍに接続される。
【００１９】
Ｉ／Ｏコントローラ１ｒ及び２ｒは、ＰＣＩ Ｅｘｐｒｅｓｓ等のＩ／Ｏインタフェースに接続するためのコントローラであり、ＣＰＵパッケージ内で使用されるプロトコルをＩ／Ｏインタフェースのプロトコルに変換する処理等を実行する。
【００２０】
キャッシュコヒーレントインタフェース１ｑ及び２ｑは、例えばＩｎｔｅｌ ＱＰＩ（Quick Path Interconnect）或いはＨｙｐｅｒ Ｔｒａｎｓｐｏｒｔ等である。キャッシュコヒーレントインタフェース１ｑ及び２ｑは、例えばキャッシュコヒーレンシを保つための通信など、他のＣＰＵパッケージとの通信を行う。
【００２１】
ハイパバイザ１０のプログラムは、メモリ１ｍ及び２ｍの少なくともいずれかに格納され、ＣＰＵパッケージ１ｐのコア及びＣＰＵパッケージ２ｐのコアの少なくともいずれかに実行される。ハイパバイザ１０は、ＶＭ１２に対するハードウエアの割当を管理する。ハイパバイザ１０は、ゲストアドレスを物理アドレスに変換するためのテーブルである変換テーブル１０１と、アクセスデータ収集部１０２と、キャッシュミスデータ収集部１０３と、リモートアクセス管理部１０４と、キャッシュフィル部１０５とを含む。アクセスデータ収集部１０２は、アクセス管理テーブル１０２１とアクセステーブル１０２２とを管理する。キャッシュミスデータ収集部１０３は、キャッシュミス管理テーブル１０３１とキャッシュミステーブル１０３２とを管理する。変換テーブル１０１、アクセス管理テーブル１０２１、アクセステーブル１０２２、キャッシュミス管理テーブル１０３１及びキャッシュミステーブル１０３２については後述する。
【００２２】
ＶＭ１２は、仮想化されたＣＰＵであるｖ（virtualized）ＣＰＵ１ｖ及びｖＣＰＵ２ｖと、仮想化された物理メモリであるゲスト物理メモリ１ｇとを含む。仮想化されたハードウエア上ではゲストＯＳ（Operating System）が動作する。
【００２３】
第１の実施の形態においては、ｖＣＰＵ１ｖはコア１１ｃによって実現され、ｖＣＰＵ２ｖはコア１２ｃによって実現され、ゲスト物理メモリ１ｇはメモリ１ｍ及び２ｍによって実現されるとする。すなわち、ＶＭ１２に対してリモートメモリ（ここでは、メモリ２ｍ）が割り当てられているとする。キャッシュフィル部１０５はプログラムがコア２４ｃに実行されることにより実現される。但し、キャッシュフィル部１０５のプログラムが複数のコアに実行されてもよい。アクセスデータ収集部１０２のプログラム、キャッシュミスデータ収集部１０３のプログラム及びリモートアクセス管理部１０４のプログラムはいずれのコアに実行されてもよい。
【００２４】
次に、図３乃至図１２を用いて、情報処理装置１の動作を説明する。
【００２５】
まず、図３及び図４を用いて、ＶＭ１２の生成時にリモートアクセス管理部１０４が実行する処理を説明する。ハイパバイザ１０によってＶＭ１２が生成された場合、リモートアクセス管理部１０４は、生成されたＶＭ１２（以下、対象ＶＭと呼ぶ）に対するＣＰＵパッケージの割当とメモリの割当とを特定する（図３：ステップＳ１）。
【００２６】
通常、ハイパバイザ１０は図４に示すようなデータを管理している。そして、ステップＳ１においては、図４に示すようなデータによってＣＰＵパッケージの割当とメモリの割当とが特定される。図４の例では、ＶＭの識別子であるＶＭＩＤと、ＶＭのｖＣＰＵ番号と、ＶＭに割り当てられたコアを含むＣＰＵパッケージの番号と、ＶＭに割り当てられたコアの番号と、ＶＭ用の変換テーブルのアドレスと、ＶＭに割り当てられたメモリに接続されたＣＰＵパッケージの番号とが管理される。図４の例では、ＶＭＩＤが「１」であるＶＭが、番号が「１」であるＣＰＵパッケージのメモリを常にリモートメモリとして使用する。
【００２７】
図３の説明に戻り、リモートアクセス管理部１０４は、対象ＶＭはリモートメモリアクセスを実行するか判定する（ステップＳ３）。リモートメモリアクセスとは、ＶＭがリモートメモリに対してアクセスすることである。
【００２８】
対象ＶＭがリモートメモリアクセスを実行しない場合（ステップＳ３：Ｎｏルート）、処理は終了する。一方、対象ＶＭがリモートメモリアクセスを実行する場合（ステップＳ３：Ｙｅｓルート）、リモートアクセス管理部１０４は、アクセスデータ収集部１０２に、対象ＶＭによるアクセスに関するデータの収集指示を出力する（ステップＳ５）。本収集指示は、対象ＶＭのＶＭＩＤ、実行間隔の指定及び世代番号の指定を含む。アクセスデータ収集部１０２が実行する処理については後述する。
【００２９】
リモートアクセス管理部１０４は、キャッシュミスデータ収集部１０３に、対象ＶＭが使用するコアのキャッシュミスに関するデータの収集指示を出力する（ステップＳ７）。本収集指示は、図４に示したデータにおける、対象ＶＭに割り当てられたコアの番号、対象ＶＭのＶＭＩＤ、待機時間の指定及び世代番号の指定を含む。キャッシュミスデータ収集部１０３が実行する処理については後述する。
【００３０】
リモートアクセス管理部１０４は、キャッシュフィル部１０５に、リモートメモリ（第１の実施の形態においては、メモリ２ｍ）に接続されたＣＰＵパッケージのコア（ここでは、コア２４ｃとする）を割り当てる（ステップＳ９）。ステップＳ９においては、キャッシュフィル部１０５のプログラムを実行することがコア２４ｃに指示される。これにより、コア２４ｃは、実行指示の待ち状態に移行する。
【００３１】
リモートアクセス管理部１０４は、キャッシュフィル部１０５に、アルゴリズムＡ乃至Ｃを使用したキャッシュフィル処理の実行指示を出力する（ステップＳ１１）。そして処理は終了する。実行指示は、待機時間の指定を含む。
【００３２】
以上のような処理によって、リモートメモリへのアクセスを行うＶＭについて、アクセスデータ収集部１０２、キャッシュミスデータ収集部１０３及びキャッシュフィル部１０５が処理を実行開始できるようになる。
【００３３】
次に、図５乃至図８を用いて、アクセスデータ収集部１０２が実行する処理を説明する。まず、リモートアクセス管理部１０４からの収集指示を受け取ると、アクセスデータ収集部１０２は、対象ＶＭについてアクセステーブル１０２２を生成する（図５：ステップＳ２１）。アクセステーブル１０２２は、ステップＳ２１の段階では空である。なお、アクセステーブル１０２２の管理に使用するテーブルとして、ステップＳ２１においてはアクセス管理テーブル１０２１も生成される。
【００３４】
アクセスデータ収集部１０２は、対象ＶＭが停止するまで待機する（ステップＳ２３）。本実施の形態においては、対象ＶＭは稼働と停止とを頻繁に繰り返しているとする。
【００３５】
アクセスデータ収集部１０２は、リモートアクセス管理部１０４からの収集指示において指定された実行間隔が経過したか判定する（ステップＳ２５）。
【００３６】
リモートアクセス管理部１０４からの収集指示において指定された実行間隔が経過していない場合（ステップＳ２５：Ｎｏルート）、ステップＳ２３の処理に戻る。一方、リモートアクセス管理部１０４からの収集指示において指定された実行間隔が経過した場合（ステップＳ２５：Ｙｅｓルート）、アクセスデータ収集部１０２は、対象ＶＭについての変換テーブル１０１に基づき、リモートメモリへのアクセスに関するデータをアクセステーブル１０２２に書き込む（ステップＳ２７）。また、アクセスデータ収集部１０２は、アクセス管理テーブル１０２１を更新すべき場合にはアクセス管理テーブル１０２１を更新する。
【００３７】
上で述べたように、変換テーブル１０１はゲストアドレスを物理アドレスに変換するためのテーブルであり、例えばＩｎｔｅｌ社のプロセッサに実装されているＥＰＴ（Extended Page Table）である。変換テーブル１０１においては、ゲスト物理アドレスに対応するホスト物理アドレスがページ毎に管理されている。ゲストＯＳがゲスト物理アドレスにアクセスする場合、コアは自動的に変換テーブル１０１を参照し、ゲスト物理アドレスに対応するホスト物理アドレスを算出して、ホスト物理アドレスに対してアクセスを行う。変換テーブルにはアクセスビット及びダーティビットが備えられているため、ゲストＯＳがページからデータを読み出したこと及びページに書き込みをしたことをハイパバイザ１０が把握することができる。
【００３８】
図６を用いて、ＥＰＴを使用した変換について簡単に説明する。図６においては、４８ビットのゲスト物理アドレスが４８ビットのホスト物理アドレスに変換される。ゲスト物理アドレスの３９ビット目から４７ビット目までの情報によって、ＥＰＴのページディレクトリポインタテーブルのエントリが特定される。特定されたエントリによって、ＥＰＴのページディレクトリが特定され、ゲスト物理アドレスの３０ビット目から３８ビット目までの情報によって、ページディレクトリのエントリが特定される。特定されたエントリによって、ＥＰＴのページテーブルが特定され、ゲスト物理アドレスの２１ビット目から２９ビット目までの情報によって、ページテーブルのエントリが特定される。特定されたエントリによって、最後のテーブルが特定され、ゲスト物理アドレスの１２ビット目から２０ビット目までの情報によって、そのテーブルのエントリが特定される。最後に特定されたエントリに含まれる情報は、ホスト物理アドレスの１２ビット目から４７ビット目の情報として使用される。また、この情報にはアクセスビットとダーティビットとが付加されている。アクセスビットは読み込みのアクセスを表し、ダーティビットは書き込みのアクセスを表す。ゲスト物理アドレスの０ビット目から１１ビット目までの情報は、ホスト物理アドレスの０ビット目から１１ビット目までの情報として使用される。
【００３９】
ステップＳ２７においては、対象ＶＭによるアクセスに関するデータが変換テーブル１０１から収集される。図７に、アクセステーブル１０２２に格納されるデータの一例を示す。図７の例では、エントリの番号と、エントリが生成された世代を表す番号と、エントリに対応するメモリ領域の開始アドレス（図７においては、開始アドレスを含むページの情報）と、アクセスタイプの比率と、アクセス回数とが格納される。アクセステーブル１０２２は、ＶＭ毎に用意される。なお、アクセステーブル１０２２には、リモートメモリのメモリ領域についてのみエントリが生成される。これにより、使用リソース量を削減することができる。
【００４０】
図８に、アクセス管理テーブル１０２１に格納されるデータの一例を示す。図８の例では、ＶＭＩＤと、アクセステーブル１０２２に格納されたエントリの世代番号の範囲と、アクセステーブル１０２２に格納されたエントリのエントリ番号の範囲と、１エントリに対応するメモリ領域のサイズとが格納される。第１の実施の形態においては、ＥＰＴにおけるページのサイズ以上のサイズでメモリ領域が管理される。これにより、管理用のデータとしてＥＰＴを使用した場合と比較して、処理オーバーヘッド及び使用リソース量を削減することができる。
【００４１】
図５の説明に戻り、アクセスデータ収集部１０２は、対象ＶＭに対応する変換テーブル１０１のアクセスビット及びダーティビットをクリアする（ステップＳ２９）。
【００４２】
アクセスデータ収集部１０２は、アクセステーブル１０２２に格納されている最新の世代番号が、リモートアクセス管理部１０４からの収集指示において指定された世代番号以上であるか判定する（ステップＳ３１）。
【００４３】
アクセステーブル１０２２に格納されている最新の世代番号が、リモートアクセス管理部１０４からの収集指示において指定された世代番号以上ではない場合（ステップＳ３１：Ｎｏルート）、ステップＳ３５の処理に移行する。一方、アクセステーブル１０２２に格納されている最新の世代番号が、リモートアクセス管理部１０４からの収集指示において指定された世代番号以上である場合（ステップＳ３１：Ｙｅｓルート）、アクセスデータ収集部１０２は、アクセステーブル１０２２に格納されているエントリのうち、最も古い世代のエントリを削除する（ステップＳ３３）。
【００４４】
アクセスデータ収集部１０２は、リモートアクセス管理部１０４から収集の終了指示を受け取ったか判定する（ステップＳ３５）。リモートアクセス管理部１０４から収集の終了指示を受け取っていない場合（ステップＳ３５：Ｎｏルート）、ステップＳ２３の処理に戻る。一方、リモートアクセス管理部１０４から収集の終了指示を受け取った場合（ステップＳ３５：Ｙｅｓルート）、アクセスデータ収集部１０２は、対象ＶＭについてのアクセステーブル１０２２を削除する（ステップＳ３７）。これに伴い、対象ＶＭについてのアクセス管理テーブル１０２１も削除される。そして処理は終了する。
【００４５】
以上のような処理を実行すれば、対象ＶＭがリモートメモリへアクセスした場合にそのアクセスに関するデータを収集することができるようになる。生成されたアクセステーブル１０２２は、キャッシュフィル部１０５の処理に使用される。
【００４６】
次に、図９乃至図１１を用いて、キャッシュミスデータ収集部１０３が実行する処理を説明する。まず、リモートアクセス管理部１０４からの収集指示を受け取ると、キャッシュミスデータ収集部１０３は、対象ＶＭについてキャッシュミステーブル１０３２を生成する（図９：ステップＳ４１）。キャッシュミステーブル１０３２は、ステップＳ４１の段階では空である。なお、キャッシュミステーブル１０３２の管理に使用するテーブルとして、ステップＳ４１においてはキャッシュミス管理テーブル１０３１も生成される。
【００４７】
キャッシュミスデータ収集部１０３は、リモートアクセス管理部１０４からの収集指示において指定された時間（例えば１００ミリ秒）待機する（ステップＳ４３）。
【００４８】
キャッシュミスデータ収集部１０３は、対象ＶＭに割り当てられているＣＰＵパッケージから、キャッシュミス回数及びキャッシュヒット回数を取得し、取得したキャッシュミス回数及びキャッシュヒット回数をキャッシュミステーブル１０３２に書き込む（ステップＳ４５）。ＣＰＵパッケージは、キャッシュミス回数のカウンタレジスタ及びキャッシュヒット回数のカウンタレジスタを有しているものとする。また、キャッシュミスデータ収集部１０３は、キャッシュミス管理テーブル１０３１を更新すべき場合にはキャッシュミス管理テーブル１０３１を更新する。
【００４９】
図１０に、キャッシュミステーブル１０３２に格納されるデータの一例を示す。図１０の例では、エントリの番号と、エントリが生成された世代を表す番号と、その世代においてＶＭのｖＣＰＵのスヌープミスの回数の合計であるキャッシュミス回数と、その世代においてＶＭのｖＣＰＵがＬ３キャッシュを参照した回数の合計であるキャッシュヒット回数と、キャッシュフィル部１０５が採用するアルゴリズムを示す情報とが格納される。
【００５０】
図１１に、キャッシュミス管理テーブル１０３１に格納されるデータの一例を示す。図１１の例では、ＶＭＩＤと、キャッシュミステーブル１０３２に格納されたエントリの世代番号の範囲と、キャッシュミステーブル１０３２に格納されたエントリ番号の範囲とが格納される。
【００５１】
図９の説明に戻り、キャッシュミスデータ収集部１０３は、キャッシュミステーブル１０３２に格納されている最新の世代番号が、リモートアクセス管理部１０４からの収集指示において指定された世代番号以上であるか判定する（ステップＳ４７）。
【００５２】
キャッシュミステーブル１０３２に格納されている最新の世代番号が、リモートアクセス管理部１０４からの収集指示において指定された世代番号以上ではない場合（ステップＳ４７：Ｎｏルート）、ステップＳ５１の処理に移行する。一方、キャッシュミステーブル１０３２に格納されている最新の世代番号が、リモートアクセス管理部１０４からの収集指示において指定された世代番号以上である場合（ステップＳ４７：Ｙｅｓルート）、キャッシュミスデータ収集部１０３は、キャッシュミステーブル１０３２に格納されているエントリのうち、最も古い世代のエントリを削除する（ステップＳ４９）。
【００５３】
キャッシュミスデータ収集部１０３は、リモートアクセス管理部１０４から収集の終了指示を受け取ったか判定する（ステップＳ５１）。リモートアクセス管理部１０４から収集の終了指示を受け取っていない場合（ステップＳ５１：Ｎｏルート）、ステップＳ４３の処理に戻る。一方、リモートアクセス管理部１０４から収集の終了指示を受け取った場合（ステップＳ５１：Ｙｅｓルート）、キャッシュミスデータ収集部１０３は、対象ＶＭについてのキャッシュミステーブル１０３２を削除する（ステップＳ５３）。これに伴い、対象ＶＭについてのキャッシュミス管理テーブル１０３１も削除される。そして処理は終了する。
【００５４】
以上のような処理を実行すれば、対象ＶＭに割り当てられたＣＰＵパッケージのキャッシュミス回数等の情報を、キャッシュフィル部１０５に使用させることができるようになる。
【００５５】
次に、図１２を用いて、キャッシュフィル部１０５が実行する処理を説明する。まず、キャッシュフィル部１０５は、リモートアクセス管理部１０４から指定された時間（例えば１００ミリ秒）待機する（図１２：ステップＳ６１）。
【００５６】
キャッシュフィル部１０５は、キャッシュミスデータ収集部１０３により生成されたキャッシュミステーブル１０３２に格納されたデータに基づき、直近の２世代のキャッシュミス率の平均がその前の２世代のキャッシュミス率の平均より高いか判定する（ステップＳ６３）。キャッシュミス率は、（キャッシュミス回数）／（キャッシュミス回数＋キャッシュヒット回数）によって算出される。
【００５７】
直近の２世代のキャッシュミス率の平均がその前の２世代のキャッシュミス率の平均より高くない場合（ステップＳ６５：Ｎｏルート）、ステップＳ６９の処理に移行する。一方、直近の２世代のキャッシュミス率の平均がその前の２世代のキャッシュミス率の平均より高い場合（ステップＳ６５：Ｙｅｓルート）、キャッシュフィル部１０５は、アルゴリズムを切り替える（ステップＳ６７）。例えば、アルゴリズムが「アルゴリズムＡ」である場合には「アルゴリズムＢ」に切り替えられ、アルゴリズムが「アルゴリズムＢ」である場合には「アルゴリズムＣ」に切り替えられ、アルゴリズムが「アルゴリズムＣ」である場合には「アルゴリズムＡ」に切り替えられる。切替前のアルゴリズムの情報はキャッシュミステーブル１０３２に格納されている。ステップＳ６７の処理によって、キャッシュミスがより少なくなるようなアクセス方法によってアクセスを行うことができるようになる。
【００５８】
キャッシュフィル部１０５は、キャッシュミステーブル１０３２に、切替後のアルゴリズムの情報を書き込む（ステップＳ６９）。
【００５９】
キャッシュフィル部１０５は、アクセステーブル１０２２に格納されたデータに基づき、採用しているアルゴリズムの決定方法に従ってアクセスされるメモリ領域の範囲（以下、メモリ範囲と呼ぶ）を設定する（ステップＳ７１）。ステップＳ７１の処理によって、アクセスされる可能性があるメモリ範囲からデータを読み出すことができるようになる。
【００６０】
アルゴリズムＡにおいては、最新の世代のエントリのうちリードアクセスの比率が最も高いエントリが示すメモリ範囲に設定される。該当エントリが複数存在する場合、最もアクセス数が多いエントリが選択されるとする。アルゴリズムＢにおいては、最新の世代のエントリのうちリードアクセスの比率が高いエントリから順に３つのエントリが選択され、その３つのエントリが示すメモリ範囲に設定される。アルゴリズムＣにおいては、直近の世代のエントリの開始アドレスとその前の世代のエントリの開始アドレスとが連続しているか判定される。連続している場合にはその２エントリが示すメモリ範囲と、そのメモリ範囲に連続するメモリ範囲とに設定される。例えば、第（ｎ−１）世代のエントリの開始アドレスが５０ＧＢであり且つ第ｎ世代のエントリの開始アドレスが５１ＧＢである場合、その２つのエントリが示すメモリ範囲と、開始アドレスが５２ＧＢであるメモリ範囲とに設定される。また、例えば第（ｎ−１）世代のエントリの開始アドレスが５０ＧＢであり且つ第ｎ世代のエントリの開始アドレスが４９ＧＢである場合、その２つのエントリが示すメモリ範囲と、開始アドレスが４８ＧＢであるメモリ範囲とに設定される。
【００６１】
キャッシュフィル部１０５は、設定されたメモリ範囲から、採用しているアルゴリズムのアクセス方法でデータを読み出すことをメモリコントローラ（ここでは、メモリコントローラ２ｂ）に指示する（ステップＳ７３）。アルゴリズムＡにおいては、設定されたメモリ範囲からランダムに、Ｌ３キャッシュサイズ分のデータをキャッシュラインサイズ（例えば６４バイト）ずつ読み出す。アルゴリズムＢ及びＣについても同様とする。但し、各アルゴリズムのアクセス方法が異なってもよい。
【００６２】
メモリコントローラ２ｂは、ステップＳ７３において読み出したデータをリモートメモリに接続されたＣＰＵパッケージのキャッシュ（第１の実施の形態においては、キャッシュ２ａ）に格納する（ステップＳ７５）。なお、本処理はキャッシュフィル部１０５の処理ではないので、ステップＳ７５のブロックは破線で示されている。
【００６３】
キャッシュフィル部１０５は、リモートアクセス管理部１０４から処理の終了指示を受け取ったか判定する（ステップＳ７７）。処理の終了指示を受け取っていない場合（ステップＳ７７：Ｎｏルート）、ステップＳ６１の処理に戻る。処理の終了指示を受け取った場合（ステップＳ７７：Ｙｅｓルート）、処理は終了する。
【００６４】
なお、情報処理装置１においてＶＭ１２上のゲストＯＳがメモリ２ｍのアドレスＸにおけるデータ（以下、対象データと呼ぶ）を読み出すとき、キャッシュを考慮すると以下の４つのケースのいずれかになると考えられる。
【００６５】
（１）キャッシュ１ａ及びキャッシュ２ａのいずれにも対象データが存在しない
（２）キャッシュ１ａに対象データが存在する
（３）キャッシュ２ａに対象データが存在する
（４）キャッシュ１ａ及びキャッシュ２ａの両方に対象データが存在する
【００６６】
より詳細には、キャッシュ上のデータがメモリ２ｍ上のデータと一致するか否かによって場合分けをすることができるが、本実施の形態には関係が無いのでここでは述べない。
【００６７】
一般に、キャッシュコヒーレントプロトコルとしてＭＥＳＩＦ（Modified, Exclusive, Shared, Invalid, Forwarding）プロトコルを採用するＣＰＵにおいては、（２）及び（４）、（３）、（１）の順にレイテンシが短い。（１）については、キャッシュコヒーレントインターコネクトを経由するオーバーヘッド及びメモリコントローラがメモリから対象データを読み出すオーバーヘッドが有るため、レイテンシが長くなる。（３）については、キャッシュコヒーレントインターコネクトを経由するオーバーヘッドが有るが、メモリコントローラがメモリから対象データを読み出すオーバーヘッドよりも小さいため、（３）は（１）よりもレイテンシが短い。（２）及び（４）については、キャッシュ１ａから対象データを読み出すことができるため、上記２種類のオーバーヘッドが生じず、最もレイテンシが短い。
【００６８】
なお、ＶＭ１２が長時間動作する場合、ＣＰＵパッケージ２ｐのコアがＶＭ１２に割り当てられていないので、キャッシュ２ａにメモリ２ｍの対象データが新たに保持されることはなく、上記（３）のケースはほとんど発生しない。発生するとすれば、ＶＭ１２が動作する前にキャッシュ２ａ上に対象データが偶然保持される場合だけである。
【００６９】
従って、ＶＭ１２のゲストＯＳがリモートメモリであるメモリ２ｍの対象データにアクセスする場合には、キャッシュ１ａに対象データが存在しなければレイテンシが長くなる。例えば図１３の例では、キャッシュ１ａに対象データが存在する場合にはレイテンシは１０ナノセカンド（以下ではｎｓと表す）であるが、メモリ２ｍから対象データを読み出す場合にはレイテンシは３００ｎｓであり、後者の方がレイテンシが長い。
【００７０】
本実施の形態によれば、メモリ２ｍに格納された対象データをキャッシュ２ａに予め読み出しておくことができるので、ＶＭ１２のゲストＯＳがキャッシュ２ａにアクセスすることでレイテンシを２１０ｎｓにまで短縮することができる。さらに、キャッシュ２ａに読み出された対象データがキャッシュコヒーレンシによってキャッシュ１ａにコピーされれば、さらにレイテンシを短縮することができる。
【００７１】
すなわち、本実施の形態によれば、リモートメモリ内のデータへのアクセスのレイテンシを短縮することができるようになる。また、既存のハードウエア或いはＯＳに手を加えることなく、ハイパバイザの処理によって実現するので低コストである。
【００７２】
［実施の形態２］
図１４Ａに、第２の実施の形態の情報処理装置１の構成図を示す。情報処理装置１は、ＣＰＵパッケージ１ｐと、例えばＤＩＭＭであるメモリ１ｍと、ＣＰＵパッケージ２ｐと、例えばＤＩＭＭであるメモリ２ｍとを有する。メモリ１ｍはＣＰＵパッケージ１ｐに接続され、メモリ２ｍはＣＰＵパッケージ２ｐに接続される。情報処理装置１は、ＰＣＩ Ｅｘｐｒｅｓｓの規格に対応している。
【００７３】
ＣＰＵパッケージ１ｐは、コア１１ｃ乃至１４ｃと、キャッシュ１ａと、メモリコントローラ（図１４Ａにおいては「ＭＣ」と略されている）１ｂと、Ｉ／Ｏコントローラ（図１４Ａにおいては「ＩＯＣ」と略されている）１ｒと、キャッシュコヒーレントインタフェース（図１４Ａにおいては「ＣＣＩ」と略されている）１ｑとを有する。同様に、ＣＰＵパッケージ２ｐは、コア２１ｃ乃至２４ｃと、キャッシュ２ａと、メモリコントローラ２ｂと、Ｉ／Ｏコントローラ２ｒと、キャッシュコヒーレントインタフェース２ｑとを有する。
【００７４】
コア１１ｃ乃至１４ｃ及びコア２１ｃ乃至２４ｃは、プログラムの命令を実行する。第２の実施の形態における各コアは、ディレクトリスヌープ方式のキャッシュスヌープ機構を備え且つキャッシュコヒーレンシのプロトコルとしてＭＥＳＩＦプロトコルを採用している。各コアは、キャッシュフィル部１０５が使用する特別なプリフェッチ命令（以下、ＳＮＳＰ（Speculative Non-Shared Prefetch）命令と呼ぶ）を実行できる。
【００７５】
キャッシュ１ａ及び２ａは、コアによるメモリアクセスに関する情報（例えば、アドレス及びデータそのもの）を格納する記憶領域である。第２の実施の形態においては、各ＣＰＵパッケージはＬ１キャッシュ、Ｌ２キャッシュ及びＬ３キャッシュを有するが、コア間で共有されるキャッシュはＬ３キャッシュである。
【００７６】
メモリコントローラ１ｂ及び２ｂはメモリに対するアクセスを制御するコントローラであり、メモリコントローラ１ｂはメモリアクセス監視部（図１４Ａにおいては「ＭＡＭ」と略されている）１ｄを有し且つメモリ１ｍに接続され、メモリコントローラ２ｂはメモリアクセス監視部２ｄを有し且つメモリ２ｍに接続される。図１４Ｂに、メモリアクセス監視部１ｄ及び２ｄの構成図を示す。図１４Ｂの例では、メモリアクセス監視部１ｄ及び２ｄは、アクセス履歴テーブル２０１とフィルタテーブル２０２とを管理する。アクセス履歴テーブル２０１及びフィルタテーブル２０２については後述する。
【００７７】
Ｉ／Ｏコントローラ１ｒ及び２ｒは、ＰＣＩ Ｅｘｐｒｅｓｓ等のＩ／Ｏインタフェースに接続するためのコントローラであり、ＣＰＵパッケージ内で使用されるプロトコルをＩ／Ｏインタフェースのプロトコルに変換する処理等を実行する。
【００７８】
キャッシュコヒーレントインタフェース１ｑ及び２ｑは、例えばＩｎｔｅｌ ＱＰＩ或いはＨｙｐｅｒ Ｔｒａｎｓｐｏｒｔ等である。キャッシュコヒーレントインタフェース１ｑ及び２ｑは、例えばキャッシュコヒーレンシを保つための通信など、他のＣＰＵパッケージとの通信を行う。
【００７９】
ハイパバイザ１０のプログラムは、メモリ１ｍ及び２ｍの少なくともいずれかに格納され、ＣＰＵパッケージ１ｐのコア及びＣＰＵパッケージ２ｐのコアの少なくともいずれかに実行される。ハイパバイザ１０は、ＶＭ１２に対するハードウエアの割当を管理する。ハイパバイザ１０は、リモートアクセス管理部１０４と、キャッシュフィル部１０５とを含む。
【００８０】
ＶＭ１２は、仮想化されたＣＰＵであるｖＣＰＵ１ｖ及びｖＣＰＵ２ｖと、仮想化された物理メモリであるゲスト物理メモリ１ｇとを含む。仮想化されたハードウエア上ではゲストＯＳが動作する。
【００８１】
第２の実施の形態においては、ｖＣＰＵ１ｖはコア１１ｃによって実現され、ｖＣＰＵ２ｖはコア１２ｃによって実現され、ゲスト物理メモリ１ｇはメモリ１ｍ及び２ｍによって実現されるとする。すなわち、ＶＭ１２に対してリモートメモリ（ここでは、メモリ２ｍ）が割り当てられているとする。また、キャッシュフィル部１０５はプログラムがコア２４ｃに実行されることにより実現される。但し、キャッシュフィル部１０５のプログラムが複数のコアに実行されてもよい。リモートアクセス管理部１０４のプログラムはいずれのコアに実行されてもよい。
【００８２】
次に、図１５乃至図１９を用いて、情報処理装置１の動作を説明する。
【００８３】
まず、図１５及び図１６を用いて、ＶＭ１２の生成時にリモートアクセス管理部１０４が実行する処理を説明する。ハイパバイザ１０によってＶＭ１２が生成された場合、リモートアクセス管理部１０４は、生成されたＶＭ１２（以下、対象ＶＭと呼ぶ）に対するＣＰＵパッケージの割当とメモリの割当とを特定する（図１５：ステップＳ８１）。
【００８４】
通常、ハイパバイザ１０は図４に示すようなデータを管理している。そして、ステップＳ８１においては、図４に示すようなデータによってＣＰＵパッケージの割当とメモリの割当とが特定される。
【００８５】
図１５の説明に戻り、リモートアクセス管理部１０４は、対象ＶＭはリモートメモリアクセスを実行するか判定する（ステップＳ８３）。リモートメモリアクセスとは、ＶＭがリモートメモリに対してアクセスすることである。
【００８６】
対象ＶＭがリモートメモリアクセスを実行しない場合（ステップＳ８３：Ｎｏルート）、処理は終了する。一方、対象ＶＭがリモートメモリアクセスを実行する場合（ステップＳ８３：Ｙｅｓルート）、リモートアクセス管理部１０４は、メモリアクセス監視部（ここでは、メモリアクセス監視部２ｄ）のフィルタテーブル２０２に、監視対象のアクセスの条件を設定する（ステップＳ８５）。そして、リモートアクセス管理部１０４は、メモリアクセス監視の開始指示をメモリアクセス監視部２ｄに出力する。
【００８７】
図１６に、フィルタテーブル２０２に格納されるデータの一例を示す。図１６の例では、エントリ番号と、アクセスのリクエストを発行するコアの範囲と、アクセスされるメモリアドレスの範囲（図１６においては、メモリアドレスを含むページの範囲についての情報）と、アクセスのタイプと、アクセスを発生させたプログラムのタイプとが格納される。これらの条件を満たすアクセスについては、アクセス履歴テーブル２０１に情報が保持される。アクセス履歴テーブル２０１とフィルタテーブル２０２は、例えば、ＰＣＩ ＥｘｐｒｅｓｓのＭＭＩＯ（Memory Mapped Input/Output）空間を通じてリモートアクセス管理部１０４及びキャッシュフィル部１０５からアクセスされる。
【００８８】
リモートアクセス管理部１０４は、キャッシュフィル部１０５に、リモートメモリ（第２の実施の形態においては、メモリ２ｍ）に接続されたＣＰＵパッケージのコア（ここでは、コア２４ｃとする）を割り当てる（ステップＳ８７）。ステップＳ８７においては、キャッシュフィル部１０５のプログラムを実行することがコア２４ｃに指示される。これにより、コア２４ｃは、実行指示の待ち状態に移行する。
【００８９】
リモートアクセス管理部１０４は、キャッシュフィル部１０５に、キャッシュフィル処理を所定時間（例えば１００ミリ秒）毎に実行することを指示する実行指示を出力する（ステップＳ８９）。実行指示は、対象ＶＭが利用するｖＣＰＵのページテーブルのページサイズの情報を含む。そして処理は終了する。
【００９０】
以上のような処理によって、リモートメモリへのアクセスを行うＶＭについて、メモリアクセス監視部２ｄ及びキャッシュフィル部１０５が処理を実行開始できるようになる。
【００９１】
次に、図１７及び図１８を用いて、メモリアクセス監視部（ここでは、メモリアクセス監視部２ｄ）が実行する処理を説明する。まず、メモリアクセス監視部２ｄは、メモリアクセス監視の開始指示を待つ（図１７：ステップＳ９１）。
【００９２】
メモリアクセス監視部２ｄは、メモリアクセス監視の開始指示をリモートアクセス管理部１０４から受け取ったか判定する（ステップＳ９３）。メモリアクセス監視の開始指示をリモートアクセス管理部１０４から受け取っていない場合（ステップＳ９３：Ｎｏルート）、ステップＳ９１の処理に戻る。一方、メモリアクセス監視の開始指示をリモートアクセス管理部１０４から受け取った場合（ステップＳ９３：Ｙｅｓルート）、メモリアクセス監視部２ｄは、メモリコントローラ２ｂが処理する各リクエストが、フィルタテーブル２０２に設定された条件を満たすか判定する（ステップＳ９５）。
【００９３】
条件を満たすリクエストが無い場合（ステップＳ９７：Ｎｏルート）、ステップＳ９５の処理に戻る。一方、条件を満たすリクエストが有る場合（ステップＳ９７：Ｙｅｓルート）、メモリアクセス監視部２ｄは、条件を満たすリクエストの情報をアクセス履歴テーブル２０１に書き込む（ステップＳ９９）。但し、アクセス履歴テーブル２０１の情報量が上限に達した場合には、最も古い情報が削除され、アクセス履歴テーブル２０１の情報量が無制限に多くならないようにされる。
【００９４】
図１８に、アクセス履歴テーブル２０１に格納されるデータの一例を示す。図１８の例では、エントリの番号と、メモリコントローラの識別子（ＭＣＩＤ）と、アクセスされたメモリのアドレス（例えばアクセスが開始されるアドレス）と、アクセスのタイプ（例えば、読み出し、書き込み、或いはキャッシュ無効化など）と、アクセスを発生させたプログラムのタイプとが格納される。
【００９５】
メモリアクセス監視部２ｄは、監視の終了指示をリモートアクセス管理部１０４から受け取ったか判定する（ステップＳ１０１）。監視の終了指示をリモートアクセス管理部１０４から受け取っていない場合（ステップＳ１０１：Ｎｏルート）、ステップＳ９５の処理に戻る。一方、監視の終了指示をリモートアクセス管理部１０４から受け取った場合（ステップＳ１０１：Ｙｅｓルート）、メモリアクセス監視部２ｄは、アクセス履歴テーブル２０１内のデータをクリアする（ステップＳ１０３）。そして処理は終了する。
【００９６】
以上のような処理を実行すれば、監視対象のアクセスについてのみ、アクセスの履歴情報を取得できるようになる。これにより、メモリコントローラ内のリソースの消費量を抑制することができる。
【００９７】
次に、図１９を用いて、キャッシュフィル部１０５が実行する処理を説明する。まず、キャッシュフィル部１０５は、リモートアクセス管理部１０４から指定された時間（例えば１００ミリ秒）待機する（図１９：ステップＳ１１１）。
【００９８】
キャッシュフィル部１０５は、アクセス履歴テーブル２０１に基づき、データが読み出されるべきメモリアドレスを特定する（ステップＳ１１３）。ステップＳ１１３においては、アクセス履歴テーブル２０１に格納されている、最新のリード履歴が示すメモリアドレスを含むページと、そのページの後の１ページとを、データが読み出すメモリアドレスとする。ここで、ページサイズはリモートアクセス管理部１０４からの実行指示に含まれるページサイズである。なお、ステップＳ１１３においては、新しいリード履歴から順番に、読み出されるデータのサイズがＬ３キャッシュのサイズと同じになるまでページが追加される。
【００９９】
キャッシュフィル部１０５は、ステップＳ１１３において特定されたメモリアドレスに対して、キャッシュサイズ毎にＳＮＳＰリクエストをメモリコントローラ（ここでは、メモリコントローラ２ｂ）に発行する（ステップＳ１１５）。
【０１００】
ＳＮＳＰリクエストは、キャッシュフィル部１０５がＳＮＳＰ命令を実行することにより発行される。ディレクトリスヌープ方式を採用するＣＰＵパッケージにおいては、メモリコントローラが、アクセスされるメモリアドレスのデータがどのＣＰＵパッケージのキャッシュに格納されているかを示す情報を管理している。但し、その情報が必ずしも正しいわけではない。例えば、或るキャッシュに格納されていると考えられていたデータがそのキャッシュのＣＰＵによってクリアされている場合もある。一般的には、読み出しのリクエストを受け付けたメモリコントローラは、リクエストに係るデータを格納するメモリに接続されたＣＰＵパッケージにスヌープ命令を発行する。一方、第２の実施の形態においては、ＳＮＳＰリクエストを受け付けたメモリコントローラは、他のＣＰＵパッケージのキャッシュにデータが格納されている場合、スヌープ命令を発行せず、既に他のＣＰＵパッケージのキャッシュにデータが格納されていることをＳＮＳＰリクエストを発行したコアに通知する。これにより、メモリから読み出そうとしたデータが既に他のＣＰＵパッケージのキャッシュに保持されている場合、キャッシュフィル部１０５が動作するＣＰＵパッケージにスヌープによってデータを保持するオーバーヘッドが生じることを回避できるようになる。
【０１０１】
例えば、Ｌ３キャッシュのサイズが４０メガバイトであり、ページサイズが４キロバイトであり、キャッシュラインサイズが６４バイトであるとする。この場合、ページ数は１０２４０であり、６５５３６０回ＳＮＳＰが発行される。リモートメモリではないローカルメモリへのアクセスに要する時間が１００ナノ秒であると仮定すると、１コアがシーケンシャルに実行した場合には約６６ミリ秒かかる。
【０１０２】
そして、メモリコントローラ２ｂは、ＳＮＳＰリクエストに応じてメモリコントローラ２ｂがデータを読み出した場合、読み出したデータをキャッシュ２ａに格納する（ステップＳ１１７）。本処理はキャッシュフィル部１０５が実行する処理ではないので、ステップＳ１１７のブロックは破線で表されている。
【０１０３】
キャッシュフィル部１０５は、リモートアクセス管理部１０４から処理の終了指示を受け取ったか判定する（ステップＳ１１９）。処理の終了指示を受け取っていない場合（ステップＳ１１９：Ｎｏルート）、ステップＳ１１１の処理に戻る。処理の終了指示を受け取った場合（ステップＳ１１９：Ｙｅｓルート）、処理は終了する。
【０１０４】
以上のような処理を実行すれば、リモートメモリに格納されたデータへのアクセスを高速化できるようになり、またソフトウエアだけで実現した場合と比較するとアクセスの予測精度を向上させることができるようになる。また、アクセスの履歴情報を取得する際にソフトウエアのオーバーヘッドが生じない。
【０１０５】
［実施の形態３］
図２０に、第３の実施の形態の情報処理装置１の構成図を示す。情報処理装置１は、ＣＰＵパッケージ１ｐと、例えばＤＩＭＭであるメモリ１ｍと、ＣＰＵパッケージ２ｐと、例えばＤＩＭＭであるメモリ２ｍとを有する。メモリ１ｍはＣＰＵパッケージ１ｐに接続され、メモリ２ｍはＣＰＵパッケージ２ｐに接続される。情報処理装置１は、ＰＣＩ Ｅｘｐｒｅｓｓの規格に対応している。
【０１０６】
ＣＰＵパッケージ１ｐは、コア１１ｃ乃至１４ｃと、キャッシュ１ａと、メモリコントローラ（図２０においては「ＭＣ」と略されている）１ｂと、Ｉ／Ｏコントローラ（図２０においては「ＩＯＣ」と略されている）１ｒと、キャッシュコヒーレントインタフェース１ｑ（図２０においては「ＣＣＩ」と略されている）とを有する。同様に、ＣＰＵパッケージ２ｐは、コア２１ｃ乃至２４ｃと、キャッシュ２ａと、メモリコントローラ２ｂと、Ｉ／Ｏコントローラ２ｒと、キャッシュコヒーレントインタフェース２ｑとを有する。
【０１０７】
コア１１ｃ乃至１４ｃ及び２１ｃ乃至２４ｃは、プログラムの命令を実行する。第３の実施の形態における各コアは、ディレクトリスヌープ方式のキャッシュスヌープ機構を備え且つキャッシュコヒーレンシのプロトコルとしてＭＥＳＩＦプロトコルを採用している。各コアは、キャッシュフィル部１０５がＳＮＳＰ命令を実行できる。
【０１０８】
キャッシュ１ａ及び２ａは、コアによるメモリアクセスに関する情報（例えば、アドレス及びデータそのもの）を格納する記憶領域である。第３の実施の形態においては、各ＣＰＵパッケージはＬ１キャッシュ、Ｌ２キャッシュ及びＬ３キャッシュを有するが、コア間で共有されるキャッシュはＬ３キャッシュである。
【０１０９】
メモリコントローラ１ｂ及び２ｂはメモリに対するアクセスを制御するコントローラであり、メモリコントローラ１ｂはメモリアクセス監視部（図２０においては「ＭＡＭ」と略されている）１ｄを有し且つメモリ１ｍに接続され、メモリコントローラ２ｂはメモリアクセス監視部２ｄを有し且つメモリ２ｍに接続される。
【０１１０】
Ｉ／Ｏコントローラ１ｒ及び２ｒは、ＰＣＩ Ｅｘｐｒｅｓｓ等のＩ／Ｏインタフェースに接続するためのコントローラであり、ＣＰＵパッケージ内で使用されるプロトコルをＩ／Ｏインタフェースのプロトコルに変換する処理等を実行する。
【０１１１】
キャッシュコヒーレントインタフェース１ｑ及び２ｑは、例えばＩｎｔｅｌ ＱＰＩ或いはＨｙｐｅｒ Ｔｒａｎｓｐｏｒｔ等である。キャッシュコヒーレントインタフェース１ｑ及び２ｑは、例えばキャッシュコヒーレンシを保つための通信など、他のＣＰＵパッケージとの通信を行う。
【０１１２】
ＯＳ１４のプログラムは、メモリ１ｍ及び２ｍの少なくともいずれかに格納され、ＣＰＵパッケージ１ｐのコア及びＣＰＵパッケージ２ｐのコアの少なくともいずれかに実行される。ＯＳ１４は、プロセス１３に対するハードウエアの割当を管理する。ＯＳ１４は、リモートアクセス管理部１０４と、キャッシュフィル部１０５とを含む。
【０１１３】
プロセス１３は、プログラムがＣＰＵパッケージ１ｐのコア及びＣＰＵパッケージ２ｐのコアの少なくともいずれかに実行されることによって実現される。プロセス１３の処理の実行時には、仮想メモリ１ｅが使用される。仮想メモリ１ｅは、メモリ１ｍ及び２ｍによって実現される。すなわち、プロセス１３にとってはメモリ２ｍがリモートメモリに該当する。また、キャッシュフィル部１０５はプログラムがコア２４ｃに実行されることにより実現される。但し、キャッシュフィル部１０５のプログラムが複数のコアに実行されてもよい。リモートアクセス管理部１０４のプログラムはいずれのコアに実行されてもよい。
【０１１４】
第３の実施の形態において、ＯＳ１４に第２の実施の形態におけるハイパバイザ１０と同じ処理を実行させ、プロセス１３に第２の実施の形態におけるＶＭ１２と同じ処理を実行させ、仮想メモリ１ｅをゲスト物理メモリ１ｇと同じように使用すれば、第２の実施の形態と同様の効果を得ることができる。すなわち、プロセス１３によるメモリ２ｍへのアクセスを高速化できるようになる。
【０１１５】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【０１１６】
また、上で説明した各テーブルの構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【０１１７】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【０１１８】
本実施の形態の第１の態様に係る情報処理装置は、（Ａ）第１プロセッサと、（Ｂ）第１プロセッサに接続されたメモリと、（Ｃ）メモリに対するアクセスを行う仮想マシンを実行する第２プロセッサとを有する。そして、上で述べた第１プロセッサが、（ａ１）仮想マシンがアクセスするメモリの領域からデータを読み出し、（ａ２）読み出したデータを、第１プロセッサのキャッシュに格納する処理を実行する。
【０１１９】
このようにすれば、仮想マシンは第１プロセッサのキャッシュに格納されたデータに対してアクセスを行えばよいので、仮想マシンに割り当てられていないＣＰＵに接続されたメモリ（すなわちリモートメモリ）に格納されたデータへのアクセスを高速化できるようになる。また、ハードウエアを変更せずに実現可能である。
【０１２０】
また、第１プロセッサ又は第２プロセッサが、（ａ３、ｃ１）仮想マシンがメモリに対して行ったアクセスについての情報を取得し、データを読み出す処理において、（ａ１１）アクセスについての情報に基づき、仮想マシンがアクセスするメモリの領域を特定し、特定されたメモリの領域から、データを読み出してもよい。これにより、キャッシュヒット率を上昇させることができ、リモートメモリに格納されたデータへのアクセスを高速化できるようになる。
【０１２１】
また、第１プロセッサ又は第２プロセッサが、（ａ４、ｃ２）第２プロセッサのキャッシュミス回数の情報を取得し、データを読み出す処理において、（ａ１２）取得された第２プロセッサのキャッシュミス回数の情報に基づき、データを読み出す方法を決定し、特定されたメモリの領域から、決定された方法によってデータを読み出してもよい。これにより、キャッシュミス率が低下するような方法でデータを読み出すことができるようになる。
【０１２２】
また、（ａ５）第１プロセッサはメモリコントローラを有し、（ａ５１）メモリコントローラは、仮想マシンがメモリに対して行ったアクセスの履歴情報を取得し、データを読み出す処理において、（ａ１３）メモリコントローラにより取得されたアクセスの履歴情報に基づき、仮想マシンがアクセスするメモリアドレスを特定し、特定されたメモリアドレスを含む領域からデータを読み出してもよい。これにより、キャッシュヒット率を上昇させることができ、リモートメモリに格納されたデータへのアクセスを高速化できるようになる。また、アクセスの履歴情報を取得する際にソフトウエアのオーバーヘッドが生じない。
【０１２３】
また、上で述べたメモリコントローラは、（ａ５２）メモリに対するアクセスのうち仮想マシンによるアクセスを抽出するための条件を管理し、当該条件を満たすアクセスの履歴情報を取得してもよい。これにより、履歴情報が取得されるアクセスを絞り込むことができるので、対象となるアクセスの履歴情報をより多く保存できるようになる。
【０１２４】
また、アクセスについての情報は、各領域に対するアクセスの種別の比率を示す情報と各領域に対するアクセスの数についての情報とを含んでもよい。
【０１２５】
また、アクセスの履歴情報は、各メモリアドレスに対するアクセスの種別を示す情報と各メモリアドレスに対するアクセスを発生させたプログラムについての情報とを含んでもよい。
【０１２６】
本実施の形態の第２の態様に係るキャッシュ方法は、（Ｄ）プロセッサに接続されたメモリに対するアクセスを行い且つ他のプロセッサにより実行される仮想マシンによってアクセスされるメモリの領域から、データを読み出し、（Ｅ）読み出したデータを、プロセッサのキャッシュに格納する処理を含む。
【０１２７】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【０１２８】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２９】
（付記１）
第１プロセッサと、
前記第１プロセッサに接続されたメモリと、
前記メモリに対するアクセスを行う仮想マシンを実行する第２プロセッサと、
を有し、
前記第１プロセッサが、
前記仮想マシンがアクセスする前記メモリの領域からデータを読み出し、
読み出した前記データを、前記第１プロセッサのキャッシュに格納する、
処理を実行する情報処理装置。
【０１３０】
（付記２）
前記第１プロセッサ又は前記第２プロセッサが、
前記仮想マシンが前記メモリに対して行ったアクセスについての情報を取得し、
前記データを読み出す処理において、
前記アクセスについての情報に基づき、前記仮想マシンがアクセスする前記メモリの領域を特定し、
特定された前記メモリの領域から、前記データを読み出す、
付記１記載の情報処理装置。
【０１３１】
（付記３）
前記第１プロセッサ又は前記第２プロセッサが、
前記第２プロセッサのキャッシュミス回数の情報を取得し、
前記データを読み出す処理において、
取得された前記第２プロセッサのキャッシュミス回数の情報に基づき、前記データを読み出す方法を決定し、
特定された前記メモリの領域から、決定された前記方法によって前記データを読み出す、
付記２記載の情報処理装置。
【０１３２】
（付記４）
前記第１プロセッサはメモリコントローラを有し、
前記メモリコントローラは、前記仮想マシンが前記メモリに対して行ったアクセスの履歴情報を取得し、
前記データを読み出す処理において、
前記メモリコントローラにより取得された前記アクセスの履歴情報に基づき、前記仮想マシンがアクセスするメモリアドレスを特定し、
特定された前記メモリアドレスを含む領域から前記データを読み出す、
付記１記載の情報処理装置。
【０１３３】
（付記５）
前記メモリコントローラは、前記メモリに対するアクセスのうち前記仮想マシンによるアクセスを抽出するための条件を管理し、当該条件を満たすアクセスの履歴情報を取得する、
付記４記載の情報処理装置。
【０１３４】
（付記６）
前記アクセスについての情報は、各領域に対するアクセスの種別の比率を示す情報と各領域に対するアクセスの数についての情報とを含む
付記２又は３記載の情報処理装置。
【０１３５】
（付記７）
前記アクセスの履歴情報は、各メモリアドレスに対するアクセスの種別を示す情報と各メモリアドレスに対するアクセスを発生させたプログラムについての情報とを含む
付記４記載の情報処理装置。
【０１３６】
（付記８）
プロセッサが、
前記プロセッサに接続されたメモリに対するアクセスを行い且つ他のプロセッサにより実行される仮想マシンによってアクセスされる前記メモリの領域から、データを読み出し、
読み出した前記データを、前記プロセッサのキャッシュに格納する、
処理を実行するキャッシュ方法。
【０１３７】
（付記９）
プロセッサに、
前記プロセッサに接続されたメモリに対するアクセスを行い且つ他のプロセッサにより実行される仮想マシンによってアクセスされる前記メモリの領域から、データを読み出し、
読み出した前記データを、前記プロセッサのキャッシュに格納する、
処理を実行させるキャッシュプログラム。
【符号の説明】
【０１３８】
１，１０００  情報処理装置    １０，１００  ハイパバイザ
１２  ＶＭ    １０１  変換テーブル
１０２  アクセスデータ収集部    １０２１  アクセス管理テーブル
１０２２  アクセステーブル    １０３  キャッシュミスデータ収集部
１０３１  キャッシュミス管理テーブル    １０３２  キャッシュミステーブル
１０４  リモートアクセス管理部    １０５  キャッシュフィル部
１ｖ，２ｖ  ｖＣＰＵ    １ｇ  ゲスト物理メモリ
１ｐ，２ｐ  ＣＰＵパッケージ
１１ｃ，１２ｃ，１３ｃ，１４ｃ，２１ｃ，２２ｃ，２３ｃ，２４ｃ  コア    １０ｐ，２０ｐ  ＣＰＵ
１ａ，２ａ  キャッシュ    １ｂ，２ｂ  メモリコントローラ
１ｒ，２ｒ  Ｉ／Ｏコントローラ    １ｑ，２ｑ  キャッシュコヒーレントインタフェース
１ｍ，２ｍ，１０ｍ，２０ｍ  メモリ    １ｄ，２ｄ  メモリアクセス監視部
１０  ＯＳ    １３  プロセス
１ｅ  仮想メモリ
【図１】
0006515779.tif 000002
【図２】
0006515779.tif 000003
【図３】
0006515779.tif 000004
【図４】
0006515779.tif 000005
【図５】
0006515779.tif 000006
【図６】
0006515779.tif 000007
【図７】
0006515779.tif 000008
【図８】
0006515779.tif 000009
【図９】
0006515779.tif 000010
【図１０】
0006515779.tif 000011
【図１１】
0006515779.tif 000012
【図１２】
0006515779.tif 000013
【図１３】
0006515779.tif 000014
【図１４Ａ】
0006515779.tif 000015
【図１４Ｂ】
0006515779.tif 000016
【図１５】
0006515779.tif 000017
【図１６】
0006515779.tif 000018
【図１７】
0006515779.tif 000019
【図１８】
0006515779.tif 000020
【図１９】
0006515779.tif 000021
【図２０】
0006515779.tif 000022