JP2022070218A - 方法、システム、コンピュータ・プログラム、及びコンピュータ可読ストレージ媒体(積極的なプリフェッチをサポートするための高速キャッシュ追跡) - Google Patents
方法、システム、コンピュータ・プログラム、及びコンピュータ可読ストレージ媒体(積極的なプリフェッチをサポートするための高速キャッシュ追跡) Download PDFInfo
- Publication number
- JP2022070218A JP2022070218A JP2021167837A JP2021167837A JP2022070218A JP 2022070218 A JP2022070218 A JP 2022070218A JP 2021167837 A JP2021167837 A JP 2021167837A JP 2021167837 A JP2021167837 A JP 2021167837A JP 2022070218 A JP2022070218 A JP 2022070218A
- Authority
- JP
- Japan
- Prior art keywords
- address
- bloom filter
- candidate
- cache
- computer
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000004590 computer program Methods 0.000 title claims abstract description 19
- 239000013598 vector Substances 0.000 claims description 26
- 238000012545 processing Methods 0.000 claims description 12
- 238000011010 flushing procedure Methods 0.000 claims description 3
- 238000012544 monitoring process Methods 0.000 abstract description 6
- 238000004422 calculation algorithm Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 13
- 230000009471 action Effects 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002123 temporal effect Effects 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 239000000835 fiber Substances 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000005352 clarification Methods 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1021—Hit rate improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/602—Details relating to cache prefetching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
Description
本開示の態様は、キャッシュ・コンテンツを監視するためのシステム及び方法に関する。より具体的な態様は、キャッシュ・ヒットを検知し、プリフェッチ候補のアドレスを決定し、ブルーム・フィルタに基づいてプリフェッチ候補をプリフェッチするかどうかを決定し、キャッシュ書き込みに基づいてブルーム・フィルタを保持するためのシステムに関する。
現代のコンピューティング・システムのほとんど全ては、何らかの形でキャッシュを利用している。キャッシュは、本質的に、情報の一時的なローカル・コピーの役割を果たす。キャッシュへのアクセスは、(ハード・ドライブもしくはメイン・メモリ又はその両方などの)より長期もしくは大容量又はその両方のストレージからデータを読み出すよりも、時間的にも電力的にも著しく効率が良い。
プリフェッチは、アプリケーションが必要とする時間のかかるストレージ・アクセスの数を減らそうと試みるために、ますます一般的になっている方法である。所望のライン(命令であろうと又はデータのセグメントであろうと)がキャッシュに格納されていない場合、より長期のストレージから読み出す必要があることがあり、それには著しい時間的損失が伴う。プリフェッチは、データ/命令が小さいグループで頻繁に呼び出されることを認識する「時間的局所性(temporal locality)」として知られる概念を利用する。例えば、アドレス0003のデータが呼び出された場合、時間的局所性は、アドレス0004、0005及び0006のデータが近い将来呼び出される可能性が高いことを示唆する。従って、アドレス0003のデータの呼び出しを検知すると、多くのプリフェッチ・システムは、先取りして(preemptively)、アドレス0004~0006をキャッシュに読み出すことがある。このようにして、アドレス0004~0006が次に実際に呼び出された場合、これらの呼出しは、キャッシュ・ヒットとなる。
キャッシュ・コンテンツを監視するためのシステム、方法、コンピュータ・プログラム及びコンピュータ可読ストレージ媒体を提供する。
本開示の幾つかの実施形態は、方法として例示することができる。本方法は、候補アドレスを予測することを含む。本方法は、候補アドレスのハッシュを計算することをさらに含む。本方法は、ハッシュに基づいてブルーム・フィルタをチェックすることも含む。本方法は、(チェックに基づいて)候補アドレスに格納された情報をプリフェッチすることを決定することも含む。
本開示の幾つかの実施形態は、そこに具体化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含むコンピュータ・プログラム製品としても例示することができ、このプログラム命令は、上述した方法をコンピュータに実行させるために、コンピュータによって実行可能である。
本開示の幾つかの実施形態は、システムとして図示することができる。システムは、メモリと、コントローラ又は中央処理ユニット(CPU)などの処理ユニットとを含むことができる。処理ユニットは、上述の方法を実行するために命令を実行するように構成することができる。
上記の概要は、本開示の例示される各実施形態又はあらゆる実装を説明することを意図したものではない。
図面は本出願に含まれ、本明細書に組み入れられ、本明細書の一部を形成する。図面は、本開示の実施形態を説明し、記述と共に本開示の原理を説明する働きをする。図面は、特定の実施形態の例証に過ぎず、本開示を限定するものでない。特許請求される主題の種々の実施形態の特徴及び利点は、以下の詳細な説明が進むにつれて、同様の番号が同様の部品を示す図面を参照することで明らかになるであろう。
本発明は、種々の変更及び代替的な形態に修正可能であるが、その具体的な内容は、図面に例として示されており、詳細に説明されるであろう。しかしながら、本発明を説明した特定の実施形態に限定する意図はないことを理解されたい。それどころか、本発明の趣旨及び範囲内に入る全ての変更、同等物、及び代替物を網羅することが意図される。
本開示の態様は、キャッシュ・コンテンツを監視するためのシステム及び方法に関する。より具体的な態様は、キャッシュ・ヒットを検知し、プリフェッチ候補のアドレスを決定し、ブルーム・フィルタに基づいてプリフェッチ候補をプリフェッチするかどうかを決定し、キャッシュ書き込みに基づいてブルーム・フィルタを保持するためのシステムに関する。
本開示の全体を通じて、「データ」、「命令」及び「情報」について言及される。多くのシステムでは、別個のデータ・キャッシュ(Dキャッシュ)及び命令キャッシュ(Iキャッシュ)を実装する。本開示に一致するシステム及び方法は、データと命令の区別がないシステムと同様に、どちらか(又は両方)の性能を向上させることができる。従って、混乱を避けるために、「情報」という用語は、「データ」及び「命令」の両方の一般化された形態として使用される。本明細書では、「キャッシュ」は情報を格納するものとして記述されるが、これは、データを格納するDキャッシュ又は命令を格納するIキャッシュ、並びにページング及び単一レベル・ストアなどの他のメモリ管理技術を指す場合がある。
本開示の全体を通して、「プリフェッチ」並びにプリフェッチするかどうかの決定について言及される。本明細書で説明される場合、プリフェッチとは、情報をメモリからキャッシュに「先取りして」読み出すこと(必要とされる前にメモリからキャッシュに情報を読み出すこと)を指す。情報をプリフェッチするかどうかを決定する際、本明細書ではその情報を「プリフェッチ候補」と呼び、その情報が格納されているメモリ・アドレスを「候補アドレス」と呼ぶ。
本開示の全体を通して、「アドレス」及び「インデックス」について言及される。本明細書で説明される場合、「アドレス」は、メモリ(ランダム・アクセス・メモリ(RAM)などの揮発性メモリ、又はハードディスク・ドライブ(HDD)などの不揮発性メモリを指すことがある)のアドレスを指す。この情報は、メモリ内の特定のアドレスに格納される。また、この情報は、キャッシュ内の特定のキャッシュ・アドレスに格納されることもある。しかしながら、本開示の目的のために、「アドレス」は、メモリ内の特定の場所を指す。本開示では、キャッシュの状態を追跡するために使用される1つ又は複数のアレイもしくはベクトル又はその両方について言及される。情報の「アドレス」は、ハッシュされ(又は他の方法で変換され)、ベクトルなどのデータ構造の対応する「インデックス」を生成する。この2つは関連するが、交換可能なものではない。所与のインデックスに格納されているベクトルの値は、対応するアドレスに格納されている情報が現在もキャッシュに格納されているかどうかを知らせるために使用される。
本開示の全体を通して、ブルーム・フィルタ(Bloom filter)について言及される。本明細書で説明される場合、ブルーム・フィルタとは、確率的なデータ構造(例えば、1次元の配列又はベクトル)を指す。ブルーム・フィルタは、キャッシュのコンテンツを監視/追跡するために更新される。一般的に、ブルーム・フィルタは、「0」又は「1」のいずれかの値をもつ(本明細書では、「バイナリ」ブルーム・フィルタと呼ばれる)。この値は、特定の情報がキャッシュされたことを反映するために、キャッシュの書込みが発生したときに更新することができる。例示的な例として、幾つかの実施形態では、メモリ内のアドレスに格納された情報がキャッシュに書き込まれるたびに、これを反映して、ブルーム・フィルタのインデックスの値が「1」に設定される。このインデックスは、キャッシュされた情報のメモリ・アドレスに依存する。例示的実施形態では、キャッシュに書き込まれた情報のアドレスがハッシュされ、そのハッシュされた結果がブルーム・フィルタのインデックスとして使用される。従って、システムは、アドレスをハッシュし、(アドレスのハッシュに対応するブルーム・フィルタのインデックスにおける)ブルーム・フィルタの値が「1」であるか又は「0」であるかをチェックすることによって、所与のアドレスの情報がキャッシュされているかどうかをチェックすることができる。
とりわけ、アドレスに対して使用されるハッシュ・アルゴリズムは、必ずしも一意の出力を提供せず、これにより、アドレス空間のサイズよりも少ないインデックスでブルーム・フィルタを使用することが可能になるが、その代償として「偽陽性(false positive)」の可能性が出てくる。例えば、アドレスAとアドレスBの両方がインデックスXにハッシュされる場合、インデックスXのブルーム・フィルタの値は、A又はBのどちらかがキャッシュされたときに更新される。例えば、アドレスAに格納された情報をキャッシュすると、Xが「1」に設定される。その後のアドレスBがキャッシュされているかどうかの判断では、インデックスX(Aのために「1」である)をチェックすると、アドレスBが実際にキャッシュされているかどうかに関係なく、アドレスBがキャッシュされていることが示される。ハッシュ・アルゴリズム/ブルーム・フィルタのサイズを適切に微調整/調整することによって、性能を著しく向上させることができる。単純なインデックス計算アルゴリズムでは、キャッシュ・ライン・アドレス(キャッシュ・ライン・オフセット・ビットを取り除いた後のアドレス)の最下位ビットを必要な数だけ使用する。例えば、1024エントリのブルーム・フィルタにアクセスするには、キャッシュ・ライン・アドレスの10個の最下位ビットだけを使用することができる。より高度なハッシュ・アルゴリズムでは、XOR関数をキャッシュ・ライン・アドレスの追加ビットに適用して、アドレスの20~30ビットを10ビットのインデックスに圧縮することができる。これにより、ブルーム・フィルタの使用量をより均一にすることができる。同様に、ブルーム・フィルタ自体のサイズも、キャッシュのサイズ、及びプロセッサ上で実行される典型的なワークロードのフットプリントに応じて調整することができる。殆どの場合、1024エントリのサイズで、十分なカバレージが得られることが分かっている。
当業者により理解されるように、あるアドレスが呼び出されると、(時間的局所性(temporal locality)に基づいて)次の幾つかのアドレスが呼び出される可能性が高い。そのため、あるアドレスが読み出されたときに、次のアドレスのセットをプリフェッチすることにより、一連のキャッシュ・ヒットが発生する可能性がある。しかしながら、プリフェッチされた候補が既にキャッシュ内に入っていた場合、プリフェッチしなくてもキャッシュ・ヒットになっていたので、プリフェッチが冗長で無駄なものになってしまう。プリフェッチが必要かどうかを検証するためには、キャッシュ・ディレクトリに問い合わせを行う必要があるため、このような「未使用」のプリフェッチの電力コストは特に高くなることがある。このようなクエリは、特に連想度の高いキャッシュの場合、多くの電力を消費する。時間的局所性の概念は、キャッシュのコンテンツにも適用できるため、キャッシュ・ヒット後のプリフェッチは、特に無駄な作業になりがちである。
明確化のための例として、情報は、命令「Xに3を加える(Add 3 to X)」とすることができる。この情報は、アドレス5350のメモリに格納することができる。アドレス5350が呼び出されると、命令「Xに3を加える」がキャッシュに書き込まれる。これが起こると、アドレス(5350)はハッシュされる。簡単な例として、ハッシュ・アルゴリズムは、アドレスの下2桁を取るだけでよいので、ここでのハッシュ結果は50(5350の下2桁は50である)となる。アドレスのハッシュ結果は、ブルーム・フィルタのインデックスとして使用される。このインデックスのフィルタの値は、「1」に設定される。従って、この例では、命令「Xに3を加える」がキャッシュに書き込まれると、ベクトル内の50番目のエントリが「1」に設定される(簡単にするために、これらの値は10進数である)。その後、ブルーム・フィルタをチェックして、アドレス5350に格納された情報(すなわち、「Xに3を加える」)がキャッシュされているかどうかを判断することができる。このチェックを行うために、アドレスが再びハッシュされ(再び50になる)、ハッシュの結果がインデックスとして使用される(従って、ブルーム・フィルタの50番目の値がチェックされる)。値が「1」であることから、これは、当該アドレス(5350)に格納された情報がキャッシュ内にあることを示す。
候補がキャッシュされていない場合、それらをプリフェッチすることで、キャッシュ・ミスではなくキャッシュ・ヒットがもたらされ、大幅に時間を節約することができる。しかしながら、候補が既にキャッシュされている場合、それらをプリフェッチすることは冗長であるため、プリフェッチに必要な電力、時間、リソースを無駄にしてしまう。従って、「積極的な(aggressive)」プリフェッチ・スキーム(例えば、呼び出されたアドレスに続く5つの後続アドレスを自動的にプリフェッチするなど)は、節約するよりも多くのリソースを費やすことになる場合がある。従って、本開示に一致するシステム及び方法は、候補が既にキャッシュ内にあるかどうかを判断して、それらをプリフェッチするかどうかの決定を知らせる、計算負荷の少ない方法を提供する。候補が既にキャッシュされている場合、候補のプリフェッチを控えることで、重複した作業及び電力を節約することができる。
しかしながら、キャッシュのコンテンツを追跡するために1つ又は複数のブルーム・フィルタを保持することで、他の方法では頻繁に電力を浪費する可能性のある「積極的な」プリフェッチ・スキームを有利に実現することができる。幾つかのシステムは、複数のキャッシュ、すなわち命令キャッシュ(Iキャッシュ)及びデータ・キャッシュ(Dキャッシュ)を実装する。命令は、一般的には、データ・キャッシュ(Dキャッシュ)からのデータと比較すると、比較的小さい局所的グループで読み出される。例えば、データを読み出す際には、何千個ものアドレスを順番に読み出すのが一般的であり得るが、命令は通常、おおよそ3乃至10個のグループで読み出される。このように、Dキャッシュと対比したIキャッシュの文脈では、積極的なプリフェッチが無駄になる可能性が著しく大きくなる。
例えば、数千個のデータ・アドレスをプリフェッチすると、少なくとも幾つかの無駄な作業が発生する可能性があるが(例えば、プリフェッチされたアドレスの一部に格納された情報が、既にキャッシュされている可能性が高い)、他のプリフェッチによって節約された時間と電力(キャッシュ・ミスだったものが、キャッシュ・ヒットになる)は、一般的に大きな性能の向上につながる。しかしながら、Iキャッシュで扱うより小さなグループでは、プリフェッチのコストが節約を上回るためには、無駄なプリフェッチがわずかしか許容されない。単純な例として、3,000回のうちの50回の無駄なプリフェッチ(一般的なデータ読出し)は、2,950回のキャッシュ・ミスをキャッシュ・ヒットに変えることの利点と比較すると、取るに足らない量のリソースの浪費である。一方、3つのうち2つの無駄なプリフェッチ(一般的な命令読出し)は、結果として得られる単一のキャッシュ・ヒットの節約よりもコストがかかる場合がある。このようなリスクを考慮すると、多くのシステムでは、可能な利益が相応のリスクを上回るため、Iキャッシュの文脈で積極的にプリフェッチを行わない。このように、本開示と一致するシステム及び方法は、命令キャッシュ(Iキャッシュ)に適用された場合に特に有利であるが、Dキャッシュに適用した場合にも依然として性能の向上をもたらす。
キャッシュが書き込まれると、ブルーム・フィルタの値が「1」に設定されるため、時間の経過と共にブルーム・フィルタが飽和状態になり、そのままにしておくと最終的に全ての値が「1」になってしまう。これに対処するため、幾つかの実施形態では、ブルーム・フィルタを定期的にフラッシュして、全ての値を「0」にする。幾つかの実施形態では、情報がキャッシュから削除(evict)されるたびに、ブルーム・フィルタの対応するインデックスが「0」に設定されることがあるが、これは、ハッシュ時に同じインデックスに対応する他のアドレスに対する偽陰性(false negative)を引き起こす場合がある。
ブルーム・フィルタは、幾つかの実施形態では、本明細書において「ライフ・サイクル」を有すると説明されることがあり、これらのライフ・サイクルに対して「古い(old)」又は「若い(young)」と言及される。ブルーム・フィルタがフラッシュされた後、新たにフラッシュされたフィルタの後続のルックアップは、キャッシュの状態にかかわらず、陰性を返す可能性が高い。時間の経過と共に、情報がキャッシュに書き込まれると、フィルタの値は「0」から「1」に変化するため、キャッシュが書き込まれると、新たにフラッシュされたフィルタは「成熟(mature)」する。最も若い(最も最近(most-recently)フラッシュされた)フィルタから返される可能性の高い偽陰性を軽減するために、本開示の多くの実施形態では、少なくとも2つの異なるフィルタを利用する。例えば、幾つかの実施形態では、フィルタの寿命を10,000サイクルに設定し、これは10,000サイクルごとにフィルタをフラッシュすることを意味する。しかしながら、2つのフィルタを使用すると、フラッシュは5,000サイクルのオフセットをすることができる。
例示的な例として(しかし、例示目的で上述した「偽陽性」の可能性を一時的に無視して)、あるデータ・アドレスが7,000サイクル前(すなわち、若い方のフィルタがフラッシュされる前)にキャッシュされていた場合、そのアドレスは古い方のフィルタにしか現れない。言い換えれば、古い方のフィルタは、そのアドレスのハッシュに対応するインデックスに「1」の値があるが、若い方のフィルタでは、同じインデックスに「0」の値があることになる。しかしながら、12,000サイクル前(すなわち、両方のフィルタがフラッシュされる前)にデータ・アドレスがキャッシュされた場合、データ・アドレスは、どちらのフィルタにも現れない。一方、最も若いフィルタがフラッシュされた後にデータ・アドレスがキャッシュされた場合、両方のフィルタとも、データ・アドレスがキャッシュされたことを示す。
あるアドレスが既にキャッシュされているかどうかを判断するためにフィルタをチェックする際、システムは、2つの(又はそれより多い)フィルタの論理和を取ることができる。これにより、最も若いフィルタの偽陰性が緩和される。キャッシュが書き込まれるたびに、全てのブルーム・フィルタの対応するインデックスが「1」に設定され得る。従って、フィルタの論理和をチェックすることは、事実上、最も古いフィルタをチェックすることと同じである(ただし、論理和を取ることは、どのフィルタが最も長くフラッシュされていないかを追跡して判断するよりも、速く、より効率的であり得る)。
幾つかの実施形態では、上述した「バイナリ」ブルーム・フィルタのように、特に値を「1」に設定するのではなく、値をインクリメントさせることができる。このようにして、ブルーム・フィルタは、特定の出力にハッシュされた(キャッシュに書き込まれた情報の)アドレスの回数を表すことができる。幾つかの実施形態では、そのような複数のブルーム・フィルタが実装されてもよく、フィルタをチェックすることは、各インデックスの最大値を取ることを含む(例えば、2つのフィルタが[0,0,1,0]及び[1,0,3,0]である場合、フィルタをチェックするシステムは、[1,0,3,0]からの値をチェックすることができる)。「バイナリ」フィルタ(値が「1」又は「0」のいずれかに限定されるフィルタ)に関して上述した論理和と同様に、これは「最も古い」フィルタをチェックすることと機能的に同じである。本開示では、より単純な「バイナリ」フィルタの実施形態に焦点を当てているが、これは制限することを意図したものではない。当業者により理解されように、2つより多い可能な値をもつブルーム・フィルタを、最小限の変更で実装することができる。
幾つかの実施形態では、使用するハッシュ・アルゴリズムの特定の特性(又は「挙動」)の知識によって、プリフェッチするかどうかの決定に、さらに情報を与えることができる。例えば、異なるハッシュ・アルゴリズムは、様々なサイズの「出力空間」(可能な入力範囲が与えられた場合の可能な出力値の範囲)を有することができる。これは、特定の出力にハッシュされたアドレスをもつ命令が何回キャッシュされたかを追跡することと組み合わせて利用することができる(例えば、所与の命令が既にキャッシュされている可能性をより正確に求めるために)。簡単な例として、ハッシュ・アルゴリズムは、入力アドレスを単に2で割って、切り捨てるものとすることができ、ブルーム・フィルタは、所与のインデックスにハッシュされたメモリ・アドレスの情報を、過去2回のキャッシュ書込みが格納していたことを示唆することができる。候補アドレスが所与のインデックスにハッシュされた場合、その特定のインデックスにハッシュされ得る可能なメモリ・アドレスは、アドレス空間全体で2つしかない(インデックス*2とインデックス*2+1)という知識は、ブルーム・フィルタが、過去2回のキャッシュ書込みがそのインデックスにハッシュされたメモリ・アドレスに関連すると示していることと相まって、当該情報がキャッシュされていることを強く示唆することができる。しかしながら、これらの2回のキャッシュ書込みは、単一のアドレスの情報がキャッシュに2回書き込まれた結果であることもあり、同じインデックスにハッシュされた2つのアドレスの情報がキャッシュに1回書き込まれた結果であることもある。どちらが生じても、フィルタの値が「2」になる可能性があるので、依然として偽陽性の可能性がある。
例示的な例として、第1の「ハッシュ」アルゴリズムの出力は、入力された数の最後の(「一の位」の)桁の数字とすることができる(つまり、「64」の入力では「4」の出力、「1024」の入力でも「4」の同一の出力、「4096」の入力では「6」の出力がもたらされ得る)。第2のハッシュ・アルゴリズムの出力は、入力を16で割って切り捨てたものとすることができる(つまり、「64」の入力は「4」の出力、「1024」の入力は「64」の出力、「4097」の入力は「256」の出力をもたらすなど)。とりわけ、第1のアルゴリズムでは10個の可能な出力、すなわち0~9しかないため、10個より多い異なる入力が可能なシステムでは、出力の重複が避けられない。第2のアルゴリズムの切り捨ても重複をもたらす場合があるが、159より多い入力が可能なシステムでは、可能な出力がより多いため、第1のアルゴリズムのものよりも「出力空間」が大きくなる。
図1は、本開示の幾つかの実施形態に一致する、情報をプリフェッチするかどうかを決定する前に、ブルーム・フィルタのコンテンツをチェックすることを含む高レベルのキャッシュ監視方法100を示す。方法100は、1つ又は複数のメモリ・キャッシュを実装するコンピュータ・システム(例えば、図4のシステム400など)によって実行することができる。
方法100は、動作102において、アドレスのセットを決定することを含む。幾つかの実施形態では、動作102は、キャッシュ・ヒットを検知することに応答して実行することができる。幾つかの実施形態では、動作102は、読出し要求に応答して(例えば、5つの読出し要求おきに、読出し要求ごとになど)定期的に実行することができる。動作102は、第1の読出し要求のアドレスを決定することを含むことができる。動作102は、第1の読出し要求のアドレスに基づいて、1つ又は複数の後続アドレスを決定することをさらに含む。1つ又は複数の後続アドレスは、「プリフェッチ候補」のセットとして利用される。幾つかの実施形態では、プリフェッチ候補のセットは、単一のアドレス(第1の読出し要求のアドレスの直後のアドレスなど)のみを含むことができる。他の数のプリフェッチ候補も可能である(例えば、次の3つのアドレス、次の5つのアドレスなど)。方法100がデータ・キャッシュの文脈で実行される実施形態においては、セットは、かなり多くのアドレス(例えば、次の5,000個のアドレス)を含むことができる。
方法100は、動作104においてプリフェッチ候補アドレスのハッシュを生成することを含む。ハッシュの種々の方法を利用することができ、例えば、幾つかの実施形態では、動作104は、アドレスに対して1又は複数の数学演算(例えば、2の累乗での除算)を実行すること、アドレスの予め設定された数のバイトをクロップすることなどを含むことができる。幾つかの実施形態では、動作104は、アドレスに対して1つ又は複数の既知のハッシュ・アルゴリズムを実施することを含むことができる。
幾つかの実施形態において、動作104は、各候補アドレスに対して実行することができる。幾つかの実施形態では、動作104は、候補アドレスのセットのうちの第1のものに対してのみ実行することができ、そうした実施形態では、プリフェッチの決定は、第1の候補に基づいて行われ、その後、残りのものに適用することができる。
方法100は、動作106において、ハッシュを用いて、ブルーム・フィルタへのインデックスを作ることをさらに含む。動作106は、例えば、候補アドレスのハッシュをベクトルのインデックスとして利用することを含むことができる。幾つかの実施形態では、(以下に詳細に説明されるように)偽陰性結果の可能性を減らすために、複数のブルーム・フィルタを利用することができる。これらの「マルチ・フィルタ」の実施形態の一部では、動作106は、単一のフィルタを選択し、ハッシュ由来のインデックスにおける値をチェックすることを含むことができる。例えば、動作106は、「最も古い」ブルーム・フィルタをチェックすることができる(「最も古い」とは、フラッシュされてから最も長時間経過しているブルーム・フィルタである)。種々のフィルタの「年齢」を追跡するオーバーヘッドを削減するために、幾つかの実施形態では、「チェックすること」によって、動作106は代わりに、全てのフィルタの論理和を取り、結果として得られるベクトルのインデックスをチェックすることができる。とりわけ、フィルタの「年齢」は依然として監視することができるが(フィルタをフラッシュすべきかどうかを決定するために)、同じハードウェア構造が両方の機能に使用されない場合がある。例えば、第1の構造は時間の経過を追跡し、最も古いフィルタをリセットすることのみ可能であるのに対し、第2の構造は全てのフィルタを読み出し、それらを論理和演算することが可能である。
例示的な例として、システムが2つのブルーム・フィルタを利用しており、動作104で生成された候補アドレスのハッシュが16進数の10FBである場合、動作106は、2つのブルーム・フィルタの論理和を取ってベクトルVを生成し、V(4347)が「1」であるか又は「0」であるかをチェックすることを含むことができる(16進数の10FBは10進数の4347と同値であることに留意されたい)。
方法100は、動作106の結果を分析することによって、動作108において候補アドレスがキャッシュ・ヒッする可能性が高いかどうかをさらに判断することをさらに含む。例えば、幾つかの実施形態では、動作106においてチェックされるインデックスにおける値が「1」の場合、対応する候補アドレスは、キャッシュされる可能性が高いと考えられる(108の「はい」」)。とりわけ、ブルーム・フィルタの使用により、偽陽性の可能性がもたらされ、従って、動作108で行われた判断が、候補アドレスの情報がキャッシュにある可能性が高い(候補アドレスのルックアップがキャッシュ・ヒットする可能性が高いことを意味する)ことを示唆していても、キャッシュ・ミスは依然としてあり得る。しかしながら、方法100によって節約できるリソースは、より積極的なプリフェッチ・スキームを可能にするすることができ、これは一般的に、全体としてこのリスクを上回る。
動作102において決定されたプリフェッチ候補アドレスは、正確な予測であることは保証されていず、キャッシュの状態に関係なく、動作104~108において評価されたアドレスは、いずれにしても呼び出されずに終わる可能性がある。しかしながら、この可能性は一般的にプリフェッチの概念に固有のものであり、許容可能なリスクとして確立されている。
候補アドレスに対してキャッシュ・ヒットが期待されない場合(108の「いいえ」)、方法100は動作112に進む。動作112は、候補アドレスに格納された情報をプリフェッチすることを含む。例えば、動作112は、メモリにアクセスし、候補アドレスに格納された情報をキャッシュに書き込むことを含むことができる。また、動作112は、典型的なキャッシュ操作に合わせて、キャッシュのラインを削除することを含むことができる。
方法100は、動作114において、ブルーム・フィルタを更新することを含む。候補がキャッシュ・ヒットになる可能性が高いかどうか、或いは候補が実際に呼び出されるかどうかに関係なく、ブルーム・フィルタは、何がキャッシュに実際に書き込まれたかを反映するように更新される。動作114は、例えば、キャッシュに書き込まれた情報に基づいて、フィルタの値を「1」に設定することを含むことができる。例えば、幾つかの実施形態では、呼び出された次のアドレスに関係なく、当該次のアドレスがハッシュされ(動作104と同様の方法で)、そのハッシュされたアドレスが、ブルーム・フィルタのインデックスとして使用される。このインデックスにおけるブルーム・フィルタの値は、以前の状態に関係なく、「1」に設定することができる。とりわけ、呼び出された次のアドレスが候補アドレスのものでない場合でも、ブルーム・フィルタは、次のアドレスに格納された情報がキャッシュに書き込まれることを反映するように更新される。幾つかの実施形態では、動作114は、対応するインデックスにおける値を「1」に設定する前に、情報が実際にキャッシュに書き込まれるのを待つことを含む。
候補アドレスに対してキャッシュ・ヒットが予想される場合(108の「はい」)、方法100は、動作108から動作114へと進む。とりわけ、動作114は候補アドレスのプリフェッチを含まず、これは、候補アドレスに格納されている情報が既にキャッシュ内にあると予想されるため、リソースの浪費になると予想されるからである(ただし、これは偽陽性の結果として正しくない場合がある)。代わりに、方法100は、動作114におけるブルーム・フィルタの更新に進む。ブルーム・フィルタを保持もしく更新又はその両方を行うプロセスは、図2を参照して以下でさらに詳細に説明される。
図2は、本開示の幾つかの実施形態と一致する、ブルーム・フィルタ更新方法200の高レベル・フロー図を示す。方法200は、1つ又は複数のメモリ・キャッシュを実装するコンピュータ・システム(例えば、図4のシステム400など)によって実行することができる。方法200は、システムが、キャッシュ・コンテンツを追跡するために、1つ又は複数のブルーム・フィルタを保持もしくは更新又はその両方を行うことを可能にすることができる(ひいては、有利なことに、より積極的なプリフェッチ・ポリシーを可能にする)。
方法200は、動作202において、要求に関連した情報の(メモリ内の)アドレスを決定することを含む。実施形態によっては、動作202において決定されたアドレスが、最近書き込まれた、書き込まれている、又はメモリからキャッシュに書き込まれようとしている情報に対応することができる(例えば、アドレスは、アプリケーションによって最近呼び出された命令のメモリ・アドレスとすることができる)。幾つかの実施形態では、アドレスは、既にキャッシュ内にある情報に対応することができる。例えば、アプリケーションが命令を呼び出し、後続のキャッシュ・ルックアップによりキャッシュ・ヒットがもたらされた場合、動作202は、メモリから最近読み出されたものでなくても、命令のアドレスを決定することを含むことができる。
方法200は、動作204において、キャッシュ書込みもしくはキャッシュ・ヒット又はその両方を検知することをさらに含む。動作204は、例えば、動作202において決定されたアドレスに関連した要求が、キャッシュ書込みをもたらすことになる呼出し操作又は読出し操作であると検知することを含むことができる。幾つかの実施形態では、動作204においてキャッシュ書込みがまだ発生していない場合がある(例えば、動作204は、キャッシュ書込みの直前の動作を検知することなどを含むことができる)。幾つかの実施形態では、動作204は、キャッシュ・ヒットを検知することを含むことができる。
方法200は、動作206において、アドレスのハッシュを生成することをさらに含む。ハッシュの様々な方法を利用することができ、例えば、幾つかの実施形態では、動作206は、アドレスに対して1又は複数の数学演算(ある係数による除算など)を実行すること、アドレスの予め設定された数のバイトをクロップすることなどを含むことができる。幾つかの実施形態では、動作206は、1つ又は複数の既知のハッシュ・アルゴリズムをアドレスに対して実装することを含むことができる。
方法200は、動作208において、ブルーム・フィルタの寿命が満了したかどうかを判断することをさらに含む。動作208は、例えば、フィルタが最後にフラッシュされてから経過したサイクルの数を読み出し、計算し、又は他の方法で求め、その数を予め設定された最大値と比較することを含むことができる。その数が最大値を超えた場合、ブルーム・フィルタの寿命が期限切れであり(208の「はい」)、方法200は、動作210においてフィルタのフラッシュに進む。動作210は、例えば、期限切れフィルタの全ての値を「0」に設定することを含むことができる。「サイクル・カウント」以外の他のメトリククスを、フィルタの「年齢」を追跡するために用いることもでき、例えば、経過時間、書込み回数(例えば、フィルタ、キャッシュ、メモリなどの1つ又は複数への書込み回数)などが本明細書で考慮される。フラッシュ(例えば、動作208及び210)は、方法200以外で実行することができる(言い換えれば、フラッシュは、動作204の実行に依存しない)。
動作208において期限切れフィルタがフラッシュされた後、又はブルーム・フィルタの寿命がまだ期限切れでない場合(208の「いいえ」)、方法200は、動作212において、ブルーム・フィルタの値の更新に進む。動作212は、例えば、ブルーム・フィルタの特定のインデックスにおける値を「1」に設定することを含むことができる。値が修正される特定のインデックスは、動作206において生成されたハッシュ・アドレスに基づいて決定される。例えば、動作202において決定されたアドレスが「4050」であり、動作206のハッシュの出力が「50」である場合、動作212は、ブルーム・フィルタの50番目の値を「1」に設定することを含むことができる。
幾つかの実施形態においては、値を厳密に「1」に設定するのではなく、動作212は、値を1だけインクリメントすることができる。例えば、アドレスのハッシュが再び「50」であるが、ブルーム・フィルタの50番目の値が既に「1」である場合、動作212は、ブルーム・フィルタの50番目の値を「2」に設定することができる。これにより、ブルーム・フィルタが、特定のインデックスに対応するアドレスの情報がキャッシュに書き込まれた回数を効果的に追跡することができる。とりわけ、ハッシュ・アルゴリズムへの幾つかのアドレスの入力が同一の出力をもたらすことがあるため、これは、必ずしも特定のアドレスの情報がキャッシュに書き込まれた回数ではない(同じ問題が偽陽性の可能性を生じさせる)。例えば、3つのアドレスがインデックスを「共有」する場合(3つのアドレス全てが同じ結果にハッシュされることを意味する)、4のフィルタ値は、1つのアドレスがキャッシュに3回書き込まれ、第2のアドレスがキャッシュに1回書き込まれ、第3のアドレスが(最後のフラッシュ以後に)キャッシュに書き込まれていないことを意味する。「インクリメント」の実施形態では、フィルタの論理和を取るのではなく、MAXを取ることができる。
方法200は、全てのフィルタについて実行することができる。複数のフィルタを含む実施形態において、方法200の態様(動作212など)を各フィルタに対して、連続的に又は並行に実行することができる。方法200は212において終了する。
図3は、本開示の幾つかの実施形態に一致する、例示的なブルーム・フィルタ実装300、310及び320を示す。図3は、所与のインデックスで一連のブルーム・フィルタをチェックする例(300)、ブルーム・フィルタの所与のインデックスを設定する例(310)、及びブルーム・フィルタをフラッシュする例(320)を含む。説明を簡単にするために、これらの例は、8つの値をもつブルーム・フィルタを含み、チェックもしくは更新又はその両方が行われる値は4番目である(例えば、アドレスがハッシュされ、4のインデックスを生成することがある)。これらの例は、破線301及び303で区切られている。
ブルーム・フィルタのチェック(300)は、各ブルーム・フィルタの論理和をとることを含むことができる。図3では、3つのブルーム・フィルタ(302、304、及び306)がチェックされるように示される。結果ベクトル308は、フィルタ302、304、及び306の論理和をとることによって生成される。結果ベクトル308の4番目の値(左から順に)が「1」である場合、これは、インデックス「4」にハッシュされたアドレスの情報がキャッシュ内にあることを示すことができる。この結果ベクトルは、事実上「最も古い」ブルーム・フィルタと同じであるため、結果ベクトル自体を別のブルーム・フィルタと考えることができる。
幾つかの実施形態において、この結果ベクトルはサイクルごとに生成される。これは、結果ベクトルが前もって生成されるため、あるアドレスがキャッシュ・ヒットをもたらす可能性が高いかどうかをチェックするのに必要な時間を有利に短縮することができる。しかしながら、ベクトル全体が置き換えられる前に、結果ベクトルの単一の値のみがチェックされる可能性が高いので、これは、さらなる電力消費をもたらすことがある。従って、幾つかの実施形態では、結果ベクトルは、当該インデックスが分かるまで生成されず、その時点で、そのインデックスにおける各ブルーム・フィルタの値がチェックされる(「1」が見つかると直ちにチェックが終了する)。これは、電力の節約をもたらし得るが、複数の値をチェックする必要があり、インデックスが決定された後にのみ開始されるため、結果ベクトル手法よりも低速になり得る。
アドレスがインデックス「4」にハッシュされた情報がキャッシュに書き込まれた場合、310に示されるようにブルーム・フィルタは、4番目の値を「1」に設定することによって全て更新される。図3では、フィルタ312、314、及び316は、それぞれフィルタ302、304、及び306の更新バージョンを表す。とりわけ、フィルタ302及び304が4番目の値「0」を有していたのに対し、フィルタ312及び314は、4番目の値が「1」に設定されている。フィルタ306は既に4番目の値「0」を有していたが、幾つかの実施形態では、フィルタ316は依然として書き込み動作(「1」を別の「1」に上書きする)を受けることがある。これは冗長である場合があるが、システムの複雑さを軽減することもある。幾つかの実施形態では、値をチェックし、最終結果が異なる場合にのみ上書きされる(言い換えれば、チェックによって、フィルタ306の4番目の値が「1」であるかどうかを判断し、「1」である場合には、リソースを節約するために現状のままにすることができる)。幾つかの実施形態では、特定の値を「1」に設定するのではなく、代わりに値をインクリメントすることができる。例えば、フィルタ316の4番目の値を「2」に設定することができる(フィルタ306の「1」の上にインクリメントする)。
フィルタを定期的にフラッシュすることもでき、その例が列320に示される。フィルタをフラッシュすることは、フィルタの全ての値を「0」に設定することを含むことができる。図3に示されるように、フィルタ326(フィルタ306及び316に対応する)がフラッシュされる。上述のように、フィルタは、時間、サイクル・カウント、書込みカウントなどに基づいて、フラッシュすることができる。例えば、フィルタは、10,000サイクルごとにフラッシュすることができる。複数のフィルタを有する実施形態(図3に示される例など)では、フィルタを、同じ頻度で、しかし互いにオフセットしてフラッシュすることができる。例えば、フィルタ322、324、及び326は、10,000サイクルごとにフラッシュできるが、フィルタ326をサイクルXでフラッシュし、フィルタ322をサイクル(X+3,333)でフラッシュし、フィルタ324をサイクル(X+6,667)でフラッシュし、その後フィルタ326をサイクル(X+10,000)で再度フラッシュすることができる。(列310に示されるように)フィルタを同時に更新し、(列300に示されるように)フィルタのチェック時に全てのフィルタの論理和をとることと併せて、これにより、結果ベクトル308が、本質的に、最後の10,000サイクルに基づいてキャッシュ・コンテンツを反映させることが可能になる(ただし、10,000サイクル以上前に発生したいずれの操作にも影響も受けない)。このようにして、結果ベクトル308は、大きなオーバーヘッドを伴わずに、キャッシュのコンテンツをチェックするための比較的迅速な手段として使用することができる。フラッシュの頻度及びフィルタの数は、システム構成に応じて調整することができる。例えば、システムのキャッシュが特に小さく、キャッシュのコンテンツが一般的に書き込まれてから5,000サイクル以内に消去される場合には、ブルーム・フィルタ・チェックが「偽陽性」をもたらす可能性を減らすために、フィルタをより頻繁に(例えば、10,000サイクルごとではなく、5,000サイクルごとに)フラッシュすることができる。
ここで図4を参照すると、例えば、それぞれ方法200及び300を含む、本開示の種々の態様を実行するように構成することができる例示的なコンピュータ・システム400の高レベル・ブロック図が示される。例示的なコンピュータ・システム400は、本開示の実施形態に従って、(例えば、コンピュータの1つ又は複数のプロセッサ回路又はコンピュータ・プロセッサを用いて)本明細書に記載される方法又はモジュールの1つ又は複数、及び任意の関連する機能又は動作を実施する際に用いることができる。幾つかの実施形態においては、コンピュータ・システム400の主要コンポーネントは、1つ又は複数のCPU402、メモリ・サブシステム408、端末インターフェース416、ストレージ・インターフェース418、I/O(入力/出力)デバイス・インターフェース420、及びネットワーク・インターフェース422を含むことができ、これらの全ては、メモリ・バス406、I/Oバス414、及びI/Oバス・インターフェース・ユニット412を介して、コンポーネント間通信のために直接又は間接的に通信可能に結合することができる。
コンピュータ・システム400は、1つ又は複数の汎用プログラム可能中央処理ユニット(CPU)402を含むことができ、その一部又は全ては、ここでは一般的にCPU402と呼ばれる1つ又は複数のコア404A、404B、404C、及び404Dを含むことができる。幾つかの実施形態においては、コンピュータ・システム400は、比較的大規模なシステムに特有である複数のプロセッサを含むことができるが、他の実施形態では、コンピュータ・システム400は、代替的に単一のCPUシステムとすることができる。各CPU402は、CPUコア404上でメモリ・サブシステム408に格納された命令を実行することができ、1つ又は複数のレベルのオンボード・キャッシュを含むことができる。
幾つかの実施形態において、メモリ・サブシステム408は、データ及びプログラムを格納するためのランダム・アクセス半導体メモリ、ストレージ・デバイス、又はストレージ媒体(揮発性又は不揮発性のいずれか)を含むことができる。幾つかの実施形態において、メモリ・サブシステム408は、コンピュータ・システム400の仮想メモリ全体を表すことができ、また、コンピュータ・システム400に結合された、又はネットワークを介して接続された他のコンピュータ・システムの仮想メモリを含むこともできる。メモリ・サブシステム408は、概念上、単一のモノリシック・エンティティとすることができるが、幾つかの実施形態では、メモリ・サブシステム408は、キャッシュ及び他のメモリ・デバイスの階層のような、より複雑な構成とすることができる。例えば、メモリは、複数のレベルのキャッシュ内に存在することができ、これらのキャッシュは、あるキャッシュが命令を保持し、別のキャッシュがプロセッサ(単数又は複数)によって使用される非命令データを保持するように、機能によってさらに分割することができる。メモリは、さらに分散させ、種々の、いわゆる不均等メモリ・アクセス(non-uniform memory access、NUMA)コンピュータ・アーキテクチャのいずれかで知られるように、異なるCPU又はCPUのセットと関連付けることができる。幾つかの実施形態では、メイン・メモリ又はメモリ・サブシステム804は、CPU402によって使用されるメモリの制御及びフローのための要素を含むことができる。これは、メモリ・コントローラ410を含むことができる。
メモリ・バス406は、CPU402、メモリ・サブシステム408、及びI/Oバス・インターフェース412の間の直接的な通信経路を提供する単一のバス構造として図4に示されるが、メモリ・バス406は、幾つかの実施形態では、複数の異なるバス又は通信経路を含むことができ、それらは、階層構成、スター型構成、又はウェブ構成のポイント・ツー・ポイント・リンク、複数の階層バス、並列及び冗長経路、又は他の任意の適切なタイプの構成など、種々の形態のいずれかで構成することができる。さらに、I/Oバス・インターフェース412及びI/Oバス414は、それぞれ単一のユニットとして示されるが、コンピュータ・システム400は、幾つかの実施形態では、複数のI/Oバス・インターフェース・ユニット412、複数のI/Oバス414、又はその両方を含むことができる。さらに、複数のI/Oインターフェース・ユニットが示されるが、これは、I/Oバス414を、種々のI/Oデバイスに実行される種々の通信経路から分離しており、他の実施形態では、I/Oデバイスの一部又全てが、1つ又は複数のシステムI/Oバスに直接接続することができる。
幾つかの実施形態において、コンピュータ・システム400は、マルチユーザ・メインフレーム・コンピュータ・システム、シングルユーザ・システム、又は、直接的なユーザ・インターフェースを殆ど又は全く持たないが、他のコンピュータ・システム(クライアント)から要求を受け取るサーバ・コンピュータ又は同様のデバイスとすることができる。さらに、幾つかの実施形態では、コンピュータ・システム400は、デスクトップ・コンピュータ、ポータブル・コンピュータ、ラップトップ又はノートブック・コンピュータ、タブレット・コンピュータ、ポケット・コンピュータ、電話、スマートフォン、モバイル・デバイス、又は他の任意の適切なタイプの電子デバイスとして実装することができる。
図4は、例示的なコンピュータ・システム400の代表的な主要コンポーネントを示すことを意図していることに留意されたい。しかしながら、幾つかの実施形態では、個々のコンポーネントは、図4に表されるものと比べてより複雑であることも、より複雑でないこともあり、図4に示されているもの以外の、又はこれに加えてコンポーネントが存在することもあり、そのようなコンポーネントの数、タイプ、及び構成は異なり得る。
本開示の全体を通して、ブルーム・フィルタの種々の値を「1」(情報がキャッシュ内に存在する可能性が高いことを意味すると解釈される)に設定し、時折フィルタをフラッシュしてその値の全てを「0」(情報がキャッシュ内に存在しない可能性が高いことを意味すると解釈される)に設定することが言及される。当業者により理解されるように、使用される特定の値(「1」及び「0」)は、例示目的のためだけに使用されており、制限することを意味するものではない。本明細書において、他の可能な慣例も十分に考えられ、例えば、幾つかの実施形態では、「0」は、情報がキャッシュ内に存在する可能性が高いことを意味すると解釈できるが、フィルタは、全ての値を「1」に設定することによって、時折「フラッシュ」されることがある。さらに明確にするために、幾つかの実施形態では、「5」は、情報がキャッシュ内に存在する可能性が高いことを意味するが、「36」は情報がキャッシュ内に存在する可能性が低いことを意味することがある。
本発明は、統合のいずれかの可能な技術的詳細レベルにおける、システム、方法、もしくはコンピュータ・プログラム製品又はそれらの組み合わせとすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体(単数又は複数)を含むことができる。
コンピュータ可読ストレージ媒体は、命令実行デバイスにより使用される命令を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの:すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読出し専用メモリ(ROM)、消去可能プログラム可能読出し専用メモリ(EPROM又はフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読出し専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、記録された命令を有するパンチカードもしくは溝内に隆起した構造等の機械式コード化デバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管もしくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくは無線ネットワーク又はそれらの組み合わせなどのネットワークを介して、外部コンピュータ又は外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、もしくはエッジサーバ又はその組み合わせを含むことができる。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体内に格納するためにコンピュータ可読プログラム命令を転送する。
本開示のオペレーションを実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Smalltalk、C++などのオブジェクト指向プログラミング言語、及び、「C」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む1つ又は複数のプログラミング言語の任意の組み合わせで記述されるソース・コード又はオブジェクト・コードすることができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータもしくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネットサービスプロバイダを用いたインターネットを通じて)。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラム可能ゲート・アレイ(FPGA)、又はプログラム可能論理アレイ(PLA)を含む電子回路は、本開示の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して、電子回路を個別化することができる。
本発明の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図もしくはブロック図又はその両方を参照して説明される。フローチャート図もしくはブロック図又はその両方の各ブロック、並びにフローチャート図もしくはブロック図又はその両方におけるブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されるであろう。
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて機械を製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャートもしくはブロック図又はその両方の1つ又は複数のブロック内で指定された機能/オペレーションを実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、プログラム可能データ処理装置、もしくは他のデバイス又はその組み合わせを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャートもしくはブロック図又はその両方の1つ又は複数のブロックにおいて指定された機能/オペレーションの態様を実施する命令を含む製品を含むようにすることもできる。
コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連のオペレーションステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ、他のプログラム可能装置、又は他のデバイス上で実行される命令が、フローチャートもしくはブロック図又はその両方の1つ又は複数のブロックにおいて指定された機能/オペレーションを実行するようにすることもできる。
図面内のフローチャート及びブロック図は、本開示の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及びオペレーションを示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又は命令の一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で行われることがある。例えば、連続して示される2つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図もしくはフローチャート図又はその両方の各ブロック、及びブロック図もしくはフローチャート図又はその両方におけるブロックの組み合わせは、指定された機能又はオペレーションを実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
本開示の種々の実施形態の説明は、例証の目的のために提示されたが、これらは、網羅的であること、又は開示した実施形態に限定することを意図するものではない。当業者には、説明される実施形態の範囲及び趣旨から逸脱することなく、多くの修正及び変形が明らかであろう。本明細書で用いられる用語は、実施形態の原理、実際の適用、又は市場に見られる技術に優る技術的改善を最もよく説明するため、又は、当業者が、本明細書に開示される実施形態を理解するのを可能にするために選択された。
Claims (21)
- 方法であって、
候補アドレスを予測することと、
前記候補アドレスのハッシュを計算することと、
前記ハッシュに基づいて第1のブルーム・フィルタをチェックすることと
前記チェックすることに基づいて、前記候補アドレスに格納された情報のプリフェッチを決定することと
を含む、方法。 - 前記予測することは、
第2の候補アドレスを予測することと、
前記第2の候補アドレスの第2のハッシュを計算することと、
前記第2のハッシュに基づいて前記第1のブルーム・フィルタをチェックすることと、
前記チェックすることに基づいて、前記第2の候補アドレスに格納された第2の情報のプリフェッチが不要であることを判断することと
を含む、請求項1に記載の方法。 - 前記予測することは、
キャッシュ・ヒットの第1のアドレスを決定することと、
前記第1のアドレスに基づいて前記候補アドレスを決定することと
を含む、請求項1又は請求項2に記載の方法。 - 前記チェックすることは、
前記第1のブルーム・フィルタと第2のブルーム・フィルタとを比較することと、
前記比較に基づいて結果ベクトルを生成することと、
前記結果ベクトルをチェックすることと
を含む、請求項1から請求項3までのいずれか1項に記載の方法。 - キャッシュ書込みを検知することと、
前記ハッシュに基づいて、前記第1のブルーム・フィルタ及び前記第2のブルーム・フィルタの値を更新することと
をさらに含む、請求項4に記載の方法。 - 前記更新することは、前記値をインクリメントすることを含む、請求項5に記載の方法。
- 前記第1のブルーム・フィルタ及び前記第2のブルーム・フィルタを定期的にフラッシュすることをさらに含み、前記第1のブルーム・フィルタの前記フラッシュは、前記第2のブルーム・フィルタの前記フラッシュからオフセットされる、請求項6に記載の方法。
- システムであって、
メモリと、
前記メモリに結合された処理ユニットと
を含み、前記処理ユニットは、
キャッシュに書き込まれた情報のアドレスを決定し、
前記アドレスのハッシュを計算し、
前記ハッシュに基づいてインデックスを決定し、
ブルーム・フィルタの前記インデックスにおける値を更新する
ための命令を実行するように構成される、システム。 - 前記処理ユニットは、
キャッシュ・ヒットを検知し、
前記キャッシュ・ヒットと関連した候補アドレスを予測し、
前記ブルーム・フィルタに基づいて前記候補アドレスに格納された情報をプリフェッチするかどうかを判断する
ようにさらに構成される、請求項8に記載のシステム。 - 前記予測することは、
キャッシュ・ヒットの第1のアドレスを決定することと、
前記第1のアドレスに基づいて前記候補アドレスを決定することと
を含む、請求項9に記載のシステム。 - 前記判断することは、
前記候補アドレスの候補ハッシュを計算することと、
前記候補ハッシュに基づいて候補インデックスを決定することと、
前記ブルーム・フィルタの前記インデックスにおける候補値をチェックすることと
を含む、請求項9に記載のシステム。 - 前記チェックすることは、
前記ブルーム・フィルタと第2のブルーム・フィルタとを比較することと、
前記比較に基づいて結果ベクトルを生成することと、
前記結果ベクトルをチェックすることと
を含む、請求項11に記載のシステム。 - 前記処理ユニットは、前記ブルーム・フィルタ及び前記第2のブルーム・フィルタを定期的にフラッシュするようにさらに構成され、前記ブルーム・フィルタの前記フラッシュは、前記第2のブルーム・フィルタの前記フラッシュからオフセットされる、請求項8から請求項12までのいずれか1項に記載のシステム。
- 前記更新することは、前記値をインクリメントすることを含む、請求項8から請求項13までのいずれか1項に記載のシステム。
- コンピュータ・プログラムであって、前記コンピュータ・プログラムは、プログラム命令を含み、前記プログラム命令は、コンピュータによって実行可能であり、前記コンピュータに、
前記キャッシュに書き込まれた情報のアドレスを決定させ、
前記アドレスのハッシュを計算させ、
前記ハッシュに基づいてインデックスを決定させ、
ブルーム・フィルタの前記インデックスにおける値を更新させる、コンピュータ・プログラム。 - 前記命令はさらに、前記コンピュータに、
キャッシュ・ヒットを検知させ、
前記キャッシュ・ヒットと関連した候補アドレスを予測させ、
前記ブルーム・フィルタに基づいて前記候補アドレスに格納された情報をプリフェッチするかどうかを判断させる、
請求項15に記載のコンピュータ・プログラム。 - 前記判断することは、
前記候補アドレスの候補ハッシュを計算することと、
前記候補ハッシュに基づいて候補インデックスを決定することと、
前記ブルーム・フィルタの前記インデックスにおける候補値をチェックすることと
を含む、請求項16に記載のコンピュータ・プログラム。 - 前記チェックすることは、
前記ブルーム・フィルタと第2のブルーム・フィルタとを比較することと、
前記比較に基づいて結果ベクトルを生成することと、
前記結果ベクトルをチェックすることと
を含む、請求項17に記載のコンピュータ・プログラム。 - 前記命令はさらに、前記コンピュータに、前記ブルーム・フィルタ及び第2のブルーム・フィルタを定期的にフラッシュさせ、前記ブルーム・フィルタの前記フラッシュは、前記第2のブルーム・フィルタの前記フラッシュからオフセットされる、請求項15から請求項18までのいずれか1項に記載のコンピュータ・プログラム。
- 前記更新することは、前記値をインクリメントすることを含む、請求項15から請求項19までのいずれか1項に記載のコンピュータ・プログラム。
- 請求項15から請求項20までのいずれかに記載のコンピュータ・プログラムを格納した、コンピュータ可読ストレージ媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/079,619 | 2020-10-26 | ||
US17/079,619 US11816034B2 (en) | 2020-10-26 | 2020-10-26 | Fast cache tracking to support aggressive prefetching |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022070218A true JP2022070218A (ja) | 2022-05-12 |
Family
ID=78497921
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021167837A Pending JP2022070218A (ja) | 2020-10-26 | 2021-10-13 | 方法、システム、コンピュータ・プログラム、及びコンピュータ可読ストレージ媒体(積極的なプリフェッチをサポートするための高速キャッシュ追跡) |
Country Status (5)
Country | Link |
---|---|
US (1) | US11816034B2 (ja) |
JP (1) | JP2022070218A (ja) |
CN (1) | CN114490445A (ja) |
DE (1) | DE102021123290A1 (ja) |
GB (1) | GB2604205B (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11960544B2 (en) * | 2021-10-28 | 2024-04-16 | International Business Machines Corporation | Accelerating fetching of result sets |
US11822922B2 (en) * | 2021-12-31 | 2023-11-21 | International Business Machines Corporation | Miss-driven instruction prefetching |
CN116049033B (zh) * | 2023-03-31 | 2023-07-28 | 沐曦集成电路(上海)有限公司 | 一种高速缓冲存储器Cache读写方法、系统、介质及设备 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8301650B1 (en) * | 2008-12-19 | 2012-10-30 | Google, Inc. | Bloom filter compaction |
US8290972B1 (en) * | 2009-04-29 | 2012-10-16 | Netapp, Inc. | System and method for storing and accessing data using a plurality of probabilistic data structures |
AU2010200866B1 (en) * | 2010-03-08 | 2010-09-23 | Quantum Corporation | Data reduction indexing |
US20110276744A1 (en) * | 2010-05-05 | 2011-11-10 | Microsoft Corporation | Flash memory cache including for use with persistent key-value store |
WO2012032727A1 (en) * | 2010-09-09 | 2012-03-15 | Nec Corporation | Storage system |
US8868843B2 (en) * | 2011-11-30 | 2014-10-21 | Advanced Micro Devices, Inc. | Hardware filter for tracking block presence in large caches |
US8472983B1 (en) * | 2011-12-07 | 2013-06-25 | Cisco Technology, Inc. | Selective location-aware paging |
US9519614B2 (en) * | 2012-01-10 | 2016-12-13 | Verizon Digital Media Services Inc. | Multi-layer multi-hit caching for long tail content |
US20140053064A1 (en) | 2012-08-16 | 2014-02-20 | Qualcomm Incorporated | Predicting the usage of document resources |
US9898445B2 (en) | 2012-08-16 | 2018-02-20 | Qualcomm Incorporated | Resource prefetching via sandboxed execution |
US9378021B2 (en) | 2014-02-14 | 2016-06-28 | Intel Corporation | Instruction and logic for run-time evaluation of multiple prefetchers |
US10691731B2 (en) * | 2015-11-26 | 2020-06-23 | International Business Machines Corporation | Efficient lookup in multiple bloom filters |
US10579530B2 (en) * | 2016-05-31 | 2020-03-03 | Intel Corporation | Prefetch filter cache for a processor |
US10642618B1 (en) * | 2016-06-02 | 2020-05-05 | Apple Inc. | Callgraph signature prefetch |
US10747667B2 (en) * | 2018-11-02 | 2020-08-18 | EMC IP Holding Company LLC | Memory management of multi-level metadata cache for content-based deduplicated storage |
US11847053B2 (en) * | 2020-03-27 | 2023-12-19 | Intel Corporation | Apparatuses, methods, and systems for a duplication resistant on-die irregular data prefetcher |
-
2020
- 2020-10-26 US US17/079,619 patent/US11816034B2/en active Active
-
2021
- 2021-09-08 DE DE102021123290.2A patent/DE102021123290A1/de active Pending
- 2021-10-06 GB GB2114291.4A patent/GB2604205B/en active Active
- 2021-10-13 JP JP2021167837A patent/JP2022070218A/ja active Pending
- 2021-10-19 CN CN202111213899.1A patent/CN114490445A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
GB202114291D0 (en) | 2021-11-17 |
GB2604205B (en) | 2023-06-14 |
CN114490445A (zh) | 2022-05-13 |
US11816034B2 (en) | 2023-11-14 |
US20220129385A1 (en) | 2022-04-28 |
DE102021123290A1 (de) | 2022-04-28 |
GB2604205A (en) | 2022-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2022070218A (ja) | 方法、システム、コンピュータ・プログラム、及びコンピュータ可読ストレージ媒体(積極的なプリフェッチをサポートするための高速キャッシュ追跡) | |
JP5908100B2 (ja) | ストレージ・システムの二次キャッシュ内にデータをポピュレートするための方法、制御装置、プログラム | |
US11169922B2 (en) | Method and arrangement for saving cache power | |
US9582423B2 (en) | Counter-based wide fetch management | |
US8364904B2 (en) | Horizontal cache persistence in a multi-compute node, symmetric multiprocessing computer | |
US9703661B2 (en) | Eliminate corrupted portions of cache during runtime | |
US20230315627A1 (en) | Cache line compression prediction and adaptive compression | |
US20230297382A1 (en) | Cache line compression prediction and adaptive compression | |
US11182293B2 (en) | Operating different processor cache levels | |
US9483180B2 (en) | Memory-area property storage including data fetch width indicator | |
US8484423B2 (en) | Method and apparatus for controlling cache using transaction flags | |
KR20170054268A (ko) | 하위 레벨 캐시에서 캐시 라인들의 연수를 제어함으로써 메모리에 대한 라이트백을 감소시키는 것 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20211208 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20220518 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240307 |