(57)【要約】【課題】ＮＵＭＡコンピュータシステムにおいてコードを再コンパイルするための改良されたシステムおよび方法を提供する。【解決手段】コードバッファは複数のより小さなコードバッファに区画され（１１０）、区画された各コードバッファは、マルチノードＮＵＭＡコンピュータシステムにおける１つのノードに割り当てられる（１２０）。エスケープしないメソッドのそれぞれに関連付けられているスレッドセットが見つけられる（１３０）。スレッドセットの中で、メソッドのそれぞれをエスケープしないものが存在するか判断する（１４０）。エスケープしないスレッドセットに関連付けられている生成コードは、より小さなコードバッファに配置される（１５０）。これ以外の生成コードは、オフラインプロファイルデータに基づいて複数のコードバッファに配置される（１６０）。【選択図】図１
2008033932.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードを含むＮＵＭＡコンピュータシステムのコードバッファ内に存在する動的生成コード（dynamically generated code）の非ローカルアクセスを削減するための方法であって、
前記コードバッファを複数のより小さなコードバッファに区画することと、
前記複数のより小さなコードバッファのそれぞれを前記複数のノードの１つに割り当てることと、
メソッドのコンパイル中にエスケープ解析を実行することと、
前記エスケープ解析に基づいて、前記スレッドセットの中で、前記関連付けられているメソッドをエスケープしないものが存在するか否か判断することと、
存在する場合に、前記メソッドのそれぞれをエスケープしない前記スレッドセットに関連付けられている前記生成コードを、前記複数のノードに割り当てられた、前記関連付けられている区画された複数のより小さなコードバッファに配置することと
を含む方法。
【請求項２】
前記スレッドセットの中で、前記関連付けられているメソッドをエスケープしないものが存在しない場合に、オフラインプロファイルデータに基づいて、前記メソッドのそれぞれをエスケープしない前記スレッドセットに関連付けられている前記生成コードを、前記複数のより小さなコードバッファに配置すること
をさらに含む請求項１に記載の方法。
【請求項３】
前記オンラインプロファイルデータに基づいて、スレッドセットに関連付けられている新しい生成コードまたは再コンパイルされた生成コードを、前記複数のノードに割り当てられた、関連付けられている複数のより小さなコードバッファに定期的に再割り当てすること
をさらに含む請求項１に記載の方法。
【請求項４】
前記再コンパイルされた生成コードのコピーを前記関連付けられている複数のノードに所定の回数定期的に配置する時に、前記関連付けられている複数のより小さなコードバッファ内に存在する生成コードを無効にすること
をさらに含む請求項３に記載の方法。
【請求項５】
前記オンラインプロファイルデータに基づいて、前記関連付けられている複数のノードに新しい生成コードを定期的に配置すること
をさらに含む請求項４に記載の方法。
【請求項６】
所定のイベント中に、前記定期的に配置するステップおよび前記無効にするステップを繰り返すこと
をさらに含む請求項３に記載の方法。
【請求項７】
オフラインプロファイルデータに基づいて、前記複数のより小さなコードバッファのそれぞれのサイズを決定すること
をさらに含む請求項１に記載の方法。
【請求項８】
物品であって、
コンピューティングプラットフォームによって実行されると、複数のノードを含むＮＵＭＡコンピュータシステムのコードバッファ内に存在する動的生成コードの非ローカルアクセスを削減するための方法の実行をもたらす命令を有するストレージ媒体であって、
前記コードバッファを複数のより小さなコードバッファに区画することと、
前記複数のより小さなコードバッファのそれぞれを前記複数のノードの１つに割り当てることと、
メソッドのコンパイル中にエスケープ解析を実行することと、
前記エスケープ解析に基づいて、前記スレッドセットの中で、前記関連付けられているメソッドをエスケープしないものが存在するか否か判断することと、
存在する場合に、前記メソッドのそれぞれをエスケープしない前記スレッドセットに関連付けられている前記生成コードを、前記複数のノードに割り当てられた、前記関連付けられている区画された複数のより小さなコードバッファに配置することと
を含むストレージ媒体
を備える物品。
【請求項９】
前記スレッドセットの中で、前記関連付けられているメソッドをエスケープしないものが存在しない場合に、オフラインプロファイルデータに基づいて、前記メソッドのそれぞれをエスケープしない前記スレッドセットに関連付けられている前記生成コードを、前記複数のより小さなコードバッファに配置すること
をさらに含む請求項８に記載の物品。
【請求項１０】
前記オンラインプロファイルデータに基づいて、スレッドセットに関連付けられている新しい生成コードまたは再コンパイルされた生成コードを、前記複数のノードに割り当てられた、関連付けられている複数のより小さなコードバッファに定期的に再割り当てすること
をさらに含む請求項８に記載の物品。
【請求項１１】
前記再コンパイルされた生成コードのコピーを前記関連付けられている複数のノードに所定の回数定期的に配置するときに、前記関連付けられている複数のより小さなコードバッファ内に存在する生成コードを無効にすること
をさらに含む請求項１０に記載の物品。
【請求項１２】
前記オンラインプロファイルデータに基づいて、前記関連付けられている複数のノードに新しい生成コードを定期的に配置すること
をさらに含む請求項１１に記載の物品。
【請求項１３】
所定のイベント中に、前記定期的に配置するステップおよび前記無効にするステップを繰り返すこと
をさらに含む請求項１１に記載の物品。
【請求項１４】
オフラインプロファイルデータに基づいて、前記複数のより小さなコードバッファのそれぞれのサイズを決定すること
をさらに含む請求項８に記載の物品。
【請求項１５】
コンピュータシステムであって、
コンピュータネットワークであって、複数のネットワークエレメントを有し、該複数のネットワークエレメントは複数のネットワークインターフェースを有するコンピュータネットワークと、
ネットワークインターフェースと、
前記ネットワークインターフェースを介して生成コードを受信する前記ネットワークインターフェースに接続される入力モジュールと、
処理ユニットと、
前記プロセッサに接続されるメモリであって、複数のノードを含むＮＵＭＡコンピュータシステムのコードバッファ内に存在する動的生成コードの非ローカルアクセスの削減に関連付けられているコードが記憶され、
このコードは、
前記コードバッファを複数のより小さなコードバッファに区画することと、
前記複数のより小さなコードバッファのそれぞれを前記複数のノードの１つに割り当てることと、
メソッドのコンパイル中にエスケープ解析を実行することと、
前記エスケープ解析に基づいて、前記スレッドセットの中で、前記関連付けられているメソッドをエスケープしないものが存在するか否か判断することと、
存在する場合に、前記メソッドのそれぞれをエスケープしない前記スレッドセットに関連付けられている前記生成コードを、前記複数のノードに割り当てられた、前記関連付けられている区画された複数のより小さなコードバッファに配置することと
を含む方法を前記プロセッサに実行させる
前記メモリと
を備えるコンピュータシステム。
【請求項１６】
前記スレッドセットの中で、前記関連付けられているメソッドをエスケープしないものが存在しない場合に、オフラインプロファイルデータに基づいて、前記メソッドのそれぞれをエスケープしない前記スレッドセットに関連付けられている前記生成コードを、前記複数のより小さなコードバッファに配置すること
をさらに含む請求項１５に記載のコンピュータシステム。
【請求項１７】
前記オンラインプロファイルデータに基づいて、スレッドセットに関連付けられている新しい生成コードまたは再コンパイルされた生成コードを、前記複数のノードに割り当てられた、関連付けられている複数のより小さなコードバッファに定期的に再割り当てすること
をさらに含む請求項１５に記載のコンピュータシステム。
【請求項１８】
前記再コンパイルされた生成コードのコピーを前記関連付けられている複数のノードに所定の回数定期的に配置する時に、前記関連付けられている複数のより小さなコードバッファ内に存在する生成コードを無効にすること
をさらに含む請求項１７に記載のコンピュータシステム。
【請求項１９】
前記オンラインプロファイルデータに基づいて、前記関連付けられている複数のノードに新しい生成コードを定期的に配置すること
をさらに含む請求項１８に記載のコンピュータシステム。
【請求項２０】
所定のイベント中に、前記定期的に配置するステップおよび前記無効にするステップを繰り返すこと
をさらに含む請求項１８に記載のコンピュータシステム。
【請求項２１】
オフラインプロファイルデータに基づいて、前記複数のより小さなコードバッファのそれぞれのサイズを決定すること
をさらに含む請求項１５に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、包括的には、コンピュータソフトウェアに関し、より詳細には、性能の改善のためにコンピュータプログラムの部分を再アロケートすることに関する。
【背景技術】
【０００２】
マルチプロセッサコンピュータシステムは、一般に、共通の共有メモリおよび周辺機器を有する複数のプロセッサを備えるシステム、または、分散したメモリおよび周辺機器を有する複数のプロセッサを備えるシステムの２つのカテゴリーに分類することができる。
すべてのプロセッサが周辺デバイスおよびメモリに等しくアクセスできるように編成されたシステムは、対称型マルチプロセシング（ＳＭＰ）システムとして知られている。
ＳＭＰシステム内のプロセッサは、共通バスを介して共有メモリに相互に接続されている。
周辺デバイスを接続するのにバス階層が使用される場合がある。
【０００３】
ＮＵＭＡコンピュータアーキテクチャでは、メモリアクセス待ち時間は、プロセッサおよびメモリのロケーションに応じて異なることが許容されている。
ＮＵＭＡコンピュータシステムのすべてのプロセッサは、システムメモリを共有し続けるが、メモリにアクセスするのに必要な時間は、プロセッサおよびメモリのロケーションに基づいて変化し、すなわち、一様ではない。
ＵＭＡ  ＳＭＰ設計に類似した他の代替的なものを上回るＮＵＭＡ  ＳＭＰ設計の主な利点は、スケーラビリティである。
さらに、ＮＵＭＡ  ＳＭＰにおけるプログラミングは、従来のＳＭＰ共有メモリにおけるプログラミングと同程度に簡単である。
その結果、ＮＵＭＡコンピュータシステムは、既存のＳＭＰアプリケーションを変更することなく実行することができる。
【０００４】
プロセッサおよびシステムメモリが２つまたは３つ以上のクラスタまたはローカリティドメインに編成されているＮＵＭＡコンピュータシステムでは、各ローカリティドメインは、ローカルバスによってローカルメモリと通信する１つまたは２つ以上のプロセッサを含むことができる。
また、ローカリティドメインを相互接続するネットワークを形成するために、各ローカリティドメインは、そのローカリティドメインを通信チャネルによって他のローカリティドメインと相互接続するためのブリッジも含む。
このようなマルチノードマルチプロセッサコンピュータシステムでは、特定のプロセッサの性能は、そのプロセッサが、リモートのローカリティドメインからのメモリではなく、それ自身のローカルなローカリティドメインからのメモリにアクセスする場合に、ローカルバスへのアクセスしか必要とされないので、常に最大となる。
【０００５】
マルチノードマルチプロセッサコンピュータシステムにおけるすべてのローカリティドメインの基礎となるアーキテクチャおよびメモリアクセスパターンを決定すること、並びに、プログラムおよびデータをＮＵＭＡマシンに最適に配置する知識を利用することによって、大幅な性能利得がもたらされる可能性がある。
システムファームウェアは、一般に、システムのリブート中にマルチプロセッサ環境内に存在するすべてのプロセッサおよびメモリのトポロジー情報を収容している。
このようなトポロジー情報は、ローカリティドメイン、すなわち、システムにおけるプロセッサおよび関連メモリのグループを識別する。
これによって、ローカリティドメインのプロセッサおよびメモリレンジの間の密結合が可能になり、オペレーティングシステムは、このようなアフィニティ情報を使用して、システム性能を改善するメモリ資源のアロケーションおよびソフトウェアスレッドのスケジューリングを決定することができる。
【０００６】
現在の最適化技法は、このようなアフィニティ情報を使用して、ローカリティドメインをより良く使用し、メモリアクセス待ち時間を削減する。
たとえば、ほとんどのオペレーティングシステムは、プロセスのすべてのスレッドが、かなり少ない待ち時間を提供する共通メモリプールを共有できるように、ローカリティドメイン内のプロセス全体をロックする方法を提供する。
プロセスがローカリティドメイン全体に及ぶ必要がある場合、現在の技法は、スレッドがアクセスするローカリティドメインをローカルドメインメモリセグメントに分割することによって、異なるスレッドにより良いメモリアクセスを提供する。
これらの技法はデータハンドリングを取り扱うが、命令ハンドリングを取り扱わない。
加えて、現在の技法は、このようなアフィニティ情報を使用するＮＵＭＡコンピュータシステムのローカリティドメインおよび／またはスレッドアフィニティに基づいてコードバッファを区画しない。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、上記背景からなされたものであって、ＮＵＭＡコンピュータシステムにおけるローカリティドメインおよびスレッドアフィニティに基づいてコードを再コンパイルするための改良されたシステムおよび方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の主題の一態様によれば、実行可能コードのコードバッファを複数のローカリティドメインに分割することによって命令ローカリティを改善するための方法であって、コードバッファを複数のより小さなコードバッファに区画するステップと、複数のより小さなコードバッファのそれぞれを複数のノードの１つに割り当てるステップと、メソッドのコンパイル中にエスケープ解析を実行するステップと、エスケープ解析に基づいて、メソッドに関連付けられているスレッドセットの中で、エスケープしないものが存在するか否か判断するステップと、存在する場合に、メソッドに関連付けられているエスケープしないスレッドセットのそれぞれに関連付けられている生成コードを、複数のノードに割り当てられた、区画されて関連付けられている複数のより小さなコードバッファに配置するステップとを含む方法が提供される。
【０００９】
次に、添付図面を参照して本発明の実施の形態を単なる例として説明することにする。
【発明を実施するための最良の形態】
【００１０】
本発明のさまざまな実施形態の以下の詳細な説明では、その一部を成す添付図面が参照される。
添付図面には、例示として、本発明を実施することができる特定の実施形態が示されている。
これらの実施形態は、当業者が本発明を実施することを可能にするように十分詳細に説明されているが、他の実施形態も利用できること、および、本発明の範囲から逸脱することなく変更を行えることが理解されるべきである。
したがって、以下の詳細な説明は、限定の意味に解釈されるべきではなく、本発明の範囲は、添付の特許請求の範囲によってのみ画定される。
【００１１】
「スレッド」という用語は、プログラムの独立した実行パスを指す。
たとえば、電子商取引のコンピュータアプリケーションの場合、各顧客の特定の電子商取引のトランザクションが別個のスレッドでハンドリングされるように、異なる顧客に異なるスレッドを割り当てることができる。
以下の解説では、特定の数組の資源に割り当てられたエンティティを「スレッド」と呼ぶことにする。
しかしながら、他の専門用語を使用して、コンピュータシステムにおける一意の実行パスを定義するエンティティを説明できることが十分理解されよう。
したがって、「スレッド」という用語は、コンピュータシステムにおける特定の実行パスを定義する、コンピュータにおけるあらゆるエンティティに対応するものと考えられるべきである。
【００１２】
スレッドタイプは、本発明の主題の文脈内においては、実際には、スレッドのあらゆる属性または他の際立った特徴を含むことができ、実行優先度、同じ仮想バッファ若しくは仮想メモリまたは物理バッファ若しくは物理メモリへの割り当て、ユーザ識別情報、親論理サブシステム（parent logical subsystem）、ジョブ、アプリケーション、タスクまたはスレッド、同じメモリサブシステムへの割り当て、スレッドの起動時に実行される初期プログラムの名前、スレッド権限（thread authority）、およびユーザプロファイルが含まれるが、これらに限定されるものではない。
【００１３】
また、「ローカリティドメイン」、「クラスタ」、および「セル」という用語は、本明細書全体を通じて交換可能に使用される。
【００１４】
本発明の技法は、区画された複数のより小さなコードバッファに基づいて、生成コード内に存在するメソッドを分割する。
本発明の技法は、さらに、分割されたメソッドおよび関連付けられているスレッドセットを共に、これらの区画された複数のより小さなコードバッファにグループ化する。
さらに、本発明の技法は、グループ化されたメソッドおよびスレッドを、割り当てられたノードに関連付ける。
基本的には、各メソッドは、関連付けられている区画された複数のより小さなコードバッファの１つに配置され、グループ化されたスレッドは、関連付けられている複数のノードの１つで実行される。
加えて、本発明の技法は、オンラインプロファイルデータを使用して、新しいメソッドのコンパイルまたは既存のメソッドの再コンパイルから生成されたコードを、非ローカルアクセスが最小にされるように配置する。
【００１５】
図１は、複数のノードを有するＮＵＭＡコンピュータシステムのコードバッファ内に存在する動的生成コードの非ローカルアクセスの削減を再コンパイルする一例の方法１００を示している。
動的生成コードは、ＪＡＶＡ（登録商標）メソッド用のものとすることができる。
動的生成コードは、より小さなスニペットで生成され、そのアクセスパターンは、ランタイム環境によって決定することができる。
たとえば、マルチスレッドプログラムでは、異なるスレッドは、異なる作業を行っている場合があり、異なるＪＡＶＡメソッドと共に動作している可能性がある。
また、たとえば、ＮＵＭＡコンピュータシステムに４つのセルが存在する場合、コードバッファは、４つの関連部分（Ｃ１、Ｃ２、Ｃ３、およびＣ４）に分割することができる。
ステップ１１０において、この一例の方法１００は、コードバッファを複数のより小さなコードバッファに区画することにより開始する。
いくつかの実施形態では、ｍｍａｐｓ等の一般に知られている技法が使用されて、コードバッファが区画される。
本発明の実行例では、４つのより小さなバッファが、それらのバッファに関連付けられている４つの異なるセルに割り当てられる、すなわち、対応するＣＬＭ（セルローカルメモリ）に配置される。
【００１６】
ステップ１２０において、複数のより小さなコードバッファのそれぞれは、マルチノードＮＵＭＡコンピュータシステムにおける関連付けられている１つのノードに割り当てられる。
いくつかの実施形態では、複数のより小さなコードバッファのそれぞれのサイズは、オフラインプロファイルデータに基づいて決定される。
たとえば、通常のアプリケーションの実行について、セルＣ１にコードバッファの約４０％が必要とされ、Ｃ２、Ｃ３、およびＣ４にそれぞれ２０％が必要とされる場合、コードバッファを対応するサイズに分割でき、これらのより小さなバッファをこれらの対応するセルに関連付けることができる。
【００１７】
ステップ１３０において、エスケープ解析が、生成コードのメソッドのコンパイル中に実行されて、エスケープしないメソッドのそれぞれに関連付けられているスレッドセットが見つけられる。
エスケープ解析は、データの寿命がそのデータの静的スコープを超える場合があるか否かを判断する静的解析である。
また、エスケープ解析は、スタックにオブジェクトをアロケートできるか否かも判断することができる。
さらに、この技法は、オブジェクトに対する同期オペレーションを取り除くことができるように、そのオブジェクトが、その寿命中に単一のスレッドによってのみアクセスされるか否かを判断することを容易にする。
【００１８】
いくつかの実施形態では、メソッドは、ＪＡＶＡの関数および／またはプロシージャを指す。
エスケープ解析情報は、既知の従来の技法を使用してコンパイラが収集することができる。
エスケープ解析情報は、どのオブジェクトをヒープの代わりにスタックにアロケートできるか、どの命令セットがスレッドをエスケープしないか等の情報を提供する。
この情報は、各メソッドが非エスケープスレッドセットに分類されるように、ホットメソッドセットおよびスレッドセットを分割するのに使用することができる。
たとえば、エスケープ解析は、メソッドＭがスレッドセットＴ１およびＴ２をエスケープしないことを伝える場合がある。
その場合、Ｍのコンパイルから生成されたコードを、関連付けられているセルにのみ配置することができ、スレッドＴ１およびＴ２は、このセルに結合される（または、このセルにおいて、スレッドＴ１およびＴ２が実行される）。
【００１９】
ステップ１４０において、方法１００は、スレッドセットの中で、メソッドのそれぞれをエスケープしないものが存在するか否か判断する。
ステップ１４０の判断に基づいて、メソッドのそれぞれをエスケープしないスレッドセットが存在する場合には、方法１００はステップ１５０に進む。
ステップ１５０において、メソッドのそれぞれをエスケープしないスレッドセットに関連付けられている生成コードは、複数のノードに割り当てられた、関連付けられている区画された複数のより小さなコードバッファに配置される。
【００２０】
ステップ１４０の判断に基づいて、メソッドのそれぞれをエスケープしないスレッドセットが存在しない場合には、方法１００はステップ１６０に進む。
ステップ１６０において、メソッドのそれぞれをエスケープしないスレッドセットに関連付けられている生成コードは、オフラインプロファイルデータに基づいて複数のコードバッファに配置される。
たとえば、メソッドＭがエスケープしないスレッドセットを見つけることができない場合、次のように、メソッドＭ用にコンパイルされたコードをそれらのセルＣ１、Ｃ２、Ｃ３、およびＣ４のＣＬＭに配置することができる。
すなわち、オフラインプロファイルデータから、特定のスレッドＴ１、Ｔ２、…Ｔｉが特定のメソッドセットＭ１、Ｍ２、…Ｍｉに頻繁にアクセスできると判断できる場合、そのメソッドセットＭ１、Ｍ２、…Ｍｉ用にコンパイルされたコードをセルＣｉに配置することにより、スレッドセットＴ１、Ｔ２、…Ｔｉを関連付けられているセルＣｉに結合することができる。
【００２１】
一般に、オフラインプロファイルデータは、メソッドごとの情報を含む。
この情報は、そのメソッドのインタープリタモードで実行された起動の回数、そのメソッドのコンパイルモードで実行された起動の回数、そのメソッドの起動の総数、そのメソッドのインタープリタモードでの１つの起動に要する平均時間、そのメソッドのコンパイルされたコードの１つの起動に要する平均時間、そのメソッドがコンパイル要求リストへ送信される時の起動カウント、メソッドサイズ（そのメソッドの命令のコスト解析から見積もられる）、コンパイル時間等のようなものである。
【００２２】
いくつかの実施形態では、スレッドセットに関連付けられている新しいメソッドまたは再コンパイルされたメソッドは、オンラインプロファイルデータに基づいて、関連付けられている複数のより小さなコードバッファに定期的に再割り当てされる。
このオンラインプロファイル情報は、コードキャッシュアクセス中にリモートメモリミスの難点がある命令を見つけるのに使用される。
この情報によって、スレッドを実行するようにスケジューリングされている関連付けられているローカリティドメインに命令がマッピングされるように、各命令のコードキャッシュをアロケートすることが助けられる。
また、これらの実施形態では、この情報は、プログラマの使用を支援できるように報告される。
たとえば、スレッドを関連付けられているローカリティドメインに結合するｐｓｅｔコールが報告される。
また、プロファイル情報は、プログラムの異なる実行パスがトラバースされる頻度についてのデータであって、命令をパッケージできる順序の決定を容易にできる頻度についてのデータも含むことができる。
プロシージャを通じて「ホットコード」を発見することにより、命令を、それらの命令のトレースに連続的にパックして、キャッシュラインにすることができる。
この結果、キャッシュの利用率を大きくすることができ、キャッシュミスを少なくすることができる。
このように、プロファイル情報を使用して、セット関連（set-associate）キャッシュミスにおける競合性ミスを削減することができる。
加えて、プロファイル情報は、実行頻度の低いトレースをメインのプロシージャ本体から分離してさらに効率を良くすることを支援することができる。
【００２３】
一般に、ホットコードは、インタープリテーションモードで実行される。
インタープリタは、実行されると、どのコードセクションが頻繁に実行されているかを示すオンラインプロファイルデータを収集する。
これらのコードセクションは、「ホット」コードとして指定され、コンパイルモードでマシンコードにコンパイルされる。
このように、頻繁に実行されるコードのみがコンパイルされる。
コードセクションの起動回数が静的なホット性しきい値（hotness threshold）を超えていると判断される場合、そのコードセクションはコンパイルされる。
【００２４】
いくつかの実施形態では、割り当てられた複数のより小さなコードバッファ内に存在する生成コードは、再コンパイルされた生成コードのコピーを、関連付けられている複数のノードに所定の回数定期的に配置する時に無効にされる。
これらの実施形態では、再コンパイルされた生成コードのコピーを配置する所定の回数は、経験的な手法に基づいて決定される。
いくつかの実施形態では、新しい生成コードは、オンラインプロファイルデータに基づいて、関連付けられている複数のノードに定期的に配置される。
【００２５】
いくつかの実施形態では、割り当てられた複数のより小さなコードバッファ内に存在する生成コードを定期的に無効にするステップ、および、再コンパイルされた生成コードのコピーを配置するステップは、ガベージコレクションイベント等の所定のイベント中に繰り返される。
【００２６】
フローチャート１００は、この例示の実施形態では直列に配列されたステップ１１０〜１４０を含むが、本発明の主題の他の実施形態は、２つまたは３つ以上の仮想マシンまたはサブプロセッサとして編成された複数のプロセッサまたは単一のプロセッサを使用して、２つまたは３つ以上のステップを並列に実行することができる。
その上、さらに他の実施形態は、２つまたは３つ以上の特定の相互接続されたハードウェアモジュールであって、関係した制御信号およびデータ信号がそれらのモジュール間で、それらのモジュールを通って通信されるハードウェアモジュールとしてステップを実施することもできるし、特定用途向け集積回路の部分としてステップを実施することもできる。
このように、例示のプロセスフロー図は、ソフトウェア、ファームウェア、および／またはハードウェアの実施態様に適用可能である。
【００２７】
本発明の実施形態は、非分散環境の状況で説明されているが、分散環境でも同様に非常に良好に実施することができる。
【００２８】
本発明の主題のさまざまな実施形態は、ソフトウェアで実施することができる。
このソフトウェアは、図２（後述）に示す環境で実行することもできるし、他のあらゆる適したコンピューティング環境で実行することもできる。
本発明の主題の実施形態は、多数の汎用コンピューティング環境または専用コンピューティング環境で動作可能である。
いくつかのコンピューティング環境には、コンピュータ可読媒体に記憶されたコードを実行するパーソナルコンピュータ、汎用コンピュータ、サーバコンピュータ、ハンドヘルドデバイス（すべてのタイプの電話および個人情報端末（ＰＤＡ）が含まれるが、これらに限定されない）、ラップトップデバイス、マルチプロセッサ、マイクロプロセッサ、セットトップボックス、プログラマブル家庭用電化製品、ネットワークコンピュータ、ミニコンピュータ、メインフレームコンピュータ、分散コンピューティング環境等が含まれる。
本発明の主題の実施形態は、コンピュータによって実行されるプログラムモジュール等のマシン実行可能命令として部分的または全体的に実施することができる。
一般に、プログラムモジュールには、特定のタスクを実行するかまたは特定の抽象データタイプを実施するルーチン、プログラム、オブジェクト、コンポーネント、データ構造体等が含まれる。
分散コンピューティング環境では、プログラムモジュールは、ローカルストレージデバイスまたはリモートストレージデバイスに配置することができる。
【００２９】
図２は、本発明の主題の実施形態を実施するのに適したコンピューティングシステム環境の一例を示している。
図２および以下の解説は、本明細書に含まれる発明概念の特定の実施形態を実施できる、適したコンピューティング環境の簡潔な一般的説明を提供することを目的としている。
【００３０】
コンピュータ２１０の形の一般的なコンピューティングデバイスは、プロセッサ２０２、メモリ２０４、着脱可能ストレージ２０１、および着脱不能ストレージ２１４を含むことができる。
コンピュータ２１０は、加えて、バス２０５およびネットワークインターフェース２１２も含む。
【００３１】
コンピュータ２１０は、１つまたは２つ以上のユーザ入力モジュール２１６と、１つまたは２つ以上の出力モジュール２１８と、ネットワークインターフェースカードまたはＵＳＢ接続等の１つまたは２つ以上の通信接続２２０とを含むコンピューティング環境を含むこともできるし、該コンピューティング環境にアクセスすることもできる。
１つまたは２つ以上の出力デバイス２１８は、コンピュータのディスプレイデバイス、コンピュータモニタ、ＴＶスクリーン、プラズマディスプレイ、ＬＣＤディスプレイ、デジタイザのディスプレイ、電子タブレットのディスプレイ等とすることができる。
コンピュータ２１０は、通信接続２２０を使用して１つまたは２つ以上のリモートコンピュータに接続するネットワーク接続環境で動作することができる。
リモートコンピュータには、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスまたは他のネットワークノード等が含まれ得る。
通信接続には、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、および／または他のネットワークが含まれ得る。
【００３２】
メモリ２０４は、揮発性メモリ２０６および不揮発性メモリ２０８を含むことができる。
揮発性メモリ２０６および不揮発性メモリ２０８等のコンピュータ２１０のメモリ素子、着脱可能ストレージ２０１、並びに着脱不能ストレージ２１４にさまざまなコンピュータ可読媒体を記憶することができ、コンピュータ２１０のメモリ素子、着脱可能ストレージ２０１、および着脱不能ストレージ２１４からさまざまなコンピュータ可読媒体にアクセスすることができる。
コンピュータメモリ素子には、データおよびマシン可読命令を記憶するためのあらゆる適したメモリデバイス（複数可）を含めることができる。
このあらゆる適したメモリデバイス（複数可）は、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、ハードドライブ、コンパクトディスク（ＣＤ）、デジタルビデオディスク（ＤＶＤ）、ディスケット、磁気テープカートリッジ、メモリカード、Ｍｅｍｏｒｙ  Ｓｔｉｃｋ（商標）等をハンドリングするための着脱可能媒体ドライブ；ケミカルストレージ；バイオロジカルストレージ；および他のタイプのデータストレージ等である。
【００３３】
「プロセッサ」または「処理ユニット」は、本明細書で使用されるように、あらゆるタイプの計算回路を意味し、マイクロプロセッサ、マイクロコントローラ、複合命令セットコンピューティング（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、明示的並列命令コンピューティング（ＥＰＩＣ）マイクロプロセッサ、グラフィックスプロセッサ、デジタル信号プロセッサ、または他のあらゆるタイプのプロセッサ若しくは処理回路等であるが、これらに限定されるものではない。
この用語は、汎用ロジックデバイス若しくは汎用ロジックアレイまたはプログラマブルロジックデバイス若しくはプログラマブルロジックアレイ、特定用途向け集積回路、シングルチップコンピュータ、スマートカード等の組み込みコントローラも含む。
【００３４】
本発明の主題の実施形態は、タスクを実行するか、または、抽象データタイプ若しくは低レベルハードウェアコンテキストを定義するためのプログラムモジュールと共に実施することができる。
プログラムモジュールには、関数、プロシージャ、データ構造体、アプリケーションプログラム等が含まれる。
【００３５】
上述したストレージ媒体のいずれかに記憶されたマシン可読命令は、コンピュータ２１０の処理ユニット２０２によって実行可能である。
たとえば、プログラムモジュール２２５は、複数のノードを含むＮＵＭＡコンピュータシステムのコードバッファ内に存在する動的生成コードの非ローカルアクセスを削減できるマシン可読命令を含むことができ、それによって、本発明の主題の教示および本明細書で説明した実施形態に従って性能を改善する。
一実施形態では、プログラムモジュール２２５は、ＣＤ−ＲＯＭに含めることができ、ＣＤ−ＲＯＭから不揮発性メモリ２０８のハードドライブへロードすることができる。
マシン可読命令は、本発明の主題のさまざまな実施形態に従ってコンピュータ２１０に符号化を行わせる。
【００３６】
性能を改善するように実行可能コードを再コンパイルするためのコンピュータシステム２００のオペレーションを図１に関してより詳細に説明する。
上述した技法は、コンパイラから得られたエスケープ解析情報を使用して、ＮＵＭＡコンピュータシステム等のセルベースのシステムの実行可能コードバッファをセグメント化する。
上記の技法は、高いスレッドアフィニティを有するプロセスについて、ローカリティ単位の永続的なコードキャッシュ方式を提案する。
さらに、上記の技法は、共有されたコードキャッシュの同期オーバーヘッドを削減する（すなわち、高速ＪＡＶＡ仮想マシン（ＪＶＭ）の複数のコンパイラスレッドでは、各スレッドが単独でコードを実行するのとは対照的に、ＪＩＴ（ジャストインタイムコンパイラ）におけるような変換を行うことを削減することができる）。
ＪＩＴコンパイラは、すべてのバイトコードを実行前にマシンコードに変換するが、或るコードパスがまさに実行されようとしていることを知っている時にのみそのコードパスをコンパイルする。
【００３７】
上述したプロセスは、セルローカルメモリを含む動的最適化システムだけでなくブレードサーバについてもリモートメモリコードバッファミスを削減することによって性能を改善する。
さらに、上記の技法は、コンパイラから得られたエスケープ解析情報を使用して、セルローカルメモリ（ＣＬＭ）ベースのシステムのコードバッファをセグメント化する。
【００３８】
図１および図２に示す上記の例示的な実施形態は、ＪＶＭおよびＮＵＭＡコンピュータシステムに関して説明されているが、上述した技法は、ＪＶＭおよびＮＵＭＡコンピュータシステムのみに限定されるものではなく、あらゆるコンピュータシステムのあらゆる実行可能コード内に使用されて、リモートメモリコードバッファミスを削減し、性能を改善することができる。
【００３９】
上記の技法は、プロセッサが、上記の技法の一態様を構成するコンピュータプログラムの形で命令の提供を受ける場合に、当該プロセッサにより制御される装置を使用して実施することができる。
このようなコンピュータプログラムは、コンピュータ可読命令としてストレージ媒体に記憶することができ、その結果、そのストレージ媒体は、本発明の主題のさらに別の一態様を構成する。
【００４０】
上記の説明は、限定的なものではなく例示として意図されている。
他の多くの実施形態が当業者には明らかとなろう。
したがって、本発明の主題の範囲は、添付の特許請求の範囲が資格を有する均等物の全範囲と共に、添付の特許請求の範囲によって決定されるべきである。
【００４１】
本明細書で示したように、本発明の主題は、さまざまな方法、回路、Ｉ／Ｏデバイス、システム、および関連付けられている命令を有するマシンアクセス可能媒体を備える物品を含めて、多数の異なる実施形態で実施することができる。
【００４２】
他の実施形態は、当業者に容易に明らかとなろう。
要素、アルゴリズム、およびオペレーションシーケンスはすべて、特定の要件に適するように変更することができる。
図１に示す方法に関して上述したオペレーションは、本明細書で図示して説明した順序とは異なる順序で実行することができる。
【００４３】
図１および図２は、単なる表現であって、一律の縮尺で描かれていない。
その特定の部分を誇張されている場合がある一方、それ以外の部分が最小にされている場合がある。
図１および図２は、当業者が理解でき、適切に実行できる主題のさまざまな実施形態を示している。
【００４４】
本発明の実施形態の上記の詳細な説明では、さまざまな特徴が、本開示を簡素化する目的で単一の実施形態に共にグループ化されている。
本開示の方法は、本発明の特許を請求する実施形態が、各請求項で明示的に列挙された特徴よりも多くの特徴を必要とするという意図を反映しているとして解釈されるべきではない。
逆に、添付の特許請求の範囲が反映するように、独創的な発明は、開示した単一の実施形態のすべての特徴よりも少ない特徴に存する。
このように、添付の特許請求の範囲は、これによって、本発明の実施形態の詳細な説明に援用され、各請求項は、それ自体で別個の好ましい実施形態として成立している。
【図面の簡単な説明】
【００４５】
【図１】本発明の主題の一実施形態による、実行可能コードを再コンパイルして性能を改善するための一方法を示すフローチャートである。
【図２】図１に示す本発明の主題の実施形態を実施するのに使用される通常のコンピュータシステムのブロック図である。
【符号の説明】
【００４６】
２０１・・・着脱可能ストレージ，
２０２・・・処理ユニット，
２０５・・・バス，
２０６・・・揮発性メモリ，
２０８・・・不揮発性メモリ，
２１２・・・ネットワークインターフェース，
２１４・・・着脱不能ストレージ，
２１６・・・ユーザ入力デバイス，
２１８・・・出力デバイス，
２２５・・・プログラム，
【図１】
2008033932.tif 000003
【図２】
2008033932.tif 000004