(57)【要約】１つのプロセッサシステムにおけるメモリ管理を最適化するための技術が記載される。その技術は、１チップパフォーマンスモニタリングを含む複数のプロセッサ上及び１つの外部パフォーマンスモニタが１つのプロセッサに結合されたシステム上に実装され得る。１つのパフォーマンスモニタリングユニット（ＰＭＵ）を含むプロセッサが例である。ＰＭＵは、トランスレーション・ルックアサイド・バッファ（ＴＬＢ）ミスにおけるデータだけでなく、リード及びライトキャッシュミスにおけるデータを記憶してよい。ＰＭＵからのデータは、１つのメモリヒープ内のいずれのメモリ領域が不良なメモリ領域、すなわち多くのメモリ問題又はストールを示す領域であるかを決定する。不良なメモリ領域が見つかると、ガーベッジコレクションルーチンのようなメモリマネージャは、ヒープ内のオブジェクトのレイアウトを改善することによってミューテータパフォーマンスだけでなくメモリパフォーマンスを効果的に最適化する。このようにして、メモリマネージメントルーチンは、動的及びリアルタイムなメモリパフォーマンスデータに基づいてフォーカスされ得る。
2007513437.tif 000002
【特許請求の範囲】
【請求項１】
記憶された複数の命令を有する装置可読メディアを備える製品であって、前記複数の命令は、装置によって実行された場合に、前記装置に、
複数のメモリ領域を有する１つのメモリヒープについてのパフォーマンスデータを１つのパフォーマンスモニタから取得する手順と、
前記パフォーマンスデータに基づいて、前記複数のメモリ領域のうちの少なくとも１つが不良領域であるか否かを判断する手順と、
前記複数のメモリ領域のうちの少なくとも１つが不良領域である旨の判断に応答して、１つのメモリ管理ルーチンを実行して前記メモリヒープの当該領域を最適化する手順と
を実行させる製品。
【請求項２】
前記パフォーマンスデータは、少なくとも１つのメモリパフォーマンスイベントを表す
請求項１に記載の製品。
【請求項３】
前記パフォーマンスデータは、キャッシュミス、トランスレーション・ルックアサイド・バッファ・ミス、ブランチ予測ミス、データ依存によるストール、及びデータキャッシュライトバックを含むグループから選択される
請求項１に記載の製品。
【請求項４】
前記パフォーマンスモニタは１つのパフォーマンスモニタリングユニット（ＰＭＵ）である
請求項１に記載の製品。
【請求項５】
前記装置によって実行された場合に、前記装置に、
少なくとも１つの不良領域に前記メモリ管理ルーチンを実行する手順と、
少なくとも１つの非不良領域にセカンダリメモリ管理ルーチンを実行する手順と
を実行させる複数の命令をさらに有し、
前記セカンダリメモリ管理ルーチンは前記メモリ管理ルーチンと異なる
請求項１に記載の製品。
【請求項６】
前記装置によって実行された場合に、前記装置に、
少なくとも１つの不良領域に１つのガーベッジコレクションルーチンを実行する手順
を実行させる複数の命令をさらに有する
請求項１に記載の製品。
【請求項７】
前記ガーベッジコレクションルーチンは、参照カウントコレクション、コピーコレクション、世代別コレクション、マークアンドスウィープコレクション、ベルトウェイコレクション、オールデストファーストコレクション、スライドコンパクション、又はハイブリッドコレクションを含むグループから選択される
請求項６に記載の製品。
【請求項８】
前記装置によって実行された場合に、前記装置に、
前記メモリ領域についての前記パフォーマンスデータを取得する前に、前記メモリ領域のサイズ粒度を定める手順
を実行させる複数の命令をさらに有する
請求項１に記載の製品。
【請求項９】
前記パフォーマンスデータは１つのパフォーマンスモニタリングユニットから取得され、
前記製品は、
前記装置によって実行された場合に、前記パフォーマンスモニタリングユニットに、
前記パフォーマンスデータの発生数をカウントする手順
を実行させる複数の命令をさらに有する
請求項１に記載の製品。
【請求項１０】
前記装置によって実行された場合に、前記パフォーマンスモニタリングユニットに、
前記パフォーマンスデータの発生数の前記カウントを閾値と比較する手順
を実行させる複数の命令をさらに有し、
前記カウントが前記閾値を上回る場合に、不良領域が存在すると決定される
請求項９に記載の製品。
【請求項１１】
前記装置によって実行された場合に、前記装置に、
前記カウントを前記閾値と比較する前に、十分な数のデータサンプルが取得されたか否かを判断する手順
を実行させる複数の命令をさらに有する
請求項１０に記載の製品。
【請求項１２】
前記装置によって実行された場合に、前記装置に、
追加のデータサンプルが取得される旨の判断に応答して、追加のデータサンプルを前記メモリヒープから集める手順
を実行させる複数の命令をさらに有する
請求項１０に記載の製品。
【請求項１３】
前記装置によって実行された場合に、前記装置に、
不良領域をメモリストレージからブロックする手順
を実行させる複数の命令をさらに有する
請求項１に記載の製品。
【請求項１４】
複数のメモリ領域を有する１つのメモリヒープから複数のロードミスメモリアドレスを特定する段階と、
前記特定されたロードミスメモリアドレスの頻度数を保持する段階と、
前記複数のメモリ領域のいずれかがロードミスメモリアドレスの閾値を含むか否かを判断する段階と、
前記複数のメモリ領域の少なくとも１つがロードミスメモリアドレスの閾値を含む旨の判断に応答して前記メモリヒープを最適化する段階と
を備える方法。
【請求項１５】
前記メモリヒープを最適化する段階は、ロードミスメモリアドレスの前記閾値を含む前記メモリ領域をブロックする段階を有する
請求項１４に記載の方法。
【請求項１６】
前記メモリヒープを最適化する段階は、ロードミスメモリアドレスの前記閾値を含む前記メモリ領域のうちの少なくとも１つにガーベッジコレクションを実行する段階を有する
請求項１４に記載の方法。
【請求項１７】
前記ガーベッジコレクション最適化は、参照カウントコレクション、コピーコレクション、世代別コレクション、マークアンドスウィープコレクション、ベルトウェイコレクション、オールデストファーストコレクション、スライドコンパクション、又はハイブリッドコレクションを含むグループから選択される
請求項１６に記載の方法。
【請求項１８】
ロードミスメモリアドレスの前記閾値を含む少なくとも１つのメモリ領域に第１メモリ管理ルーチンを実行する段階と、
ロードミスメモリアドレスの前記閾値を含まない少なくとも１つのメモリ領域に、前記第１メモリ管理ルーチンと異なる第２メモリ管理ルーチンを実行する段階と
をさらに備える請求項１４に記載の方法。
【請求項１９】
１つのメモリヒープのパフォーマンスをモニタし、前記メモリヒープ内の複数のメモリ領域におけるパフォーマンスデータを集めるハードウェアであって、前記集められたパフォーマンスデータに基づいて、前記複数のメモリ領域のいずれが不良領域であるかを判断することができるハードウェアと、
前記複数の不良領域を最適化するための１つのメモリマネージャと
を備えるシステム。
【請求項２０】
前記ハードウェアは、１つのパフォーマンスモニタリングユニットを有し、
前記メモリマネージャは１つのガーベッジコレクタである
請求項１９に記載のシステム。
【請求項２１】
前記ガーベッジコレクタは、参照カウントコレクション、コピーコレクション、世代別コレクション、マークアンドスウィープコレクション、ベルトウェイコレクション、オールデストファーストコレクション、スライドコンパクション、又はハイブリッドコレクションを含むグループから選択される１つのガーベッジコレクション最適化を実行する
請求項２０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は広く、プロセッサベースの１つのシステムにおけるメモリ管理に関し、特に、メモリ管理を最適化するための装置及び技術に関する。
【背景技術】
【０００２】
マイクロプロセッサのスピードとメモリパフォーマンスとの間に、よく知られたパフォーマンスギャップが存在する。マイクロプロセッサのクロックスピードは２、３年毎に倍増する一方で、メモリスピードはほとんど向上しない。１つのマイクロプロセッサは、ＧＨｚクロックスピードで動作し得るが、当該マイクロプロセッサによって使用されるランダムアクセスメモリ（ＲＡＭ）は、少なくとも桁違いに遅いクロックスピードを持つ。消費者は、そのパフォーマンスギャップが、ハードドライブ及びＣＤ−ＲＯＭストレージのようなマスストレージメモリに影響するだけでなく、ギャップがＲＡＭ及びキャッシュのような高速なメモリにも影響すること直感的に理解し得る。さらに、そのパフォーマンスギャップは、クロックスピードだけでなく、遅延問題及びメモリストールに由来する。
【０００３】
コンピュータシステムは、パフォーマンスギャップに対処するために複数のメモリレベルを使用する。それぞれのレベルはレジスタにより近く、レジスタに低減された待ち時間を提供する。レベル１メモリは、比較的小さく極めて高速なメモリであり、典型的には、低レベル命令及びデータを記憶するマイクロプロセッサチップ上に設けられる。レベル２キャッシュメモリは、マイクロプロセッサ上にさらに設けられる、１つのより大きいメモリである。さらなる複数のレベルのキャッシュメモリもまた可能である。これらのメモリは、典型的にはＲＡＭより極めて小さいが、極めて高速である。
【０００４】
不幸なことに、レベル１及びレベル２キャッシュメモリは、ＲＡＭからのメモリを待っている待ち時間問題及びメモリストールに悩まされる。より大きいキャッシュメモリは、例えば、より大きいリード及びライト待ち時間、より大きいデータ・トランスレーション・ルックアサイド・バッファ（ＤＬＴＢ）ミス、及びより大きいキャッシュミス情報を受ける。ＤＴＬＢは１つのキャッシュに結合され、キャッシュのようなより高レベルのメモリにデータをロケーティングすることを支援するために使用される。
【０００５】
メモリパフォーマンスを改善するための種々の技術が開発されている。実例は、データプリフェッチング、マルチスレッディングコード、動的命令スケジューリング、投機的コード実行、及びキャッシュを意識したデータ配置を含む。これらの解決方法はメモリ待ち時間問題に対処しようとする。他の解決方法はメモリ割り当て問題に対処しようとする。例えば、ガーベッジコレクションアルゴリズムは、ヒープ内の使用されていないメモリ領域を回収し、既存のメモリオブジェクトをより効率的な方法で組織化すべくデザインされた。より重要なことに、それらは使用されていないメモリの回収を管理することからプログラマを解放する。
【０００６】
いくつかのガーベッジコレクション技術、例えばコピーガーベッジコレクション、マークアンドスウィープガーベッジコレクション、世代別ガーベッジコレクション、及びスライディングコンパクションが存在する。スライディングコンパクションはポピュラーなガーベッジコレクション技術であり、ライブメモリオブジェクトがメモリヒープ内の複数のデッドスペースにわたってリライトされ、アロケーション順序を維持する。その技術は、Ｃ＃又はＪａｖａ（登録商標）で記述されたようなオブジェクト指向アプリケーション、サーバベース環境において使用されるいくつかの．Ｎｅｔフレームワーク（ワシントン州レッドモンドのマイクロソフト社によって最初に開発された）のような複数のフレームワークに特に有用である。
【０００７】
ガーベッジコレクションスキームは、到達不可能な、したがって再利用可能なエリアを求めてメモリヒープ領域を検索する。オブジェクトがアロケートされ得る場所を制限することによってメモリを断片化するガーベッジコレクタは、オブジェクトアロケーション回数に悪影響を与え、より多いＤＴＬＢミスをもたらし得る。管理されたヒープ内のライブオブジェクトは互いに近くに運ばれるので、実行中のコードセットをサポートするために必要なＤＴＬＢエントリの数は、スライディングコンパクションを用いて低減される。スライディングコンパクションの有用な特性は、オブジェクトがスライディングコンパクションが実行される前に元々配置された空間的順序を撹乱することがなく、したがって空間的順序を維持しつつ、介在するデッドスペースを取り除くことができる。したがって、インプレースな圧縮により空間的局所性が実際に改善される。より少ないＤＴＬＢミスによりより少ないＣＰＵストール  がもたらされ、コードスピードが高められる。そのうえ、デッドスペースの低減によりキャッシュミスが低減され得る。
【０００８】
そのパフォーマンス上の利点にもかかわらず、スライディングコンパクションは、いくつかの他のガーベッジコレクションルーチンに比較してかなり不経済であり、ガーベッジコレクションの全てのフェーズにおける著しい空間及び時間オーバーヘッドを課す。これらの問題は、巨大なヒープサイズで悪化させられる。インクリメンタルスライディングコンパクション、すなわち与えられたガーベッジコレクションサイクルの間にヒープの一部だけをスライディングすることでさえ、多くのメモリ領域が、管理される前に多くのコレクションサイクルを待たなければならないので、問題のエリアに十分速やかに到達することができない。
【０００９】
結局、メモリ待ち時間及びストールは、現在のメモリ管理技術に重荷を課す。ソフトウェアコードがメモリ管理に費やす時間は、その技術を問わず大きい。問題の多いメモリ領域を特定することはコードが実行される度になされる必要があり、これらの問題の多い領域内のメモリスペースの回収は、大きなヒープについては特に、効率的なコード実装にとって余りに不正確である。
【図面の簡単な説明】
【００１０】
【図１】メモリパフォーマンスモニタを有する中央演算装置（ＣＰＵ）及びメモリコントローラのブロック図を示す。
【００１１】
【図２】図１のメモリパフォーマンスモニタをより詳細に示す。
【００１２】
【図３】メモリ管理最適化の一例のフロー図を示す。
【００１３】
【図４】２つの不良な領域を持つメモリヒープを示す。
【００１４】
【図５】図４の１つの不良な領域の最適化の一例を示す。
【００１５】
【図６】図４の他の１つの不良な領域の最適化の一例を示す。
【００１６】
【図７】不良な領域の最適化後の図４のメモリヒープを示す。
【００１７】
【図８】他の１つの不良な領域の最適化後の図４のメモリヒープを示す。
【００１８】
【図９】コード実行の一例のフロー図を示す。
【発明を実施するための最良の形態】
【００１９】
種々の技術が、１つのプロセッサシステム内のメモリ管理を最適化するために記載される。メモリ管理によって成し遂げられる成果に焦点をあてることによって、アプリケーションコードの実行、すなわち、プロセッサシステム上で実行するＪａｖａ（登録商標）及び．Ｎｅｔ環境のような動的に管理されたランタイム環境におけるミューテータが改善され得る。その技術は、プロセッサ、又はハードウェアモニタリングを用いることによってパフォーマンスをモニタリングすることが可能なプロセッサアーキテクチャ上に実装されてよい。マイクロプロセッサの実例は、カリフォルニア州サンタクララのインテル社から入手可能なＰｅｎｔｉｕｍ（登録商標）４（Precise Event Based Sampling）及びＩｔａｎｉｕｍ（登録商標）プロセッサ（Performance Monitoring Unit）を含む。その技術は専用プロセッサ環境にも実装されてよく、ストレージ、ネットワーキング、及び組み込み用途で使用される入力／出力（Ｉ／Ｏ）プロセッサが例である。Ｉ／Ｏ用途、例えば、サーバ、ワークステーション、及びストレージサブシステムにおいて、その技術は、コード実行及びデータフローを最適化すべく１つのデバイスネットワークにわたるメモリ管理を最適化するよう実現されてよい。実例は、共にインテル社から入手可能な、ｉ９６０（登録商標）ＲＭ／ＲＮ／ＲＳ  Ｉ／Ｏプロセッサ及びＸＳｃａｌｅ（登録商標）コアマイクロアーキテクチャで構築されたＩＯＰ３３１  Ｉ／Ｏプロセッサを含む。当業者は、これらのプロセッサは実例であって、記載された技術が他のプロセッサ上に実装され得ることを理解し得る。
【００２０】
図１は、１つのレベル２キャッシュ１０４及び１つのレベル１キャッシュ１０６を有する１つのＣＰＵユニット１０２を備えるコンピュータシステム１００の一例を示す。ＣＰＵ１０２は、１つのＲＡＭ１０８及び１つのリードオンリーメモリ（ＲＯＭ）１１０に、１つのメモリバス１１２を介して結合される。図示された例において、メモリバス１１２は１つのシステムバス１１４に結合される。代わりに、当該メモリバス１１２はシステムバスであってよい。当業者は、図示された構成が単なる例を目的としていることを理解するだろう。
【００２１】
ＣＰＵ１０２は、全て互いに結合された、１つの独立した演算論理機構、複数のレジスタ、及びコントロールユニットを有してよい。または、示されるように、ＣＰＵ１０２は１つの集積化されたマイクロプロセッサであってよい。ＣＰＵ１０２は複数のレジスタブロック１１５を有する。ブロック１０６は、プロセッサスピードで動作する、１つのデータキャッシュ、１つの実行キャッシュ、及び１つの命令キャッシュを含む。レベル２キャッシュ１０４は、知られたキャッシュメモリであってよく、クロックサイクル毎にデータを転送する１つのキャッシュインタフェースを含んでよい。レベル２キャッシュは、ＣＰＵチップ（ボックス１０２）上に存在するか単独で存在して１つのＣＰＵバスを介してそこに結合されてよい。
【００２２】
ＣＰＵ１０１は、１つのデータ変換ルックアサイドバッファ（ＤＴＬＢ）１１６及び１つの命令変換ルックアサイドバッファ（ＩＴＬＢ）１１７を有する。
【００２３】
ＣＰＵ１０２も、示されるようにＣＰＵチップ上にあるかそこに結合された１つのパフォーマンスモニタリングユニット（ＰＭＵ）１１８を有する。複数のオンチップＰＭＵを提供する好適なマイクロプロセッサは、Ｐｅｎｔｉｕｍ（登録商標）４及びＩｔａｎｉｕｍ（登録商標）プロセッサを含む。ＣＰＵ１０２は、パフォーマンスをモニタすることができる任意のプロセッサ又はプロセッサアーキテクチャ（例えば、１つの外部ＰＭＵを持つもの）を表してよい。
【００２４】
システムバス１１４は、１つのネットワークコントローラ１２０、１つのディスプレイユニットコントローラ１２２、１つの入力デバイス１２４、及び１つのデータストレージ／メモリメディア１２６、例えば１つのマスストレージデバイスに結合される。バス１６０に結合された種々のデバイスの例は知られている。図示された例において、バス１０６は、１つのバスブリッジ１３０を介して他の１つのバス１２８に結合される。
【００２５】
プロセッサ１０２上で実行するオペレーティングシステムは、種々のシステムのうちの１つ、例えば、ＷＩＮＤＯＷＳ（登録商標）９５、９８、２０００、ＭＥ、又はＸＰのような、ワシントン州レッドモンドのマイクロソフト社から入手可能なＷＩＮＤＯＷＳ（登録商標）ファミリのシステムのうちの１つであってよい。代わりに、オペレーティングシステムは、元々、ニュージャージ州マレーヒルのベル研究所（現ルーセントテクノロジ社ベル研究所）によって開発され、様々なソースから利用可能なＵＮＩＸ（登録商標）＊ファミリのシステムのうちの１つであってよい。さらに他にも、オペレーティングシステムは、ＬＩＮＵＸオペレーティングシステムのようなオープンソースシステムであってよい。その上さらに代替のオペレーティングシステムが使用され得ることが理解されるだろう。
【００２６】
プロセッサ１０２は、ＰＭＵ１１８からのデータに基づいて、メモリ管理コード、例えばガーベッジコレクションを実行する。当該コードは、メモリ回収及び初期のアロケーションの両方のために使用される。多くの異なるガーベッジコレクションルーチンが存在する。例えば、１つの参照カウントガーベッジコレクションプログラムは、特定のメモリ領域（例えばブロック）への参照数の経過を追い、メモリロケーションへの参照が無い場合にメモリ領域を開放する。マークアンドスウィープガーベッジコレクションプログラムは、そのとき動作している複数のスレッドのルートから到達可能な複数のオブジェクトをトレースし、到達可能な複数のオブジェクトをマークする。マークアンドスウィープガーベッジコレクションプログラムは、それから全てのオブジェクトを調べ、マークされていない（すなわち、動作しているスレッドのうちの１つのルートからもはや到達できない）複数のオブジェクトによって使用されるメモリ領域を解放する。コピーガーベッジコレクションプログラムは、利用可能なメモリヒープを２つのセクションすなわち２つの空間に分割して、ある時刻に、到達可能なこれらのオブジェクトを、現在使用中の空間（"Ｆｒｏｍ  Ｓｐａｃｅ"）から現在使用中でない空間（"Ｔｏ  Ｓｐａｃｅ"）に、（アプリケーションスレッドのルートから推移的に）移動する。アプリケーションスレッドは、満杯になるまで、"Ｔｏ  Ｓｐａｃｅ"内にオブジェクトをアロケートする。このとき、コピーガーベッジコレクションプログラムは、それから２つの空間の役割を逆転することによって、"Ｆｒｏｍ  Ｓｐａｃｅ"を回収する。すなわち、旧"Ｆｒｏｍ Ｓｐａｃｅ"が新"Ｔｏ  Ｓｐａｃｅ"になり、旧"Ｔｏ  Ｓｐａｃｅ"が新"Ｆｒｏｍ  Ｓｐａｃｅ"になる。
【００２７】
さらに代替として、世代別ガーベッジコレクションプログラムは、最近のメモリアロケーションの大部分がなされたメモリヒープのセクションにフォーカスする。それは、フォーカスエリア内にある、フォーカスエリア外から到達可能なこれらの複数のオブジェクトを、１つの新たなエリアに移動する。フォーカスエリア外から到達可能な複数のオブジェクトの経過を追うことを目的として、世代別ガーベッジコレクションプログラムは、１つのストアバッファ形式の１つの書き込みバリア及び１つのログを使用してよい。書き込みバリアは、全ての書き込みをチェックして、フォーカスエリア外からの１つのオブジェクトがフォーカスエリア内の１つのオブジェクトを参照しているか否かを決定する。フォーカスエリア外の１つのオブジェクトからフォーカスエリア内の１つのオブジェクトに参照がなされている場合、この参照はログに記録される。ガーベッジコレクションプログラムは、その後メモリ回収及びリアロケーションの時にログを調べ、フォーカスエリア内のどの複数のオブジェクトが新たなエリアに移動させられるべきかを決定する。ログは、１つのカードテーブル又は１つのハッシュテーブル又は１つのシンプルなシーケンシャルバッファとして符号化されることができる。
【００２８】
他の一例のスライディングコンパクションルーチンは、上で概して説明されたスライディングコンパクションである。さらに、他の知られた技術は、ベルトウェイコレクション、オールデストファーストコレクション、上記の任意の数のガーベッジコレクションルーチンを組み合わせるハイブリッドコレクションを含む。オールデストファーストコレクタは、世代別コレクタの典型のような最新の代わりに、システム内の最も古い複数のオブジェクトのコレクションにフォーカスする。ベルトウェイコレクタは、１つのラウンドロビン法を用いて高デッドレートのエリアを探す。１つが発見された場合、それはコレクション動作をこのエリアにフォーカスする。コレクタは、コンカレント又はインクリメンタルであってよい。コンカレントは、それらがアプリケーションコードと並行的に動作できることを意味する。インクリメンタルは、それらが、各ＧＣサイクルの間にデッドオブジェクトの一部だけを回収することを意味する。
【００２９】
従来のガーベッジコレクションルーチンと異なり、システム１００は、ガーベッジコレクションにフォーカスすべく、ＰＭＵ１１８からのデータを信頼する。図２はＰＭＵ１１８をより詳細に示す。ＰＭＵ１１８はコントロールロジック１５０、複数のカウンタ１５２、及び複数のレジスタ１５４を有する。ＰＭＵ１１８は、コード実行の間にわたって個別のイベントをモニタするオンチップハードウェアであってよい。複数のカウンタ１５２は、複数のグローバルタイムスタンプカウンタ及びＤＴＬＢミスを追跡してＤＴＬＢミスをひき起こすメモリ参照を調査する複数のＤＴＬＢカウンタのような、メモリパフォーマンスをモニタリングすることができる複数の専用プログラマブルイベントカウンタを含む。専用プログラマブルイベントカウンタは、いずれのＤＴＬＢ内の複数のイベントだけでなく、レベル１及びレベル２メモリ１１６及び１０４内の複数のイベントをモニタしてよい。ＰＭＵ１１８は、メモリバス１１２又はシステムバス１１４を介して、ＲＡＭ１０８及び／又は複数のマスストレージメモリ内の複数のイベントをモニタするよう拡張されてよい。ネットワークシステムにおいて、ＰＭＵ１１８は、ネットワークコントローラ１２０を介して、モニタされたデータを遠隔的に提供してよい。
【００３０】
ＰＭＵ１１８は、任意のメモリパフォーマンスイベントをモニタしてよい。イベントの実例は、複数の命令キャッシュミス、複数のデータキャッシュミス、複数のブランチ予測ミス、複数のＩＴＬＢミス、複数のＤＴＬＢミス、データ依存性による複数のストール、及びデータキャッシュライトバックを含む。
【００３１】
モニタされる複数のイベントは、望ましいメモリパフォーマンスイベントをインクリメンタルにモニタするよう複数のカウンタ１５２をコントロールする複数のイベントレジスタ１５４によって特定される。レジスタブロック１５４内のそれぞれのレジスタは、カウンタブロック１５２内のいくつかのカウンタをコントロールしてよい。実例だけを目的として、３２ビットカウンタ並びに３２ビット又は６４ビットレジスタが、それぞれ使用され得る。
【００３２】
ＰＭＵ１１８は、プロセッサ１０２に関連する全メモリシステムをモニタし、複数のコントロールレジスタ１５４において特定されたイベントの数をカウントする。イベントは、種々のコード命令の実行において発生することができ、キャッシュ１０４又はＤＴＬＢへの読み込み及び書き込み試行を含む。．Ｎｅｔのような環境のみならず上記のようなオブジェクト指向言語では、複数のストアドオブジェクトは、他の複数のストアドオブジェクトに関連づけられ、他のコードによって使用可能であってよい。関連づけられた複数のストアドオブジェクトは、一時的な局所性を有する。例えば、複数のオブジェクトは、即時継承内のコードによってアクセスされ得る。それによりヒープ内の空間的な局在性を望ましいものにする。ＰＭＵ１１８は、メモリマネージャがそのような空間的局在性を実現することをアシストすべく、複数のメモリパフォーマンスイベントをモニタしてよい。ＰＭＵ１１８は、異なる複数のメモリイベントが同時にカウントされるよう、複数のイベントを並行してモニタしてよい。
【００３３】
複数のＰＭＵは、プロセッサ実装に依存する異なる方法で機能してよいが、一実装例において、ＰＭＵ１１８は、データキャッシュ又はＤＴＬＢミス並びに命令キャッシュ又はＩＴＬＢミスのようなイベントをカウントするカウンタを含む。ＰＭＵ１１８は、特定のメモリ領域に起因するそのようなミスの数を示す履歴データを記憶するためのメモリバッファを含む。ＰＭＵ１１８又は外部コードは、モニタされる複数のメモリ領域のサイズをコントロールしてよい。ＰＭＵ１１８によってモニタされるデータは、個々のメモリブロックの大きさの又はより大きい複数のメモリ領域でのパフォーマンスデータであってよい。複数のメモリ領域は、例として大きさが６４Ｋであってよい。
【００３４】
ＰＭＵ１１８は、複数のイベントが生じたときに複数のイベントを特定すべくプログラムされてよい。代わりに、ＰＭＵ１１８は、一次的にモニタリングに割り込んで、１つのメモリ領域についてのデータ量が１つの閾値に到達した場合に、モニタされたデータを出力するよう設定され得る。閾値はコードによって決定され、例えばモニタされた１つのイベントについてのバッファされた履歴データを、モニタされた他の１つイベントのバッファされた履歴データに対して比較することによって、過去のＰＭＵモニタリング例に基づいて設定されたり、モニタリングしている間に設定されてよい。メモリイベントの閾値を持つメモリ領域を検出すると、ＰＭＵ１１８は当該メモリ領域が１つの不良な領域であると判断する。ＰＭＵ１１８は、モニタリングに割り込んで、後に続くメモリ管理のために当該メモリ領域についての１つの識別子を出力するようプログラムされてよい。システム１００は、他にも、ＰＭＵ１１８外のコードを通じて、ＰＭＵ１１８からのモニタリングデータに基づいて、１つのメモリ領域が不良領域であると判断してよい。ＰＭＵ１１８は、ストップザワールド又はコンカレントなガーベッジコレクションと共に使用されてよい。後者の場合、ガーベッジコレクタがコード、すなわちミューテータの実行と並行して動作することを可能にする。
【００３５】
図３は、メモリ管理を通知するためにＰＭＵ１１８を使用するプロセス３００の一例を示す。プロセス３００は、システム１００上に記憶されて実行されるソフトウェアによって実装されてよい。示される例において、プロセス３００は、ブロック３０２−３１４を参照して説明される、種々のソフトウェアルーチン又はステップを実行する。
【００３６】
ＰＭＵ１１８は、レベル１キャッシュ１０６、レベル２キャッシュ１０４、ＤＴＬＢ１１６、及びＩＴＬＢ１１７における複数のメモリオペレーションをモニタして、キャッシュミス又はＤＴＬＢミスであるかにかかわらず、それぞれの高い待ち時間ロードミスについての実効アドレスを特定する実効アドレスブロック３０２に、モニタされた情報を送る。高レイテンシミスは、データがメインメモリ又はＲＡＭからフェッチされることを要求する。キャッシュロードミスした実効アドレスは、キャッシュ内にない１つのメモリオブジェクトである。ブロック３０２は、ロードミス実効アドレスを、それぞれのメモリ領域についての頻度数を保持するレコードデータブロック３０４に供給する。カウンタ１５２又はＲＡＭ１０８又はマスストレージのような他の記憶メディアがブロック３０４を実装してよい。複数のメモリ領域は、任意の望ましい粒度、例えば６４Ｋを有してよい。ブロック３０４は、不良領域が特定されてメモリ管理コードが実行されるようにＰＭＵ１１８からの十分なデータサンプルが提供されているか否かを判断する判断ブロック３０６に制御を渡す。
【００３７】
十分なサンプルが取得されていない場合、取得されたＰＭＵサンプルの全数を記憶するインクリメントブロック３０８に制御が進む。制御は、メモリパフォーマンスデータのさらなるモニタリングのためにＰＭＵ１１８に戻る。十分なデータサンプルが集められたことをブロック３０６が判断した場合、例えば望ましいサンプルカウント値がブロック３０８で記憶されている場合、ブロック３０４からの履歴データが、メモリヒープについて不良領域を特定するブロック３１０に提供される。ブロック３１０は、例えば９０％の特定されたキャッシュ又はＤＴＬＢミスが発生したメモリヒープの（複数の）領域を特定して、当該（複数の）領域を不良としてマークしてよい。ブロック３１０は、各セクションについて閾ミス位置が集中しているところを決定する前にメモリヒープを複数のセクションに分けることによって、複数の不良領域を特定してよい。不良領域の粒度は、ブロック３１０によって設定されてよく、元々モニタされたメモリ領域のサイズと同じであってよいし異なってよい。すなわち、１つの不良領域は複数のミス位置を持つ多数のメモリ領域を含んでよい。
【００３８】
特定された複数の不良領域は、ヒープ最適化のためにメモリ管理ブロック３１２に提供される。ブロック３１２は、上記説明されたいずれかのカーベッジコレクションのような、１以上のガーベッジコレクションルーチンを実行してよい。そのルーチンは、不良領域だけ又は不良及び非不良領域の両方に対して実行されてよい。例えば、メモリ管理ブロック３１２は、デフォルトのガーベッジコレクションアルゴリズムをメモリヒープの非不良メモリ領域に適用し、スライディングコンパクションを不良領域、すなわち、過度に高いメモリストールを示す領域だけに適用してよい。このように、プロセス３００は、第１のメモリ管理ルーチンを１つの不良領域又は複数の不良領域に適用し、異なる第２のメモリ管理ルーチンを１つの非不良領域又は複数の非不良領域に適用する。これらの例のそれぞれにおいて、スライディングコンパクションガーベッジコレクタは、最も問題の多いヒープエリアに導かれる。ここで、どのインフラストラクチャがスライディングコンパクションをサポートするために使用され得るかを説明する。
【００３９】
ブロック３１２でのガーベッジコレクションのマークフェーズの間、全てのライブオブジェクトがマークされる。また、後のフェーズのスライディングコンパクションをサポートすることを目的として、コンパクション領域を指すヒープ内の複数のメモリオブジェクト、例えば不良領域も記録される。結果として、スライディングコンパクションの間、全てのコンパクションブロックが処理されて、それらのメモリオブジェクトは互いに密集化される。メモリマネージャ３１２の実行の後、１つのブロック３１４はＰＭＵデータコレクションを同期させる。そのような同期化は、ＰＭＵデータのさらなるコレクションが現在のヒープ構成に関連するよう行われる。この同期化の一部として以前のサンプルは破棄される。
【００４０】
ブロック３０２、３０４、３０６、３０８、及び３１０は切り離して説明されたが、それらはＰＭＵ１１８によって実行され得る。
【００４１】
図４は、複数のメモリ領域４０２−４２０を形成するメモリヒープ４００の一例を示す。メモリ領域の数は、単に例示を目的として提供される。複数のメモリ領域４０４及び４１６は、ヒープ４００についてある閾数又は割合のロードミスに遭遇したからである。ブロック３１０によって不良領域（斜線のシェーディングで示される）として特定されている。メモリ領域４０４の状態の一例が、より詳細に示される。メモリオブジェクト４２２、４２４、及び４２６は、メモリ領域４０４において、デッドスペース４２８及び４３０によって間を開けて配置さる。メモリ領域４１６は、デッドスペース４３６によって隔てられた２つのメモリオブジェクト４３２及び４３４を有する。両方のメモリオブジェクトは、デッドスペース４３８によってメモリ領域４１６の先端から間隔があけられる。
【００４２】
不良領域４０４及び４１６は、それらの領域だけに、領域４０２、４０６、４０８、４１０、４１２、４１４、４１８、及び４２０に影響を及ぼすことなくガーベッジコレクションを実行するブロック３１２のものと特定される。図５は、スライディングコンパクションが実行された後の、結果として得られる最適化されたメモリ領域４０４'を示す。図６は、スライディングコンパクションが実行された後の、結果として得られる最適化されたメモリ領域４１６'を示す。結果として得られるメモリヒープ４００（図７）は、全てのメモリ領域が最適化されていることを示す（すなわち、斜線シェーディングがない）。スライディングコンパクションが説明されたが、他のガーベッジコレクションルーチンが不良領域４０４及び４１６に対して実行されてよい。後に続くメモリパフォーマンスを改善するためのそのような不良領域だけに対するスライディングコンパクションの選択的及び意図的な適用が、このようにして達成される。代わりに、特定の不良領域４０４及び４１６に対して実行される独特のガーベッジコレクションルーチン（例えばスライディングコンパクション）とともに又はなしで、ガーベッジコレクションがヒープ４００の全体にわたって実行されてよい。さらに、代替の実施形態において、図８のブロック領域４０４''及び４１６''に示されるように、不良領域はメモリストレージから一時的にブロックされてよい。
【００４３】
図９は、システム１００においてコードを実行するプロセス５００の一例を示す。プロセス５００は、システム１００において記憶されて実行されるソフトウェアによって実装されてよい。示された例において、プロセス５００は、ブロック５０２−５１０を参照して説明される種々のソフトウェアルーチン又はステップを実行する。
【００４４】
ブロック５０２は、ミューテータとも呼ばれるアプリケーションコードをＣＰＵ１０２上で実行する。コードの言語例は、Ｃ＃及びＪＡＶＡ（登録商標）を含むが、コードはこれらの言語に限定されない。コードは、．Ｎｅｔフレームワーク下で記述されてもよい。コードは、１つのオペレーティングシステム、又はオペレーティングシステム上で実行される１つのアプリケーションであってよい。
【００４５】
ブロック５０２は、実行しているコードのために新たな１つのメモリオブジェクトをメモリマネージャがシステム１００のヒープにアロケートすることができるか否かを判断する判断ブロック５０４に制御を渡す。答えがｙｅｓであるとブロック５０４が判断した場合、制御は、追加のコードが実行されるか否かを判断する判断ブロック５０６に渡される。答えがｎｏであるとブロック５０４が判断した場合、最近発見された複数の不良領域の、これらの領域に対する上述のスライディングコンパクション技術を用いたメモリパフォーマンスの最適化に加えて、一定のヒープメモリ回収を実行するブロック５０８に、制御が渡される。失われたオブジェクトをガーベッジコレクションがアロケートすることができないことをブロック５０４が判断した場合、ブロック３１０と同様の、不良領域を特定するブロック５０８に制御が渡される。ブロック５０８は、ブロック３１２と同様のメモリ管理／最適化ブロック５１０に制御を渡す。
【００４６】
上の技術は、キャッシュメモリを最適化することに関連して説明された。その技術は、パフォーマンスモニタがメモリパフォーマンスを計測するメモリストレージのいずれのレベルを最適化するために使用されてよい。さらに、その技術は、周辺デバイス又のような遠隔に格納されたメモリデバイス又はネットワーク又はサーバアプリケーション内のメモリデバイスを最適化すべく使用されてよい。
【００４７】
本発明の教示に従って構築されたいくつかの装置及び技術が本明細書に説明されたが、本特許の適用範囲はそれらに限定されない。それどくろか、本特許は、添付された請求項の範囲内に文言的に又は均等論の下に適正に含まれるその発明の教示の全ての実施形態を含む。
【図１】
2007513437.tif 000003
【図２】
2007513437.tif 000004
【図３】
2007513437.tif 000005
【図４】
2007513437.tif 000006
【図５】
2007513437.tif 000007
【図６】
2007513437.tif 000008
【図７】
2007513437.tif 000009
【図８】
2007513437.tif 000010
【図９】
2007513437.tif 000011
【国際調査報告】
2007513437.tif 000012
2007513437.tif 000013
2007513437.tif 000014