JP5147280B2 - 異機種マルチプロセッサ・システムにおけるガーベッジ・コレクションのためのシステムおよび方法 - Google Patents

異機種マルチプロセッサ・システムにおけるガーベッジ・コレクションのためのシステムおよび方法 Download PDF

Info

Publication number
JP5147280B2
JP5147280B2 JP2007118325A JP2007118325A JP5147280B2 JP 5147280 B2 JP5147280 B2 JP 5147280B2 JP 2007118325 A JP2007118325 A JP 2007118325A JP 2007118325 A JP2007118325 A JP 2007118325A JP 5147280 B2 JP5147280 B2 JP 5147280B2
Authority
JP
Japan
Prior art keywords
memory
mark
local
global
queue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007118325A
Other languages
English (en)
Other versions
JP2007299403A (ja
Inventor
マイケル・カール・ガシュウインド
キャスリン・エム・オブライエン
ジョン・ケヴィン・オブライエン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2007299403A publication Critical patent/JP2007299403A/ja
Application granted granted Critical
Publication of JP5147280B2 publication Critical patent/JP5147280B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems

Description

本出願は、一般に、改良されたデータ処理システムおよび方法に関する。より具体的には、本出願は、異機種マルチプロセッサ・システムにおけるガーベッジ・コレクション(garbage collection)のためのシステムおよび方法を対象とする。
コンピュータ・プログラムは、実行されると、データ・バッファのためのメモリを割り振る。コンピュータ・プログラムがこのようなメモリを割り振り続けると、最終的に物理的なメモリ容量を超える可能性がある。このような状況では、実行し続けるために、オペレーティング・システムは、仮想メモリ内、すなわち、ディスク上に、プログラムの部分を配置しなければならず、それにより、コンピュータ・プログラムの実行が減速される。あるルーチンがもはやメモリのその部分を必要としなくなった後でメモリを手動で割り振り解除することは、プログラマが往々にして実行するのを忘れるかまたは適切に実行しない退屈な作業である。
メモリの手動割り振り解除に代わるものとして、ガーベッジ・コレクションが開発された。ガーベッジ・コレクションとは、一般的なメモリ・プール、すなわち、ヒープのためにそのスペースを再利用するために、非アクティブ・データおよび命令の領域があるかどうかメモリをサーチするソフトウェア・ルーチンの使い方である。ガーベッジ・コレクタ(garbage collector)は、基本的に、プログラムの今後の実行の際にそのプログラム内のどのデータ・オブジェクトがアクセスされないかを判断し、このようなオブジェクトによって使用される記憶域を再利用することによって機能する。
ガーベッジ・コレクションは、もはや必要ではないオブジェクトのリリースについてプログラマがもはや心配しなくてもよいように、メモリの解放を自動化する。その結果、相当なプログラム設計努力の原因を回避することができる。その上、ガーベッジ・コレクションは、複数クラスのランタイム・エラー、たとえば、割り振り解除されたオブジェクトへの参照が使用されるダングリング・ポインタ・エラーの低減により、プログラミング言語をより安全なものにするのを支援する。
現在、ガーベッジ・コレクション済み言語(garbage-collectedlanguage)と呼ばれる多くのコンピュータ・プログラミング言語は、言語指定の一部として(たとえば、Java(登録商標)、C#、ほとんどのスクリプト言語)または効果的に実用的な実現(たとえば、ラムダ計算式(lambda calculus)のような形式言語)のためにガーベッジ・コレクションを必要とする。その他のコンピュータ・プログラミング言語は、手動メモリ管理とともに使用するために設計されているが、ガーベッジ・コレクション済み実現例(たとえば、C、C++)を有する。Modula−3などのその他のコンピュータ・プログラミング言語は、収集され、手動で管理されたオブジェクトについて個別のヒープを使用することにより、ガーベッジ・コレクションと手動メモリ管理の両方が同じアプリケーション内に共存できるようにしている。
追跡ガーベッジ・コレクタ(tracinggarbage collector)は、最も一般的なタイプのガーベッジ・コレクタである。追跡ガーベッジ・コレクタは、どのオブジェクトが到達可能または潜在的に到達可能であるかを判断し、次に残りのオブジェクトをすべて廃棄することに焦点を合わせている。到達可能なオブジェクトは、直接またはその他の到達可能なオブジェクトからの参照を介してそれに至るような何らかの名前がプログラム環境内に存在するオブジェクトとして定義することができる。より精密には、オブジェクトが到達可能になりうるのは2通りの方法のみである。第一に、区別された1組のオブジェクトが到達可能であると想定され、これらはルーツとして知られている。典型的には、これらは、呼び出しスタック内の任意の場所から参照されたすべてのオブジェクト、すなわち、現在呼び出されている関数内のすべてのローカル変数およびパラメータと、任意のグローバル変数を含む。第二に、到達可能なオブジェクトから参照された任意のものはそれ自体が到達可能である。これは推移性(transitivity)と呼ばれる。
追跡ガーベッジ・コレクタは、それがガーベッジ・コレクション・サイクルを実行するアルゴリズムを使用する。記憶域を再利用する必要があるとコレクタが判断するかまたはその必要があるとコレクタに通知されたときにサイクルが開始され、これは特にシステムのメモリが少ないときに発生する。すべての追跡ガーベッジ・コレクタは、3色マーキング抽象化(tri-color marking abstraction)の何らかの変形を実現するが、マーク・アンド・スイープ(mark-and-sweep)・コレクタなどの単純なコレクタはこの抽象化を明示的なものにしない場合が多い。3色マーキングは以下のように機能する。
第一に、サイクル中の進行状況を維持するために使用される初期のホワイト、グレー、ブラックのセットが作成される。最初に、ホワイト・セット(white set)または不良セット(condemnedset)は、そのメモリをリサイクルさせるための候補であるオブジェクトのセットである。ブラック・セット(black set)は、ホワイト・セット内のオブジェクトへの参照を含まないことが容易に証明できるオブジェクトのセットである。多くの実現例では、ブラック・セットは空の状態から始まる。グレー・セット(grey set)は、ホワイト・セット内のオブジェクトへの参照を含む場合もあれば含まない場合もある、残りのすべてのオブジェクトである。これらのセットは、ルート・セットを含むシステム内のすべてのオブジェクトが精密に1つのセット内にあるようにメモリをパーティション化する。
その後、グレー・セット内のオブジェクトが選択される。このオブジェクトが直接参照するすべてのホワイト・オブジェクトを「グレー化する(greying)」、すなわち、そのオブジェクトが参照するすべてのホワイト・オブジェクトおよびそれらが参照するオブジェクトをブラック化することにより、このオブジェクトはブラック化、すなわち、ブラック・セットに移動される。このステップは、グレー・セットが空になるまで繰り返される。グレー・セット内にそれ以上オブジェクトが存在しなくなると、ホワイト・セット内に残っているすべてのオブジェクトは到達可能ではないと証明可能であり、それらによって占有される記憶域は再利用することができる。
3色マーキング・アルゴリズムにより、どのブラック・オブジェクトも直接、ホワイト・オブジェクトを指し示すことはない。これは、グレー・セットが空になると、ホワイト・オブジェクトを安全に破棄できることを保証するものである。
到達不能なセット、すなわち、グレー・セットが空になったときに結果として得られるホワイト・セットが決定されると、ガーベッジ・コレクタは、単純に到達不能なオブジェクトをリリースし、他のものはすべてそのままの状態にすることができる。代わって、ガーベッジ・コレクタは、到達可能なオブジェクトの一部または全部を新しいメモリ域にコピーし、それらのオブジェクトへのすべての参照を必要に応じて更新することができる。これらは、それぞれ「非移動(non-moving)」および「移動(moving)」ガーベッジ・コレクタと呼ばれる。
また、追跡コレクタは、コレクション・サイクル中に3つのセットのオブジェクト(ホワイト、グレー、およびブラック)がどのように維持されるかを考慮することによってカテゴリ化することもできる。最も直截的な手法はセミスペース・コレクタ(semi-space collector)であり、これは、メモリを「移動元スペース(from space)」および「移動先スペース(tospace)」にパーティション化する、移動ガーベッジ・コレクション方式である。最初に、それが一杯になり、ガーベッジ・コレクション・サイクルがトリガされるまで、オブジェクトは「移動先スペース」内に割り振られる。ガーベッジ・コレクションの始めに、「移動先スペース」は「移動元スペース」になり、逆もまた同様である。ルート・セットから到達可能なオブジェクトは「移動元スペース」から「移動先スペース」にコピーされる。次に、これらのオブジェクトはスキャンされ、すべての到達可能なオブジェクトが「移動先スペース」にコピーされてしまうまで、それらが指し示すすべてのオブジェクトが「移動先スペース」にコピーされる。プログラムが実行を続けると、この場合も、それが一杯になるまで新しいオブジェクトが「移動先スペース」から割り振られ、プロセスが繰り返される。この手法は、コピー・プロセス中に3つのオブジェクト・カラー・セットが暗黙のうちに構築されるので、概念上の簡潔さという利点を有するが、おそらくどのコレクション・サイクルでもフリー・メモリの非常に大きい連続領域が必要になる可能性があるという欠点も有する。
一般に、「マーク・アンド・スイープ」ガーベッジ・コレクタは、それがホワイトであるかブラックであるかを記録するために、各オブジェクトとともに1ビットまたは2ビットを維持する。グレー・セットは、個別のリストとして維持されるか、または他のビットを使用して識別される。コレクション・サイクル中に参照ツリーがトラバースされるにつれて、これらのビットは、現行状態、すなわち、ホワイト、ブラック、またはグレーを反映するようにコレクタによって操作される。マーク・アンド・スイープ戦略は、到達不能なセット、すなわち、グレー・セットが空になった後に結果として得られるホワイト・セットが決定されると、移動または非移動のコレクション戦略を追求できるという利点を有する。使用可能メモリが許すように、この戦略選択はランタイムでも行うことができる。
ガーベッジ・コレクタのいくつかの実現例では、マーク・アンド・スイープ・ガーベッジ・コレクタは、到達可能であることが分かっているが、その内容がまだ検査されていないオブジェクト(すなわち、「グレー」オブジェクト)を保管するために明示スタック(explicit stack)を使用する。スタック内の各項目は、基底アドレスと、その開始アドレスに対して可能なポインタの位置を示すマーク記述子とを含む。マーク記述子は、典型的には、単純な長さ指定かまたはポインタ位置を記述するビット・ベクトルのいずれかの形を取る。
上記に加えて、ガーベッジ・コレクタは、それらが動作するシステムの他の動作にどのように割り込むかに関して様々なタイプのものになる可能性がある。たとえば、「ストップ・ザ・ワールド(stop-the-world)」ガーベッジ・コレクタは、コレクション・サイクルを実行するためにプログラムの実行を完全に停止し、したがって、コレクタが実行されている間は新しいオブジェクトが割り振られず、オブジェクトが突然到達不能にならないことを保証する。これは、コレクション・サイクルが実行されている間はプログラムが有用な作業をまったく実行できないという明らかな欠点を有する。
「増分(incremental)」ガーベッジ・コレクタは、その作業とメイン・プログラムからのアクティビティをインタリーブすることにより、この中断(disruption)を低減するように設計されている。メイン・プログラムがガーベッジ・コレクタを妨害しないことならびにその逆を保証するために慎重な設計が必要である。たとえば、プログラムが新しいオブジェクトを割り振る必要がある場合、ランタイム・システムは、コレクション・サイクルが完了するまでそれを中断するか、または新しい到達可能なオブジェクトが存在することを何とかしてガーベッジ・コレクタに通知する必要がある可能性がある。
最後に、同時(concurrent)ガーベッジ・コレクタは、対称型マルチプロセッシング・マシン上のメイン・プログラムと同時にリアルタイムで実行することができる。正しさを保証するために、複合ロック体制(complex locking regime)が必要である場合もある。その上、キャッシュ問題も、これを想像以上に役に立たないものにしている。それにもかかわらず、同時GCは、高いパフォーマンス要件を有するSMPアプリケーションには望ましいものである可能性がある。
2000年にヒューレット・パッカード社から発行されたHP Labs Technical Report 2000−165に掲載されたBoehmの「Fast Multiprocessor Memory Allocation and Garbage Collection」
上述のガーベッジ・コレクション・メカニズムは、プロセッサの一様性が存在するデータ処理環境、たとえば、単一プロセッサまたは対称型マルチプロセッシング(SMP:symmetric multiprocessing)システムのために開発されたものである。このようなガーベッジ・コレクション・メカニズムを非一様データ処理システム、すなわち、非SMPコプロセッサ・システム、ソフトウェア管理のメモリ・システム、非一様メモリ・アクセス(NUMA:Non-Uniform Memory Access)システムなどの異機種システムに適用しようと試みると、いくつかの問題が発生する可能性がある。アドレス・フォーマット問題、アドレス変換問題、メモリ位置へのポインタが変更されないことを保証するためにガーベッジ・コレクションが実行される時期、非一様メモリ待ち時間などは、異機種システムによってもたらされる問題のうちのいくつかに過ぎない。
例示的な諸実施形態は、異機種システムにおいてガーベッジ・コレクションを実行するためのシステムおよび方法を提供する。いくつかの例示的な諸実施形態では、異機種マルチプロセッサ・システム内の複数のプロセッサにわたってガーベッジ・コレクション動作が分散される。他の例示的な諸実施形態では、異機種マルチプロセッサ・システム内の単一プロセッサによってガーベッジ・コレクション動作を実行することができる。この単一ガーベッジ・コレクション・プロセッサの実施形態では、ガーベッジ・コレクション・プロセッサは、ガーベッジ・コレクションのみの実行に専念する場合もあれば、他のサービス・タスクに加えてガーベッジ・コレクションを実行する場合もある。
複数のプロセッサにわたってガーベッジ・コレクションが分散される例示的な一実施形態を考慮すると、各プロセッサは、システム・メモリのあるチャンク(chunk)、すなわち、問題のプログラム用のヒープのある部分と、グローバル・マーク・キュー(global mark queue)のある部分とを入手し、それらをそのプロセッサに関連するローカル・ストア(local store)に保管する。したがって、各プロセッサは、グローバル・マーク・キューの異なる部分、すなわち、典型的にはグローバル・マーク・キューのヘッドのある部分のコピーと、それが操作するシステム・メモリの対応する異なる部分のコピーとを有することになる。グローバル・マーク・キューのその部分で参照されるメモリ・オブジェクトは、ローカル・ストアに保管されたメモリのチャンク内に存在するメモリ・オブジェクトへのポインタまたはアドレスを含むローカル・マーク・スタックに追加される。
「マーク・アンド・スイープ」動作は、各プロセッサ内のローカル・マーク・スタックの初期内容を提供するグローバル・マーク・キューの対応する部分で参照されるシステム・メモリ・オブジェクトに基づいて、それぞれのプロセッサによってシステム・メモリの各チャンクについて実行される。一般に当技術分野で知られているように、このような「マーク・アンド・スイープ」動作は、他のメモリ・オブジェクトによるメモリ・オブジェクトへの参照を反復してトラバースし、到達可能なすべてのメモリ・オブジェクトにマークを付けることを伴う。
一度にシステム・メモリの1つのチャンクのみについて操作する場合、このようなトラバーサルの結果、操作中のシステム・メモリのチャンク内にないメモリ・オブジェクトが参照される場合が多い。到達可能なメモリ・オブジェクトおよび到達不能なメモリ・オブジェクトへの参照に加えて、このような参照を追跡しなければならない。
様々なタイプのメモリ・オブジェクトを追跡するために、例示的な諸実施形態のローカル・ガーベッジ・コレクション動作は、ローカル・マーク・スタックと非ローカル・マーク・スタックの両方を使用する。ローカル・マーク・スタックは、プロセッサのローカル・ストアにロードされるシステム・メモリのチャンク内にあるメモリ・オブジェクトへのポインタまたはアドレスを保管する。非ローカル・マーク・スタックは、他のメモリ・オブジェクトによるなど、ソフトウェア・プログラムによって参照されるが、ローカル・ストアにロードされるシステム・メモリの現行チャンク内にないメモリ・オブジェクトへのポインタまたはアドレスを保管する。
最初に、グローバル・マーク・キューのその部分は、ローカル・ストアにロードされるシステム・メモリのチャンク内に存在するメモリ・オブジェクトへのポインタでローカル・マーク・スタックを構成するために使用される。「マーク・アンド・スイープ」動作はローカル・マーク・スタック内のメモリ・オブジェクトへのポインタについて実行されるので、ローカル・ストアにロードされるシステム・メモリのチャンク内に存在しない他のメモリ・オブジェクトへの他のポインタが検出される可能性がある。このようなポインタが検出されると、そのポインタは非ローカル・マーク・スタックに追加される。ローカル・ストア内のシステム・メモリのチャンクで到達可能と判明したメモリ・オブジェクトは、そのメモリ・オブジェクト用のマーク記述子またはそのシステム・メモリのチャンク用のマーク記述子において到達可能というマークが付けられる。このプロセスは、ローカル・マーク・スタック内の各ポインタまたはアドレスごとに続行される。
ローカル・ストア内のシステム・メモリの対応するチャンクに基づいて、ローカル・マーク・スタックを構成するために使用されるグローバル・マーク・キューのその部分で参照のマーキングを実行した後、その参照またはポインタは、マーク記述子において到達可能または到達不能というマークが付けられるか、あるいはその参照がシステム・メモリのそのチャンク内にないメモリ・オブジェクトに対するものである場合に第2のマーク・スタック内に配置される。
メモリ・オブジェクトへのポインタをローカル・マーク・スタックおよび非ローカル・マーク・スタック内に配置することは、たとえば、到達可能であることが分かっているが、その内容がまだ検査されていないオブジェクト(すなわち、「グレー」オブジェクト)を保管するために明示スタックを使用することによって実行することができる。スタック内の各項目は、基底アドレスと、その開始アドレスに対して可能なポインタの位置を示すオフセットとを含むことができる。
マーク・アンド・スイープ動作中に到達したメモリ・オブジェクトに関する情報は、好ましくは、メモリ・オブジェクトの到達可能性(reachability)を示す、メモリ・オブジェクト、システム・メモリ、またはより具体的には、システム・メモリの各ページに関連するビット・マップまたはその他の適切な記述子テーブルを使用して、マーク記述子内に保管される。いくつかの諸実施形態では、たとえば、そのメモリ・オブジェクトが存在するメモリ・ページ用のページ記述子内のメモリ・オブジェクトに関連する適切なビットを使用することができる。
動作中に、そのプロセッサ用のグローバル・マーク・キューのその部分で参照されるメモリ・オブジェクトは最初にローカル・マーク・スタック内に配置される。次に、そのプロセッサのローカル・ストアにロードされるシステム・メモリのチャンク内のこれらのメモリ・オブジェクトの到達可能性を決定するために、マーク・アンド・スイープ動作を使用して、ローカル・マーク・スタック内の項目がチェックされる。到達可能である元のメモリ・オブジェクトに関連する他のメモリ・オブジェクトを決定するために、既知のマーク・アンド・スイープ動作と同様に、これらのメモリ・オブジェクトに関連する参照も同様にチェックされる。例示的な諸実施形態では、他の関連メモリ・オブジェクトをまったく備えていないメモリ・オブジェクトが検出されるまで、あるいはローカル・ストアにロードされるシステム・メモリのそのチャンク内に存在しないメモリ・オブジェクト(以下、「非ローカル(non-local)」メモリ・オブジェクトという)への参照が検出されるまで、このプロセスが繰り返される。後者の場合、「非ローカル」メモリ・オブジェクトへの参照は、非ローカル・マーク・スタックに追加され、対応するマーク記述子において到達可能というマークが付けられない。
ローカル・マーク・スタックを構成するために使用されるグローバル・マーク・キューのその部分内のすべてのシステム・メモリ・オブジェクトがプロセッサによってチェックされ、したがって、その関連メモリ・オブジェクトが上述のようにチェックされ、到達可能というマークが付けられないシステム・メモリ・オブジェクトがグローバル・マーク・キューのその部分にある場合に、そのシステム・メモリ・オブジェクトは、メモリのその部分を再利用させるための候補であるシステム・メモリ・オブジェクトになる。しかし、グローバル・マーク・キューの他の部分にシステム・メモリ・オブジェクトからのこれらのオブジェクトへの他の参照が存在する可能性があり、それが特定の実施形態に応じて異機種マルチプロセッサ・システム内の他のプロセッサによって処理される場合もあれば、処理されない場合もあるので、このシステム・メモリはこの時点で再利用することはできない。到達可能として示されるメモリ・オブジェクトは、そのシステム・メモリを再利用できないオブジェクトである。これらのメモリ・オブジェクトに関する情報は、システム・メモリ内に保管されたすべてのメモリ・オブジェクトに関する到達可能性を要約するグローバル・マーク記述子データ構造にマージして戻される。
その参照がローカル・マーク・スタックまたは非ローカル・マーク・スタックの一部であるオブジェクトは、「グレー」メモリ・オブジェクト、すなわち、到達可能であるが、それが他のどのオブジェクトに到達できるかについてまだ分析されていないオブジェクトである。ガーベッジ・コレクションを完了するために、オブジェクトの「グレー」セットは空でなければならず、すなわち、任意の処理エレメント内のいずれかのローカルまたは非ローカル・マーク・スタック上あるいはグローバル・マーク・キュー内にいかなるアドレスも存続することができない。これを実施するために、理想的には、ローカル・マーク・スタックが空になり、非ローカル・マーク・スタックがグローバル・マーク・スタックにマージして戻されるまで、ローカル・マーク・スタック内のすべての参照が分析される。
非ローカル・マーク・スタック内のメモリ・オブジェクトへの参照は、依然として追跡する必要のあるグローバル・マーク・キューの部分および他のプロセッサの他の非ローカル・マーク・スタックとマージされ、それにより、グローバル・マーク・キューの更新済み「追跡対象(to be traced)」部分が生成される。その結果、システム・メモリのチャンクのローカル・ストア・コピー内にないメモリ・オブジェクトへの参照は、システム・メモリの他のチャンクとともに、同じプロセッサまたは異なるプロセッサによって再チェックすることができる。このプロセスは、グローバル・マーク・キューの更新済み「追跡対象」部分がシステム・メモリ・オブジェクトへの参照をまったく含まなくなるまで繰り返すことができる。
グローバル・マーク・キューの更新済み「追跡対象」部分にシステム・メモリ・オブジェクトへの参照がそれ以上存在しない場合、システム・メモリ・オブジェクトへのそれぞれの参照は、到達可能または到達不能というマークが付けられている。グローバル・マーク・キューの「到達不能」部分内のシステム・メモリ・オブジェクトへのこのような参照は、そのシステム・メモリを再利用できるシステム・メモリ・オブジェクトに関連付けられている。他のすべてのシステム・メモリ・オブジェクトに関連するシステム・メモリは、ソフトウェア・プログラムによって到達可能であり、したがって、再利用されない。次に、グローバル・マーク・スタックの「追跡済み(traced)」部分内のシステム・メモリ・オブジェクトに関連するシステム・メモリを再利用するために、再利用プロセスを実行することができる。このような再利用プロセスは一般に当技術分野で知られているものである。
例示的な一実施形態では、マルチプロセッサ・データ処理システムにおいて共用メモリについてガーベッジ・コレクション動作を実行するための方法が提供される。この方法は、マルチプロセッサ・データ処理システムのプロセッサ内で共用メモリのある部分に対応するグローバル・マーク・キューのある部分をロードするステップを含むことができる。マーキング動作は、そのプロセッサに割り当てられたグローバル・マーク・キューのその部分内のメモリ・オブジェクトへの参照に基づいて、共用メモリのその部分について実行することができ、それにより、ガーベッジ・コレクション動作の一部としてその関連メモリを再利用できない到達可能なメモリ・オブジェクトが識別される。この方法は、ガーベッジ・コレクション動作の一部としてさらに処理するために、マーキング動作中に、そのプロセッサに割り当てられた共用メモリのその部分内にないメモリ・オブジェクトへの参照を識別するステップをさらに含むことができる。グローバル・マーク・キューのその部分は、グローバル・マーク・キューのある部分全体(entire portion)より小さい可能性がある。グローバル・マーク・キューのその部分に対応する共用メモリのその部分は、共用メモリのある部分全体より小さい可能性がある。
共用メモリのある部分に対応するグローバル・マーク・キューのある部分をロードするステップは、最初に、グローバル・マーク・キューのその部分内のメモリ・オブジェクトへの参照に基づいて、ローカル・マーク・スタックを構成するステップを含むことができる。グローバル・マーク・キューのその部分に対応する共用メモリのある部分は、プロセッサのローカル・ストアにロードすることができる。マルチプロセッサ・データ処理システムの複数のプロセッサの各プロセッサは、グローバル・マーク・キューの種々の部分と共用メモリの対応する種々の部分とをロードし、グローバル・マーク・キューの種々の部分内のメモリ・オブジェクト参照に基づいて、共用メモリの種々の部分についてマーキング動作を実行することができる。
メモリ・オブジェクトへの参照に基づいて、共用メモリのある部分についてマーキング動作を実行するステップは、共用メモリのその部分内にないメモリ・オブジェクトへの参照が識別されるまで、グローバル・マーク・キューのその部分内のメモリ・オブジェクト参照と従属メモリ・オブジェクト(dependent memory object)への参照を追跡するステップを含むことができる。共用メモリのその部分内にあるメモリ・オブジェクトへの参照は、ローカル・マーク・スタックに保管することができる。共用メモリのその部分内にないメモリ・オブジェクトへの参照は、非ローカル・マーク・スタックに保管することができる。
この方法は、ローカル・マーク・スタックに関連するローカル・マーク記述子データ構造をグローバル・マーク記述子データ構造とマージするステップをさらに含むことができる。また、この方法は、非ローカル・マーク・スタックをグローバル・マーク・キューの「追跡対象」部分とマージするステップも含むことができる。グローバル・マーク・キューの「追跡対象」部分は、マーキング動作を実行することによって処理すべきメモリ・オブジェクト参照を含むことができる。ローカル・マーク記述子データ構造は、その参照がローカル・マーク・スタック内にあるメモリ・オブジェクトに関する到達可能性情報を含むことができる。グローバル・マーク記述子データ構造は、マルチプロセッサ・データ処理システムのプロセッサのローカル・マーク・スタック内で、共用メモリのある部分内にあるものとして識別されたメモリ・オブジェクトへのすべての参照を含むことができる。
マルチプロセッサ・データ処理システムは、制御プロセッサと少なくとも1つのコプロセッサとを有する異機種マルチプロセッサ・データ処理システムにすることができる。制御プロセッサと少なくとも1つのコプロセッサは、種々の命令セットを使用して動作することができる。グローバル・マーク・キューのある部分のロードと、マーキング動作の実行と、共用メモリのある部分内にないメモリ・オブジェクトへの参照の識別は、少なくとも1つのコプロセッサのうちの1つまたは複数のコプロセッサによって実行することができる。このロード、実行、および識別動作は、少なくとも1つのコプロセッサのうちの1つまたは複数のコプロセッサのメモリ・フロー・コントローラによって実行することができる。
他の例示的な諸実施形態では、コンピュータ可読プログラムを有するコンピュータ使用可能媒体を含むコンピュータ・プログラム(computer program product)が提供される。このコンピュータ可読プログラムは、コンピューティング・デバイス上で実行されると、方法の例示的な実施形態に関して上記で概説した動作のうちの様々な動作およびその動作の組み合わせをコンピューティング・デバイスに実行させるものである。
さらに他の例示的な実施形態では、ガーベッジ・コレクションを実行するためのシステムが提供される。このシステムは、それぞれが関連ローカル・ストアを有する複数のプロセッサと、その複数のプロセッサに結合された共用メモリとを有することができる。複数のプロセッサのうちの1つまたは複数のプロセッサは、方法の例示的な実施形態に関して上記で概説した動作のうちの様々な動作およびその動作の組み合わせを実行することができる。
上記その他の特徴および利点は、例示的な諸実施形態に関する以下の詳細な説明に記載されるか、あるいは、その詳細な説明を考慮すると当業者には明らかになるであろう。
本発明に特有と思われる新規な特徴は特許請求の範囲に示されている。しかし、本発明そのもの、ならびにその好ましい使用態様、追加の目的および利点は、添付図面に併せて読んだときに、例示的な一実施形態に関する以下の詳細な説明を参照することにより、最も良く理解されるであろう。
例示的な諸実施形態は、異機種システムにおいてガーベッジ・コレクションを実行するためのシステムおよび方法を提供する。例示的な諸実施形態のメカニズムは、ガーベッジ・コレクションを実行する必要がある任意の異機種マルチプロセッサ・システムで実現することができる。このような異機種マルチプロセッサ・システムの例としては、NUMAシステム、非SMPマルチプロセッサ・システムなどを含む。例示的な諸実施形態の模範的な諸態様を実現可能なこのような異機種マルチプロセッサ・システムの1つは、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ社から入手可能なセル・ブロードバンド・エンジン(CBE:Cell Broadband Engine)である。CBEアーキテクチャで実現されるメカニズムに関して例示的な諸実施形態を説明するが、これは単に模範的なものにすぎず、例示的な諸実施形態のメカニズムは本発明の精神および範囲を逸脱せずに他の異機種マルチプロセッサ・システムでも実現できることを認識されたい。
図1は、本発明の諸態様を実現可能なデータ処理システムの模範的なブロック図である。図1に図示されている模範的なデータ処理システムは、セル・ブロードバンド・エンジン(CBE)データ処理システムの一例である。本発明の好ましい諸実施形態に関する説明ではCBEが使用されるが、以下の説明を読んだときに当業者には容易に明らかになるように、本発明はこれに限定されない。
図1に図示されている通り、CBE100は、プロセッサ(PPU)116ならびにそのL1およびL2キャッシュ112および114を有するパワー・プロセッサ・エレメント(PPE:Power processor element)110と、それぞれがそれ専用の協同プロセッサ・ユニット(SPU:synergistic processor unit)140〜154、メモリ・フロー・コントロール155〜162、ローカル・メモリまたはストア(LS)163〜170、およびバス・インターフェース・ユニット(BIUユニット)180〜194を有する複数の協同プロセッサ・エレメント(SPE:synergistic processor element)とを含み、そのバス・インターフェース・ユニットは、たとえば、組み合わせ直接メモリ・アクセス(DMA:direct memory access)、メモリ管理ユニット(MMU:memory management unit)、およびバス・インターフェース・ユニットにすることができる。高帯域幅内部エレメント相互接続バス(EIB:element interconnect bus)196、バス・インターフェース・コントローラ(BIC:bus interface controller)197、およびメモリ・インターフェース・コントローラ(MIC:memory interface controller)198も設けられている。
CBE100は、図1に描かれているエレメントのそれぞれが単一のマイクロプロセッサ・チップ上に設けられるような1チップ上のシステム(system-on-a-chip)にすることができる。その上、CBE100は、SPUのそれぞれがシステム内の他のSPUのそれぞれから種々の命令を受け取ることができる異機種処理環境である。その上、SPU用の命令セットはPPUのものとは異なり、たとえば、PPUは縮小命令セット・コンピュータ(RISC:Reduced Instruction Set Computer)ベースの命令を実行することができ、SPUはSIMDベクトル命令を実行する。
SPEは、EIB196を介して相互に結合され、さらにL2キャッシュ114に結合されている。加えて、SPEは、EIB196を介してMIC198およびBIC197に結合されている。MIC198は、共用メモリ199への通信インターフェースを提供する。BIC197は、CBE100と他の外部バスおよびデバイスとの間の通信インターフェースを提供する。
PPE110はデュアル・スレッド(dualthreaded)PPE110である。このデュアル・スレッドPPE110と8つのSPEの組み合わせにより、CBE100は10個の同時スレッドと128個を超える未解決のメモリ要求を処理可能な状態になる。PPE110は、計算ワークロードのほとんどを処理する他の8つのSPE用のコントローラとして動作する。PPE110を使用して従来のオペレーティング・システムを実行することができ、SPEは、たとえば、ベクトル化された浮動小数点コード実行を実行する。
SPEは、協同プロセッサ・ユニット(SPU)140〜154と、メモリ・フロー・コントロール・ユニット155〜162と、ローカル・メモリまたはストア163〜170と、インターフェース・ユニット180〜194とを有する。模範的な一実施形態のローカル・メモリまたはストア163〜170は、PPE110にとって見えるものであり、ソフトウェアによって直接アドレス指定可能な256KBの命令およびデータ・メモリを有する。
PPE110は、複雑な動作内の各ステップを処理するためにSPEをまとめてチェーニングして、SPEに小さいプログラムまたはスレッドをロードすることができる。たとえば、CBE100を取り入れたセットトップ・ボックスは、DVDの読み取り、ビデオおよびオーディオのデコード、ならびに表示のためのプログラムをロードすることができ、最終的に出力ディスプレイ上に送られるまでデータはSPEからSPEに渡されるであろう。4GHzの場合、各SPEは理論上、32GFLOPSのパフォーマンスを示し、PPE110は同様のレベルのパフォーマンスを有する。
メモリ・フロー・コントロール・ユニット(MFC)155〜162は、システムの残りおよびその他のエレメントへのSPU用のインターフェースとして機能する。MFC155〜162は、主記憶装置(main storage)とローカル記憶装置(localstorage)163〜170との間のデータ転送、保護、および同期のための基本メカニズムを提供する。論理的には、1つのプロセッサ内の各SPUごとに1つのMFCが存在する。いくつかの実現例は、複数のSPU間で単一MFCのリソースを共用することができる。このような場合、そのMFCについて定義されたすべての機能およびコマンドは、各SPU用のソフトウェアにとって独立しているように見えなければならない。MFCを共用することによる効果は、実現例依存機能およびコマンドに限定される。
図2は、本発明の模範的な一実施形態による典型的なメモリ・フロー・コントロール(MFC)ユニット200の模範的なブロック図である。この模範的な実施形態では、MFC200は、SPUへの2つのインターフェース210および212と、バス・インターフェース・ユニット(BIU)220への2つのインターフェース214および216と、任意選択のSL1キャッシュ230への2つのインターフェース222および224とを有する。SPUインターフェース210および212は、SPUチャネル・インターフェース210と、SPUローカル記憶装置インターフェース212である。SPUチャネル・インターフェース210により、SPUはMFC機能にアクセスし、MFCコマンドを発行することができる。SPUローカル記憶装置インターフェース212は、SPU内のローカル記憶装置にアクセスするためにMFC200によって使用される。BIU220への一方のインターフェース216により、MFC機能へのメモリ・マップI/O(MMIO:Memory Mapped I/O)アクセスが可能になる。また、このインターフェース216により、他のプロセッサもMFCコマンドを発行することができる。MMIOを使用して発行されたコマンドは、MFCプロキシ・コマンド(MFC proxy command)と呼ばれる。
SL1キャッシュへのインターフェース222および224は主にデータ転送用である。一方のインターフェース222は主記憶装置内のアドレス変換テーブルにアクセスするためにMFC200によって使用され、もう一方のインターフェース224は主記憶装置とローカル記憶装置との間でデータを転送するために使用される。
図2に図示されている通り、典型的なMFC内の主要ユニットとしては、メモリ・マップ入出力(MMIO:memory mapped input/output)インターフェース240と、MFCレジスタ250と、DMAコントローラ260とを含む。MMIOインターフェース240は、SPUのMFC機能をシステムの実アドレス・スペースにマッピングする。これにより、システム内の任意のプロセッサまたは任意のデバイスからMFC機能へのアクセスが可能になる。加えて、MMIOインターフェース240は、SPUのローカル記憶装置を実アドレス・スペースにマッピングするように構成することができる。これにより、システム内の任意のプロセッサまたは任意のデバイスからローカル記憶装置への直接アクセスが可能になり、ローカル・ストア間の転送ならびにI/O装置がSPUのローカル記憶装置領域に直接アクセスする能力を可能にする。
MFCレジスタ・ユニット250は、MFC機能のほとんどを含むものである。本発明にとって特に重要であるのは、MFCレジスタ・ユニット250がSPUローカル記憶装置限界レジスタ機能(limit register facility)を含むことである。この機能により、以下により詳細に説明するように、特権ソフトウェアはSPEのローカル記憶装置のサイズに関する限界を設定することができる。
同期およびデータの転送は一般にMFC200内のDMAC260の役割である。DMAC260は、SPUのローカル記憶装置と主記憶装置領域との間でデータを移動することができる。任意選択で、そのデータはSL1キャッシュにキャッシュすることができる。
SPEおよびPPEは、コマンド・キュー270および280の一方によりMFCへのDMAコマンド要求をキューイングすることにより、これらのDMA動作を実行するようMFC200に指示する。SPEによって発行されたコマンドはMFC SPUコマンド・キュー280にキューイングされる。PPEによって発行されたコマンドはMFCプロキシ・コマンド・キュー270にキューイングされる。MFCはメモリ・マッピング・ユニット(MMU:memory mapping unit)290を使用して、DMA転送に必要なすべてのMFCアドレス変換およびMFCアクセス保護チェックを実行する。
MFCコマンドは、SPU内で実行されるコードが主記憶装置にアクセスし、システム内の他のプロセッサおよびデバイスとの同期を維持できるようにする、主な方法を提供する。任意選択のキャッシュを管理するためのコマンドも提供される。MFCコマンドは、SPU上で実行されるコードによるかまたはPPEなどの他のプロセッサまたはデバイス上で実行されるコードによって発行することができる。関連SPU上で実行されるコードは、一連のチャネル命令を実行してMFCコマンドを発行する。他のプロセッサまたはデバイス上で実行されるコードは、一連のメモリ・マップI/O(MMIO)転送を実行して、SPEに対してMFCコマンドを発行する。発行されたコマンドは、コマンド・キュー270および280のうちの一方にキューイングされる。
一般に、コマンドは、MFCレジスタ・ユニット250のMMIOレジスタを使用するかまたは関連SPUによって実行されるチャネル命令により、キューイングすることができる。MMIO方法は、SPEのために主記憶装置と関連ローカル記憶装置との間のデータの転送を制御するためにPPEが使用するためのものである。データを転送するMFCコマンドは、MFC DMAコマンドと呼ばれる。MFC DMAコマンドに関するデータ転送方向は常にSPEの観点から参照される。したがって、SPE内に(主記憶装置からローカル記憶装置に)データを転送するコマンドはgetコマンドと見なされ、SPE外へ(ローカル記憶装置から主記憶装置に)データを転送するコマンドはputコマンドと見なされる。
データを転送するコマンドは、MFC DMAコマンドと呼ばれる。これらのコマンドは、ローカル記憶装置領域と主記憶装置領域との間のDMA転送に変換される。各MFCは、典型的には、同時に複数のDMA転送をサポートすることができ、複数のMFCコマンドを維持し処理することができる。各MFC DMAデータ転送コマンド要求は、ローカル記憶装置アドレス(LSA:local storage address)および有効アドレス(EA:effective address)の両方を伴う。ローカル記憶装置アドレスは、その関連SPUのローカル記憶装置領域のみを直接アドレス指定することができる。有効アドレスは、すべてのSPUローカル記憶装置領域が実アドレス・スペース内に別名を付けられる場合にそれらのSPUローカル記憶装置領域を含む主記憶装置を参照できるという点で、より一般的に適用される。
例示的な諸実施形態は、上述のセル・ブロードバンド・エンジン(CBE)などの異機種マルチプロセッサ・システムにおいてガーベッジ・コレクション動作を実行するためのメカニズムを提供する。例示的な諸実施形態のメカニズムを使用可能な他の異機種マルチプロセッサ・システムの模範的なものとしてCBEを考慮すると、以下に記載する例示的な諸実施形態のガーベッジ・コレクション動作を実行するために、SPEのそれぞれにガーベッジ・コレクション・メカニズムを設けることができる。たとえば、ガーベッジ・コレクション・メカニズムは、SPEのメモリ・フロー・コントローラ(MFC)と統合されるハードウェア・エレメントまたはソフトウェア・エレメントあるいはその両方を有することができる。加えて、PPE110には、ガーベッジ・コレクションを実行するために同様のメカニズムを設けることができる。
いくつかの例示的な諸実施形態では、異機種マルチプロセッサ・システム、たとえば、CBE100内の複数のプロセッサ、たとえば、SPE120〜134およびPPE110にわたってガーベッジ・コレクション動作が分散される。他の例示的な諸実施形態では、異機種マルチプロセッサ・システム内の単一プロセッサ、たとえば、SPE134によってガーベッジ・コレクション動作を実行することができる。この単一ガーベッジ・コレクション・プロセッサの実施形態では、ガーベッジ・コレクション・プロセッサ、たとえば、SPE134は、ガーベッジ・コレクションのみの実行に専念する場合もあれば、他のサービス・タスクに加えてガーベッジ・コレクションを実行する場合もある。
例示的な諸実施形態に関する以下の説明では、区別なく使用される「システム・メモリ」および「共用メモリ」について言及することに留意されたい。このような言及は、システム・メモリまたは共用メモリのうち、問題の特定のプログラムに関するヒープとして機能する部分に言及するためのものである。したがって、共用メモリまたはシステム・メモリを使用し、メモリの動的割り振りのためにそれぞれが専用のヒープを有する多種多様なプログラムが異機種マルチプロセッサ・システム内で実行されている可能性がある。したがって、本明細書に記載するガーベッジ・コレクションは、関心のある特定のプログラムに割り振られたシステム・メモリまたは共用メモリに関して実行される。
複数のSPE120〜134にわたってガーベッジ・コレクションが分散される例示的な一実施形態を考慮すると、例示的な一実施形態では、PPE110は、共用メモリ199のうち、異機種プロセッサ・システムで実行されているプログラムによってもはや参照されないメモリ・オブジェクト(以下、「システム・メモリ・オブジェクト」という)に割り振られる部分を再利用するためにガーベッジ・コレクションを実行するようSPEに指示することができる。例示的な代替一実施形態では、SPE120〜134は、所定の基準、たとえば、しきい値未満である共用メモリ199内のフリー・スペースの量に基づいて、ガーベッジ・コレクションが必要であることを独立して決定することができ、それ自体でガーベッジ・コレクション動作を開始することができる。このような代替一実施形態では、ガーベッジ・コレクションの必要性を検出するSPE120〜134は、この必要性を他のSPE120〜134およびPPE110に伝達することができる。
PPE110または代わってSPE120〜134からの命令に応答して、SPE120〜134は、以下に記載するガーベッジ・コレクション動作を実行するために使用されるコレクション・スレッドを作成する(spawn)。SPE120〜134およびおそらくPPE110は、「ストップ・ザ・ワールド」タイプのガーベッジ・コレクション内などで他のスレッドの実行を停止し、ガーベッジ・コレクションを実行するために作成したコレクション・スレッドを実行する。
ガーベッジ・コレクションの一部として、PPE110は、実行中のプログラムに関する共用メモリ199内のメモリ・オブジェクトへの参照を含むグローバル・マーク・キューを生成する。このようなグローバル・マーク・キューの生成は一般に当技術分野で知られており、本明細書には詳細を示さない。
グローバル・マーク・キューは、たとえば、同じメモリ・ページ上に保管されたシステム・メモリ・オブジェクトへの参照が隣接項目としてグローバル・マーク・キュー内に表されるようなメモリ・ページ単位で編成することができる。このようにして、グローバル・マーク・キューの部分は共用メモリ199の部分に容易に関連付けることができる。
それぞれのSPE120〜134のコレクション・スレッドは、共用メモリ199のチャンクとグローバル・マーク・キューの対応するある部分を入手し、SPE120〜134に関連するローカル・ストア163〜170にそれを保管する。したがって、それぞれのSPE120〜134は、グローバル・マーク・キューの異なるある部分のコピーと、それが操作する共用メモリ199の対応する異なるチャンクのコピーとを有することになる。この説明に関連して、メモリの「チャンク」とは操作中のメモリの一領域である。好ましい一実施形態では、この領域は隣接し、同じ場所に位置しているが、他の諸実施形態では、メモリの「チャンク」は、システム・メモリまたは共用メモリ199内の論理的またはその他の点で関連する複数の部分のデータから構成することができる。
それぞれのSPE120〜134上で実行されるコレクション・スレッドは、グローバル・マーク・キューの対応する部分で参照されるシステム・メモリ・オブジェクトに基づいて、共用メモリ199のそれぞれのチャンクについて「マーク・アンド・スイープ」動作を実行する。グローバル・マーク・キューのうち、SPE120〜134によって検索される部分は、プログラムから、「マーク・アンド・スイープ」動作によってチェックすべきシステム・メモリ・オブジェクトへの参照、すなわち、ポインタを有する。それにより、関心のあるプログラムによってどのメモリ・オブジェクトが到達可能であり、どのメモリ・オブジェクトが到達不能であるかを識別するために「マーク・アンド・スイープ」動作中に追跡されるのは、これらの参照と、従属メモリ・オブジェクトへの参照である。
これらの参照またはポインタは、共用メモリ・アドレス・スペースを使用するものであり、したがって、現在チェック中の共用メモリ199のチャンクがSPE120〜134に関連するローカル・ストア163〜170内に存在するので、SPE120〜134に関するローカル・ストア・アドレス・スペースに変換する必要がある。このようなアドレス変換は、たとえば、共用メモリ199のアドレスを取り、ローカル・ストアに転送されるチャンクの基底アドレスを引き、ローカル・ストア・オフセットを加えることを伴う可能性がある。このアドレス変換により、グローバル・マーク・キューのその部分内のグローバル・アドレス・スペース・ポインタによって参照される同じシステム・メモリ・オブジェクトのローカル・ストア・アドレスが得られる。当業者であれば、本発明の精神および範囲を逸脱せずに例示的な諸実施形態とともにアドレス・スペース間の変換を行うその他の手段を使用できることを認識するであろう。
コレクション・スレッドによって実行される「マーク・アンド・スイープ」動作中に、グローバル・マーク・キューのその部分によって参照される初期メモリ・オブジェクトは、対応するローカル・ストア163〜170内にロードされる共用メモリ199のチャンク内に存在することになる。しかし、共用メモリ199のチャンクは、グローバル・マーク・キューのその部分内のポインタによって参照されない他のメモリ・オブジェクトを含む可能性があり、したがって、そのポインタがグローバル・マーク・キューの他の部分にあるメモリ・オブジェクトによって参照されないか、またはそのポインタがグローバル・マーク・キューの他の部分にある他のメモリ・オブジェクトによって参照されない場合に、「到達不能」になる可能性がある。
その上、「マーク・アンド・スイープ」動作中に、特定のSPEのローカル・ストア163〜170内にロードされる共用メモリ199のチャンク内に存在しない他のオブジェクトへの参照が検出される可能性がある。ローカル・ストア163〜170内にロードされる共用メモリ199のチャンク内の到達可能および到達不能メモリ・オブジェクトの追跡とともに、共用メモリ199の他のチャンク内のメモリ・オブジェクトへのこのような参照を追跡しなければならない。
様々なタイプのメモリ・オブジェクトを追跡するために、例示的な諸実施形態のコレクション・スレッドによって実行されるローカル「マーク・アンド・スイープ」動作は、SPE120〜134あたり2つのマーク・スタックを使用する。第1のマーク・スタック、すなわち、ローカル・マーク・スタックは、SPE120〜134のローカル・ストア163〜170内にロードされる共用メモリ199のチャンク内のソフトウェア・プログラムによって到達可能なメモリ・オブジェクトへのポインタまたは参照を保管する。ローカル・マーク・スタックは、共用メモリ199のそれに対応するチャンクとともにSPE内にロードされるグローバル・マーク・キューの部分によって構成される。マーク・アンド・スイープ動作中にトラバースされるのは、このローカル・マーク・スタックであり、ローカル・マーク・スタック内で参照される各メモリ・オブジェクトはマーキング動作により追跡され、それにより、ローカル・マーク・スタック内で参照されるメモリ・オブジェクトからのすべての到達可能なメモリ・オブジェクトにマークが付けられる。
第2のマーク・スタック、すなわち、非ローカル・マーク・スタックは、ソフトウェアプログラムによって参照されるが、ローカル・ストア163〜170内にロードされる共用メモリ199の現行チャンク内にないメモリ・オブジェクトへのポインタを保管する。メモリ・オブジェクトへのポインタまたはアドレスは、ローカル・マーク・スタック内で参照されるメモリ・オブジェクトの追跡中に非ローカル・マーク・スタックに追加される。すなわち、ローカル・マーク・スタック内で参照されるメモリ・オブジェクトによって到達可能なメモリ・オブジェクトの追跡中に、ローカル・ストアに保管された共用メモリ199のチャンク内にない他のメモリ・オブジェクトへの参照またはポインタが検出される可能性がある。このようなオカレンスに応答して、この「非ローカル」メモリ・オブジェクトへの参照またはポインタが非ローカル・マーク・スタックに追加される。
様々なスタック内にメモリ・オブジェクトへのポインタを配置することは、たとえば、到達可能であることが分かっているが、その内容がまだ検査されていないオブジェクト(すなわち、「グレー」オブジェクト)を保管するために明示スタックを使用することによって実行することができる。スタック内の各項目は、基底アドレスと、その開始アドレスに対して可能なポインタの位置を示すオフセットとを含む。オフセットは、典型的には、ポインタ位置を記述するために単純な長さ指定、ビット・ベクトルなどの形を取る。
メモリ・オブジェクトのそれぞれは、到達可能または到達不能としてメモリ・オブジェクトを識別する関連のマーク記述子を有することができる。各メモリ・オブジェクトに関するマーク記述子は、共用メモリ199のチャンク、共用メモリ199のページなどに関する一般的なマーク記述子の一部にすることができる。SPE120〜134のローカル・ストア163〜170内にコピーされたグローバル・マーク・キューのある部分の一部であるメモリ・オブジェクトであって、まだ追跡されていないものは、たとえば、これらのオブジェクトが到達不能であることを示すために、それぞれのマーク記述子が最初に「0」または「00」として設定されている可能性がある。その後、これらのマーク記述子値は、たとえば、「マーク・アンド・スイープ」動作のマーキング・フェーズ中に、メモリ・オブジェクトが到達可能であるという判断が行われたときに、「1」または「01」に設定することができる。
したがって、最初に、問題のプログラム用のヒープ内のすべてのメモリ・オブジェクトは、SPE120〜134に関するガーベッジ・コレクション動作の初期設定時に「到達不能」に設定することができる。グローバル・マーク・キューのある部分がSPEによって検索され、それに対応する共用メモリ199のチャンクがローカル・ストアにロードされると、グローバル・マーク・キューのその部分内のメモリ・オブジェクトに関するアドレスおよびオフセットがローカル・マーク・スタックに追加される。加えて、そのメモリ・オブジェクト用のマーク記述子は、共用メモリ199のチャンク用の一般的なマーク記述子データ構造に追加することができる。明瞭にするために、マーク記述子はローカル・マーク・スタックとは別個のデータ構造として図に示され、以下の説明で言及されることになるが、マーク記述子は、ローカル・マーク・スタックに追加された様々なメモリ・オブジェクト参照のためのローカル・マーク・スタック内の項目に関連付けられ、その一部になる場合もある。
最初にローカル・マーク・スタックを構成した後、「マーク・アンド・スイープ」ガーベッジ・コレクション動作のマーキング動作を使用して、ローカル・マーク・スタック内の次のメモリ・オブジェクトが識別され、追跡される。すなわち、ローカル・マーク・スタック内の次のメモリ・オブジェクトは、到達可能というマークが付けられ、「現行」メモリ・オブジェクトになる。「現行」メモリ・オブジェクトによって参照されるメモリ・オブジェクトは、ローカル・ストア内にロードされた共用メモリ199のチャンクから識別される。「現行」メモリ・オブジェクトによって参照されるメモリ・オブジェクトがローカル・ストア内の共用メモリ199のチャンク内にあるかどうかに関する判断が行われる。そこにある場合、これらのメモリ・オブジェクトに関するマーク記述子は「到達可能」状態に設定される。
ローカル・ストア内にロードされるチャンクとは異なる共用メモリ199のチャンク内のメモリ・オブジェクトを指し示す、メモリ・オブジェクトへの参照またはポインタがこのマーキング動作中に検出された場合、そのメモリ・オブジェクトへの参照は非ローカル・マーク・スタックに追加される。したがって、マーキング動作により、ローカル・マーク・スタック内のメモリ・オブジェクトへの参照は、それに関連するマーク記述子において、ローカル・ストア内の共用メモリ199のチャンク内で到達可能であるというマークが付けられる。ローカル・マーク・スタック内のメモリ・オブジェクトによって参照される他のメモリ・オブジェクトは、現在、ローカル・ストア内にある共用メモリ199のチャンク内で到達可能である場合もあれば、到達不能である場合もある。したがって、これらのメモリ・オブジェクトは、共用メモリ199のチャンク内で到達可能であることを示すためにそのマーク記述子が更新されている可能性があるか、あるいは、それらが実際にはローカル・ストア内の共用メモリ199のチャンク内で到達不能である場合にその参照が非ローカル・マーク・スタックに追加される可能性がある。
上述の通り、「マーク・アンド・スイープ」動作により、グローバル・マーク・キューのその部分内のすべてのシステム・メモリ・オブジェクトがSPE120〜134によってチェックされた場合、共用メモリ199のそのチャンクについて、未到達状態で存続している、たとえば、そのマーク記述子が「0」または「00」であるシステム・メモリ・オブジェクトは、メモリのその部分を再利用させるための候補である。しかし、特定の実施形態次第で、CBE100内の他のSPE120〜134によって処理される場合もあれば、処理されない場合もある、グローバル・マーク・キューの他の部分内のシステム・メモリ・オブジェクトからこれらのメモリ・オブジェクトへの参照が他にも存在する可能性があるので、この時点でこのシステム・メモリを再利用することはできない。
共用メモリ199のチャンク内で到達可能(すなわち、ローカル・マーク・スタックの処理中に到達)、共用メモリ199のチャンク内にない(すなわち、非ローカル・マーク・スタック内にある)、共用メモリ199のチャンク内で到達不能(すなわち、グローバル・マーク・キューのその部分に存続する可能性がある参照を有するか、またはすでに前に到達されている)というマークをシステム・メモリ・オブジェクトに付けた後、コレクション・スレッドは、非ローカル・マーク・スタック内のメモリ・オブジェクトへの参照を、依然として追跡する必要のあるグローバル・マーク・キューの部分とマージするためのマージ動作を実行し、それにより、グローバル・マーク・キューの更新済み「追跡対象」部分を生成する。その結果、共用メモリ199のチャンクのローカル・ストア・コピー内にないメモリ・オブジェクトへの参照は、共用メモリ199の他のチャンクとともに、同じかまたは異なるSPE120〜134によって再チェックすることができる。このプロセスは、グローバル・マーク・キューの更新済み「追跡対象」部分がシステム・メモリ・オブジェクトへの参照をまったく含まなくなるまで、繰り返すことができる。
加えて、コレクション・スレッドは、ローカル・マーク・スタックの処理から得られるメモリ・オブジェクトに関する到達可能性情報、たとえば、マーク記述子を、他のSPE120〜134の他のローカル・マーク・スタックの処理によって得られる到達可能性情報とマージし、グローバル・マーク記述子で収集されたグローバル到達可能性情報を生成する。グローバル・マーク記述子は、ソフトウェア・プログラムによって到達可能であり、したがって、そのシステム・メモリを再利用させることができないシステム・メモリ・オブジェクトを表す。グローバル・マーク記述子内に存在する参照を備えていないシステム・メモリ・オブジェクトはメモリ再利用のための候補である。
到達可能なメモリ・オブジェクトを示すローカル・マーク記述子とグローバル記述子とのマージは、1組のOR演算を実行することによって達成することができる。しかし、前掲文献中にBoehmによって記載されている通り、アトミック性(atomicity)を保証しなければならない。したがって、マージ動作は、そのメモリ・オブジェクトが問題のソフトウェア・プログラムによって到達可能であることを示すマージ済みの各メモリ・オブジェクトに関する単一項目が存在するように、メモリ・オブジェクト用のマーク記述子をマージする。すなわち、マージ動作は、同じメモリ・オブジェクトに関する重複項目を除去する。したがって、例示的な諸実施形態では、共通マーク記述子を更新する従来技術のガーベッジ・コレクタとは異なり、各マーク・スレッドは、問題のプログラムに関連するヒープ用のグローバル・マーク記述子にマージされるローカル・チャンク固有のマーク記述子を含む。
マージは、グローバル・マーク記述子へのローカル・マーク記述子の論理ORを実行するためにアトミック読み取り−変更−書き込みサイクル(atomic read-modify-write cycle)を実行するためのサポートを有する適応メモリ・フロー・コントローラ(MFC)によるか、特定の記述子マージ機能を含むように最適化されたMFCによるか、または記述子マップ上でソフトウェア・ロックを使用することによって実行することができる。このようなソフトウェア・ロックは、理想的には、短期間のマージ・プロセス中にのみ得られる。マージを最適化し、マージ・ロックに関する競合を低減するために、マーク記述子の領域に対応する複数のマージ・ロックを維持することができる。
最適化された一実施形態では、処理中のメモリのチャンクに関するマーク記述子は、グローバル・マーク記述子をコピーすることによって入手することができる。この最適化は、重複追跡の数を低減することにより、実行しなければならない追跡ステップの数を有利に低減する。また、この最適化は、例示的な一実施形態でライブロック(livelock)を防止するために使用することもできる。
他の最適化では、コピー動作を実行してローカル記述子の初期化バージョンを入手する、いかなるロックも得られない。この最適化は、追跡しマークを付けた到達可能位置への同時更新部分を見落とし、ロック同期オーバヘッドを除去することになろう。
非ローカル・マーク・スタックをグローバル・マーク・キューとマージしてグローバル・マーク・キューの更新済み「追跡対象」部分を生成するために、同様のマージ動作を実行することができる。非ローカル・スタックをグローバル・マーク・キューにマージするためのマージ動作は、本質的に、システム・メモリ・オブジェクトへのポインタを含むデータ構造を生成し、それぞれのシステム・メモリ・オブジェクトはデータ構造内の1つの項目のみを有する。すなわち、マージ動作は、それぞれのシステム・メモリ・オブジェクトが結果として得られるデータ構造に1回だけ現れるように、重複項目を除去する。この結果は、依然として「マーク・アンド・スイープ」動作によって追跡する必要のあるシステム・メモリ・オブジェクトのリストになる。
上記のプロセスは、SPE120〜134がそのSPE120〜134のローカル・ストアにコピーされたシステム・メモリのチャンクおよびグローバル・マーク・キューの部分についてその「マーク・アンド・スイープ」動作を完了するたびに、それぞれのSPE120〜134によって繰り返すことができる。システム・メモリ・オブジェクトへのいくつかの参照はグローバル・マーク・キューの「追跡対象」部分にマージで戻されるので、システム・メモリ・オブジェクトへの同じ参照が複数回チェックされる可能性があることを認識されたい。これにより何らかの効率の悪さがもたらされる可能性があるが、より効率的な並列「マーク・アンド・スイープ」動作では、システム・メモリ・オブジェクトの冗長チェックで経験されるわずかな効率の悪さを上回る相対パフォーマンスの利点が提供される。
グローバル・マーク・キューの更新済み「追跡対象」部分内にシステム・メモリ・オブジェクトへの参照がそれ以上存在しない場合、共用メモリ199内に存在する問題のソフトウェア・プログラム用のヒープ内のシステム・メモリ・オブジェクトへの各参照は、グローバル・マーク記述子内に到達可能というマークが付けられるか、または問題のソフトウェア・プログラムによって到達不能になる。マーク・プロセスによって到達されていないシステム・メモリ・オブジェクトへの参照は、共用メモリ199のそれに対応する部分を再利用できるオブジェクトである。グローバル・マーク・スタック内の他のすべてのシステム・メモリ・オブジェクトに関連する共用メモリ199の部分は、ソフトウェア・プログラムによって到達可能であり、したがって、再利用されない。
次に、グローバル・マーク記述子内に到達可能というマークを付けられていないシステム・メモリ・オブジェクトに関連するシステム・メモリを再利用するために、再利用プロセスを実行することができる。このような再利用プロセスは一般に当技術分野で知られており、したがって、このような再利用プロセスの詳細な説明は本明細書には示さない。
図3は、例示的な一実施形態によるガーベッジ・コレクションを実行するために使用可能なガーベッジ・コレクション・メカニズムの模範的な図である。図3に図示されているガーベッジ・コレクション・メカニズムは、たとえば、図1のSPE120〜134のメモリ・フロー・コントローラ(MFC)、すなわち、図2のMFC200などに統合することができる。このため、図3のガーベッジ・コレクション・メカニズムは、例示的な諸実施形態のガーベッジ・コレクション動作を実行するために、MFCレジスタ250,MMIOインターフェース240、MFCコマンド・キュー280などを使用することができる。
例示的な一実施形態では、ガーベッジ・コレクション・メカニズムは、グローバル・マーク・キューの部分と共用メモリの対応するチャンクを入手するためにMFCコマンドを使用し、グローバル・マーク・キューの部分はMFCレジスタ250に保管され、共用メモリのチャンクはMFCに関連するローカル・ストアに保管される。その上、「マーク・アンド・スイープ」動作ならびにマージ動作を実行するためにMFCコマンドを使用することができ、様々なマーク・スタックは、たとえば、MFCレジスタ250内にMFCによって維持される。
図3に図示されている通り、ガーベッジ・コレクション・エンジン300は、コントローラ310と、グローバル・マーク・キュー・インターフェース・モジュール320と、共用メモリ・インターフェース・モジュール330と、マーキング・モジュール340と、マーク記述子記憶装置345と、グローバル・マーク・キュー部分記憶装置350と、ローカル・ストア・インターフェース360と、ローカル・マーク・スタック記憶装置370と、非ローカル・マーク・スタック記憶装置380と、マージ・モジュール390とを含む。これらのエレメント310〜390は、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせとして実現することができる。例示的な一実施形態では、エレメント310〜340、360、および390は、1つまたは複数の処理エレメントによって実行される、MFC機能などのソフトウェア機能として実現され、エレメント345、350、370、および380は、メモリ、レジスタなどのハードウェア・エレメントとして実現することができる。代わって、図3に図示されているすべてのエレメントは、MFCまたはSPEのその他の部分に統合できるハードウェア装置としてあるいはSPE内の専用ユニットとして実現することができる。
コントローラ310は、ガーベッジ・コレクション・エンジン300の全体的な動作を制御し、他のエレメント320〜390の動作を調整する。グローバル・マーク・キュー・インターフェース・モジュール320は、例示的な諸実施形態によるガーベッジ・コレクション動作を実行する際にガーベッジ・コレクション・エンジン300による使用のためにグローバル・マーク・キューの部分を検索するためのメカニズムの提供を担当する。グローバル・マーク・キュー・インターフェース・モジュール320を介して検索されたグローバル・マーク・キューの部分は、グローバル・マーク・キューのこの部分内の参照についてガーベッジ・コレクション動作を実行する際に使用するために、グローバル・マーク・キュー部分記憶装置350に保管される。
共用メモリ・インターフェース・モジュール330は、ローカル・ストア・インターフェース360を介してローカル・ストアに保管するために共用メモリのある部分を検索するためのメカニズムの提供を担当する。検索された共用メモリの部分は、グローバル・マーク・キュー・インターフェース・モジュール320を介して検索されたグローバル・マーク・キューの部分に対応する。グローバル・マーク・キュー・インターフェース・モジュール320および共用メモリ・インターフェース・モジュール330は、グローバル・マーク・キューの適切なある部分と共用メモリの対応する部分を検索するために、コントローラ310内にプログラミングされたガーベッジ・コレクション方法によるコントローラ310の指示により、PPEと通信する。
マーキング・モジュール340は、グローバル・マーク・キュー部分記憶装置350内に保管されたグローバル・マーク・キューの部分内の参照のマーキングの実行を担当する。マーキング動作の一部として、グローバル・マーク・キュー・インターフェース・モジュール320を介してコントローラ310によって検索されたグローバル・マーク・キューの部分内のメモリ・オブジェクトへの参照は、ローカル・マーク・スタック記憶装置370に追加される。次に、これらの参照は、「マーク・アンド・スイープ」ガーベッジ・コレクション動作のマーク動作を使用して、マーキング・モジュール340によってチェックされ、それにより、ローカル・ストア内に保管された共用メモリのチャンク内の到達可能なメモリ・オブジェクトまたは共用メモリ・インターフェース・モジュール330およびローカル・ストア・インターフェース360を介して検索され、ローカル・ストア内に保管された共用メモリのチャンク内で到達不能なメモリ・オブジェクトあるいはその両方のメモリ・オブジェクトが識別される。メモリ・オブジェクトの反復追跡が実行されるにつれて検出される可能性があるメモリ・オブジェクト参照のうち、共用メモリの他のチャンク内のメモリ・オブジェクトへの参照であるものは、非ローカル・マーク・スタック記憶装置380に追加される。
ローカル・ストア内にロードされる共用メモリのチャンク内で到達可能なメモリ・オブジェクトは、そのメモリ・オブジェクトに対応するマーク記述子内で到達可能というマークが付けられる。共用メモリのチャンク用のマーク記述子は、マーク記述子記憶装置345に保管することができる。これらのマーク記述子は、それに関してガーベッジ・コレクションが実行されている問題のソフトウェア・プログラムに関連するヒープ全体に関するグローバル・マーク記述子に後でマージされるローカル・マーク記述子を構成する。
上述の方法によりマーキング・モジュール340がローカル到達可能メモリ・オブジェクトと非ローカル・メモリ・オブジェクトのマーキングを実行した後、マージ・モジュール390は、マーク記述子記憶装置345内のローカル・マーク記述子を他のSPEのスタックの他のローカル・マーク記述子とマージしてグローバル・マーク・スタックを生成するためにマージ動作を実行する。これらの参照が共用メモリの適切なチャンクで追跡できるように、マージ・モジュール390は、非ローカル・マーク・スタック380をグローバル・マーク・キューの「追跡対象」部分とさらにマージする。
図4は、例示的な一実施形態による分散ガーベッジ・コレクション動作を例示する模範的な図である。図4に図示されている通り、グローバル・マーク・キュー410は「クリア済み」部分412と「追跡対象」部分414とを有する。「クリア済み」部分412は、グローバル・マーク・キュー410のうち、1つまたは複数のSPE420〜426について実行された「マーク・アンド・スイープ」ガーベッジ・コレクション動作によって処理された共用メモリ・オブジェクトへの参照を含む部分である。グローバル・マーク・キューの部分はローカル「マーク・アンド・スイープ」ガーベッジ・コレクションのためにSPE420〜426に割り振られるので、グローバル・マーク・キューのこれらの部分はグローバル・マーク・キュー410の「クリア済み」部分412に追加される。
グローバル・マーク・キュー410の「追跡対象」部分414は、「マーク・アンド・スイープ」ガーベッジ・コレクション動作によってまだ処理されていないかまたは共用メモリ430の非ローカル部分内にあった共用メモリ・オブジェクトへの参照であると判断された共用メモリ・オブジェクトへの参照から構成される。グローバル・マーク・キュー410の「追跡対象」部分414の部分はガーベッジ・コレクションのためにSPE420〜426に割り振られるので、これらはグローバル・マーク・キュー410の「クリア済み」部分412に追加される。
図4に図示されている通り、各SPE420〜426は、グローバル・マーク・キュー410の「追跡対象」部分414からグローバル・マーク・キュー410のある部分415〜418を入手し、それはその後グローバル・マーク・キュー410の「クリア済み」部分412に追加される。好ましくは、これらの部分415〜418はグローバル・マーク・キュー410の順次部分であるが、これは例示的な諸実施形態の動作のために必要なものではない。
加えて、各SPE420〜426は、共用メモリ430の対応するチャンク432〜438を入手する。各SPE420〜426によって得られるチャンク432〜438は、そのSPE420〜426によって得られたグローバル・マーク・キュー410の部分に対応する。
グローバル・マーク・キューのそれぞれの専用ローカル部分416〜418および共用メモリのチャンク434〜438を使用して他のSPE422〜426のそれぞれで実行される同じ動作の模範としてSPE420を考慮すると、グローバル・マーク・キューの部分415および共用メモリの対応するチャンク432に基づいて、SPE420は共用メモリのチャンク432についてマーキング動作を実行する。SPE420にロードされるグローバル・マーク・キューの部分415は、マーキング動作を使用してチェックすべきメモリ・オブジェクトへの参照またはポインタでローカル・マーク・スタック(LMS)440を構成するために使用される。このマーキング動作は、ローカル・マーク・スタック440内の次のポインタまたは参照を取り、そのポインタによって参照されたシステム・メモリ・オブジェクトがSPEのローカル・ストア内に保管された共用メモリのチャンク432内で到達可能であるかどうかを判断することを伴う。これは、前に上述した通り、システム・メモリ・オブジェクトへのポインタを共用メモリ・アドレス・スペースからローカル・ストア・アドレス・スペースに変換することを必要とする可能性がある。
システム・メモリ・オブジェクトが共用メモリのチャンク432内に存在する場合、その参照は、対応するマーク記述子460内のローカル・ストア内で到達可能というマークが付けられ、そのメモリ・オブジェクトが参照する任意のオブジェクトは反復式に追跡され、同様にマークが付けられる。この反復追跡は、他のメモリ・オブジェクトを参照しないメモリ・オブジェクトが検出されるかまたは共用メモリのチャンク432内に存在しないメモリ・オブジェクトが検出されるまで続行される。SPE420のローカル・ストア内の共用メモリのチャンク432内にないメモリ・オブジェクトへの参照は、非ローカル・メモリ・オブジェクトであるというマークが付けられる。
グローバル・マーク・キューの部分415内のすべての参照がローカル・マーク・スタック440を使用してこのように追跡された後、ローカル・マーク・スタック440は空になり、メモリ・オブジェクト・ポインタはローカル・マーク記述子460内でマークを付けられるかまたは非ローカル・マーク・スタック450に追加される。ローカル・マーク記述子460は、システム・メモリのチャンク432内で到達可能であったグローバル・マーク・キューの部分415内のすべてのシステム・メモリ・オブジェクト参照を含む。非ローカル・マーク・スタック440は、ローカル・ストア内のシステム・メモリのチャンク432内になかったシステム・メモリ・オブジェクトを参照するグローバル・マーク・キューの部分415内の参照の追跡中に検出されたシステム・メモリ・オブジェクトへの参照を含む。
SPE420〜426のローカル・マーク記述子460〜466はまとめてマージされ、グローバル・マーク記述子490を形成する。このマージは、たとえば、システム・メモリ・オブジェクトへのそれぞれの参照が結果として得られるグローバル・マーク記述子490内に1つの項目のみを有するような、冗長項目の除去を伴う可能性がある。後続反復において、ローカル・マーク記述子460〜466、ローカル・マーク・スタック440〜446、および非ローカル・マーク・スタック450〜456は、後続マーキング動作によって再初期設定し、再構成することができる。グローバル・マーク記述子490を更新し続けるために、後続反復から結果として得られるローカル・マーク記述子460〜466は、既存のグローバル・マーク記述子490とマージすることができる。
SPE420〜426の非ローカル・マーク・スタック450〜456は、グローバル・マーク・キュー410の「マージ済み」部分413を生成するために、グローバル・マーク・キュー410の「追跡対象」部分414とマージされる。「マージ済み」部分413は、共用メモリ430の他の対応するチャンクとともに、同じかまたは他のSPE420〜426のガーベッジ・コレクション・スレッドによって処理することができる。この場合も、このマージは、それぞれの参照がグローバル・マーク・キュー410内に1つの項目のみを有するように、グローバル・マーク・キュー410の「追跡対象」部分414に参照を追加することを伴う可能性がある。
グローバル・マーク・キューの部分415が追跡され、ローカル・マーク記述子460と非ローカル・マーク・スタック450のマージが完了すると、ローカル・マーク記述子460、ローカル・マーク・スタック440、および非ローカル・マーク・スタック450を再初期設定することができ、グローバル・マーク・キュー410の新しい部分と共用メモリ430の対応するチャンクをSPE420内に取り出すことができる。次に、グローバル・マーク・キュー410のこの新しい部分と共用メモリ430の対応するチャンクについてガーベッジ・コレクションを実行することができる。このプロセスは、グローバル・マーク・キュー410のすべてが追跡されるまで反復的にSPE420〜426のそれぞれによって実行することができ、したがって、グローバル・マーク・キュー410は「クリア済み」部分412のみを有し、「追跡対象」部分414は空になる。
上述の反復および分散ガーベッジ・コレクション動作によりグローバル・マーク・キュー410全体が追跡された時点で、グローバル・マーク記述子490は、共用メモリ430内のシステム・メモリ・オブジェクトのうち、グローバル・マーク・キュー410に対応するプログラムによって到達可能なすべてのシステム・メモリ・オブジェクトへの参照を含むことになる。したがって、共用メモリ430内の他のオブジェクトのうち、グローバル・マーク記述子490によって参照されないオブジェクトはいずれもそのメモリ・スペースを再利用させることができる。再利用プロセスは、一般に当技術分野で知られている方法でこのような再利用を実行するように初期設定することができる。
したがって、例示的な諸実施形態は、異機種マルチプロセッサ・システム内の複数のプロセッサにわたって分散式にガーベッジ・コレクション動作を実行するためのメカニズムを提供する。このようなシステムでは、ガーベッジ・コレクション動作は、図1のPPE110などの制御プロセッサによって調整することができ、システム・メモリの部分に関する分散ガーベッジ・コレクションは、制御プロセッサの指示で複数のコプロセッサ、たとえば、図1のSPE120〜134によって実行することができる。制御プロセッサおよびコプロセッサの種々のメモリ・ビュー(memory view)を補正するためにアドレス変換メカニズムが提供される。
上述のガーベッジ・コレクション動作を実行するために提供可能ないくつかの最適化が存在する。たとえば、SPE内のグローバル・マーク・キューのある部分の追跡を完了した後、そのSPEは、他のSPEの非ローカル・マーク・スタックを調べ、そのSPEのローカル・ストア内に現在ロードされているシステム・メモリのチャンク内のメモリ・オブジェクトへの参照が存在するかどうかを判断することができる。このようにして、他のSPEの非ローカル・マーク・スタック内のこのような参照は、その参照をグローバル・マーク・キューにマージして戻す必要なしに、しかもそれを他のSPEにコピーして戻さずに、現行SPEのローカル・マーク・スタックに追加することができる。
さらに、グローバル・マーク・キューは、個別のシステムまたは共用メモリ領域に対応する個別のグローバル・マーク・キュー領域が生成されるようにプリソートすることができる。非ローカル・マーク・スタックがグローバル・マーク・キューの「追跡対象」部分にマージして戻されると、非ローカル・マーク・スタック内のメモリ・オブジェクトへの参照はグローバル・マーク・キューの対応する領域にマージされる。したがって、第1の非ローカル・マーク・スタック内の参照が共用メモリの第1の領域内にあるメモリ・オブジェクトを参照する場合、その項目はグローバル・マーク・キューの第1の領域の「追跡対象」部分にマージされる。同様に、第2の非ローカル・マーク・スタック内の項目が共用メモリの第2の領域内にあるメモリ・オブジェクトを参照する場合、その項目はグローバル・マーク・キューの第2の領域の「追跡対象」部分にマージされる。ガーベッジ・コレクションの後続反復において、同じ参照が複数回システム・メモリの非ローカル部分内にあると判断される可能性は少ないので、これはガーベッジ・コレクション動作を加速することになる。
図5は、プリソート済み拡張マーク・アンド・スイープ動作が使用される他の例示的な実施形態による分散ガーベッジ・コレクション動作を例示する模範的な図である。図5は、いくつかの重大な例外を除いて、図4に示されている例示と同様のものである。図5に図示されている通り、グローバル・マーク・キュー510は、共用メモリ530の領域532〜536に対応する複数の領域512〜516を有するように、図1のPPE110などにより、プリソートされている。個々のSPE520〜526によるグローバル・マーク・キュー510の部分の検索は、上述とほぼ同じように実行される。しかし、SPE520〜526の非ローカル・マーク・スタック550〜556のマージは、グローバル・マーク・キュー510の様々な領域を考慮するように変更される。
たとえば、SPE520〜526の非ローカル・マーク・スタック550〜556をグローバル・マーク・キューの「追跡対象」部分とマージする場合、このマージ・プロセスは、非ローカル・マーク・スタック550〜556内の参照をグローバル・マーク・キューのどの領域512〜516内に配置しなければならないかを判断する。これは、たとえば、参照された共用メモリ・アドレスを使用してその参照が共用メモリ530のどの領域532〜536に対応するかを判断し、次にグローバル・マーク・キュー510の対応する領域512〜516を識別することによって実行することができる。次にこれらの参照は、グローバル・マーク・キューのその領域の対応する「追跡対象」部分とマージされる。
その参照は、グローバル・マーク・キュー510のうち、共用メモリ530の領域に対応する領域であって、その参照に対応するシステム・メモリ・オブジェクトが存在する領域にマージされるので、このようなプリソートおよび局所性を強化したガーベッジ・コレクションにより、同じ参照を繰り返しグローバル・マーク・キューにマージしなければならないインスタンスの数が低減される。その結果、同じ参照の冗長チェックの数が低減され、それにより、ガーベッジ・コレクション動作を実行するための時間が短縮される。
追加の最適化として、それぞれのSPEで使用されるシステムまたは共用メモリのチャンク・サイズは、ヒープの現行状態に基づいて調節することができる。ヒープが比較的空である場合、すなわち、メモリ割り振りがほとんどない場合、ガーベッジ・コレクションを実行すべきグローバル・マーク・キュー内のポインタまたは参照が比較的少なくなるので、チャンク・サイズは比較的大きくなるように選択することができる。このようにして、チャンク・サイズがより大きくなると、システムまたは共用メモリの大きいブロックを迅速にスキャンすることができる。
同様に、ヒープが一杯である場合、グローバル・マーク・キュー内のポインタの数が比較的大きくなり、したがって、チャンク・サイズは比較的小さくなるように選択することができる。チャンク・サイズがより小さくなると、ガーベッジ・コレクション動作は完了するのにより長い時間を要するようになり、チャンク・サイズがより小さくなると、ローカルおよび非ローカル・マーク・スタックに関するスタック・オーバフロー例外がまったく発生しないことを保証するのに役に立つであろう。
さらに追加の最適化では、ローカル・ストアの第1の部分が共用メモリの第1のチャンクを保管するために使用され、ローカル・ストアのもう1つの部分が共用メモリの次のチャンクのある部分を保管するために使用されるように、各SPEのローカル・ストアを2つに分割することができる。一般的に上述した方法で共用メモリの第1のチャンクについてマーキングを実行することができる。共用メモリのチャンクがマーキングされるにつれて、たとえば、DMA動作を使用して、共用メモリの次のチャンクをローカル・ストア内に持ち込むことができる。このようにして、ある程度並列のロード動作が実行されるので、共用メモリのチャンクとグローバル・マーク・キューのそれに対応する部分のロードはより効率的なものにすることができる。
例示的な諸実施形態のさらに他の最適化では、ローカル・マーク・キューおよび非ローカル・マーク・キューを保管するために指定されたメモリ域のオーバフローのための特殊処理を提供することができる。第1の最適化では、非ローカル・マーク・キューをシステム・メモリ内に維持されているグローバル・マーク・キューにマージし、削除することができる。第2の最適化では、ローカル・マーク・キューのある部分をシステム・メモリ内に維持されているグローバル・マーク・キューに転送し、削除することができる。第3の最適化では、据え置かれたチャンク部分に対応するマーク記述子がローカル・ストアまたはグローバル・システム・メモリのうちの一方に保持されることを保証しながら、チャンク・サイズを低減し、将来の処理のために据え置くことができる。
図6は、例示的な一実施形態によるガーベッジ・コレクションを実行するための模範的な動作を概説する流れ図である。この流れ図の各ブロックおよびこの流れ図内の複数ブロックの組み合わせがコンピュータ・プログラム命令によって実現可能であることは理解されるであろう。これらのコンピュータ・プログラム命令は、プロセッサまたはその他のプログラマブル・データ処理装置上で実行される命令がこの流れ図の1つまたは複数のブロック内に指定された機能を実現するための手段を作成するようなマシンを製作するためにプロセッサまたはその他のプログラマブル・データ処理装置に提供することができる。また、これらのコンピュータ・プログラム命令は、コンピュータ可読メモリまたは記憶媒体に保管された命令が、この流れ図の1つまたは複数のブロック内に指定された機能を実現する命令手段を含む製品(article of manufacture)を製作するように特定の方法で機能するようプロセッサまたはその他のプログラマブル・データ処理装置に指示することができるコンピュータ可読メモリまたは記憶媒体に保管することもできる。
したがって、この流れ図のブロックは、指定の機能を実行するための手段の組み合わせ、指定の機能を実行するためのステップの組み合わせ、ならびに指定の機能を実行するためのプログラム命令手段をサポートする。また、この流れ図の各ブロックおよびこの流れ図内の複数ブロックの組み合わせが、指定の機能またはステップを実行する特殊目的ハードウェアベースのコンピュータ・システムによって、あるいは特殊目的ハードウェアとコンピュータ命令の組み合わせによって実現可能であることも理解されるであろう。
図6に図示されている通り、動作は、SPEが他のSPEまたはPPEなどからガーベッジ・コレクション動作を開始するための命令を受信することから始まる(ステップ610)。SPEまたは任意選択でPPEは、受信したガーベッジ・コレクション命令で識別されたプログラムに配分されたシステムまたは共用メモリのある部分についてガーベッジ・コレクションを実行するためにガーベッジ・コレクション・エンジンを使用するコレクション・スレッドを開始する(ステップ620)。プログラムに割り振られたシステムまたは共用メモリのその部分、すなわち、ヒープについてPPEによってグローバル・マーク・キューが生成され、初期設定される(ステップ630)。作成されたコレクション・スレッドは、それぞれローカル・マーク・スタックおよびローカル・ストアにコピーするために、グローバル・マーク・キューのある部分およびシステムまたは共用メモリの対応するチャンクを入手する(ステップ640)。
コレクション・スレッドは、ローカル・マーク・スタック内の参照またはポインタについてマーキングおよび追跡動作を開始し、前記LMSはグローバル・マーク・キューのある部分によって初期設定されている。コレクション・スレッドは、ローカル・マーク・スタックから次の項目を選択し、対応するメモリ・ブロック内に含まれるすべての参照のマークおよび追跡処理を開始する(ステップ650)。マーキングおよび追跡動作の一部として、コレクション・スレッドは、メモリ・ブロック内の次の参照またはポインタを識別し(ステップ660)、その参照がシステム/共用メモリのチャンク内のメモリ・オブジェクトを指し示すかどうかを判断する(ステップ670)。その参照がシステム/共用メモリのチャンク内のメモリ・オブジェクトを指し示す場合、コレクション・スレッドは、その参照が前に到達不能であった参照に対応する(すなわち、マーク記述子が到達不能に設定されている)場合にその参照をローカル・マーク・スタックに追加し、たとえば、ローカル・マーク記述子データ構造にメモリ・オブジェクトへの参照を追加し、それに応じてそのマーク記述子ビットを設定することにより、ローカル・マーク記述子データ構造内で到達可能というマークをメモリ・オブジェクトに付ける(ステップ680)。その参照がシステムまたは共用メモリのチャンク内にないメモリ・オブジェクトを指し示す場合、コレクション・スレッドは、非ローカル・マーク参照というマークをその参照に付け、その参照を非ローカル・マーク・スタックに追加する(ステップ690)。
次に、コレクション・スレッドは、現行メモリ・オブジェクト参照からまたはグローバル・マーク・キューのその部分内にメモリ・オブジェクトへの追加の参照またはポインタが存在するかどうかを判断する(ステップ700)。存在する場合、コレクション・スレッドはステップ660に戻る。存在しない場合、コレクション・スレッドは、ローカル・マーク・スタックが空であるかどうか、すなわち、すべての項目がマークおよび追跡動作によって処理されたかどうかを判断する(ステップ705)。空ではない場合、動作はステップ650に戻り、マークおよび追跡動作を実行すべき次のローカル・マーク・スタック項目を選択する。ローカル・マーク・スタックが空である場合、コレクション・スレッドは任意選択で、現在のプロセッサのシステムまたは共用メモリの現行チャンクを参照する非ローカル・マーク・スタック内の参照またはポインタについて、異機種マルチプロセッサ・システムの他のプロセッサに対してポーリングする(ステップ710)。次に、ステップ650〜690と同様に、このような参照またはポインタを追跡し、マークを付ける(ステップ720)。
次に、コレクション・スレッドは、結果として得られるローカル・マーク記述子をグローバル・マーク記述子とマージする(ステップ730)。また、コレクション・スレッドは、結果として得られる非ローカル・マーク・スタックをグローバル・マーク・キューの「追跡対象」部分とマージすることもできる(ステップ740)。これは、たとえば、非ローカル・マーク・スタック内の参照がグローバル・マーク・キューの「追跡対象」部分のどの領域に対応するかを判断し、その参照をグローバル・マーク・キューのそれぞれの領域とマージすることを伴う可能性がある。
次に、コレクション・スレッドは、ローカル・マーク記述子、ローカル・マーク・スタック、および非ローカル・マーク・スタックを再初期設定する(ステップ750)。次に、コレクション・スレッドは、処理すべきグローバル・マーク・キューの追加の部分が存在するかどうかを判断する(ステップ760)。存在する場合、動作はステップ640に戻り、そこでグローバル・マーク・キューの次の部分およびメモリの対応するチャンクを入手し、プロセスを繰り返す。処理すべきグローバル・マーク・キューの追加の部分がまったく存在しない場合、動作は終了する。上述の分散「マーク・アンド・スイープ」動作の終了後、グローバル・マーク・スタックによって参照されないメモリ・オブジェクトに割り振られたシステムまたは共用メモリの部分を再利用するためにメモリ再利用プロセスを実行できることに留意されたい。
したがって、例示的な諸実施形態は、異機種マルチプロセッサ・システムにおいてガーベッジ・コレクションを実行するためのメカニズムを提供する。ガーベッジ・コレクションは、異機種マルチプロセッサ・システム内の複数のプロセッサについて並列に実行することができ、その結果は適切にマージされ、到達可能なシステム・メモリ・オブジェクトと到達不能なシステム・メモリ・オブジェクトを識別する。このようにして、マルチプロセッサ・システム内のそれぞれのプロセッサの能力を使用する効率の良いガーベッジ・コレクション方法が提供される。
上記の諸実施形態は分散ガーベッジ・コレクション動作に関して記載されているが、本発明はこれに限定されないことに留意されたい。むしろ、本発明の精神および範囲を逸脱せずに、ガーベッジ・コレクション動作の実行に異機種マルチプロセッサ・システム内の単一プロセッサを割り振ることができる。このようなプロセッサのローカル・ストアはサイズが限られているので、依然として、ガーベッジ・コレクションを実行すべきグローバル・マーク・キューの部分および共用またはシステム・メモリの対応する部分のコピーを実行することが必要である。したがって、本発明の精神および範囲を逸脱せずに、複数のプロセッサではなく単一プロセッサを使用して、上述と同じ動作を実行することができる。
例示的な諸実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェア・エレメントとソフトウェア・エレメントの両方を含む実施形態の形を取ることができる。好ましい一実施形態では、本発明はソフトウェアで実現され、このソフトウェアは、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むが、これらに限定されない。
さらに、例示的な諸実施形態は、コンピュータまたは任意の命令実行システムによって使用するためのあるいはそれに関連するプログラム・コードを提供するコンピュータ使用可能媒体またはコンピュータ可読媒体からアクセス可能なコンピュータ・プログラムの形を取ることができる。この説明のため、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって使用するためのあるいはそれに関連するプログラムの収容、保管、伝達、伝搬、または転送を行うことができる任意の装置にすることができる。
この媒体は、電子、磁気、光学、電磁、赤外線、または半導体システム(あるいは装置またはデバイス)、もしくは伝搬媒体にすることができる。コンピュータ可読媒体の例としては、半導体または固体メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、剛性磁気ディスク、および光ディスクを含む。光ディスクの現行例としては、コンパクト・ディスク読み取り専用メモリ(CD−ROM)、書き換え可能なコンパクト・ディスク(CD−R/W)、およびDVDを含む。
前に上述した通り、プログラム・コードの保管または実行あるいはその両方に適したデータ処理システムは、直接またはシステム・バスを介して間接的にメモリ・エレメントに結合された少なくとも1つのプロセッサを含むことになる。メモリ・エレメントは、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量記憶装置、および実行中に大容量記憶装置からコードを取り出さなければならない回数を削減するために少なくとも何らかのプログラム・コードの一時記憶域を提供するキャッシュ・メモリを含むことができる。
入出力またはI/O装置(キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない)は、直接または介在するI/Oコントローラを介してシステムに結合することができる。データ処理システムが、介在する私設網または公衆網を介して他のデータ処理システムあるいはリモート・プリンタまたは記憶装置に結合された状態になるように、ネットワーク・アダプタもシステムに結合することができる。モデム、ケーブル・モデム、およびイーサネット(登録商標)・カードは、現在使用可能なタイプのネットワーク・アダプタの一部に過ぎない。
完全に機能する1つのデータ処理システムに関連して本発明を説明したが、本発明のプロセスは複数命令からなるコンピュータ可読媒体の形および様々な形で分散可能であり、その分散を実行するために実際に使用される特定のタイプの信号伝送媒体にかかわらず、本発明が等しく適用されることを当業者が認識することは、留意すべき重要なことである。コンピュータ可読媒体の例としては、フレキシブル・ディスク、ハード・ディスク、RAM、CD−ROM、DVD−ROMなどの書き込み可能タイプの媒体、ならびに、たとえば、無線周波および光波伝送などの伝送形式を使用する、ディジタルおよびアナログ通信リンク、有線または無線通信リンクなどの伝送タイプの媒体を含む。コンピュータ可読媒体は、特定のデータ処理システムで実際に使用するためにデコードされたコード化フォーマットの形を取ることができる。
本発明に関する記載は、例示および説明のために提示されており、網羅するためあるいは開示された形式の本発明に限定するためのものではない。多くの変更例および変形例は当業者にとって明白なものになるであろう。本発明の原理、実用的な適用例を最も良く説明し、企図されている特定の使用に適した様々な変更を含む様々な実施形態について他の当業者が本発明を理解できるようにするために、実施形態が選択され記載されている。
例示的な諸実施形態の模範的な諸態様を実現可能な異機種マルチプロセッサ・システムの模範的なブロック図である。 例示的な諸実施形態の模範的な諸態様を実現可能なメモリ・フロー・コントローラを例示する模範的な図である。 例示的な一実施形態によるガーベッジ・コレクションを実行するために使用可能なガーベッジ・コレクション・メカニズムの模範的な図である。 例示的な一実施形態による分散ガーベッジ・コレクション動作を例示する模範的な図である。 プリソート済み拡張マーク・アンド・スイープ動作が使用される他の例示的な実施形態による分散ガーベッジ・コレクション動作を例示する模範的な図である。 例示的な一実施形態によるガーベッジ・コレクションを実行するための模範的な動作を概説する流れ図である。
符号の説明
300:ガーベッジ・コレクション・エンジン
310:コントローラ
320:グローバル・マーク・キュー・インターフェース・モジュール
330:共用メモリ・インターフェース・モジュール
340:マーキング・モジュール
345:マーク記述子記憶装置
350:グローバル・マーク・キュー部分記憶装置
360:ローカル・ストア・インターフェース
370:ローカル・マーク・スタック
380:非ローカル・マーク・スタック
390:マージ・モジュール

Claims (9)

  1. マルチプロセッサ・データ処理システムにおいて、共用メモリについてガーベッジ・コレクション動作を実行するための方法であって、
    前記マルチプロセッサ・データ処理システムのプロセッサ内で前記共用メモリのある部分に対応するグローバル・マーク・キューのある部分をロードするステップと、
    前記プロセッサに割り当てられた前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクトへの参照に基づいて、前記共用メモリの前記部分についてマーキング動作を実行するステップであって、前記ガーベッジ・コレクション動作の一部として、再利用できない到達可能なメモリ・オブジェクトを識別するステップと、
    前記再利用できない到達可能なメモリ・オブジェクトについてスイープ動作を行うステップと、
    を有し、
    前記マーキング動作を実行するステップが、
    前記共用メモリの前記部分内にないメモリ・オブジェクトへの参照が識別されるまで、前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクト参照と従属メモリ・オブジェクトへの参照を追跡するステップと、
    前記共用メモリの前記部分内にあるメモリ・オブジェクトへの参照を前記ローカル・マーク・スタックに保管するステップと、
    前記共用メモリの前記部分内にないメモリ・オブジェクトへの参照を非ローカル・マーク・スタックに保管するステップと、
    前記ローカル・マーク・スタックに関連するローカル・マーク記述子データ構造をグローバル・マーク記述子データ構造とマージするステップと、
    前記非ローカル・マーク・スタックを前記グローバル・マーク・キューの追跡対象部分とマージするステップであって、前記グローバル・マーク・キューの前記追跡対象部分が、前記マーキング動作を実行することによって処理すべきメモリ・オブジェクト参照を含み、前記ローカル・マーク記述子データ構造が、その参照が前記ローカル・マーク・スタック内にあるメモリ・オブジェクトに関する到達可能性情報を含むステップと、
    を含む方法。
  2. 前記グローバル・マーク・キューの前記部分が前記グローバル・マーク・キューのある部分全体より小さく、前記グローバル・マーク・キューの前記部分に対応する前記共用メモリの前記部分が前記共用メモリのある部分全体より小さい、請求項1に記載の方法。
  3. 前記共用メモリのある部分に対応する前記グローバル・マーク・キューのある部分をロードする前記ステップが、
    最初に、前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクトへの参照に基づいて、ローカル・マーク・スタックを構成するステップと、
    前記グローバル・マーク・キューの前記部分に対応する前記共用メモリのある部分を、前記プロセッサのローカル・ストアにロードするステップであって、前記マルチプロセッサ・データ処理システムの複数の前記プロセッサの各プロセッサが、前記グローバル・マーク・キューの種々の部分と前記共用メモリの対応する種々の部分とをロードし、前記グローバル・マーク・キューの前記種々の部分内のメモリ・オブジェクト参照に基づいて、前記共用メモリの前記種々の部分についてマーキング動作を実行するステップと、
    を含む、請求項1に記載の方法。
  4. 前記グローバル・マーク記述子データ構造が、前記マルチプロセッサ・データ処理システムのプロセッサのローカル・マーク・スタック内で、前記共用メモリのある部分内にあるものとして識別されたメモリ・オブジェクトへのすべての参照を含む、請求項1に記載の方法。
  5. 前記マルチプロセッサ・データ処理システムが、制御プロセッサと少なくとも1つのコプロセッサとを有する異機種マルチプロセッサ・データ処理システムであり、前記制御プロセッサと前記少なくとも1つのコプロセッサが、種々の命令セットを使用して動作する、請求項1に記載の方法。
  6. 前記グローバル・マーク・キューのある部分のロードと、マーキング動作の実行と、前記共用メモリのある部分内にないメモリ・オブジェクトへの参照の識別が、前記少なくとも1つのコプロセッサのうちの1つまたは複数のコプロセッサによって実行される、請求項に記載の方法。
  7. 前記ロード、実行、および識別動作が、前記少なくとも1つのコプロセッサのうちの前記1つまたは複数のコプロセッサのメモリ・フロー・コントローラによって実行される、請求項に記載の方法。
  8. コンピュータ可読プログラムを有するコンピュータ使用可能媒体を含むコンピュータ・プログラムであって、前記1〜7の何れか1つに記載の方法の各ステップを前記マルチプロセッサ・データ処理システムに実行させる、コンピュータ・プログラム。
  9. ガーベッジ・コレクションを実行するためのシステムであって、
    それぞれが関連ローカル・ストアを有する複数のプロセッサと、
    前記複数のプロセッサに結合された共用メモリと、
    を有し、前記複数のプロセッサのうちの1つまたは複数のプロセッサが、
    前記プロセッサ内で前記共用メモリのある部分に対応するグローバル・マーク・キューのある部分をロードし、
    前記プロセッサに割り当てられた前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクトへの参照に基づいて、前記共用メモリの前記部分についてマーキング動作を実行する手段であって、前記ガーベッジ・コレクション動作の一部として、再利用できない到達可能なメモリ・オブジェクトを識別する手段と、
    前記再利用できない到達可能なメモリ・オブジェクトについてスイープ動作を行う手段と、
    を具備し、
    前記マーキング動作を実行する手段が、
    前記共用メモリの前記部分内にないメモリ・オブジェクトへの参照が識別されるまで、前記グローバル・マーク・キューの前記部分内のメモリ・オブジェクト参照と従属メモリ・オブジェクトへの参照を追跡する手段と、
    前記共用メモリの前記部分内にあるメモリ・オブジェクトへの参照を前記ローカル・マーク・スタックに保管する手段と、
    前記共用メモリの前記部分内にないメモリ・オブジェクトへの参照を非ローカル・マーク・スタックに保管する手段と、
    前記ローカル・マーク・スタックに関連するローカル・マーク記述子データ構造をグローバル・マーク記述子データ構造とマージする手段と、
    前記非ローカル・マーク・スタックを前記グローバル・マーク・キューの追跡対象部分とマージする手段であって、前記グローバル・マーク・キューの前記追跡対象部分が、前記マーキング動作を実行することによって処理すべきメモリ・オブジェクト参照を含み、前記ローカル・マーク記述子データ構造が、その参照が前記ローカル・マーク・スタック内にあるメモリ・オブジェクトに関する到達可能性情報を含む手段と、
    具備する、システム。
JP2007118325A 2006-04-28 2007-04-27 異機種マルチプロセッサ・システムにおけるガーベッジ・コレクションのためのシステムおよび方法 Expired - Fee Related JP5147280B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/380683 2006-04-28
US11/380,683 US7512745B2 (en) 2006-04-28 2006-04-28 Method for garbage collection in heterogeneous multiprocessor systems

Publications (2)

Publication Number Publication Date
JP2007299403A JP2007299403A (ja) 2007-11-15
JP5147280B2 true JP5147280B2 (ja) 2013-02-20

Family

ID=38649664

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007118325A Expired - Fee Related JP5147280B2 (ja) 2006-04-28 2007-04-27 異機種マルチプロセッサ・システムにおけるガーベッジ・コレクションのためのシステムおよび方法

Country Status (4)

Country Link
US (1) US7512745B2 (ja)
JP (1) JP5147280B2 (ja)
CN (1) CN101075209A (ja)
TW (1) TW200816001A (ja)

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8140786B2 (en) 2006-12-04 2012-03-20 Commvault Systems, Inc. Systems and methods for creating copies of data, such as archive copies
GB0512809D0 (en) * 2005-06-23 2005-08-03 Ibm Arrangement and method for garbage collection in a computer system
US7734827B2 (en) * 2005-09-27 2010-06-08 Sony Computer Entertainment, Inc. Operation of cell processors
US7840537B2 (en) 2006-12-22 2010-11-23 Commvault Systems, Inc. System and method for storing redundant information
US7831640B2 (en) * 2008-04-15 2010-11-09 Microsoft Corporation Using an overflow list to process mark overflow
US7987215B2 (en) * 2008-04-22 2011-07-26 Microsoft Corporation Efficiently marking objects with large reference sets
US7860906B2 (en) * 2008-05-28 2010-12-28 Microsoft Corporation Overflow per segment
US8239865B2 (en) * 2008-06-02 2012-08-07 Microsoft Corporation Waiting and synchronization of parallel task executions based on task groups and task object representations
US8880775B2 (en) * 2008-06-20 2014-11-04 Seagate Technology Llc System and method of garbage collection in a memory device
JP2010072790A (ja) * 2008-09-17 2010-04-02 Toshiba Corp プロセッサ装置、情報処理装置及びメモリ管理方法
US8301672B2 (en) * 2008-09-22 2012-10-30 Advanced Micro Devices, Inc. GPU assisted garbage collection
US9015181B2 (en) 2008-09-26 2015-04-21 Commvault Systems, Inc. Systems and methods for managing single instancing data
WO2010036754A1 (en) 2008-09-26 2010-04-01 Commvault Systems, Inc. Systems and methods for managing single instancing data
US8412677B2 (en) 2008-11-26 2013-04-02 Commvault Systems, Inc. Systems and methods for byte-level or quasi byte-level single instancing
US8312219B2 (en) * 2009-03-02 2012-11-13 International Business Machines Corporation Hybrid caching techniques and garbage collection using hybrid caching techniques
US8401996B2 (en) 2009-03-30 2013-03-19 Commvault Systems, Inc. Storing a variable number of instances of data objects
US8578120B2 (en) 2009-05-22 2013-11-05 Commvault Systems, Inc. Block-level single instancing
JP5218985B2 (ja) * 2009-05-25 2013-06-26 株式会社日立製作所 メモリ管理方法計算機システム及びプログラム
US8473900B2 (en) * 2009-07-01 2013-06-25 Advanced Micro Devices, Inc. Combining classes referenced by immutable classes into a single synthetic class
US8200718B2 (en) * 2009-07-02 2012-06-12 Roberts Michael L Parallelized, incremental garbage collector
US8645651B2 (en) * 2010-01-26 2014-02-04 Oracle International Corporation Low-contention update buffer queuing for small systems
US8327109B2 (en) * 2010-03-02 2012-12-04 Advanced Micro Devices, Inc. GPU support for garbage collection
DE102010017215A1 (de) * 2010-06-02 2011-12-08 Aicas Gmbh Verfahren zur Durchführung eines Speichermanagements
US8935492B2 (en) 2010-09-30 2015-01-13 Commvault Systems, Inc. Archiving data objects using secondary copies
CN102023891A (zh) * 2010-12-20 2011-04-20 复旦大学 基于Java虚拟机的并发垃圾收集器框架
US8473529B2 (en) * 2011-03-14 2013-06-25 International Business Machines Corporation Single pass marking of finalizable objects
US8417744B2 (en) * 2011-03-23 2013-04-09 Microsoft Corporation Techniques to manage a collection of objects in heterogeneous environments
US9053017B2 (en) 2011-09-09 2015-06-09 Microsoft Technology Licensing, Llc Managing object lifetime in a cyclic graph
US8738877B2 (en) 2011-12-14 2014-05-27 Advance Micro Devices, Inc. Processor with garbage-collection based classification of memory
US9020890B2 (en) 2012-03-30 2015-04-28 Commvault Systems, Inc. Smart archiving and data previewing for mobile devices
US9274839B2 (en) * 2012-09-27 2016-03-01 Intel Corporation Techniques for dynamic physical memory partitioning
US9633022B2 (en) 2012-12-28 2017-04-25 Commvault Systems, Inc. Backup and restoration for a deduplicated file system
US8966203B2 (en) * 2013-01-04 2015-02-24 Microsoft Corporation Shared and managed memory unified access
US9367449B2 (en) * 2013-09-11 2016-06-14 Owtware Holdings Limited, BVI Hierarchical garbage collection in an object relational database system
IN2013CH04831A (ja) * 2013-10-28 2015-08-07 Empire Technology Dev Llc
CN103699435B (zh) * 2013-12-25 2017-05-03 龙芯中科技术有限公司 负载均衡方法及装置
US10324897B2 (en) 2014-01-27 2019-06-18 Commvault Systems, Inc. Techniques for serving archived electronic mail
CN104268074B (zh) * 2014-09-05 2017-09-01 北京广利核系统工程有限公司 一种基于dcs系统应用软件在线调试方法
US10324914B2 (en) 2015-05-20 2019-06-18 Commvalut Systems, Inc. Handling user queries against production and archive storage systems, such as for enterprise customers having large and/or numerous files
US9734053B2 (en) * 2015-06-30 2017-08-15 International Business Machines Corporation Garbage collection handler to update object pointers
US10176093B2 (en) 2015-06-30 2019-01-08 International Business Machines Corporation Pauseless location and object handle based garbage collection
US10180902B2 (en) 2015-06-30 2019-01-15 International Business Machines Corporation Pauseless location and object handle based garbage collection
CN107239406B (zh) * 2016-03-29 2021-03-09 斑马智行网络(香港)有限公司 用于垃圾回收的并行标记处理方法及装置
US10146684B2 (en) * 2016-10-24 2018-12-04 Datrium, Inc. Distributed data parallel method for reclaiming space
US10572181B2 (en) * 2017-02-01 2020-02-25 Microsoft Technology Licensing, Llc Multiple stage garbage collector
US10558564B2 (en) * 2017-09-28 2020-02-11 Hewlett Packard Enterprise Development Lp Pointers in a memory managed system
US10691590B2 (en) 2017-11-09 2020-06-23 International Business Machines Corporation Affinity domain-based garbage collection
US10445249B2 (en) 2017-11-09 2019-10-15 International Business Machines Corporation Facilitating access to memory locality domain information
US10552309B2 (en) 2017-11-09 2020-02-04 International Business Machines Corporation Locality domain-based memory pools for virtualized computing environment
US11055184B2 (en) * 2018-12-19 2021-07-06 Vmware, Inc. In-place garbage collection of a sharded, replicated distributed state machine based on supersedable operations
US10877881B2 (en) 2019-01-11 2020-12-29 Vmware, Inc. In-place garbage collection of a sharded, replicated distributed state machine based on mergeable operations
CN110673956B (zh) * 2019-09-24 2022-04-15 Oppo广东移动通信有限公司 回收线程创建方法、装置、计算机设备以及存储介质
US11416390B2 (en) * 2020-09-09 2022-08-16 International Business Machines Corporation Tri-color bitmap array for garbage collection
US11625269B1 (en) * 2021-03-31 2023-04-11 Amazon Technologies, Inc. Scheduling for locality of reference to memory

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6441043A (en) * 1987-08-06 1989-02-13 Ricoh Kk Parallel garbage collector system for list processing
US6865585B1 (en) * 2000-07-31 2005-03-08 Microsoft Corporation Method and system for multiprocessor garbage collection
US7221520B2 (en) * 2003-11-13 2007-05-22 Interdigital Technology Corporation Camera control using wireless technology

Also Published As

Publication number Publication date
JP2007299403A (ja) 2007-11-15
US7512745B2 (en) 2009-03-31
US20070255909A1 (en) 2007-11-01
CN101075209A (zh) 2007-11-21
TW200816001A (en) 2008-04-01

Similar Documents

Publication Publication Date Title
JP5147280B2 (ja) 異機種マルチプロセッサ・システムにおけるガーベッジ・コレクションのためのシステムおよび方法
US8738859B2 (en) Hybrid caching techniques and garbage collection using hybrid caching techniques
US6671707B1 (en) Method for practical concurrent copying garbage collection offering minimal thread block times
US7010555B2 (en) System and method for compacting a computer system heap
US8327109B2 (en) GPU support for garbage collection
US5088036A (en) Real time, concurrent garbage collection system and method
US5560003A (en) System and hardware module for incremental real time garbage collection and memory management
KR0170565B1 (ko) 메모리 관리 방법, 마이크로커널 구조 데이타 프로세싱 시스템, 운영 체제 퍼스낼리티 시스템 동작 방법, 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법 및 응용 프로그램 실행방법
US5819304A (en) Random access memory assembly
US8285670B2 (en) Dynamically maintaining coherency within live ranges of direct buffers
JP4917138B2 (ja) オブジェクト最適配置装置、オブジェクト最適配置方法、及びオブジェクト最適配置プログラム
US20110264880A1 (en) Object copying with re-copying concurrently written objects
WO2008082684A2 (en) System and method for optimistic creation of thread local objects in a virtual machine environment
JP2009032252A (ja) クラッシュダンプ用のメモリアロケーション
US20170031815A1 (en) Wand: Concurrent Boxing System For All Pointers With Or Without Garbage Collection
US6473845B1 (en) System and method for dynamically updating memory address mappings
US20050193169A1 (en) Memory management
US8447793B2 (en) Efficient remembered set for region-based garbage collectors
US11550714B2 (en) Compiling application with multiple function implementations for garbage collection
US10936483B2 (en) Hybrid garbage collection
CN114051610A (zh) 基于arena的存储器管理
Oancea et al. A new approach to parallelising tracing algorithms
Degenbaev et al. Concurrent marking of shape-changing objects
Flanagan et al. pHluid: The design of a parallel functional language implementation on workstations
Cockshott Addressing mechanisms and persistent programming

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100218

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120411

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120417

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120608

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121030

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121127

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151207

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees