(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-11-29
(54)【発明の名称】負荷分散ワークスティーリングの低減
(51)【国際特許分類】
G06F 9/50 20060101AFI20231121BHJP
【FI】
G06F9/50 150Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023526851
(86)(22)【出願日】2021-11-08
(85)【翻訳文提出日】2023-05-01
(86)【国際出願番号】 CN2021129290
(87)【国際公開番号】W WO2022111264
(87)【国際公開日】2022-06-02
(32)【優先日】2020-11-24
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】堀江 倫大
(72)【発明者】
【氏名】緒方 一則
(72)【発明者】
【氏名】竹内 幹雄
(57)【要約】
シーフスレッドがガベージコレクション(GC)オーナーキューからのワークスティールを試みたと判断する段階を備える方法が提供される。加えて、本方法は、GCオーナーキューにおけるタスクの数が所定の閾値を満たすと判断する段階を備える。更に、本方法は、GCオーナーキューが重量級タスクを有すると判断する段階を備える。本方法はまた、重量級タスクをGCオーナーキューの先頭位置に移動させる段階を備える。
【特許請求の範囲】
【請求項1】
シーフスレッドがガベージコレクション(GC)オーナーキューからのワークスティールを試みたと判断する段階;
前記GCオーナーキューにおけるタスクの数が所定の閾値を満たすと判断する段階;
前記GCオーナーキューが重量級タスクを有すると判断する段階;
前記重量級タスクを前記GCオーナーキューの先頭位置に移動させる段階
を備える、コンピュータ実装方法。
【請求項2】
前記重量級タスクを移動させる段階は:
前記GCオーナーキューの前記先頭位置へのローカルポインタをデクリメントする段階;及び
前記先頭位置への前記デクリメントされたローカルポインタで、前記重量級タスクを記憶する段階
を有する、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記重量級タスクを移動させる段階は:
前記GCオーナーキューの前記先頭位置への前記デクリメントされたローカルポインタ及びグローバルポインタに対してコンペア・アンド・スワップを実行する段階;
前記重量級タスクがヒープスペースのトゥスペースにコピーされないと判断する段階;及び
前記グローバルポインタを前記デクリメントされたローカルポインタにアップデートする段階
を更に有する、請求項2に記載のコンピュータ実装方法。
【請求項4】
前記重量級タスクは、参照配列を含むアプリケーションオブジェクトのためのガベージコレクションタスクを有する、請求項1に記載のコンピュータ実装方法。
【請求項5】
前記重量級タスクは、所定のタスク参照閾値を超過する他のアプリケーションオブジェクトへの参照の数を有する、請求項1に記載のコンピュータ実装方法。
【請求項6】
前記GCオーナーキューは、両端キューを有する、請求項1に記載のコンピュータ実装方法。
【請求項7】
前記GCオーナーキューは、ラストイン・ファーストアウトキューを有する、請求項6に記載のコンピュータ実装方法。
【請求項8】
1つ又は複数のコンピュータ可読記憶媒体、及び前記1つ又は複数のコンピュータ可読記憶媒体上で集合的に記憶されたプログラム命令を備え、前記プログラム命令は、1つ又は複数のプロセッサに:
シーフスレッドがガベージコレクション(GC)オーナーキューからのワークスティールを試みたと判断する手順;
前記GCオーナーキューにおけるタスクの数が所定の閾値を満たすと判断する手順;
前記GCオーナーキューが重量級タスクを含むと判断する手順;及び
前記重量級タスクを前記GCオーナーキューの先頭位置に移動させる手順
を含む方法を実行させるように構成された命令を有する
コンピュータプログラム製品。
【請求項9】
前記重量級タスクを移動させる手順は:
前記GCオーナーキューの前記先頭位置へのローカルポインタをデクリメントする手順;及び
前記先頭位置への前記デクリメントされたローカルポインタで、前記重量級タスクを記憶する手順
を有する、請求項8に記載のコンピュータプログラム製品。
【請求項10】
前記重量級タスクを移動させる手順は:
前記GCオーナーキューの前記先頭位置への前記デクリメントされたローカルポインタ及びグローバルポインタに対してコンペア・アンド・スワップを実行する手順;
前記コンペア・アンド・スワップが成功したと判断する手順;及び
前記グローバルポインタを前記デクリメントされたローカルポインタにアップデートする手順
を更に有する、請求項9に記載のコンピュータプログラム製品。
【請求項11】
前記重量級タスクは、参照配列を有するアプリケーションオブジェクトのためのガベージコレクションタスクを有する、請求項8に記載のコンピュータプログラム製品。
【請求項12】
前記重量級タスクは、所定のタスク参照閾値を超過する他のアプリケーションオブジェクトへの参照の数を有する、請求項8に記載のコンピュータプログラム製品。
【請求項13】
前記GCオーナーキューは、両端キューを備える、請求項8に記載のコンピュータプログラム製品。
【請求項14】
前記GCオーナーキューは、ラストイン・ファーストアウトキューを備える、請求項13に記載のコンピュータプログラム製品。
【請求項15】
1つ又は複数のコンピュータ処理回路;及び
前記1つ又は複数のコンピュータ処理回路により実行されると、前記1つ又は複数のコンピュータ処理回路に:
シーフスレッドがガベージコレクション(GC)オーナーキューからのワークスティールを試みたと判断する段階;
前記GCオーナーキューにおけるタスクの数が所定の閾値を満たすと判断する段階;
前記GCオーナーキューが重量級タスクを含むと判断する段階;及び
前記重量級タスクを前記GCオーナーキューの先頭位置に移動させる段階
を有する方法を実行させるように構成されたプログラム命令を記憶する、1つ又は複数のコンピュータ可読記憶媒体
を備える、システム。
【請求項16】
前記重量級タスクを移動させる手順は:
前記GCオーナーキューの前記先頭位置へのローカルポインタをデクリメントする手順;及び
前記先頭位置への前記デクリメントされたローカルポインタで、前記重量級タスクを記憶する手順
を有する、請求項15に記載のシステム。
【請求項17】
前記重量級タスクを移動させる手順は:
前記GCオーナーキューの前記先頭位置への前記デクリメントされたローカルポインタ及びグローバルポインタに対してコンペア・アンド・スワップを実行する手順;
前記コンペア・アンド・スワップが成功したと判断する手順;及び
前記グローバルポインタを前記デクリメントされたローカルポインタにアップデートする手順
を更に有する、請求項16に記載のシステム。
【請求項18】
前記重量級タスクは、参照配列を有するアプリケーションオブジェクトのためのガベージコレクションタスクを有する、請求項15に記載のシステム。
【請求項19】
前記重量級タスクは、所定のタスク参照閾値を超過する他のアプリケーションオブジェクトへの参照の数を有する、請求項15に記載のシステム。
【請求項20】
前記GCオーナーキューは、両端キュー及びラストイン・ファーストアウトキューを有する、請求項15に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、負荷分散ワークスティーリングに関し、より具体的には、負荷分散ワークスティーリングの低減に関する。
【0002】
負荷分散は、複数のプロセスの間で関連する作業をコンピュータシステムが分担する方法を指す。このように、負荷分散は、負荷分散を伴うことなくコンピュータシステムを動作させる場合に比べ、これらのシステムをより効率的に動作させる上で有用であり得る。
【発明の概要】
【0003】
方法について実施形態が開示される。本方法は、シーフスレッドがガベージコレクション(GC)オーナーキューからのワークスティールを試みたと判断する段階を備える。加えて、本方法は、GCオーナーキューにおけるタスクの数が所定の閾値を満たすと判断する段階を備える。更に、本方法は、GCオーナーキューが重量級タスクを有すると判断する段階を備える。本方法はまた、重量級タスクをGCオーナーキューの先頭位置に移動させる段階を備える。
【0004】
更に、本開示の態様は、コンピュータ実装方法に関する上述の機能と類似する機能を有するシステム及びコンピュータプログラム製品を対象とする。本発明の概要は、本開示の各態様、全ての実装、及び/又は全ての実施形態を示すようには意図されていない。
【図面の簡単な説明】
【0005】
本出願に含まれる図面は、本明細書に組み込まれ、本明細書の一部を形成する。これらは、本開示の実施形態を示し、この説明と共に、本開示の原理を説明する役割を果たす。図面は、特定の実施形態の例示に過ぎず、本開示を限定しない。
【0006】
【
図1】本開示のいくつかの実施形態に係る、負荷分散ワークスティーリング低減のための例示的なコンピューティングシステムのブロック図である。
【0007】
【
図2A】本開示のいくつかの実施形態に係る、例示的なGCオーナーキュー及びGCシーフキューのブロック図である。
【
図2B】本開示のいくつかの実施形態に係る、例示的なGCオーナーキュー及びGCシーフキューのブロック図である。
【0008】
【
図3】本開示のいくつかの実施形態に係る、負荷分散ワークスティーリング低減のための例示的なメモリである。
【0009】
【
図4】本開示のいくつかの実施形態に係る、負荷分散ワークスティーリング低減のための例示的な方法のプロセスフロー図である。
【0010】
【
図5】本開示のいくつかの実施形態に係る、例示的なガベージコレクションマネジャのブロック図である。
【0011】
本開示は様々な修正形態及び代替形態に適しているが、その具体的内容は、図面において例として示されており、詳細に説明される。しかしながら、説明される特定の実施形態に本開示を限定するようには意図されていないことが理解されるべきである。反対に、本開示の範囲内に入る全ての修正形態、均等形態、及び代替形態を包含するように意図されている。
【発明を実施するための形態】
【0012】
前述の通り、負荷分散は、コンピュータシステムをより効率的に動作させるために有用な方法となり得る。例えば、負荷分散は、ガベージコレクション技術であるワークスティーリングにおいて有用である。ガベージコレクションとは、古い、及び/又はそうでなければ未使用のデータをコンピュータメモリから除去することを指す。ガベージコレクションを伴わない場合、コンピュータストレージは乱雑になり得る、及び/又はコンピュータアプリケーションの実行方法やメモリそのものの動作方法に非効率性がもたらされ得る。ガベージコレクションは、複数のスレッドが並行して実行されることを伴い、例えばコンピュータメモリにおける未使用のデータを効果的に削除することで、乱雑になることや、その他の潜在的な非効率性を低減し得る。
【0013】
ガベージコレクション(GC)スレッドは、ガベージコレクションスレッドがメモリを探索する際に構築するタスクのキューを用いて、自らの作業を追跡することができる。しかしながら、ガベージコレクションスレッドのタスクがなくなると、そのガベージコレクションスレッド、例えばシーフスレッドは、そのそれぞれのキューにおいて未処理のタスクを有するオーナーのガベージコレクションスレッドから「作業を盗む」ことができる。換言すれば、ガベージコレクションスレッドのタスクがなくなると、このシーフスレッドは、オーナースレッドのキューからタスクを盗む。このように、GCシステムは、ガベージコレクションスレッド間でガベージコレクションの負荷を分散させる。しかしながら、このようにしてワークスティーリングを実行する場合、メモリの整合性の維持に関して計算コストが生じる。
【0014】
従って、本開示の実施形態は、シーフスレッドが他のガベージコレクションスレッドからタスクを盗む頻度を低下させるような方法で、ガベージコレクションキューを構築することができる。いくつかの実施形態において、ガベージコレクションスレッドは、それらのキューにおける重量級タスクを、シーフスレッドが盗むように配置することができる。重量級タスクは、比較的軽量級のタスクに比べて実行のための計算コストが相対的により高いガベージコレクションタスクであり得る。従って、シーフスレッドは、より軽量級のタスクの完了に伴う時間よりも多くの時間を盗まれた重量級タスクの完了に費やす可能性があり、そのため、スティール間の時間に遅延が生じる。このように、本開示の実施形態は、スティールの試みの頻度を低減し、負荷分散ワークスティーリングの効率を改善することができる。
【0015】
図1は、本開示のいくつかの実施形態に係る、負荷分散ワークスティーリング低減のための例示的なコンピューティングシステム100のブロック図である。コンピューティングシステム100は、メモリ102及びランタイム環境(ランタイム)104を含む。メモリ102は、コンピュータアプリケーションのデータ及びコンピュータ命令を記憶するコンピュータメモリであり得る。メモリ102は、コンピュータシステム100上で現在実行中の、又は実行を完了したコンピュータアプリケーションのデータ及びコンピュータ命令を表し得るアプリケーションオブジェクト106を含み得る。いくつかのシナリオにおいて、アプリケーションオブジェクト106は、
図2Aおよび
図2Bに関してより詳細に説明されるツリーグラフとして表され得る。
【0016】
再び
図1を参照すると、ランタイム104は、コンピュータアプリケーションが実行されるコンピューティング環境であり得る。更に、ランタイム104は、メモリ102、アプリケーションがどのようにして変数にアクセスし、アプリケーション間でパラメータを渡すためのメカニズムを提供し、オペレーティングシステム(図示せず)とインタフェースするかを管理し得る。ランタイム104は、Java Virtual Machine(登録商標)などのエンタープライズ及び/又はオープンソースプラットフォームにおける仮想マシンを含み得る。
【0017】
本開示のいくつかの実施形態によれば、ランタイム104は、ガベージコレクションマネジャ108及びガベージコレクションスレッド110を含み得る。ランタイム104は、ガベージコレクションマネジャ108及びガベージコレクションスレッド110を用いて、メモリにおける残余のアプリケーションオブジェクト106をクリーンアップすることにより、メモリ102を管理することができる。このように、ランタイム104は、メモリ102が乱雑になり、コンピュータシステム100上で実行されているアプリケーションのパフォーマンスを妨げることを防ぐための助けとなる。このように、ガベージコレクションマネジャ108は、ガベージコレクションスレッド110を用いてメモリ102における「ごみを収集」することができる。更に、ガベージコレクションスレッド110は、ワークスティーリングを実行することにより、ガベージコレクションの作業を負荷分散することができる。
【0018】
ガベージコレクション処理中、ガベージコレクションスレッド110は、ガベージコレクション(GC)オーナースレッド110-1及びGCシーフスレッド110-2を含み得る。前述の通り、ガベージコレクションスレッド110のうち1つがそのキュー112におけるタスクを完了すると、このスレッドは、別のスレッド、例えばGCオーナースレッド110-1のGCオーナーキュー112-1からタスクを「盗み」、盗まれたタスクを実行して、ガベージコレクションの負荷の分散を助けることができる。タスクを盗むガベージコレクションスレッド110は、そのため、GCシーフスレッド110-2と称される。
【0019】
前述の通り、ワークスティーリングは、計算コストが高く、コンピュータシステム100の効率を低下させ得る。従って、本開示のいくつかの実施形態において、ガベージコレクションマネジャ108は、GCシーフスレッド110-2が他のタスクよりも実行するのに相対的により長い時間を要する盗まれた作業、例えばタスクを提供することにより、ワークスティーリングの頻度及びその関連コストを低減することができる。例えば、GCシーフスレッド110-2がGCオーナースレッド110-1からタスクを盗むことを試みると、ガベージコレクションマネジャ108は、重量級タスクを、GCシーフスレッド110-2が盗むようにキューの先頭に置くことができる。従って、GCシーフスレッド110-2は、比較的より軽量級のタスクよりも、重量級タスクの実行により多くの時間を費やし得る。こうして、GCシーフスレッド110-2が盗まれたタスクを完了する場合、GCシーフスレッド110-2がGCオーナースレッド110-1から別のタスクを盗むまでにより長い遅延が生じる。このように、ガベージコレクションマネジャ108は、GCシーフスレッド110-2が実行する負荷分散ワークスティールの数を低減することができる。こうして、ガベージコレクションマネジャ108は、本開示の実施形態における負荷分散ワークスティーリングのパフォーマンスを改善することができる。
【0020】
図2Aは、本開示のいくつかの実施形態に係る、例示的なGCオーナーキュー202-1及びGCシーフキュー202-2のブロック図である。GCオーナーキュー202-1及びGCシーフキュー202-2はまた、GCキュー202と総称される。キュー202は、それぞれ名称を付されたアプリケーションオブジェクトに対するタスクを各々表す、アルファベット順にラベル付けされた円を含むシリンダとして表される。これらのアプリケーションオブジェクトは、
図1に関して説明されるアプリケーションオブジェクト106の例であり得る。再び
図2Aを参照すると、GCオーナーキュー202-1は、それぞれのアプリケーションオブジェクトに対するタスク、「b」、「c」、「d」、及び「a」を含む。加えて、キュー202は、キューの末尾(B)及び先頭(T)に対するポインタを示す矢印を有する。加えて、「プッシュ」及び「ポップ」操作は、それぞれタスク「b」を指し示す、及びタスク「b」から指し示す線で表されている。プッシュ操作は、キューに新たなエントリを追加する。これに対し、ポップ操作は、キューからアイテムを除去する。この例において、キュー202は、例示的なラストイン・ファーストアウト(LIFO)両端キューを表す。従って、末尾のタスクは、キュー202上でプッシュされた最後のタスクである。従って、タスク「b」はキューの末尾にあり、そのため、GCオーナーキュー202-1から読み取られ、除去される次のタスクである。更に、タスク「b」は、GCオーナースレッド110-1が実行する次のタスクである。これに対し、タスク「a」はキューの先頭にある。
【0021】
GCオーナーキュー202-1とは対照的に、GCシーフキュー202-2はタスクを有しない。それぞれB及びTの矢印は、明確にするために別々に表されている。しかしながら、GCシーフキュー202-2の末尾及び先頭は、同じ空のエントリを示している。この例は、GCシーフスレッド110-2がGCオーナーキュー202-1からタスクを「盗む」ことを試み得る時間を表している。この盗みの試みは、GCキュー202間の線によって示されている。キューの先頭で行われるポップ操作とは対照的に、ワークスティールは、キューの先頭にあるエントリ、例えばタスクaを伴う。本開示のいくつかの実施形態によれば、ガベージコレクションは、追加の基準が満たされる場合、ワークスティールの試みに応答してタスク「a」を配置することができる。例えば、ガベージコレクションマネジャ108は、GCオーナーキュー202-1におけるエントリの数が所定の閾値を満たし、且つそのタスク「a」が重量級タスクである場合に、タスク「a」をキューの先頭に移動させる。
【0022】
図2Bは、本開示のいくつかの実施形態に係る、例示的なGCキュー202のブロック図である。この例において、GCシーフスレッド110-2は、ワークスティールを完了している。従って、タスク「a」はGCオーナーキュー202-1から除去され、GCシーフキュー202-2にコピーされる。更に、GCオーナーキュー202-1の末尾が依然としてタスク「B」にある一方で、GCオーナーキュー202-1の先頭は現在タスク「d」にある。GCシーフキュー202-2に関し、末尾及び先頭の矢印は、明確にするために別々に配置されているが、同じエントリへのポインタを表している。従って、タスク「a」はGCシーフキュー202-2の先頭及び末尾にある。
【0023】
図3は、本開示のいくつかの実施形態に係る、負荷分散ワークスティーリング低減のための例示的なメモリ300のブロック図である。前述の通り、
図1に関して説明されるガベージコレクションスレッド110は、ガベージコレクションタスクを実行する。場合によっては、ガベージコレクションタスクは、並行コピーガベージコレクション(並行コピーGC)を伴い得る。並行コピーGCは、例えばエンタープライズ及びオープンソースJVMSの両方において用いられる。並行コピーGCは、ライブアプリケーションオブジェクトをメモリ内の新たなスペースにコピーすることを伴い得る。ライブアプリケーションオブジェクトは、コンピュータアプリケーションによって依然として使用されているアプリケーションオブジェクト106であり得る。これに対し、非アクティブアプリケーションオブジェクトは、新たなメモリスペースにコピーされない。非アクティブアプリケーションオブジェクトは、コンピュータアプリケーションによってもはや使用されていないアプリケーションオブジェクト106であり得る。非アクティブアプリケーションオブジェクトは、並行コピーGC中に新たなメモリスペースにコピーされないため、これらの非アクティブアプリケーションオブジェクトは、メモリ102から実質的に削除される。
【0024】
再び
図3を参照すると、メモリ300は、メモリスタック302、ヒープスペース304、GCオーナースレッドキュー306-1、及びGCシーフスレッドキュー306-2を含み得る。メモリスタック302は、アクティブアプリケーションオブジェクトへのポインタを有する、ランタイム104などのランタイムによって維持されるディレクトリであり得る。この例において、アプリケーションオブジェクト106は、「a」から「n」までのアルファベット順にラベル付けされている。スタック302からの矢印は、アプリケーションオブジェクトa及びbへのポインタを示している。アプリケーションオブジェクト106は、ツリー構造を用いて表され得る。ツリー構造は、個々のアプリケーションオブジェクト間の関係を示し得る。例えば、アプリケーションオブジェクトaは、アプリケーションオブジェクトd、e、及びfに関連している。アプリケーションオブジェクトaからアプリケーションオブジェクトd、e、及びfへの線は、アプリケーションオブジェクトaがアプリケーションオブジェクトd、e、及びfへのポインタを含むことを示し得る。これらの関係は、あるアプリケーションオブジェクト106から別のアプリケーションオブジェクトへの実行呼び出し、あるアプリケーションオブジェクトに記憶されたデータの、別のアプリケーションオブジェクトのコンピュータ命令による使用などを示し得る。
【0025】
ヒープスペース304は、ランタイム104がコンピュータアプリケーションのアプリケーションオブジェクト106を維持し得るメモリ300の領域であり得る。GCオーナースレッドキュー306-1及びGCシーフスレッドキュー306-2は、
図1に関して説明されたGCオーナースレッド110-1のGCオーナーキュー112-1及びGCシーフスレッド110-2のGCシーフキュー112-2と同様であり得る。再び
図3を参照すると、306-先頭及び306-末尾は、GCオーナーキュー及びGCシーフキューのそれぞれ先頭及び末尾のインデックスを表し得る。加えて、ヒープスペース304は、フロムスペース308及びトゥスペース310を含み得る。フロムスペース308は、ランタイム104がアプリケーションオブジェクト106のために使用している現在のメモリスペースであり得る。トゥスペース310は、ガベージコレクションスレッド110がライブアプリケーションオブジェクトをコピーしている新たなメモリスペースを表し得る。
【0026】
図示の通り、スタック302からも、任意の他のアプリケーションオブジェクトからも、アプリケーションオブジェクトk及びnへのポインタは存在しない。ポインタの欠如は、これらのアプリケーションオブジェクトが非アクティブアプリケーションオブジェクトであることを示し得る。従って、ガベージコレクションスレッド110は、アプリケーションオブジェクトk及びnをトゥスペース310にコピーせず、実質的にこれらのオブジェクトを削除し得る。
【0027】
より具体的には、並行コピーGCにおいて、ランタイム104は、GC時間中、すなわちガベージコレクションスレッド110の実行時に、コンピュータアプリケーションスレッドを一時停止することができる。更に、ガベージコレクションスレッド110は、1)トゥスペース310においてスペースを取得すること、2)アプリケーションオブジェクトをトゥスペース310において取得されたスペースにコピーすること、3)フロムスペース308における元のアプリケーションオブジェクトのヘッダ内のフォワーディングポインタを、トゥスペース310においてコピーされたオブジェクトを指し示すように設定すること、4)コピーされたオブジェクトA'におけるポインタを、元のオブジェクトがAによって参照されたオブジェクトである、別のコピーされたオブジェクトB'を指し示すように設定し、元のBに向けてコピーされたオブジェクトA'におけるポインタを除去すること、及び5)コピーされたアプリケーションオブジェクトをスキャンすることにより、他のアプリケーションオブジェクト106への参照を見つけること、によって、アプリケーションオブジェクトをコピーすることができる。アプリケーションオブジェクト106は、いくつかのアプリケーションオブジェクト106から参照され得るため、複数のガベージコレクションスレッド110は、コピー手順中に同じアプリケーションオブジェクトに到達し得る。このように、ガベージコレクションスレッド110は、アプリケーションオブジェクト106をアトミックにコピーする。1つのガベージコレクションスレッド110だけがアプリケーションオブジェクト106を首尾よくコピーできるため、フォワーディングポインタは、コンペア・アンド・スワップ操作を用いてアトミックに設定される。コンペア・アンド・スワップ操作に失敗するスレッドは、こうして、アプリケーションオブジェクト106のそのコピーを削除することができる。
【0028】
図4は、本開示のいくつかの実施形態に係る、負荷分散ワークスティーリング低減のための方法400の例示的なプロセスフロー図のブロック図である。ガベージコレクションマネジャ108などのガベージコレクションマネジャは、方法400を実行し得る。
【0029】
操作402において、ガベージコレクションマネジャ108は、GCシーフスレッド110-2などのシーフスレッドがワークスティールを試みたと判断することができる。ガベージコレクションマネジャ108は、GCシーフキュー112-2の先頭に対するローカルインデックスがグローバルインデックスと合致するかどうかに基づき、試みが発生したと判断することができる。合致しない場合は、GCシーフスレッド110-2がワークスティールを試みた。
【0030】
操作404において、ガベージコレクションマネジャ108は、オーナーキューにおけるタスクの数が所定の閾値を満たす、又は超過すると判断することができる。GCオーナーキュー112-1におけるタスクの数が相対的に少ない場合、ワークスティーリングを低減することは有用でない可能性がある。そのため、所定の閾値は、ワークスティールの低減が効率を改善するように、タスクの最小数を示し得る。
【0031】
操作406において、ガベージコレクションマネジャ108は、GCオーナーキュー112-1が、待ち行列に入れられた重量級タスクを有すると判断することができる。重量級タスクは、参照配列などの重量級アプリケーションオブジェクトのためのタスクであり得る。本開示のいくつかの実施形態において、アプリケーションオブジェクトが所定数より多いタスクを含む場合、アプリケーションオブジェクトは重量級タスクを表し得る。
【0032】
操作408において、ガベージコレクションマネジャ108は、重量級タスクをGCオーナーキュー112-1の先頭にプッシュすることができる。ガベージコレクションマネジャ108は、1)先頭ポインタへのインデックスをローカルにデクリメントすること、2)デクリメントされた先頭で重量級タスクのためのエントリを記憶すること、及び3)コンペア・アンド・スワップ(CAS)命令を用いて先頭ポインタをグローバルにアップデートすることにより、重量級タスクをGCオーナーキュー112-1の先頭にプッシュすることができる。CAS命令は、重量級タスクが既にトゥスペースにコピーされたかを判断することができる。そうでない場合、ガベージコレクションマネジャ108は、先頭ポインタをアップデートすることができる。
【0033】
図5は、本開示のいくつかの実施形態に係る、例示的なガベージコレクションマネジャ500のブロック図である。様々な実施形態において、ガベージコレクションマネジャ500は、ガベージコレクションマネジャ108と類似しており、
図4において説明された方法及び/又は
図1~
図3において論述された機能を実行することができる。いくつかの実施形態において、ガベージコレクションマネジャ500は、前述の方法及び/又は機能のための命令をクライアントマシンに提供し、これにより、クライアントマシンは、ガベージコレクションマネジャ500によって提供された命令に基づき、方法、又は方法の一部分を実行する。いくつかの実施形態において、ガベージコレクションマネジャ500は、複数のデバイスに組み込まれたハードウェア上で実行されるソフトウェアを含み得る。
【0034】
ガベージコレクションマネジャ500は、メモリ525、ストレージ530、相互接続(例えば、BUS)520、1つ又は複数のCPU505(本明細書においてプロセッサ505とも称される)、I/Oデバイスインタフェース510、I/Oデバイス512、及びネットワークインタフェース515を含む。
【0035】
各CPU505は、メモリ525又はストレージ530に格納されたプログラミング命令を取得及び実行する。相互接続520は、CPU505、I/Oデバイスインタフェース510、ストレージ530、ネットワークインタフェース515、及びメモリ525との間でプログラミング命令などのデータを移動させるために用いられる。相互接続520は、1つ又は複数のバスを用いて実装され得る。CPU505は、様々な実施形態において、単一のCPU、複数のCPU、又は複数の処理コアを有する単一のCPUであり得る。いくつかの実施形態において、CPU505は、デジタル信号プロセッサ(DSP)であり得る。いくつかの実施形態において、CPU505は、1つ又は複数の3D集積回路(3DIC)(例えば、3Dウェハレベルパッケージ(3DWLP)、3Dインターポーザベースインテグレーション、3D積層IC(3D-SIC)、モノリシック3D IC、3D異種インテグレーション、3Dシステムインパッケージ(3DSiP)、及び/又はパッケージオンパッケージ(PoP)のCPU構成)を含む。メモリ525は概して、ランダムアクセスメモリ(例えば、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)又はフラッシュ)を代表するように含まれる。ストレージ530は概して、ハードディスクドライブ、ソリッドステートデバイス(SSD)、取り外し可能メモリカード、光ストレージ、及び/又はフラッシュメモリデバイスなどの不揮発性メモリを代表するように含まれる。加えて、ストレージ530は、ストレージ領域ネットワーク(SAN)デバイス、クラウド、又はI/Oデバイスインタフェース510を介してガベージコレクションマネジャ500に、又はネットワークインタフェース515を介してネットワーク550に接続された他のデバイスを含み得る。
【0036】
いくつかの実施形態において、メモリ525は、命令560を格納する。しかしながら、様々な実施形態において、命令560は、部分的にメモリ525に、かつ、部分的にストレージ530に格納されるか、全体的にメモリ525に、又は全体的にストレージ530に格納されるか、ネットワークインタフェース515を介してネットワーク550上でアクセスされる。
【0037】
命令560は、
図3において説明された方法、及び/又は
図1、
図2A、
図2Bにおいて論述された機能のいずれかの任意の部分、又は全てを実行するためのプロセッサ実行可能命令であり得る。
【0038】
様々な実施形態において、I/Oデバイス512は、情報の提示及び入力の受信ができるインタフェースを含む。例えば、I/Oデバイス512は、ガベージコレクションマネジャ500とインタラクトするリスナーに情報を提示し、リスナーからの入力を受信することができる。
【0039】
ガベージコレクションマネジャ500は、ネットワークインタフェース515を介してネットワーク550に接続される。ネットワーク550は、物理ネットワーク、無線ネットワーク、セルラネットワーク又は異なるネットワークを備え得る。
【0040】
いくつかの実施形態において、ガベージコレクションマネジャ500は、マルチユーザメインフレームコンピュータシステム、シングルユーザシステム、又はサーバコンピュータ、又は、ダイレクトユーザインタフェースを殆ど又は全く有しないものの、他のコンピュータシステム(クライアント)からのリクエストを受信する類似のデバイスであり得る。更に、いくつかの実施形態において、ガベージコレクションマネジャ500は、デスクトップコンピュータ、ポータブルコンピュータ、ラップトップ又はノートブックコンピュータ、タブレットコンピュータ、ポケットコンピュータ、電話、スマートフォン、ネットワークスイッチ又はルータ、又は任意の他の適切なタイプの電子デバイスとして実装され得る。
【0041】
図5は例示的なガベージコレクションマネジャ500の代表的な主要コンポーネントを示すことを意図していることに留意されたい。しかしながら、いくつかの実施形態において、個々のコンポーネントは、
図5に表されるよりも高いか低い複雑度を有する可能性があり、
図5に示されるもの以外の、又は
図5に示されるものとは他のコンポーネントが存在する可能性があり、そのようなコンポーネントの数、タイプ及び構成は、変わる可能性がある。
【0042】
本発明は、任意の考えられる技術詳細レベルで統合化されたシステム、方法、及び/又はコンピュータプログラム製品であり得る。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体(又は複数のコンピュータ可読記憶媒体)を含み得る。
【0043】
コンピュータ可読記憶媒体は、命令実行デバイスにより使用される命令を保持及び記憶可能な有形デバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、又は、上述のものの任意の好適な組み合わせであり得るが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非包括的なリストは、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラマブルリードオンリメモリ(EPROM又はフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスクリードオンリメモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピディスク、パンチカード又は命令が記録されている溝内の隆起構造などの機械的に符号化されたデバイス、及び、上述のものの任意の好適な組み合わせを含む。本明細書において使用されるコンピュータ可読記憶媒体は、電波又は他の自由に伝播する電磁波、導波路又は他の伝送媒体を通って伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、又はワイヤを通じて伝送される電気信号等、それ自体が一時的な信号であると解釈されるべきではない。
【0044】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスにダウンロードされてもよく、又は、ネットワーク、例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク、及び/又は無線ネットワークを介して、外部コンピュータ又は外部記憶デバイスにダウンロードされてもよい。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、及び/又はエッジサーバを備え得る。各コンピューティング/処理デバイス内のネットワークアダプタカード又はネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、当該コンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するために転送する。
【0045】
本発明の動作を実行するコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路の構成データであってもよく、Smalltalk(登録商標)又はC++等のようなオブジェクト指向プログラミング言語、及び「C」プログラミング言語又は同様のプログラミング言語のような手続き型プログラミング言語を含む1つ又は複数のプログラミング言語の任意の組み合わせで記述したソースコード又はオブジェクトコードであってもよい。コンピュータ可読プログラム命令は、スタンドアロンのソフトウェアパッケージとして、ユーザのコンピュータ上で全体を実行すること、ユーザのコンピュータ上で一部分を実行することができ、ユーザのコンピュータ上で一部分を、リモートコンピュータ上で一部分を実行すること、又は、リモートコンピュータ又はサーバ上で全体を実行することができる。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、又は、その接続は、外部コンピュータに対して(例えば、インターネットサービスプロバイダを使用してインターネットを介して)行われてもよい。いくつかの実施形態において、例えば、プログラマブルロジック回路、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラマブルロジックアレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用することによってコンピュータ可読プログラム命令を実行して、電子回路をパーソナライズしてよい。
【0046】
本発明の態様は、本明細書において、本発明の実施形態による方法、装置(システム)、及び、コンピュータプログラム製品のフローチャート図及び/又はブロック図を参照して説明されている。フローチャート図及び/又はブロック図の各々のブロック及び、フローチャート図及び/又はブロック図におけるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装できることが理解されよう。
【0047】
これらのコンピュータ可読プログラム命令をコンピュータ、又は他のプログラマブルデータ処理装置のプロセッサに提供してマシンを生み出してよく、それにより、コンピュータ又は他のプログラマブルデータ処理装置のプロセッサを介して実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックで指定された機能/動作を実装する手段を作成するようになる。また、これらのコンピュータ可読プログラム命令は、コンピュータ、プログラマブルデータ処理装置、及び/又は他のデバイスに特定の様式で機能するように指示することが可能なコンピュータ可読記憶媒体にも記憶することができ、これにより、命令を記憶したコンピュータ可読記憶媒体が、フローチャート及び/又はブロック図の1つ又は複数のブロックで指定される機能/動作の態様を実装する命令を含む製品を含むようになる。
【0048】
また、コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブルデータ処理装置、又は、他のデバイスにロードして、コンピュータ、他のプログラマブル装置、又は、他のデバイス上で一連の動作ステップを実行させることでコンピュータ実装プロセスを作成することもでき、これにより、コンピュータ、他のプログラマブル装置、又は、他のデバイス上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックで指定される機能/動作を実装するようになる。
【0049】
図面におけるフローチャート及びブロック図は、本発明の様々な実施形態に係るシステム、方法、及びコンピュータプログラム製品の考えられる実装形態のアーキテクチャ、機能、及び動作を示している。これに関して、フローチャート又はブロック図における各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む命令のモジュール、セグメント、又は、一部分を表し得る。いくつかの代替的な実装形態において、ブロックに記されている機能は、図面に記されている順序とは異なる順序で行われ得る。例えば、連続して示されている2つのブロックは、実際には、1つの段階として達成されても、同時に、実質的に同時に、部分的に若しくは全体的に時間重複する形で実行されてもよいし、ブロックは、関与する機能に依存して逆の順序で実行される場合もあり得る。ブロック図及び/又はフローチャート図の各ブロック、及び、ブロック図及び/又はフローチャート図におけるブロックの組み合わせが、指定された機能又は動作を実行する、又は特定用途向けハードウェア及びコンピュータ命令の組み合わせを実行する、特定用途向けのハードウェアベースのシステムによって実装され得ることにも留意されたい。
【手続補正書】
【提出日】2023-06-02
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
シーフスレッドがガベージコレクション(GC)オーナーキューからのワークスティールを試みたと判断する段階;
前記GCオーナーキューにおけるタスクの数が所定の閾値を満たすと判断する段階;
前記GCオーナーキューが重量級タスクを有すると判断する段階;
前記重量級タスクを前記GCオーナーキューの先頭位置に移動させる段階
を備える、コンピュータ実装方法。
【請求項2】
前記重量級タスクを移動させる段階は:
前記GCオーナーキューの前記先頭位置へのローカルポインタをデクリメントする段階;及び
前記先頭位置への前記デクリメントされたローカルポインタで、前記重量級タスクを記憶する段階
を有する、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記重量級タスクを移動させる段階は:
前記GCオーナーキューの前記先頭位置への前記デクリメントされたローカルポインタ及びグローバルポインタに対してコンペア・アンド・スワップを実行する段階;
前記重量級タスクがヒープスペースのトゥスペースにコピーされないと判断する段階;及び
前記グローバルポインタを前記デクリメントされたローカルポインタにアップデートする段階
を更に有する、請求項2に記載のコンピュータ実装方法。
【請求項4】
前記重量級タスクは、参照配列を含むアプリケーションオブジェクトのためのガベージコレクションタスクを有する、請求項1
から3のいずれか一項に記載のコンピュータ実装方法。
【請求項5】
前記重量級タスクは、所定のタスク参照閾値を超過する他のアプリケーションオブジェクトへの参照の数を有する、請求項1
から4のいずれか一項に記載のコンピュータ実装方法。
【請求項6】
前記GCオーナーキューは、両端キューを有する、請求項1
から5のいずれか一項に記載のコンピュータ実装方法。
【請求項7】
前記GCオーナーキューは、ラストイン・ファーストアウトキューを有する、請求項6に記載のコンピュータ実装方法。
【請求項8】
プログラム命令を備え、前記プログラム命令は、1つ又は複数のプロセッサに:
シーフスレッドがガベージコレクション(GC)オーナーキューからのワークスティールを試みたと判断する手順;
前記GCオーナーキューにおけるタスクの数が所定の閾値を満たすと判断する手順;
前記GCオーナーキューが重量級タスクを含むと判断する手順;及び
前記重量級タスクを前記GCオーナーキューの先頭位置に移動させる手順
を含む方法を実行させるように構成された命令を有する
コンピュータプログラ
ム。
【請求項9】
前記重量級タスクを移動させる手順は:
前記GCオーナーキューの前記先頭位置へのローカルポインタをデクリメントする手順;及び
前記先頭位置への前記デクリメントされたローカルポインタで、前記重量級タスクを記憶する手順
を有する、請求項8に記載のコンピュータプログラ
ム。
【請求項10】
前記重量級タスクを移動させる手順は:
前記GCオーナーキューの前記先頭位置への前記デクリメントされたローカルポインタ及びグローバルポインタに対してコンペア・アンド・スワップを実行する手順;
前記コンペア・アンド・スワップが成功したと判断する手順;及び
前記グローバルポインタを前記デクリメントされたローカルポインタにアップデートする手順
を更に有する、請求項9に記載のコンピュータプログラ
ム。
【請求項11】
前記重量級タスクは、参照配列を有するアプリケーションオブジェクトのためのガベージコレクションタスクを有する、請求項8
から10のいずれか一項に記載のコンピュータプログラ
ム。
【請求項12】
前記重量級タスクは、所定のタスク参照閾値を超過する他のアプリケーションオブジェクトへの参照の数を有する、請求項8
から11のいずれか一項に記載のコンピュータプログラ
ム。
【請求項13】
前記GCオーナーキューは、両端キューを備える、請求項8
から12のいずれか一項に記載のコンピュータプログラ
ム。
【請求項14】
前記GCオーナーキューは、ラストイン・ファーストアウトキューを備える、請求項13に記載のコンピュータプログラ
ム。
【請求項15】
1つ又は複数のコンピュータ処理回路;及び
前記1つ又は複数のコンピュータ処理回路により実行されると、前記1つ又は複数のコンピュータ処理回路に:
シーフスレッドがガベージコレクション(GC)オーナーキューからのワークスティールを試みたと判断する段階;
前記GCオーナーキューにおけるタスクの数が所定の閾値を満たすと判断する段階;
前記GCオーナーキューが重量級タスクを含むと判断する段階;及び
前記重量級タスクを前記GCオーナーキューの先頭位置に移動させる段階
を有する方法を実行させるように構成されたプログラム命令を記憶する、1つ又は複数のコンピュータ可読記憶媒体
を備える、システム。
【請求項16】
前記重量級タスクを移動させる手順は:
前記GCオーナーキューの前記先頭位置へのローカルポインタをデクリメントする手順;及び
前記先頭位置への前記デクリメントされたローカルポインタで、前記重量級タスクを記憶する手順
を有する、請求項15に記載のシステム。
【請求項17】
前記重量級タスクを移動させる手順は:
前記GCオーナーキューの前記先頭位置への前記デクリメントされたローカルポインタ及びグローバルポインタに対してコンペア・アンド・スワップを実行する手順;
前記コンペア・アンド・スワップが成功したと判断する手順;及び
前記グローバルポインタを前記デクリメントされたローカルポインタにアップデートする手順
を更に有する、請求項16に記載のシステム。
【請求項18】
前記重量級タスクは、参照配列を有するアプリケーションオブジェクトのためのガベージコレクションタスクを有する、請求項15
から17のいずれか一項に記載のシステム。
【請求項19】
前記重量級タスクは、所定のタスク参照閾値を超過する他のアプリケーションオブジェクトへの参照の数を有する、請求項15
から18のいずれか一項に記載のシステム。
【請求項20】
前記GCオーナーキューは、両端キュー及びラストイン・ファーストアウトキューを有する、請求項15
から19のいずれか一項に記載のシステム。
【国際調査報告】