(57)【要約】  【課題】  コンピュータのメモリ上にあるデータに対する、読み取りや書き込みなどの特性を、低いオーバーヘッドで検出する技法を提供すること。  【解決手段】  メモリ分別プロファイラは、対象プロセスのページを間欠的に、すなわち、定期的または一時的にアクセス禁止、または書き込み禁止にする。このとき、メモリ分別プロファイラは、対象アドレスのページフォールト・ハンドラの機能を果たす。ページフォールトを検出すると、そのアドレスとアクセス種別を対象プロセスに通知し、ページを元の状態に戻す。このとき、読み出しアクセスだった場合は、ページをまず、読み出しのみ（書き込み禁止）に変更してもよい。対象プロセスは、通知された情報から、データを、（ある時点以降は）全くアクセスされない(N)、読み出しアクセスのみしか行われない(R)、読み書き両方が行われる(W)に分別する。調査結果に基づき、対象プロセスのメモリ割り当て機構が、RやWのデータをそれぞれ別ページに再配置し、測定を継続する。【選択図】  図６
2013033412.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータの処理により、該コンピュータのメモリ上のデータを管理する方法であって、
前記コンピュータの処理により、前記メモリ上の指定した領域を一時的または間欠的にアクセス禁止にするステップと、
前記コンピュータの処理により、前記アクセス禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの読み取りアクセスの結果としてページ・フォールトが起きることに応答して、前記データに読み取りデータであることを示すマークを付けるステップを有する、
メモリ管理方法。
【請求項２】
前記読み取りデータであることを示すマークを付けるステップの後に、前記コンピュータの処理により、前記メモリ上の指定した領域を書き込み禁止にするステップをさらに有する、請求項１に記載のメモリ管理方法。
【請求項３】
前記書込み禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの書き込みアクセスの結果としてページ・フォールトが起きることに応答して、前記コンピュータの処理により、前記データに書き込みデータであることを示すマークを付けるステップをさらに有する、請求項２に記載のメモリ管理方法。
【請求項４】
前記コンピュータの処理により、前記読み取りデータであることを示すマークを付けたデータと、前記書き込みデータであることを示すマークを付けたデータとを、それぞれ、個別のメモリ区画に移動するステップをさらに有する、請求項３に記載のメモリ管理方法。
【請求項５】
前記個別のメモリ区画に移動するステップは、ガベージ・コレクションまたは、前記ページ・フォールトの原因のアクセスを行ったプロセスの再起動時に実行される、請求項４に記載のメモリ管理方法。
【請求項６】
コンピュータの処理により、該コンピュータのメモリ上のデータを管理する方法であって、
前記コンピュータの処理により、前記メモリ上の指定した領域を一時的または間欠的に書込み禁止にするステップと、
前記コンピュータの処理により、前記アクセス禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの書き込みアクセスの結果としてページ・フォールトが起きることに応答して、前記データに書き込みデータであることを示すマークを付けるステップを有する、
メモリ管理方法。
【請求項７】
前記コンピュータの処理により、前記書き込みデータであることを示すマークを付けたデータを、個別のメモリ区画に移動するステップをさらに有する、請求項６に記載のメモリ管理方法。
【請求項８】
コンピュータの処理により、該コンピュータのメモリ上のデータを管理する方法であって、
前記コンピュータに、
前記メモリ上の指定した領域を一時的または間欠的にアクセス禁止にするステップと、
前記アクセス禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの読み取りアクセスの結果としてページ・フォールトが起きることに応答して、前記データに読み取りデータであることを示すマークを付けるステップを実行させる、
メモリ管理プログラム。
【請求項９】
前記読み取りデータであることを示すマークを付けるステップの後に、前記メモリ上の指定した領域を書き込み禁止にするステップをさらに有する、請求項８に記載のメモリ管理プログラム。
【請求項１０】
前記書込み禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの書き込みアクセスの結果としてページ・フォールトが起きることに応答して、前記データに書き込みデータであることを示すマークを付けるステップをさらに有する、請求項９に記載のメモリ管理プログラム。
【請求項１１】
前記読み取りデータであることを示すマークを付けたデータと、前記書き込みデータであることを示すマークを付けたデータとを、それぞれ、個別のメモリ区画に移動するステップをさらに有する、請求項１０に記載のメモリ管理プログラム。
【請求項１２】
前記個別のメモリ区画に移動するステップは、ガベージ・コレクションまたは、前記ページ・フォールトの原因のアクセスを行ったプロセスの再起動時に実行される、請求項１１に記載のメモリ管理プログラム。
【請求項１３】
コンピュータの処理により、該コンピュータのメモリ上のデータを管理する方法であって、
前記メモリ上の指定した領域を一時的または間欠的にアクセス禁止にする手段と、
前記アクセス禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの読み取りアクセスの結果としてページ・フォールトが起きることに応答して、前記データに読み取りデータであることを示すマークを付ける手段を有する、
メモリ管理システム。
【請求項１４】
前記読み取りデータであることを示すマークを付けるステップの後に、前記メモリ上の指定した領域を書き込み禁止にする手段をさらに有する、請求項１３に記載のメモリ管理システム。
【請求項１５】
前記書込み禁止にした前記メモリ領域にあるデータに対する、任意のプロセスからの書き込みアクセスの結果としてページ・フォールトが起きることに応答して、前記データに書き込みデータであることを示すマークを付ける手段をさらに有する、請求項１４に記載のメモリ管理システム。
【請求項１６】
前記読み取りデータであることを示すマークを付けたデータと、前記書き込みデータであることを示すマークを付けたデータとを、それぞれ、個別のメモリ区画に移動する手段をさらに有する、請求項１５に記載のメモリ管理システム。
【請求項１７】
前記個別のメモリ区画に移動するステップは、ガベージ・コレクションまたは、前記ページ・フォールトの原因のアクセスを行ったプロセスの再起動時に実行される、請求項１６に記載のメモリ管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンピュータにおけるメモリ管理技法に関し、より詳しくは、コンピュータの物理メモリの使用効率を向上させるための技法に関するものである。
【背景技術】
【０００２】
コンピュータの主記憶として、物理メモリの使用はほとんど必須であるが、一方で、物理メモリのサイズは有限であるため、従来より、仮想メモリへのページ・アウトなどの技法を駆使して、物理メモリの使用効率を向上が図られている。
【０００３】
近年増加しつつあるクラウド・コンピューティングにおいては、仮想化により、複数のゲスト環境が一台のマシン上で動作する仕組みが採用されており、すると、物理メモリの使用効率を向上させる要望も一層増大している。
【０００４】
物理メモリを管理するためには、メモリの各アドレスにどのようなデータがあるかをシステム的に把握する必要がある。
【０００５】
たとえば、本願発明者らが開発したJava(R) VM用メモリ解析ツールMarusa(２００８年５月１２日提出のIBMプロフェッショナル論文http://www-06.ibm.com/ibm/jp/provision/no59/pdf/59_paper3.pdfを参照されたい）は、ＪＶＭ（Java(R) Virtual Machine，Java(R)仮想マシン）のデータ構造毎のメモリ使用状況と、ＯＳのプロセス・メモリ管理情報を組み合わせて、ＪＶＭの各アドレスにどういうデータがあるかを突き止める機能を提供する。但しMarusaは、各々のデータがどのようにアクセスされているかの情報は与えない。
【０００６】
特開平６−８９２２２号公報は、ページ管理機構と経時管理機構を有するコンピュータ・システムにおいて、物理メモリからスワップ・アウトすべきページを最適に選択できるようにするために、経時管理機構が経時管理サイクル毎に、各ページのアクセス状態を表すアクセス／非アクセス表示フラッグを評価し、各ページのアクセス履歴を記録するマルチビットのＳＰベクトル生成し、レポジトリに収納することを開示する。しかし、この技法は、ページ内にある各データのアクセスを判別する目的には使えない。
【０００７】
特開２００６−１８７０５号公報は、メモリ領域やアプリケーションに割り当てられたメモリ領域でのメモリアクセスをトレースする技法に関し、プログラムに割り当てるメモリ領域を獲得し、獲得したメモリ領域を検査対象メモリ領域としてＭＭＵによりアクセス禁止状態にし、その検査対象メモリ領域に対応するトレースデータ域を確保し、検査対象メモリ領域に対するアクセスが発生すると、ＭＭＵによりアクセス例外が発生し、トレース処理部において，アクセス例外が発生した検査対象メモリ領域に対応するトレースデータ域に、採取したトレース情報を記録することを開示する。この技法は、アクセス例外を検出するために、調べたいデータが存在する領域を常時アクセス禁止にするので、処理が重くなるという問題がある。
【０００８】
特開２０１０−１５２２３号公報は、長い期間アクセスされないオブジェクトの存在により、ガベージコレクション・プロセスの動作があってもアクセス速度の低下がないようにするために、コンピュータでガベージコレクションが動作する際、仮想メモリ空間に存在し、予め規定された長い期間アクセスされないオブジェクトを隔離するため、予め規定された長い期間アクセスされないオブジェクトを非アクセスオブジェクトとして検出する第１のステップと、非アクセスオブジェクトを検出した後所定の期間が経過すると新たに確保した仮想メモリ領域に前記非アクセスオブジェクトを移動する第２のステップと、新たに確保した仮想メモリ領域に移動した後さらに所定の期間が経過すると当該新たに確保した仮想メモリ領域をアクセス不可領域としてガベージコレクションが当該アクセス不可領域にアクセスしないようにする第３のステップとを実行することを開示する。この技法では、検出されるのは、データにアクセスがあったかどうかだけである。
【０００９】
Memalyze (http://www.uninformed.org/?v=7&a=1&t=pdf)というツールは、指定領域の全てのメモリアクセスを漏れなく捕まえるために、ページング機構を使用することを開示する。しかし、このツールは、特開２００６−１８７０５号公報に記述されている技術と同様に、処理としてはかなり重くなる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平６−８９２２２号公報
【特許文献２】特開２００６−１８７０５号公報
【特許文献３】特開２０１０−１５２２３号公報
【非特許文献】
【００１１】
【非特許文献１】Java(R) VM用メモリ解析ツールMarusa(２００８年５月１２日提出のIBMプロフェッショナル論文 http://www-06.ibm.com/ibm/jp/provision/no59/pdf/59_paper3.pdf)
【非特許文献２】Memalyze (http://www.uninformed.org/?v=7&a=1&t=pdf)
【発明の概要】
【発明が解決しようとする課題】
【００１２】
この発明の目的は、コンピュータのメモリ上にあるデータに対する、読み取りや書き込みなどの特性を、低いオーバーヘッドで検出する技法を提供することにある。
【００１３】
この発明の他の目的は、検出されたデータの特性に基づき、メモリ上でデータを再配置して最適化する技法を提供することにある。
【課題を解決するための手段】
【００１４】
この発明は、上記課題を解決するために、以下のような機能をもつメモリ分別プロファイラを提供する。メモリ分別プロファイラは、対象プロセスにアタッチされて動作する。
【００１５】
すなわち、メモリ分別プロファイラは、対象プロセスのページを間欠的に、すなわち、定期的または一時的にアクセス禁止、または書き込み禁止にする。この処理は、調査したいメモリ領域にのみ行えばよい。
【００１６】
メモリ分別プロファイラは、対象アドレスのページフォールト・ハンドラの機能を果たす。すなわち、ページフォールトを検出すると、そのアドレスとアクセス種別を対象プロセスに通知し、ページを元の状態に戻す。このとき、読み出しアクセスだった場合は、ページをまず、読み出しのみ（書き込み禁止）に変更してもよい。
【００１７】
対象プロセスは、通知された情報から、当該アドレスに存在するデータを判別し、データを以下の３種類に分別する。
N （ある時点以降は）全くアクセスされない
R  読み出しアクセスのみしか行われない
W  読み書き両方が行われる
【００１８】
調査結果に基づき、対象プロセスのメモリ割り当て機構が、RやWのデータをそれぞれ別ページに再配置（追い出す）し、測定を継続する。なお、この再配置は、対象プロセスのメモリ割り当て機構でなく、ガベージ・コレクション（ＧＣ）のプロセスが動的に行ってもよいし、次回起動時にそれまでの調査結果から静的に行ってもよい。
【発明の効果】
【００１９】
この発明によれば、メモリ分別プロファイラは、対象プロセスのページを間欠的に、すなわち、定期的または一時的にのみアクセス禁止、または書き込み禁止にするので、処理の低いオーバーヘッドで、アクセスされるデータを分別することが可能となる。
【００２０】
また、分別の結果に基づきデータを再配置することで、WやRのデータを調査対象から外せるので、プロファイラの精度向上をはかることができる。また、アクセス禁止にする領域も減らせるので測定オーバーヘッドを低減することができる。
【図面の簡単な説明】
【００２１】
【図１】本発明を実施するためのハードウェアの一例のブロック図である。
【図２】機能構成のレイヤを示す図である。
【図３】メモリ分別プロファイラの処理のフローチャートを示す図である。
【図４】ページ・フォールト時の処理のフローチャートを示す図である。
【図５】データ再配置処理のフローチャートを示す図である。
【図６】データ再配置処理がデータを再配置する様子を図式的に示す図である。
【発明を実施するための形態】
【００２２】
以下、図面に従って、本発明の実施例を説明する。これらの実施例は、本発明の好適な態様を説明するためのものであり、発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断わらない限り、同一符号は、同一の対象を指すものとする。
【００２３】
図１を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。図１において、システム・バス１０２には、ＣＰＵ１０４と、主記憶（ＲＡＭ）１０６と、ハードディスク・ドライブ（ＨＤＤ）１０８と、キーボード１１０と、マウス１１２と、ディスプレイ１１４が接続されている。ＣＰＵ１０４は、好適には、３２ビットまたは６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のPentium(商標)4、インテル社のCore(商標) 2 DUO、AMD社のAthlon(商標)などを使用することができる。主記憶１０６は、好適には、２ＧＢ以上の容量、より好ましくは、４ＧＢ以上の容量をもつものである。
【００２４】
ハードディスク・ドライブ１０８には、オペレーティング・システムが、格納されている。オペレーティング・システムは、Linux（商標）、マイクロソフト社のWindows(商標) 7、Windows XP(商標)、Windows(商標)2003サーバ、アップルコンピュータのMac OS(商標)などの、ＣＰＵ１０４に適合する任意のものでよい。
【００２５】
ハードディスク・ドライブ１０８にはまた、Apacheなどの、Ｗｅｂサーバとしてシステムを動作させるためのプログラムが保存され、システムの起動時に、主記憶１０６にロードされる。
【００２６】
ハードディスク・ドライブ１０８にはさらに、Java(R)仮想マシン（VM）を実現するためのJava(R) Runtime Environmentプログラムが保存され、システムの起動時に、主記憶１０６にロードされる。
【００２７】
ハードディスク・ドライブ１０８にはさらに、本発明の機能を実現するメモリ分別プロファイラ２０４（図２）が実行可能形式のファイルとして保存されている。メモリ分別プロファイラ２０４は、Ｃ、Ｃ＋＋などの既存のプログラミング言語処理系により、ＣＰＵ１０４に適合する実行可能形式のコードを生成し得るコンパイラによって作成することができる。メモリ分別プロファイラ２０４は、使用時には主記憶１０６にロードされる。
【００２８】
キーボード１１０及びマウス１１２は、オペレーティング・システムが提供するグラフィック・ユーザ・インターフェースに従い、ディスプレイ１１４に表示されたアイコン、タスクバー、テキストボックスなどのグラフィック・オブジェクトを操作するために使用される。
【００２９】
ディスプレイ１１４は、これには限定されないが、好適には、１０２４×７６８以上の解像度をもち、３２ビットtrue colorのＬＣＤモニタである。ディスプレイ１１４は例えば、後述するメモリ上でデータ再配置処理の進捗状況を示すために使用される。
【００３０】
通信インターフェース１１６は、好適には、イーサネット(R)プロトコルにより、ネットワークと接続されている。通信インターフェース１１６は、クライアント・コンピュータ（図示しない）からApacheが提供する機能により、ＴＣＰ／ＩＰなどの通信プロトコルに従い、処理リクエストを受け取り、あるいは処理結果を、クライアント・コンピュータ（図示しない）に返す。
【００３１】
図２は、本発明を用いてＪＶＭが使用するデータの分別を行う場合の、プログラムまたはプロセスの階層を示す図である。図１に示すハードウェアの上で、オペレーティング・システム２０２が動作し、オペレーティング・システム２０２上ではメモリ分別プロファイラ２０４が動作する。オペレーティング・システム２０２ではJava(R)仮想マシン（ＪＶＭ）２０６が動作し、メモリ分別プロファイラ２０４の機能をＪＶＭ２０６が呼ぶので、階層としては、メモリ分別プロファイラ２０４上にＪＶＭ２０６が位置するように図示されている。
【００３２】
アプリケーション・プログラム２０８は、Java(R)バイト・コードから構成され、ＪＶＭ２０６上で動作する。そして、必要に応じてＪＶＭ２０６を介して、メモリ分別プロファイラ２０４の機能を呼び出す。なお、図示しないが、ハードディスク・ドライブ１０８にはＪＩＴコンパイラが格納され、アプリケーション・プログラム２０８は、ＪＩＴコンパイラによってオペレーティング・システム２０２に直接実行されるバイナリ・コードに変換されてもよい。この場合は、ＪＩＴコンパイラによってコンパイルされたバイナリ・コードが直接、メモリ分別プロファイラ２０４の機能を呼び出すことになる。
【００３３】
なお、メモリ分別プロファイラ２０４は、Java(R) Virtual Machine Tool Interface (JVMTI) エージェントなどの形で実現してもよい。あるいは、オペレーティング・システム２０２の機能の一部として、メモリ分別プロファイラ２０４の機能を実装することもできる。
【００３４】
さらには、クラウド環境などで使われる仮想マシンモニタに、メモリ分別プロファイラ２０４の機能を実装することもできる。
【００３５】
次に、図３〜図５のフローチャートを参照して、本発明の処理について説明する。図３は、ＪＶＭ２０６が、メモリ上の所定の領域にあるデータ（オブジェクトやクラスデータなど）のアクセス状態を測定する処理を示す。
【００３６】
ＪＶＭ２０６が、メモリ分別プロファイラ２０４を呼び出し測定開始を指示すると、メモリ分別プロファイラ２０４は、ステップ３０２で、ページ・フォールト・ハンドラを設定する。ページ・フォールト・ハンドラは、メモリ分別プロファイラ２０４の機能の一部であり、好適にはオペレーティング・システム２０２の機能を利用する。
【００３７】
ステップ３０４で、メモリ分別プロファイラ２０４は、ＪＶＭ２０６によって指定されたメモリ領域のページをアクセス禁止または書き込み禁止にする。アクセス禁止と書き込み禁止のどちらにするかは、調べたいデータの状態による。メモリ分別プロファイラ２０４は、メモリ領域のアクセス禁止を行うために、好適には、オペレーティング・システム２０２の機能を呼び出す。例えば、Linux(R)なら、mprotectというシステム・コールが用意されている。int mprotect(const void *addr, size_t len, int prot)という書式で、addrの開始アドレスから、lenの長さの領域（ページ単位）に、protで設定したアクセスを設定する。prodには、アクセス不可(PROT_NONE)、読み取り可(PROT_READ)、読み書き可(PROT_READ|PROT_WRITE)などを設定可能である。このようなシステム・コールをもたないオペレーティング・システムの場合、別途オペレーティング・システムの拡張モジュール、デバイスドライバなどを用意することになる。
【００３８】
ステップ３０６で、メモリ分別プロファイラ２０４は、一定時間待つ。その時間設定は、アプリケーション・プログラム２０８を実行するＪＶＭ２０６がメモリにアクセスする頻度などに応じて適宜決められる。ステップ３０６の間に、アクセス禁止されたメモリ領域のページにあるデータに対してアクセスがあるか、書き込み禁止されたメモリ領域のページにあるデータに対して書き込みがあると、ページ・フォールトが起きる。ページ・フォールトが起きたときの処理は、図４のフローチャートを参照して後で説明する。なお、ＪＶＭ２０６は、どのデータがどのメモリのアドレスの範囲にあるかの情報をテーブルなどの形で維持しているので、ページ・フォールトがあったときのメモリのアクセス・アドレスを知ることで、どのデータがアクセスされているかを知ることができる。
【００３９】
ステップ３０８では、メモリ分別プロファイラ２０４は、測定終了かどうか判断する。測定終了の判断は、測定対象プログラムであるＪＶＭ２０６からの指示や、測定開始からの時間あるいは、データへのアクセス回数などによって行われる。まだ測定終了の条件を満たしていないなら、ステップ３０４に戻る。これにより、本発明の特徴の一つである、定期的にページをアクセス禁止にすることが達成される。
【００４０】
ステップ３０８で測定終了の条件を満たしたと判断すると、メモリ分別プロファイラ２０４は、ステップ３１０でページのアクセス設定を、アクセス禁止または書き込み禁止から元に戻し、ステップ３１２でページ・フォールト・ハンドラを解除し、測定終了となる。
【００４１】
次に図４のフローチャートを参照して、ページ・フォールトが起きたときの処理について説明する。ページ・フォールトが起きると、メモリ分別プロファイラ２０４は、ステップ４０２で、ページ・フォールトしたアドレスがページのアクセス設定を変更している領域内かどうか判断し、もしそうなら、ステップ４０４で、メモリ分別プロファイラ２０４は、読み出しアクセスかどうか判断する。
【００４２】
読み出しアクセスなのか、書き込みアクセスなのかを判別するには次のようにする。
まず、ＣＰＵ、メモリ・コントローラ、オペレーティング・システムなどの機能により、ページ・フォールトが読み出しなのか書き込みなのか分かる場合がある。この場合は、その機能を利用する。
そのような機能が使えない場合は、ページ・フォールトを引き起こした命令を調べることで、読み出しアクセスなのか、書き込みアクセスなのかを判別する。
あるいは、ページを先ずアクセス禁止にしておき、ページ・フォールトが起きた場合はそのアドレスに、読み出しアクセスがあったと判断し、ページを「読み出しのみ」に変更して続行する。そうして、そのアドレスでさらにページ・フォールトが起きた場合は、そのアドレスに書き込みがあったと判断し、ページを読み書き可能に変更して続行する。これによって、読み出しアクセスであったのか、書き込みアクセスであったのかが判別できる。
【００４３】
こうして、ステップ４０４で、読み出しアクセスであると判断されると、メモリ分別プロファイラ２０４は、ステップ４０６で、ページ・フォールトしたアドレスのデータに「W」マークがなければ「R」マークを付ける。このようなマークは実際上、上述した、どのデータがどのメモリのアドレスの範囲にあるかのテーブルに書くことができる。なお、この処理は調査対象プログラムであるＪＶＭ２０６を呼び返して行ってもよい。そして、ステップ４０８で、ページを書き込み禁止に変更して処理を終わる。
【００４４】
一方、ステップ４０４で、書き込みアクセスであると判断されると、メモリ分別プロファイラ２０４は、ステップ４１０で、ページ・フォールトしたアドレスのデータに「W」マークを付ける。この処理も、調査対象プログラムであるＪＶＭ２０６を呼び返し、ＪＶＭ２０６に行わせてもよい。そして、ステップ４１２で、ページを書き込み禁止に変更して処理を終わる。
【００４５】
ステップ４０２に戻って、ページ・フォールトしたアドレスがページのアクセス設定を変更している領域内でないと判断されると、メモリ分別プロファイラ２０４は特別な処理を行わず処理を終える。その結果、ステップ４１４で、ページ・フォールトのデフォルト処理を行うルーチンが実行される。
【００４６】
図５は、データ再配置処理のフローチャートを示す図である。データ再配置処理を行うルーチンは、典型的には、測定対象プログラムであるＪＶＭ２０６中に実装される。
【００４７】
図５において、ステップ５０２では、データ再配置処理は、メモリ分別プロファイラ２０４の測定が行われていれば一旦終了させる。ステップ５０４では、データ再配置処理は、「W」の付いたデータ、「R」の付いたデータ、マークのないデータ（N）をそれぞれ個別のメモリ領域に再配置する。ステップ５０６では、データ再配置処理は、NとRのメモリ領域について、メモリ分別プロファイラ２０４により測定を再開する。そして、Nの領域はアクセス禁止、Rの領域は書き込み禁止にする。
【００４８】
ページ・フォールトの度毎に図５のデータ再配置処理を行うと処理が重くなるので、好適には、メモリ分別プロファイラ２０４にはデータ分別機能だけを行わせ、データ分別がある程度進んだきっかけで、図５のデータ再配置処理を行う。そのきっかけとは例えば、ガベージ・コレクションが行われたとき、あるいは、アプリケーション・プログラム２０８が次に起動されたとき、などである。
【００４９】
図６は、メモリ分別プロファイラ２０４によってデータが分別され、その結果に基づきデータ再配置処理がデータを再配置する様子を図式的に示す図である。
【００５０】
図６(a)は、メモリのページ６０２〜６１０に、データ１〜９が配置されている様子を示す。そこで測定対象のプログラム（これまでの例ではＪＶＭ２０６）は、プログラムの初期化が終わったある時点でメモリ分別プロファイラ２０４を呼び出してページ６０２〜６１０を定期的にアクセス禁止にし、データ１〜９に「R」や「W」のラベルを付けていく。これはそれぞれ、そのデータに対して読み出し，書き込みのアクセスがあったことをあらわしている。ある程度ラベルが付けられた段階のあるきっかけで、図６(b)に示すように、データ再配置処理が、「R」が付いたデータと、「W」が付いたデータをそれぞれ、ページ６０８とページ６１０に再配置する。
【００５１】
ここで、メモリ分別プロファイラ２０４は、ページ６０２〜６０６は定期的にアクセス禁止にし、ページ６０８は定期的に書き込み禁止にする。書き込みがあるとして分別済みのデータがあるページ６１０は、ページのアクセス変更は不要である。このように、素性が判明したデータを別ページへと再配置することで、アクセス禁止にする領域を減らし、測定の効率を上げることができる。
【００５２】
このような処理を続けた結果が図６(c)である。結果的にページ６０２〜６０４には、全くアクセスされなかったデータが残り、ページ６０６〜６０８には「R」のラベルのデータ（すなわち、読み出しのみが行われたデータ）が配置され、ページ６１０には、「W」のラベルが付いたデータ（すなわち、書き込みが行われたデータ）が配置される。この結果、ページ６０２〜６０４はページアウトの候補となり、ページ６０６〜６０８はＣｏｐｙ−ｏｎ−Ｗｒｉｔｅ機構などを利用したプロセス間共有の候補となる。
【００５３】
次に本発明の処理の適用例をいくつか示す。
その１つの適用例は、Java(R)ヒープ内のオブジェクトの動的再配置であり、以下の処理を行う。
(1) Java(R)ヒープのページをN (NoAccess)、R (ReadOnly)、W (ReadWrite)に３分割する、最初は全部Nとしておく。
(2) Nのページを定期的・一時的にアクセス禁止、Rのページは書き込み禁止にし、ReadやWriteのあったオブジェクトを記録する。
(3) ガベージ・コレクション（ＧＣ）の際に、上で記録したオブジェクトはそれぞれRやWのページへ再配置する。その他のオブジェクトはNのページに残す。ただし、ＧＣ中はヒープのページはアクセス可能になっているとする。
(2)〜(3)を繰り返すことで、アクセスのあるオブジェクトをどんどんRやWのページへ追い出し、濃縮していく。
この手順により、Nのページには最終的に「アクセスされないオブジェクト」だけが残り、ページアウトがされやすくなる。また、Rのページには「読み出しのみのオブジェクト」が集まるので、その内容を解析することで、ＪＶＭ間のヒープ共有などの基礎データにすることができる。
【００５４】
次に、別の適用例として、Java(R) VM内のクラスデータの静的再配置がある。この場合は以下の処理が行われる。
(1) Java(R) VM のクラス領域に対して本発明の処理を適用する。クラスデータ用のページをN、R、Wに分けておく。最初は全部Nに配置する。
(2) アプリケーション初期化後にページを定期的・一時的にアクセス禁止にすることで、ReadやWriteが行われるクラスデータを見つけ、それぞれ「R」や「W」として記録する。
(3) 次回起動時に、前回までの記録でRやWとなっていたクラスデータはそれぞれRやWのページに配置するようにする（静的再配置）。なお、クラスデータがオブジェクトのように動的に再配置できれば、実行中にこの作業を行うこともできるが、ここではできないという前提の実施例を示している。
(4) 起動のたびに(2)〜(3)を繰り返し、RやWの情報を正確にするとともに、初期化後もアクセスのあるクラスデータをどんどん別ページに集めていく。
この手順により、アプリケーションの初期化後はアクセスされないクラスデータのページアウトが促進される。また、読み出しのみのクラスデータを解析することで、ＪＶＭ間のクラスデータ共有を促進できる。
【００５５】
以上、本発明の実施例を説明したが、この発明は、特定のハードウェア及びオペレーティング・システムあるいはアプリケーション・プログラムに限定されないことに留意されたい。すなわち、メモリ領域を選択的にアクセス不可にできる任意のハードウェア及びオペレーティング・システム上で、データをメモリ上で動的もしくは静的に再配置可能な任意のアプリケーションに対して実施可能である。例えば、クラウド環境で使用される大規模環境のシステム上でも適用可能である。あるいは、スタンドアロンの環境で動作する場合にも適用可能である。
【符号の説明】
【００５６】
１０４  ＣＰＵ
１０６  主記憶
１０８  ハードディスク・ドライブ
２０２  オペレーティング・システム
２０４  メモリ分別プロファイラ
２０６  ＪＶＭ
２０８  アプリケーション・プログラム
【図１】
2013033412.tif 000003
【図２】
2013033412.tif 000004
【図３】
2013033412.tif 000005
【図４】
2013033412.tif 000006
【図５】
2013033412.tif 000007
【図６】
2013033412.tif 000008