JP7311959B2 - 複数のデータ・タイプのためのデータ・ストレージ - Google Patents

複数のデータ・タイプのためのデータ・ストレージ Download PDF

Info

Publication number
JP7311959B2
JP7311959B2 JP2018213366A JP2018213366A JP7311959B2 JP 7311959 B2 JP7311959 B2 JP 7311959B2 JP 2018213366 A JP2018213366 A JP 2018213366A JP 2018213366 A JP2018213366 A JP 2018213366A JP 7311959 B2 JP7311959 B2 JP 7311959B2
Authority
JP
Japan
Prior art keywords
address
data
storage
translation
input
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.)
Active
Application number
JP2018213366A
Other languages
English (en)
Other versions
JP2019096307A (ja
Inventor
エス.ラムラキーヤニ プラカシュ
ラース サンドバーグ アンドレアス
ニコレリース ニコス
ディーシュテルホルスト シュテファン
Original Assignee
アーム・リミテッド
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 アーム・リミテッド filed Critical アーム・リミテッド
Publication of JP2019096307A publication Critical patent/JP2019096307A/ja
Application granted granted Critical
Publication of JP7311959B2 publication Critical patent/JP7311959B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Description

本技法は、データ・ストレージに関する。
データ処理システムは、頻繁にアクセスされる情報又は取得するために時間がかかる情報が迅速なアクセスのために記憶されるシステム全体の性能を向上させるために使用される多くのストレージ・デバイスを有することが多い。しかしながら、そのようなストレージ・デバイスは通常、それらが占有する回路空間、それらを実装するために使用されるハードウェアのコスト、又はより大きいデバイスの使用がそのハードウェアへのすべてのアクセスのためのアクセス時間を増加させる可能性があるために、サイズが限られている。しかしながら、場合によっては、そのようなデバイスにおける追加のストレージが有利な場合があり、性能の向上をもたらすことができる。
第1の例示的な構成から見ると、プロセッサ回路から入力アドレスを受信するための入力アドレス・ポートと、入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するためのアドレス・ストレージと、出力アドレスを出力するための出力アドレス・ポートと、データを受信するための入力データ・ポートと、データを複数の場所のうちの1つに記憶するためのデータ・ストレージと、データ・ストレージに記憶されたデータを出力するための出力データ・ポートと、データ・ストレージに入力アドレスと出力アドレスとの間の変換を記憶させるための制御回路とが提供され、制御回路は、入力アドレスがアドレス・ストレージ及びデータ・ストレージにないことに応答してページ・ウォークを発生させるための信号を出すように適合される。
第2の例示的な構成から見ると、プロセッサ回路から入力アドレスを受信するステップと、アドレス・ストレージにおいて、入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するステップと、データを受信するステップと、データをデータ・ストレージに記憶するステップと、データ・ストレージに入力アドレスと出力アドレスとの間の変換を記憶させるステップと、入力アドレスがアドレス・ストレージ及びデータ・ストレージにないことに応答して、ページ・ウォークを発生させるための信号を出すステップとが提供される。
第3の例示的な構成から見ると、プロセッサ回路から入力アドレスを受信するための手段と、入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するための手段と、データを受信するための手段と、データを記憶するための手段であって、入力アドレスと出力アドレスとの間の変換を記憶するようになされている、手段と、入力アドレスがアドレス・ストレージ及びデータ・ストレージにないことに応答してページ・ウォークを発生させるための信号を出すための手段とを備える装置が提供される。
本技法は、添付の図面に示されている実施例を参照して、単なる例として、さらに説明される。
いくつかの実施例による装置を示す図である。 いくつかの実施例による装置を示す図である。 いくつかの実施例にしたがって、異なる要求がCPUによってどのように分配されるかを示す。 いくつかの実施例にしたがって、異なる要求がCPUによってどのように分配されるかを示す。 いくつかの実施例によるメンテナンス動作を示す。 重複する要求を処理するプロセスを示す。 いくつかの実施例による新しいメンテナンス動作を受信するプロセスを示す。 いくつかの実施例によるメンテナンス動作の結合を示す。 いくつかの実施例による充填キューの使用を示す。 いくつかの実施例による、充填キューに対する参照のプロセスをフローチャート形式で示す。 いくつかの実施例による、充填動作及びメンテナンス動作を実行する第1のプロセスを示す。 いくつかの実施例による、充填動作及びメンテナンス動作を実行する第2のプロセスを示す。 いくつかの実施例による、メンテナンス動作中にアクセス要求を実行するプロセスを示す。 いくつかの実施例による例示的な装置を示す。 いくつかの実施例による、キャッシュ内のウェイの再割振りを示す。 いくつかの実施例にしたがって、ポインタを使用して単一のメモリが複数の目的にどのように割り振られ得るかを示す。 いくつかの実施例による、データ及びアドレス変換を動的に再割振りする例示的な方法を示す。 いくつかの実施例にしたがって、異なる割振りポリシーの使用がキャッシュ・ウェイの分配をどのように変更するかを示す。 いくつかの実施例にしたがって、TLBにおけるアドレスの要求がどのように転送されるかを示す。 いくつかの実施例にしたがって、並列にアドレスの要求を発行することを示す。 いくつかの実施例にしたがって、アドレスの変換を実行することにより、変換されたアドレスが提供され、データがフェッチされるプロセスを示す。 いくつかの実施例による、着信要求を処理する方法を示すフローチャートを示す。 データ処理装置を概略的に示す。 DRAMにおけるアドレス変換回路及び変換データのストレージを概略的に示す。 概略的なタイミング図である。 概略的なタイミング図である。 方法を示す概略的なフローチャートである。 アドレス変換回路を概略的に示す。 DRAMを概略的に示す。 図25のDRAMにおけるデータ・ストレージを概略的に示す。 キー-値ペアを概略的に示す。 ハッシュ生成器を概略的に示す。 書込み回路を概略的に示す。 それぞれの方法を示す概略的なフローチャートである。 それぞれの方法を示す概略的なフローチャートである。
この説明は、任意の組合せで一緒に使用され得る潜在的に直交するいくつかの技法に関する。図1は、以下に論じられるすべての技法が同時に使用される例示的な装置100を示す。本装置は、出力空間内の出力アドレスへの入力アドレスの変換のための専用の変換索引バッファ110a、110b、…をそれぞれ有する複数のプロセッサ105a、105b、…を含む。各プロセッサは、1つ又は複数の入力ポート135を介して相互接続125にメンテナンス動作、ルックアップ動作、及び充填動作を送ることができる。これらの動作の各々は、相互接続125に関連付けられるアドレス・ストレージ155(変換データ・バッファとして働くことができる)に関する。ルックアップ動作は、出力空間内の出力アドレスが供給されるべき入力又は初期アドレスを備える。充填動作は、そのような変換を提供するために使用される。一方、メンテナンス・キュー145は、メンテナンス回路150によってアドレス・ストレージ155に対して非同期的に実行されるメンテナンス動作を記憶するので、プロセッサ105aはメンテナンス動作が実行されるのを待つ必要がない。アドレス・ストレージ155は、変換データが実際にメモリ115に記憶され得、いわゆるページ・テーブル・ウォークがアドレス・ストレージを埋めるためにメモリ115にアクセスすることもできる、さらなるTLBにアクセスするための回路の形態を取り得る。相互接続125は、1つ又は複数の出力ポート140を介してメイン・メモリ115への接続を提供する。メイン・メモリは、コントローラ120を介して制御される。メイン・メモリ115から読み出される、又はメイン・メモリ115に書き込まれるデータはキャッシュ160に記憶され得、相互接続125に関連付けられる。キャッシュを提供することによって、プロセッサ105a、105b、…は、要求が相互接続125から送られ、メモリ・コントローラ120によって処理される必要がある場合よりも迅速にメモリ115からデータにアクセスすることができる。キャッシュ160からのストレージは、アドレス変換を記憶するために利用可能なストレージの量がアドレス・ストレージ155自体の容量を超えて増加され得るように、アドレス記憶装置155による使用のために「盗まれる」(一時的に、又は他の方法で再割振りされる)ことができる。盗まれたストレージの管理は、メンテナンス・キュー145、アドレス・ストレージ155、及びキャッシュ160の動作と同様に、制御回路130によって処理される。制御回路は、ページ・テーブル・ウォーク及びTLBアクセスのタイミングを制御して、TLB110aからの特定の変換要求に対して、ページ・テーブル・ウォークがTLBルックアップの完了前に開始され得るようにすることができる。コントローラ120及び制御回路130は、いくつかの実例では、そのような複数のペアがメモリ115のメモリセル(メモリ115の行バッファ(図示せず)によってアクセス可能な)の単一の行に記憶され得るように、キー-値ペアの形式の変換データのメモリ115内のストレージ、及びメモリ115からの取り出しを監視するために協力することができる。メイン・メモリ115及びキャッシュ160自体は、DRAMを使用することによって実装され得る点に留意されたい。
非同期メンテナンス
図2は、いくつかの実施例による装置200の実例を示す。この装置は、ルックアップ動作及びメンテナンス動作(集合的に「要求」と呼ばれる)を制御回路240に提供する入力ポート210のセットを備える。入力アドレスを有するルックアップ動作(ルックアップ要求)は、たとえば変換索引バッファ(TLB)の形態を取るルックアップ回路230に渡される。いくつかの実施例では、TLBはDRAMを介して提供され得る。メンテナンス動作(メンテナンス要求)はメンテナンス・キュー220に渡される。そのような装置200は、ストレージ・システムにおける非同期メンテナンスを提供するために使用され得、リクエスタから、入力アドレスを備えるルックアップ動作と、メンテナンス動作とのいずれか1つを受信するための入力ポート210と、少なくとも1つのメンテナンス動作のメンテナンス・キューを記憶するためのメンテナンス・キュー回路220と、入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するためのアドレス・ストレージ230とを備え、入力アドレスの受信に応答して、出力アドレスがメンテナンス・キューに依存して提供され、メンテナンス動作を記憶することに応答して、メンテナンス・キュー回路が確認応答をリクエスタへ送らせる装置200の一例として提供される。
そのような実施例では、リクエスタは、中央処理装置(CPU)などのプロセッサの形態を取り得る。装置200の入力ポート210を介して、リクエスタは、入力アドレスを備えるルックアップ動作を発行し得る。リクエスタは、入力ポート210を介してメンテナンス要求を発行することもできる。たとえば、メンテナンス動作は、入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するアドレス・ストレージ230内のエントリのメンテナンスに向けられ得る。出力アドレス空間内の出力アドレスは、物理アドレス(PA)又は中間物理アドレス(IPA)の形態を取り得る。たとえば、仮想アドレス(VA)と物理アドレス(PA)の間で部分的に変換するためにIPAが使用され得る。
2つのさらなる動作が、装置200が非同期的にメンテナンス動作を実行することを可能にする。第1に、メンテナンス動作が受信されたことに応答して、メンテナンス動作が記憶され、メンテナンス・キュー回路220は、確認応答をリクエスタへ返送させる。この確認応答は、(たとえば、メンテナンス動作が完了するのを待たずに)直ちに送られる。したがって、メンテナンス動作が実行されるまで、リクエスタは停止又はブロックされない。しかしながら、メンテナンス動作は直ぐに実行されないため、アドレス・ストレージ230は古いデータが提供されることを禁止する必要がある。言い換えれば、装置200は、メンテナンス動作が実行されたかのように振る舞い続ける必要がある。
第2に、入力アドレス(すなわち、変換されるアドレス)の受信に応答して、対応する出力アドレスが、メンテナンス・キュー回路220によって維持されるキューに依存して提供される。これもやはり、キューに入れられたメンテナンス動作が実行された場合に返されないデータの戻りを防ぐために必要である。これらのプロセスの各々は、以下で図3A及び図3Bを参照してより詳細に議論される。
図2の回路はまた、入力アドレスの受信に応答して、入力アドレスとの競合のためのメンテナンス・キューをスキャンするための制御回路240であって、出力アドレスが、競合がある場合にミスを返すことによって、また競合がない場合には出力アドレスを提供することによって、キュー上で独立して提供される、制御回路240の実例を提供する。
入力ポート210において提供された入力アドレスが、メンテナンス・キュー220において保持されたメンテナンス動作によって影響を受けるアドレスに関連する場合、競合が発生する可能性がある。言い換えれば、メンテナンス・キュー220に保持されているメンテナンス動作が実行された場合、入力アドレスに対する異なる結果がルックアップ回路230に記憶される。そのような競合が発生した結果、及び古いデータが返されることを防ぐために、入力アドレスに応答してTLBミスが提供される。これにより、その間に正しい出力アドレスが取り出される、ページ・ウォーク・プロセスが開始される。競合がない場合、出力アドレスが提供され得る。
図2はまた、メンテナンス・キューから選択されたメンテナンス動作を実行させるメンテナンス回路250の一例を示す。メンテナンス回路250がメンテナンス動作を選択し、メンテナンス・キュー回路220によって維持されるキューから選択されたメンテナンス動作を実行させる方法がいくつかある。いくつかの実施例では、メンテナンス回路250は、ルックアップ回路230が他の方法では接続されていない場合に実行されるべきメンテナンス動作を選択する。たとえば、入力ポート210において入力アドレスが受信されない期間がある場合、メンテナンス回路250は、メンテナンス動作のうちの1つ又は複数を実行させるために、このダウンタイムを利用することができる。いくつかの実施例では、メンテナンス回路250は、メンテナンス動作をメンテナンス・キュー220から継続的に選択させ、何も残らなくなるまで実行させることができる。いくつかの実施例では、メンテナンス動作は、メンテナンス・キュー220に追加されてからある期間が経過した場合、又はメンテナンス・キュー220が一杯になった場合に実行されるようにスケジューリングされる。キュー選択の他の技法は、当業者に知られている。
図2はまた、1つ又は複数の条件に基づいてメンテナンス・キュー内の複数のエントリを結合するための結合回路260の実例を示す。そのようなプロセスは、図7を参照してより詳細に論じられる。
図3A及び図3Bは、入力アドレスを備える着信ルックアップ動作を処理するプロセスを集合的に示す。前述したように、出力アドレス空間内の対応する出力アドレス(たとえば、物理アドレス空間、又は部分/中間アドレス空間)は、メンテナンス・キューに依存して提供される。図3A及び図3Bは同時に論じられる。
このプロセスはステップ300で始まり、ここで、たとえば仮想アドレスから物理アドレスへのルックアップ動作が受信される。これは、ルックアップ回路230に送られるCPU310などのリクエスタから発生する。これは、TLBルックアップの形態を取り得る。ステップ320において、ルックアップ回路230は、メンテナンス・キュー220にアクセスしてルックアップする。次いで、ステップ330において、メンテナンス・キュー220にTLBルックアップとの競合があるかどうかが決定される。メンテナンス・キュー220からルックアップ回路230への結果が、そのような競合が存在することを示す場合、次いでステップ340において、ルックアップ回路230がTLBミスを発行する。これにより、ページ・ウォークが発生し、いくつかの実施例では、物理アドレスを取り出すために、CPU310又はページ・テーブル・ウォーカとして知られている特別な回路のいずれかによって開始される。しかしながら、ステップ330において、メンテナンス・キュー220によってルックアップ回路230に発行された結果が、競合が存在しないことを示す場合、ステップ350において、タグ一致があるかどうかが決定される。競合が存在するかどうかのチェックと並行して、ステップ360において、TLB230においてルックアップが実行され、次いで、ステップ350において関連エントリはタグをチェックされる。タグ一致プロセスは、ルックアップ回路230に入力アドレスが与えられた対応する出力アドレスがあるかどうかを決定する。実際には、これは入力アドレスの一部(タグと呼ばれる)をルックアップ回路230内のエントリと一致させることによって一般的に発生する。そのようなタグが見つからない場合、本プロセスはステップ340に進み、TLBミスがCPU310又はページ・ウォーカ回路に戻される。或いは、一致するタグが見つかった場合、ステップ370において、対応する出力アドレスがCPU310に戻される。図3Aに示されるように、CPU310がメンテナンス動作を発行すると、これがメンテナンス・キュー220に発行される。たとえば、ルックアップ回路230がアイドル状態にあるとき、メンテナンス・キュー220は、実行されるべきメンテナンス動作を選択することができる。次いで、これは、ルックアップ回路230によって記憶された変換のセットに対して実行される。確認応答は、CPU310によって発行されたメンテナンス動作に応答して、メンテナンス・キュー220によって送られる点に留意されたい。したがって、CPU310は、メンテナンス動作を発行し、そのメンテナンス動作が実行されるのを待つ結果として、ブロック又は停止する必要はない。代わりに、メンテナンス動作をキューに入れ、次いで都合のよい時間に実行することが可能である。したがって、これらの図面は、リクエスタから、入力アドレスを備えるルックアップ動作とメンテナンス動作とのいずれか1つを受信するステップ300と、少なくとも1つのメンテナンス動作のメンテナンス・キュー220を記憶するステップと、入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するステップとを備え、入力アドレスの受信に応答して、出力アドレスがメンテナンス・キュー330に依存して提供され、メンテナンス動作を記憶するステップに応答して、確認応答をリクエスタへ送らせる方法の実例を提供する。
図4は、いくつかの実施例によるメンテナンス動作を示す。具体的には、図4は、メンテナンス動作がアドレス・ストレージ230内の複数の変換にアクセスする実例を示す。図4はまた、メンテナンス動作がアドレス・ストレージ230内の変換に順次アクセスする実例と、アドレス・ストレージがメモリ・マッピングされるように適合された実例とを示し、メンテナンス動作は、非一時アクセスを使用してアドレス・ストレージ230内の変換にアクセスする。
非一時アクセスは、そのアクセスの結果として新しいエントリがキャッシュにインストールされないアクセスである。たとえば、非一時アクセスの結果として、最終レベル・キャッシュ(LLC)にどのエントリも記憶されない。そのようなアクションは、メンテナンス動作の結果としてキャッシュに不要なデータを追加することを回避する。したがって、近い将来にデータが再び使用されることはなく、他の有用なデータを取り除くべきではない(また、キャッシュされるべきではない)という前提がある。いくつかの実施例では、非一時アクセスを使用するのではなく、通常のアクセスが使用され、任意の結果のエントリがキャッシュに追加されると、エントリがより簡単に置換されるように置換優先順位が高くなる。
図4は、メンテナンス動作が無効化動作である実例を示す。いくつかの実施例では、エントリがもはや使用可能ではないことを示すために、無効化動作により、テーブル内の1つ又は複数のエントリの有効フラグが作成される(たとえば、クリアされる)。したがって、それらのエントリは、必要に応じて他のエントリによって置換され得る。いくつかの他の実施例では、無効化動作により、エントリが完全に削除される可能性がある。
図4はまた、無効化動作が、仮想アドレス、仮想アドレスの範囲、アドレス空間識別子、仮想マシン識別子、中間物理アドレス、及び物理アドレスのうちの1つ又は複数に基づいて、アドレス・ストレージ230内の1つ又は複数の変換を無効にする実例を示す。したがって、無効化は、無効化の対象となるべきそれらのエントリを示すために、そのようなパラメータの1つ又は複数(任意の組合せ)を使用することができる。いくつかの実施例では、追加で(又は、その代わりに)他のパラメータが使用され得る。
この特定の実例では、無効化動作は、アドレス空間識別子(ASID)又は仮想マシン識別子(VMID)が1であるエントリを無効にすることである。これは、アドレス・ストレージ内の各エントリをスキャンし、1に等しい任意のエントリのASID及びVMIDの値をチェックすることによって達成される。そのようなエントリが見つかると、そのエントリがもはや有効でないことを示すために、そのエントリの有効フラグがクリアされる。図4の例では、これは有効フラグをゼロ(無効)に設定することによって達成される。無効化動作は他のフィールドに基づいて実行され得ることが理解されよう。フィールドはテーブル自体内にある必要はないが、別のテーブル、レジスタ、又はフラグを介してテーブル内のエントリに関連付けられ得る点に留意されたい。アドレス空間識別子と仮想マシン識別子は両方とも、テーブルのエントリをグループに分割するために使用される技法である。具体的には、多数の仮想マシンを有するシステム内の特定の仮想マシン・インスタンスに属するエントリを識別するために、仮想マシン識別子(VMID)が使用され得る。同様に、アドレス空間は、各セクションがそれ自体の識別子を有する多数のセクションにセグメント化され得る。これらの技法は、各仮想マシンが、その利用可能なメモリを、その仮想マシンに応じていくつかの異なるセグメントに分割できるように結合され得る。たとえば、各アドレス空間は、特定の仮想マシン・インスタンス上で実行されている別のアプリケーションに割り振られ得る。このようにして、アドレス・ストレージ230内の各エントリは特定の目的に関連付けられ得る。したがって、無効化動作は、特定の目的に関連付けられるアドレスを対象とすることができる。たとえば、特定の仮想マシン上で実行されている特定のアプリケーションに関連付けられるすべてのアドレスに関して、たとえばそのアプリケーションが終了するときに、無効化動作が実行され得る。同様に、無効化動作は、その仮想マシンがたとえば終了されるべきであった場合、単に仮想マシン識別子に基づいて対象とされ得る。
上記の段落から、メンテナンス動作は時間がかかる場合があることが理解されるであろう。したがって、図2、図3A、及び図3Bを参照して説明した装置200を使用することによって、メンテナンス動作が実行されている間にCPUなどのリクエスタがブロック又は停止される必要がないようにメンテナンスを非同期に実行することが可能である。メンテナンス動作が実行されているストレージが特に大きい場合は、特に重要である。メンテナンス動作は直ぐには実行されないため、ルックアップとキューに入れられたメンテナンス動作との間に発生し得る競合を解決する必要がある。これは、そのような競合をテストし、競合が検出された場合は、元のデータを取り出させる(たとえば、ページ・ウォークを実行させるTLBミスを発行することによって)ことによって達成され得る。このようにして、メンテナンス動作のキューが維持され、適切なときに実行され得る。
複数のメンテナンス動作を同時に実行することによる、非同期メンテナンス効率の向上
図4は、選択されたメンテナンス動作が、アドレス・ストレージ230のうちの少なくとも一部をスキャンし、満たされた条件に応答してアクションを実行することを備える実例を示し、スキャンの間、メンテナンス回路250は、満たされたさらなる条件に応答してさらなるアクションを実行し、さらなるアクション及びさらなる条件は、メンテナンス・キューから実行されるべきさらなるメンテナンス動作に対応する。
この特定の実例では、ASIDが1である場合に無効化するための第1のメンテナンス動作が存在すると考えられ得る。VMIDが1である場合に無効化を実行するための第2のメンテナンス動作が存在し得る。ASIDが1である場合にルックアップ回路230内のエントリの各々を介してエントリに対して第1のスキャンを実行するのではなく、VMIDが1である場合にルックアップ回路230のエントリの各々を介して第2のスキャンを実行する。ASID又はVMIDの値が1であるかどうかを決定するために、各エントリがチェックされる単一のスキャンが実行され得る。このようにして、ルックアップ回路230のエントリを1回だけスキャンすることが必要とされ、メンテナンス動作のオーバヘッドを低減するためにこれが使用され得る。したがって、複数のメンテナンス動作をより効率的に実行され得る。アクションとさらなるアクションとが同じであり得ることは理解されよう。同様に、条件及びさらなる条件も同じであり得る。
ASID又はVMIDの再利用を認識することによる非同期メンテナンス効率の向上
図5は、メンテナンス・キュー内の重複するメンテナンス動作と重複するアドレス・ストレージ230のエントリに関する入力アドレスに応答して、装置200が重複するメンテナンス動作を優先するように適合された実例を示す。
特定のアプリケーション又は仮想マシンが終了すると、そのアプリケーションに関連付けられるASID値を有するTLBエントリ、又はその仮想マシンに関連付けられるVMID値を無効化される必要がある。同じASID/VMIDの要求が受信され始めると、それはTLBを新しいエントリで満たされる必要があることを意味する。しかしながら、メンテナンス動作が実行される前にこれを行うことはできない。したがって、ルックアップ動作(たとえば、変換要求)がそのようなメンテナンス動作と重複する場合、メンテナンス動作を促進することが望ましい場合がある。
図5は、この改善のために調整された、図3Bにおいて提示されたフローチャートと同様のフローチャートを示す。本プロセスは、図3Bに関して説明したように進行する。しかしながら、ステップ330において、メンテナンス競合が検出された場合、ステップ500において、競合が発生するメンテナンス動作が、特定のASID又はVMIDに向けられた無効化であるかどうかが決定される。特定のASID又はVMIDに向けられた無効化ではない場合、TLBミスが発行される前と同様に、本プロセスはステップ340に進む。特定のASID又はVMIDに向けられた無効化である場合、ステップ510において、メンテナンス動作の優先度が促進される。これにより、メンテナンス動作がより迅速に行われるようになる。いくつかの実施例では、メンテナンス動作の優先度が最も高いレベルに促進され、次のメンテナンス動作が実行されるようにする。次いで、本プロセスはステップ340に進み、ここでTLBミスが実行され、それによってページ・ウォークが発生する。
完全なメンテナンス・キューに応答することによる、非同期メンテナンス効率の向上
図6のフローチャートは、メンテナンス・キューが一杯であるときにメンテナンス動作を受信したことに応答して、メンテナンス回路が選択されたメンテナンス動作を実行するように適合される実例に関する。具体的には、図6は、選択が、実行される時間が最も短いメンテナンス・キュー内のメンテナンス動作に基づく実例に関する。
場合によっては、メンテナンス動作のキュー220がすでに一杯であるときに、メンテナンス動作が受信され得る。そのような場合、リクエスタは、空間がキュー220内で利用可能となるような時間まで、ブロック又は停止される可能性がある。これを処理する1つの方法は、メンテナンス回路250がメンテナンス・キュー220に保持されているメンテナンス動作のうちの1つを直ちに実行することであり、たとえば、いくつかの実施例では、メンテナンス回路250はメンテナンス・キュー220から実行されるべき最も速いメンテナンス動作を選択し、直ちにその動作を実行する。たとえば、図6のステップ600において示されるように、メンテナンス動作が受信される。ステップ610において、メンテナンス・キュー220が一杯であるか否かが決定される。メンテナンス・キュー220が一杯ではない場合、本プロセスはステップ670に進み、そこで新しいメンテナンス動作がキューに追加される。メンテナンス・キュー220が一杯である場合、ステップ620において、メンテナンス・キュー220内に保持されているメンテナンス動作の次のメンテナンス動作がフェッチされるループが開始される。ステップ630において、このメンテナンス動作がこれまでに決定された最速のメンテナンス動作よりも速いかどうかが決定される。デフォルトでは、メンテナンス動作がまだ検査されていない場合、これは真である。いずれにしても、この条件が満たされている場合、ステップ640において、検査されている現在のメンテナンス動作が、現在の最速動作として設定される。ステップ630において、検査されている現在のメンテナンス動作がより高速ではない場合、本プロセスはステップ650に直接進む。ステップ650において、メンテナンス・キュー220から検査されるべきより多くのメンテナンス動作があるかどうかが決定される。検査されるべきより多くのメンテナンス動作がある場合、本プロセスはステップ620に戻り、次のメンテナンス動作がフェッチされる。検査されるべきさらなるメンテナンス動作がない場合、ステップ660において、現在の最速動作が実行される。次いで、ステップ600において受信された新たに受信されたメンテナンス動作が、ステップ670においてメンテナンス・キュー220に追加される。
メンテナンス動作を結合することによる非同期メンテナンス効率の向上
図7は、1つ又は複数の条件に基づいてメンテナンス・キュー内の複数のエントリを結合するための結合回路260の実例を示す。たとえば、いくつかの実施例では、結合回路260は、アドレス・ストレージ230内の隣接するアドレスを結合する。たとえば、アドレスが隣接する同じASID及びVMIDに関連するエントリである。このようにして、メンテナンス動作のキューは、隣接するアドレスに関連する複数のエントリをアドレスの範囲に関する単一のエントリに置換することによって圧縮され得る。
いくつかの実施例では、1つ又は複数の条件は、(i)重複又は隣接するVA/IPA領域がマージされ得る、(ii)VAがASIDに属している場合、VAによる無効化がASIDによる重複する無効化によって包含される、(iii)IPAがVMIDに属する場合、IPAによる無効化がVMIDによる重複する無効化によって包含される、及び(iv)ASIDがVMIDに属する場合、ASIDによる無効化がVMIDによる無効化によって包含される、を含む。これらの条件は、VAは関連付けられるASIDを有し、ASIDは関連付けられるVMIDを有し、IPAは関連付けられるVMIDを有するという関係に基づく。
図7の実施例を考慮すると、キューは当初5つの動作を有する。最初の2つの動作は、同じASID(1)及び同じVMID(1)に関連し、アドレスが隣接している(0×1121は0×1122に隣接している)ため、単一の動作にマージされ得る。したがって、条件(i)が適用される。したがって、これらの動作は単一の無効化動作によって置換され得、ASIDが1でありVMIDが1である0×1121から0×1122の範囲内のアドレスの無効化を対象とする。同様に、初期メンテナンス動作キューの次の2つの動作もまた、同じASID(2)及びVMID(1)を対象とし、隣接するアドレスにも関連する(0×009Dは0×009Eに隣接する)。したがって、ASIDが2であり、VMIDが1であるため0×009Dから0×009Eの範囲を無効化するための単一のメンテナンス動作を生成するために、これらが圧縮され得る。したがって、圧縮されたメンテナンス・キューは3つのエントリを有する。この実例では、メンテナンス動作の各々は優先度に関連付けられている。この実例では、新しいエントリの優先度は、結合されたメンテナンス動作の優先度の最高値に等しい。このようにして、メンテナンス動作は、他の動作と結合された結果として優先度を低下させない。他の実施例では、新しい動作を構成するすべての動作間で優先度が平均化され得る。他の選択肢も利用可能であり、当業者に知られていることが理解されよう。
したがって、メンテナンス・キュー220が圧縮され、それによって、リクエスタが停止又はブロックされることなくメンテナンス・キュー220にさらなるメンテナンス動作を追加され得ることが分かる。圧縮プロセスによっていかなるメンテナンス動作も失われることはない。結合プロセスは単にエントリを一緒に合併するだけである。
充填キューの使用による非同期メンテナンス効率の向上
図8は、新しい変換のための少なくとも1つの充填動作をアドレス・ストレージ230に記憶するための充填キュー回路800の実例を示しており、入力ポート210は充填動作を受信するように適合されており、メンテナンス・キュー内の重複するメンテナンス動作と少なくとも一部が重複する充填動作に応答して、充填キュー回路800は充填動作を記憶し、充填動作がメンテナンス動作と完全に重複する場合、メンテナンス・キューからメンテナンス動作が除去され、重複しない場合、重複するメンテナンス動作の優先度が高くなる。
たとえば、ページ・テーブル・ウォークが発生した場合などに、新しいエントリがアドレス・ストレージ230に追加されるべきである場合、保留中のメンテナンス動作と競合する可能性がある。これが発生する可能性がある1つの実例は、メンテナンス動作が特定のASIDに従って無効化を実行するように指示され、その後に特定のマッピングを満たす充填が行われる場合である。別の実例では、特定のVAに従った無効化及び同じVAに対する充填が、同様の時間に発行される可能性がある。この場合、無効化が解除され得、エントリが直接充填され得る。
充填動作が記憶され得る充填キュー800を提供することによって、充填動作は、競合するメンテナンス動作が処理される時間まで遅延され得る。競合するメンテナンス動作をより迅速に解決させるために、競合する(すなわち、重複する)メンテナンス動作の優先度が高められ得る。図8に示されるように、充填動作が受信されると、それは最初に充填キュー800に送られる。ルックアップ回路230がTLBの形態を取る場合、充填キュー800自体がより小さいTLBの形態を取ることができる。ここでは、動作がルックアップ回路230に直接進むことができるかどうか、又は動作が充填キュー800において保持されなければならないかどうかを決定するために、メンテナンス・キューで参照が発生する。この決定を行うプロセスは、図9に関してより詳細に示される。競合するメンテナンス動作が完了すると、そのメンテナンス動作と競合したエントリはすべて、充填キュー800からルックアップ回路230に促進される。同様に、メンテナンス・キュー220に入るメンテナンス動作は、既存の充填動作がメンテナンス動作によって行われることを確実にするために、充填キュー800を参照する。いくつかの実施例では、充填動作が実行されるような時間までメンテナンス動作を進めることができない場合がある。同様に、入力アドレスがルックアップ動作の一部として提供されるとき、これは、ルックアップ回路230と同様にフィルキュー800に対してチェックされ得る。
図9は、充填キュー800、たとえばメンテナンス・キュー220から発生する参照プロセスの実例を示す。ステップ900において、充填動作が受信される。ステップ910において、メンテナンス・キュー220が参照される。ステップ920において、メンテナンス・キュー内のエントリのうちのいずれかと充填動作との間に重複があるかどうかが決定される。たとえば、メンテナンス動作のうちのいずれかが、受信された充填動作に影響を与える可能性があるかどうかが決定され得る。そのような重複が存在しない場合、ステップ930において充填動作が実行される。これにより、ルックアップ回路230の1つ又は複数のエントリが更新される。次いで、本プロセスはステップ900に戻る。或いは、重複が検出された場合、充填動作が充填キュー800に追加され、競合するメンテナンス動作の優先度がステップ940において高められる。再び、本プロセスはステップ900に戻る。
このプロセスは、メンテナンス動作が実行された後に充填動作が行われる図10Aに示されている。この実例では、メンテナンス動作によってアドレス・ストレージ230内のエントリのいずれも影響を受けないと仮定される。しかしながら、メンテナンス動作を実行すると、その後に実行される充填動作は、太字で示される新しいエントリを追加する結果となる。
したがって、図10Aは、重複するメンテナンス動作が完了したことに応答して(たとえば、スキャンされているエントリの一部として)、アドレス・ストレージ230に対して充填動作が実行される実例を示す。代替として、図10Bは、メンテナンス動作が実行されるとアドレス・ストレージ230に対して充填動作が実行される実例を示す。具体的には、メンテナンス動作は、アドレス・ストレージ230のエントリをスキャンする。充填動作によって新しいエントリが挿入される位置でメンテナンス動作を実行した後、充填動作が実行され、それによって新しいエントリが挿入される。次いで、メンテナンス動作の残りの部分が、残りのエントリに対して実行され得る。このようにして、充填動作が発生するエントリにメンテナンス動作が影響を与えた後に充填動作が発生するので、メンテナンス動作は充填動作に影響を与えない。この手法は、複数の動作が同時にストレージ内の同じ空間で実行されるという点で、ローカリティの主体から利益を得ている。これにより、充填動作が実行されるエントリを突き止めるために、アドレス・ストレージ230のエントリの各々を再スキャンする必要性を回避することができる。
メンテナンス中に要求を許可することによる非同期メンテナンス効率の向上
図11は、選択されたメンテナンス動作が、アドレス・ストレージ230のうちの少なくとも一部をスキャンすることと、満たされた条件に応答してアクションを実行することとを備える実例を提供し、入力アドレスに関連する充填動作を受信したことに応答して、入力アドレスが選択された維持動作に関してすでにスキャンされたアドレス・ストレージ230の一部に対応するときに充填動作が実行される。
したがって、メンテナンス動作が実行されている間に、入力アドレスが入力されたことに応答して、出力アドレスが提供されることを同時に許可することが可能であり得る。具体的には、アドレス・ストレージ230のうちのすでにメンテナンス動作を受けている部分はアクセス可能であると見なされ得、アドレス・ストレージ230の残りの部分はアクセス不可能であると見なされ得る。このようにして、入力アドレスが、選択された進行中のメンテナンス動作に関してすでにスキャンされたアドレス・ストレージ230のエントリに関連する場合、対応する出力アドレスが提供され得る。或いは、入力アドレスが、選択されたメンテナンス動作に関してスキャンされていないアドレス・ストレージ230の一部に関連する場合、又は入力アドレスがアドレス・ストレージ230内のエントリのいずれにも関連しない場合、ミスはリクエスタに戻される。したがって、変換が提供されるためにメンテナンス動作を完了する必要はない。したがって、ミスを提供する代わりに、変換の結果が提供され得る。メンテナンス動作が実行されたアドレス・ストレージ230内のポイントを追跡するために、カウンタ1000が設けられている。ルックアップ動作又は充填動作によって影響を与えられるアドレス・ストレージ230の一部が、メンテナンス動作によってすでにスキャンされたかどうかを決定するために、比較器が使用され得る。
したがって、図2及び図11もまた、複数のエントリを記憶するためのストレージ回路230であって、複数のエントリのうちの少なくとも一部をスキャンすることによって選択されたエントリの検索を実行するように適合されたストレージ回路230と、検索の一部として依然としてスキャンされるべきであるストレージ回路230の一部への指示を記憶するための参照回路1000と、ストレージ回路230の一部には存在せず、参照回路によって示されるように検索の一部として依然としてスキャンされるべきである複数のエントリのうちの前記1つに応答して複数のエントリのうちの1つに影響を与える動作を実行するための処理回路240とを備える装置の実例を提供する。この場合、依然としてスキャンされるべきストレージ回路230の一部は、検索中に更新されるカウンタ1000によって指示される。いくつかの実施例では、可能なエントリのサブセットのみが、最初から検索プロセスの一部である点に留意されたい。たとえば、ストレージ回路230がハッシュ・テーブルを利用し、エントリがどこに位置するかをほぼ決定した場合、一致するエントリを見つけるためにエントリのサブセットのみが検索されるべきである。このようにして、たとえば、検索が実行されている間であってもストレージ回路にエントリが挿入され得る。
ストレージを盗むこと
図12は、プロセッサ要素1220が入力アドレスを入力ポート1210に提供する、いくつかの実施例による装置1200を示す。入力アドレスは、入力アドレスと出力空間内の出力アドレスとの間の変換を記憶する変換索引バッファ(TLB)1230に提供される。出力アドレス・ポート1240は、そのアドレスのメモリ1290にアクセスするために、出力アドレス(又は、出力アドレスのさらなる変換)が出力されることを可能にする。同時に、プロセッサ要素1220は、入力データ・ポート1250を介してデータを受信することができる。いくつかの実施例(図12に示される実施例など)では、入力データ・ポートはメモリ1290から装置1200へのものであり、メモリ1290がアクセスされると、メモリ1290内のその場所におけるデータが装置に戻される。このデータは、たとえば、DRAMによって支援される(backed)キャッシュ1260に記憶され得る。最後に、データが出力される出力データ・ポート1270がある。図12に示される実施例などのいくつかの実施例では、データ出力ポートは、装置1200がデータをプロセッサ要素に戻すことを可能にするために設けられている。制御回路1280は、TLB1230及び1260を制御するために使用される。さらに、キャッシュ1260はデータを記憶するために使用されるが、いくつかの変換を記憶するためにも使用される。このようにして、TLB1230は、たとえば、そうしなければTLB1230が変換を記憶することができないときに、変換を記憶するためにするストレージ空間をキャッシュ1260から「盗む」。入力データ・ポート1250及び出力データ・ポートが、それらの方法で配置される義務はない点に留意されたい。たとえば、データはプロセッサ要素1220から受信され、メモリ1290に出力され得る。実際には、データがメモリ1290から読み出され、メモリ1290に書き込まれる結果、両方向でデータを受信されて出力され得る。さらに、様々なポート1210、1240、1250、1270は、入力ポート1210、1250を一緒に、さらに出力ポート1240、1270を一緒に結合すること、又はプロセッサ・ポート1210、1270を一緒に、さらにメモリ・ポート1240、1250を一緒に結合することのいずれかによって、或いはすべての4つのポート1210、1240、1250、1270を一緒に結合することによっても結合され得る。
その結果として、図12は、プロセッサ回路1220から入力アドレスを受信するための入力アドレス・ポート1210と、入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するためのアドレス・ストレージ1230と、出力アドレスを出力するための出力アドレス・ポート1240と、データを受信するための入力データ・ポート1250と、データを複数の場所のうちの1つに記憶するためのデータ・ストレージ1260と、データ・ストレージ1260に記憶されたデータを出力するための出力データ・ポート1270と、データ・ストレージ1260に入力アドレスと出力アドレスとの間の変換を記憶させるための制御回路1280とを備え、制御回路は、入力アドレスがアドレス・ストレージ及びデータ・ストレージにないことに応答してページ・ウォークを発生させるための信号を出すように適合される装置1200の実例を提供する。
このようにして、変換に利用可能な空間の量を増加することができても、アドレス・ストレージ1230自体のサイズは変更されないままである。その結果、アドレス・ストレージ1230内の変換をルックアップするために要する時間は、大幅に変更する必要はない。具体的には、変換がTLB1230に記憶されていることが分かっている場合、追加のアクセス時間はほとんど又はまったく必要ではない。これは、たとえば、変換がどこで見つかるかを推測するために使用される予測子を使用することによって達成され得る。位置が未知である場合、アドレス・ストレージ1230及びデータ・ストレージ1260の両方において変換が同時にルックアップされるように、TLB1230及びキャッシュ1260へのアクセスが並列化され得る。この場合も、必要とされる増加した任意のルックアップ時間を大幅に制限することができる。
同様に、回路サイズは、この変更の結果として大幅に増加する必要はない。具体的には、アドレス・ストレージ1230のサイズは変更されないままであり、通常はそのような回路上に存在すると予想されるデータ・ストレージ1260に変換は記憶されるので、変換を記憶するために「盗まれる」ストレージは、特別なハードウェアを追加する必要はない。したがって、装置1200の回路空間全体を増加させる必要はない。したがって、回路空間の増加を必要とせずに、性能の向上が達成され得る。図12はまた、データ・ストレージ1260とアドレス・ストレージ1230が別個のメモリである実例を提供する点に留意されたい。具体的には、変換索引バッファ(TLB)1230及びデータ・キャッシュ1260は、データ回路上の別個のデバイスである。いくつかの実施例では、これらのデバイスの各々は、それら自体の制御回路1280の代わりに、又はそれ自体の制御回路1280と同様に、それら自体の個々の制御回路を有することができる。しかしながら、データ・ストレージとアドレス・ストレージを別個のメモリにする必要はない。具体的には、いくつかの実施例では、アドレス・ストレージ1230及びデータ・ストレージ1260は同じメモリであってもよく、それによって複数の目的のために同じメモリ領域をプールする。
図13は、複数の場所がnウェイのセット・アソシエイティブ・メモリの形態を取る実例を示し、制御回路1280は、データ・ストレージ1260にnウェイのうちの1つ又は複数の転用されたウェイに変換を記憶させるように適合される。セット・アソシエイティブ・メモリには、データが記憶され得る場所がいくつかある。そのような各場所は「ウェイ」(way)と呼ばれる。これは、たとえば、セット・アソシエイティブ・メモリ内のストレージの量が、記憶されるべきデータのセットよりも著しく少ない結果として発生し得る。いくつかのウェイがあるようにメモリを考案することによって、メモリの柔軟性が高められ得る。たとえば、記憶されるべき場所を決めるために、アドレス上でハッシュが実行され得る。いくつかのデータが同じ場所に記憶されることを望む場合、いくつかのデータが同じハッシュ値において記憶され得るようにいくつかの「ウェイ」が提供される。一方の極端では、メモリは「直接マッピング」され、その場合、データが記憶され得る場所はちょうど1つである。他の程度では、メモリは完全アソシエイティブであり、データはどこにでも記憶され得る。図13の実例では、nは5であるため、メモリは5ウェイ・アソシエイティブである。したがって、所与のデータについて、そのデータが記憶され得る5つの異なる場所が存在する。各ウェイはまた、11の異なるデータが各ウェイに記憶されることを可能にする11のインデックス(しばしばセットと呼ばれる)から構成されている。図13の場合、ウェイのうちの2つ(影付き)は、変換索引バッファTLB1230によって使用され得るように転用されている。これらの転用されたウェイのうちの1つに通常は記憶されるデータは、代わりに他のウェイのうちの1つに割り振られる。
データ・ストレージが転用されることを可能にする別の方法は、アドレスの使用によるものである。図14は、複数の場所がnウェイ・セット・アソシエイティブ・メモリの形態を取る実例を示し、制御回路1280は、データ・ストレージ1260に、メモリの1つ又は複数の転用されたセット1410に変換を記憶させるように適合される。この実例では、領域ポインタ1400は、アドレス・ストレージ1230によって記憶される変換とデータ・ストレージ1260によって記憶されるデータとの間の境界を示すアドレスを指す。この実例では、データ・ストレージ1260内のセットが変換の記憶のために転用されるので、境界は動くものとして示される。したがって、入力(及び出力)アドレスがプロセッサ回路によって提供されると、新しい変換を作成するために、変換はこの転用された領域に記憶され得る。セットが転用されると、データ・ストレージ1260へのインデックス付けに使用されるハッシュ関数は、もはや転用されていないセットを参照しないように適合しなければならないことが理解されよう。一方、データ・ストレージ1260の残りのセット1420は、データを記憶するために使用され得る。この境界は、たとえば、セット・インデックスによって参照され得る。このようにして、図14は、データ・ストレージ1260とアドレス・ストレージ1230が同じメモリ内の異なる領域である実例を示す。したがって、図14はまた、アドレス・ストレージ1410によって使用される領域とデータ・ストレージ1420によって使用される領域との間の境界を示すために、領域ポインタ1400の実例を提供する。この説明の残りの目的のために、「アドレス・ストレージ」及び「データ・ストレージ」という用語が使用されるが、これは別個のメモリを必要とするものとして解釈されるべきではない。さらに、以下の実例は、ウェイ、記憶場所、又はアドレスを参照し得るが、ウェイの転用又はセットの転用の使用は交換可能な技法であることを当業者は理解するであろう。したがって、図14は、プロセッサ回路から入力アドレスを受信するステップと、アドレス・ストレージ1230において、入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するステップと、データを受信するステップと、データをデータ・ストレージ1260に記憶するステップと、データ・ストレージ1260に入力アドレスと出力アドレスとの間の変換を記憶させるステップと、入力アドレスがアドレス・ストレージ及びデータ・ストレージにないことに応答して、ページ・ウォークを発生させるための信号を出すステップとを備える方法を示す。
ポリシーを使用してストレージを盗むこと
図15は、いくつかの実施例によるポリシーの実例を示す。具体的には、図15は、ポリシーが複数の場所ごとに、データと比較して変換を記憶するための嗜好を示す実例を示す。ポリシーは、フローチャート1500の形態で示される。ステップ1510において、新たな変換が受信される。ステップ1520において、ストレージ場所wが変換に基づいて決定される。これは、変換の対象である入力アドレス又は出力アドレスに対してモジュラス演算を実行するなど、ハッシュ演算を実行することに基づいて計算され得る。ステップ1530において、現在のアドレス・ミス率がストレージ場所w1560の値xより大きいかどうかが決定される。図15の実例において、wのxの値は1000のうち5である。したがって、この場合のアドレス・ミス率がプロセッサ回路1220によって実行される1000個の命令ごとに5より大きい場合、本プロセスはステップ1540に進み、そこで変換が(たとえば、データ・ストレージ1260内に)記憶される。大きくない場合、ステップ1550において、データ・ミス率がストレージ場所w1570の値yより大きいかどうかが決定される。この場合、値は1000のうち30に設定される。したがって、データ・ストレージ・ミス率がプロセッサ回路1220によって実行される1000個の命令ごとに30より大きい場合、本プロセスはステップ1540に進み、そこで変換がデータ・ストレージ1260に記憶される。或いは、本プロセスはステップ1555に進み、そこでアドレス・ストレージ・アクセス速度がストレージ場所w1580の値zより大きいかどうかが決定される。この場合、値は4のうち3に設定される。したがって、アドレス・ストレージに対するアクセス速度がプロセッサ回路1220によって実行される4つの命令のうち3つを超える場合、本プロセスはステップ1540に進み、そこで変換がデータ・ストレージ1260に記憶される。或いは、本プロセスは1510に戻る。言い換えれば、変換は記憶されない。この実例では、変換は3つの条件のうちのいずれかが満たされた結果としてデータ・ストレージに記憶される。第1は、アドレス・ミス率が第1の変数xよりも大きいことである。この実例では、xの値は、プロセッサ回路1220によって実行される1000個の命令につき5として与えられる。しかしながら、別のシステムでは、この値は、たとえば、実行される1000個の命令につき10個のミスである可能性がある。高いアドレス・ストレージ・ミス率は、システム内で発生する非効率性を示すことができる。したがって、アドレス・ストレージ・ミス率がある点に達すると、システムの効率を上げるために変換を記憶することがより望ましいものとなる。変換が記憶されるために満たされ得る第2の条件は、データ・ミス率が変数yを上回ることである。この実例では、ストレージ場所wの変数yは、実行される1000個の命令当たり30に等しい。しかしながら、別のシステムでは、これは1000個の命令につき40個のミスに等しい可能性がある。データ・ストレージに関する多数のミスは、実行される命令にデータ・ローカリティが乏しいことを示す。したがって、データの記憶のために通常使用される空間は、代わりに変換を記憶するために使用される方がよい場合がある。したがって、データ・ストレージ速度がある点に達すると、変換を記憶することがより望ましい場合がある。変換が記憶されるために満たされ得る第3の条件は、アドレス・ストレージ・アクセス速度が変数zを上回ることである。この実例では、ストレージ場所wの変数zは、実行される4個の命令につき3に等しい。アクセス速度が大きいことは、ストレージ・デバイスのうちの1つに競合があり得ることを示しており、したがって、代わりにデータ・ストレージにデータを記憶することによって作業負荷を分散することが望ましい場合がある。
図15はまた、置換ポリシーが動的に構成可能である実例を示す。具体的には、wのx、y、及びzの値はそれぞれレジスタ1560、1270、1580に記憶される。このようにして、ストレージ場所wのデータではなく、変換を記憶するための嗜好が変更され得る。当然のことながら、x、y、及びzのグローバル値も設定され得、これはすべてのストレージ場所にわたって有効であることが理解される。図15はまた、制御回路1280が、データ・ストレージ1260に、少なくとも1つの第1の条件に依存して入力アドレスと出力アドレスとの間の変換を記憶させるように適合された実例を提供する。具体的には、図15は、第1の条件が、アドレス・ストレージ1230のミス率と、アドレス・ストレージ1230のヒット率と、アドレス・ストレージ1230のアクセス速度と、データ・ストレージ1260のミス率と、データ・ストレージ1260のヒット率と、データ・ストレージ1260のアクセス速度とを備えるリストからのものである実例を示す。
いくつかの他の実施例では、ステップ1530、1550、及び1555における条件は、あらかじめ定義された定数よりも小さい値についてテストすることによって反転され得ることが理解されるであろう。ステップ1530及び1550におけるテストの場合、テストは、あらかじめ定義された定数よりも小さい値ではなく、あらかじめ定義された定数よりも大きい値のためであってもよい。さらに、ステップ1555におけるテストの場合、アクセス速度はデータ・ストレージのアクセス速度を考慮することができる。代わりに、又は同様に、他のメトリックも考慮され得る。たとえば、使用され得る別のメトリックは、いくつかのクロック・サイクルにおけるミス、ヒット、又はアクセスの数である。
図16は、制御回路1280が、入力アドレスと出力アドレスとの間の変換をデータ・ストレージ1260の一部に記憶させるように適合された実例を提供する。この実例では、データ・ストレージ1260はキャッシュである。具体的には、データ・ストレージ1260は、5ウェイ・アソシエイティブ・キャッシュであり、各ウェイは11個のストレージ場所を備える。変換が記憶されているデータ・ストレージ1260の一部は灰色で示されている。具体的には、ストレージ場所ごとにウェイの数が異なる点に留意されたい。たとえば、第1のストレージ場所1650は、その場所1650に記憶するために変換が考慮されるときのデータ・ストレージ・ミス率及びアドレス・ストレージ・ミス率を考慮する第1のインジケータ1600によって指定されるように、変換の記憶のために割り振られた単一のウェイのみを有する。第2のストレージ場所1660は、第2のインジケータ1610によって指定されるように変換のストレージに割り振られた4つのウェイを有し、その場所1660に記憶するために変換が考慮されるときに、データ・ストレージ・ミス率及びアドレス・ストレージ・ミス率をやはり考慮する。このようにして、図16は、一部のサイズが少なくとも1つの第2の条件に依存する実例である。具体的には、図16は、第2の条件が、アドレス・ストレージ1230のミス率と、アドレス・ストレージ1230のヒット率と、アドレス・ストレージ1230のアクセス速度と、データ・ストレージ1260のミス率と、データ・ストレージ1260のヒット率と、データ・ストレージ1260のアクセス速度とを備えるリストからのものである実例を示す。データ・ストレージ・ミス率及びアドレス・ストレージ・ミス率は経時的に変化するので、異なるストレージ場所は、変換のために割り振られた異なる量のストレージで終わる可能性があることは理解されよう。これにより、ミス率が高いときに多数の変換が一度に発生した場合、メモリ内のどこに配置されるべきかにかかわらず、それらの変換のためにストレージが提供され得るように柔軟性が提供される。
ストレージ・アクセス・プロセスを盗むこと
図17Aは、アドレス・ストレージ1230における入力アドレスのミスに応答して、読出し要求が変換のためにデータ・ストレージ1260に送られる実例を示す。具体的には、処理回路1220からTLB1230において要求が受信される。要求は、対応する出力アドレスが所望される入力アドレスを備える。そのような変換がTLB1230で見つかると、「ヒット」が発生し、出力アドレスが処理回路1220に返送される。見つからない場合、「ミス」が発生し、要求はキャッシュ1260に転送され、キャッシュ1260はいくつかの実施例ではラスト・レベル・キャッシュ(LLC)である。ここで、TLB1230によって使用されるために「盗まれた」キャッシュ1260の一部は、入力アドレスを検索される。「ヒット」が発生した場合、要求された出力アドレスは処理回路1220に返送される。そうでなければ「ミス」が発生し、キャッシュ1260がLLCであるため、これによりページ・ウォークが実行される。TLB1230及びキャッシュ1260が単一のメモリである実例では、転送は同じ回路内で局所的に発生し得る点に留意されたい。しかしながら、そのような状況では、TLB1230によって使用される第1のストレージ場所と、キャッシュ1260によって主に使用される第2の場所との2つの検索が依然として実行され得る。或いは、単一の検索が実行されてもよい。これらの実例の各々において、検索が失敗した場合、処理回路1220によってページ・ウォークが実行される。
図17Bは、ページ・ウォーク要求が発行されるのと並行して、読出し要求がデータ・ストレージ1260に送られる実例を示す。したがって、TLB1230において発生するミスに応答して、要求がキャッシュ1260に転送され、関連付けられる出力アドレスを取得するために処理回路1220によってページ・ウォーク要求が同時に発行される。このようにして、ページ・ウォークが必要な場合、キャッシュ1260の追加の検索によって遅延されない。これは、要求された出力アドレスがいずれかのキャッシュ1260に見つかったときに、キャッシュ1260が検索されると同時にページ・ウォークが実行されるためであり、又は、ページ・ウォークを実行することによって、それは直ちに処理回路1220に戻される。
図17Cは、入力アドレスに基づいて出力アドレスが決定されたことに応答して、装置1200が、出力アドレスに関連付けられるデータ・ストレージ1260に記憶されたデータをフェッチするように適合された実例を示す。要求がTLB1230によって受信されると、ヒットが発生した場合、対応する出力アドレスが処理回路1220に返送される。その時点で、データ要求がTLB1230によってキャッシュ1260に対して行われる。キャッシュ1260においてヒットが発生した場合、データは処理回路1220に戻される。TLB1230において要求された入力アドレスに対するミスがある場合、要求はキャッシュ1260に転送される。その時点で、ヒットがある場合、出力アドレスが処理回路1220に返送され、データ要求はキャッシュ1260において内部的に行われる。その後、データ要求に対するヒットがある場合、データは処理回路1220に返送される。したがって、処理回路1220によって後続のデータ・アクセス要求が行われるためにアドレスがプロセッサ回路1220に返送される必要はない。代わりに、データは、処理回路1220を必ずしも必要とすることなく、アドレスとともに返され得る。これにより、アドレスが転送される時間を節約し、処理回路1220がデータ要求を発行し、データ要求をキャッシュ1260に返送される。したがって、データがより迅速に取り出され得る。当業者は、ミスが従来の方法で処理されることを理解するであろう。
図18は、いくつかの実施例による着信要求を処理する方法を示すフローチャート1800を示す。ストレージを盗むための1つの方法は、バッキング・ストレージに対応しないPA空間の範囲を作成することである(たとえば、偽のIOデバイス、又はキャッシュ・コントローラにアドレスの読出しを試みさせ、読出しが完了され得ない場合には失敗を示すために信号を返すように指示する特別な読出し要求を介して)。このメカニズムは、たとえば、制御回路1280の一部であってもよく、TLB1230又はキャッシュ1260のコントローラの一部であってもよい。これにより、キャッシュ可能な物理アドレス空間の領域を、アドレス変換を記憶するために適したものとしてマークすることが可能になる。しかしながら、その範囲は支援されないため、実際にはバッキング・ストレージ(たとえば、DRAM)に変換を記憶しない。このようにして、メモリに記憶されると考えられるが、そうではない「キャッシュ」変換にキャッシュが行われ得る。要求の一部として提供されたアドレスがあらかじめ定義された範囲内にある場合、その要求は変換に対する要求である。通常、LLCにないキャッシュ可能なデータに対する要求は、データをメモリからフェッチさせることになるが、上述のように、この範囲は実際にはメモリによって支援されていないため、バッキング・ストアに対応しないPA空間の範囲の場合、そのような動作は実行され得ない。したがって、そのような要求が検出されると、メモリから直接データをフェッチすることはできない。代わりに、ページ・ウォークを発生させる信号を(たとえば、制御回路1280に)出す。いくつかの実施例では、これにより、ページ変換がメモリからロードされ、所望のアドレス変換がそれらのページ変換から決定される。
したがって、フローチャート1800は、要求が受信されるステップ1810において開始する。要求はアドレス変換に対するものでもよいし、データに対するものでもよい。したがって、要求はデータ又は変換のいずれかが所望されるアドレスを含む。ステップ1820において、ルックアップが実行される。ルックアップは、前述したように、アドレス・ストレージ1230及びデータ・ストレージ1260のうちの1つ又は複数において、要求を満たすことを試みる。ステップ1830において所望の情報が見つかった場合、プロセスはステップ1810に戻り、そこで次の要求が受信される。或いは、本プロセスはステップ1840に進み、そこで要求があらかじめ定義された範囲内に入るかどうかが決定される。要求があらかじめ定義された範囲内に入る場合、ステップ1850において、ページ・ウォークを発生させる信号が出される。或いは、ステップ1860において、データがメモリからロードされる。いずれの場合も、本プロセスはステップ1810に戻る。この実例では、あらかじめ定義された範囲はバッキング・ストアに対応しないアドレス空間であると仮定される。しかしながら、他の実施例では、ステップ1840は、アドレスがあらかじめ定義された範囲外にあるかどうかをテストすることができ、あらかじめ定義されたアドレス範囲は、バッキング・ストアに対応するアドレス空間によって定義され得る。
したがって、フローチャート1800は、アドレス・ストレージ1230及びデータ・ストレージ1260に変換が存在しない場合に、変換に対する要求に応答して、制御回路1280が、ページ・ウォークを発生させるための信号を出すように適合されている装置の挙動を示す。
TLBルックアップとページ・テーブル・ウォークのタイミング
図19は、1つ又は複数の処理要素(PE)1900と、相互接続回路1910と、ダイナミック・ランダム・アクセス・メモリ(DRAM)1920と、DRAMコントローラ1930とを備えるデータ処理装置の別の実例を概略的に示す。これは、物理メモリ・アドレスに従ってアクセス可能なメモリ1920と、メモリへのアクセスのための仮想メモリ・アドレスを生成するための1つ又は複数の処理要素1900と、及び1つ又は複数の処理要素によって生成された初期メモリ・アドレスの、メモリに提供された物理メモリ・アドレスへの変換を提供するためのメモリ・アドレス変換装置1915とを備えるデータ処理装置の実例を提供する。いくつかの実例では、ページ属性、読出し、書込み、実行許可などの属性も、変換プロセスの一部として取得され、出力メモリ・アドレスとともに提供され得る。例示的な構成では、1つ又は複数の処理要素1900は、それぞれ、その処理要素によって生成された初期メモリ・アドレスの、メモリに提供された物理メモリ・アドレスへの変換のセットを記憶するためのそれぞれの変換索引バッファ1905を備え、変換索引バッファは、メモリ・アドレス変換装置から変換索引バッファによって記憶されていない変換を要求するように構成されている。
図19の構成は、図20~図31を参照して論じられた様々な技法に、個別に又は組み合わせて適用可能である。
処理要素1900の各々は、DRAM1920内のメモリ位置にアクセスすることができる。原則として、このアクセスは実際の(物理的な)メモリ・アドレスを介して直接行われ得る。しかしながら、異なる処理要素(又は、場合によっては、処理要素1900上で動作する異なるオペレーティング・システム)によるメモリ・アクセス間の区分化及びセキュリティの程度を提供するために、処理要素1900は、いわゆる仮想アドレス又は初期メモリ・アドレスによってメモリ・アドレスを参照する。これらは、DRAM1920内の実際の(物理的な)メモリ位置にアクセスするために、出力又は物理メモリ・アドレスへの変換を必要とする。
第1のレベルの変換は、各処理要素に関連付けられる、いわゆる変換索引バッファ(TLB)1905によって実行され得る。TLB1905は、TLB1905に供給される仮想メモリ・アドレスが、DRAM1920となるメモリ・アクセスの一部を形成する物理メモリ・アドレスに変換されるように、仮想メモリ・アドレスと物理メモリ・アドレスとの間の最近使用された変換を記憶又はバッファリングする。しかしながら、TLBはサイズが限られており、処理要素1900によって呼び出される可能性があるすべての可能なメモリ・アドレス変換を記憶することができない。TLB1905に必要な変換が存在しない場合、TLBは変換装置1915を参照し、たとえば相互接続回路1910の一部を形成する。変換装置は、以下で詳細に説明され、必要な変換を提供するか、さもなければそれを取得してTLB1905に戻し、TLB1905が仮想メモリ・アドレスを物理メモリ・アドレスに変換するために使用され得るように動作する。
したがって、図19は、
物理メモリ・アドレスに従ってアクセス可能なメモリ1920と、
メモリにアクセスするための仮想メモリ・アドレスを生成するための1つ又は複数の処理要素1900と、
1つ又は複数の処理要素によって生成された仮想メモリ・アドレスを、メモリに提供された物理メモリ・アドレスに変換するためのメモリ・アドレス変換装置1915と
を備えるデータ処理装置の実例を提供する。
図20は、変換装置の動作をより詳細に示す。
変換装置1915は、いわゆるDRAM支援TLBを維持する。すなわち、変換装置1915は、TLB1905と同様であるが、一般的にかなり大きく、変換データを含むバッファを、DRAM1920内に維持する(DRAM1920の予約済み部分又は陰影付き部分1921として概略的に示されている)。そのようなバッファをDRAM1920内に維持することにより、処理要素1900に対してオフチップであることが多いDRAM容量は、典型的には、ローカルTLB1905に提供される典型的なオンチップ・スタティック・ラム(SRAM)ストレージよりもはるかに大きいため、バッファを比較的大きくすることが可能になる。
したがって、TLB1905によって要求される必要な変換を取得するための第1の試みは、変換装置1915がDRAM支援TLBデータを参照することである。
しかしながら、DRAM支援TLBもまた、ローカルTLB1905よりもかなり大きいものの、サイズは限られている。DRAM支援TLB内に特定の変換についてデータが見つからない場合、いわゆるページ・テーブル・ウォーク・プロセスが実行され得る。これは、やはりDRAMに記憶されたいわゆるページ・テーブルの階層を参照することを含み、これはともに現在許容可能なすべてのメモリ・アドレス変換の決定的なセットを提供する。
変換装置1915は、DRAM支援アクセス回路2010及びページ・テーブル・ウォーク・アクセス回路2020を制御するための制御回路2000を備える。これらの両方は、DRAM支援TLBアクセス回路2010の場合は変換データのインスタンス、又はページ・テーブル・ウォーカ・アクセス回路2020の場合は変換が導出可能なページ・テーブル・データのいずれかを取得するために、DRAMコントローラ1930を介してDRAM1920のそれぞれの部分を参照する。したがって、制御回路2000は、変換されるべき入力初期メモリ・アドレスに応答して、変換データ・バッファから入力初期メモリ・アドレスの変換データの取り出しを要求し、変換データ・バッファからの取り出し要求の処理が完了する前に、ページ・テーブル・アクセス回路によって入力初期メモリ・アドレスの変換データの取り出しを開始する。
ページ・テーブル・ウォーク・アクセス回路2020は、初期メモリ・アドレス空間内の初期メモリ・アドレスと出力アドレス空間内の対応する出力メモリ・アドレスとの間のアドレス変換を定義する変換データを取り出すためにページ・テーブル・データにアクセスするように構成される。DRAM支援TLBは、仮想アドレス空間のサブセットに対して、変換データの1つ又は複数のインスタンスを記憶するための変換データ・バッファの実例である。
その動作の一部として、DRAM支援TLBアクセス回路2010は、制御回路2000に「有効な」信号2015を提供する。制御回路2000は、DRAM支援TLBアクセス回路及びページ・テーブル・ウォーク・アクセス回路2020に、制御及び場合によっては取消し(又は、少なくとも取消し開始)信号2005を提供する。これは、変換データ・バッファが、所与の変換データ、又は所与の変換データが変換データ・バッファによって現在保持されていないことを示すデータのいずれかを備える応答を提供することによって、所与の変換データの取り出し要求に応答するように構成された実例を提供する。
これらの信号の使用の実例は以下で論じる。
例示的な構成は、以前に提案された構成と比較して、回路2010、2020の動作のタイミングの変化を提供する。これらをコンテキストに配置するために、図21は、以前に提案されたTLB及び変換装置の動作を示す概略タイミング図である。
図21における4つの水平ラインは、ローカルTLB1905と、DRAM支援TLBアクセス回路2010と、ページ・テーブル・ウォーク・アクセス回路2020と、DRAM1920とによる動作をそれぞれ概略的に示す。描かれているように、時間は左から右に流れる。
DRAM支援TLBへのアクセスは、ローカルTLB1905が変換装置1915からの変換を(段階2100において)要求するように、ローカルTLB1905に必要な変換が見つからないことによって促進される。以前に提案された構成では、これにより、必要な変換データが存在するかどうかを調べるために、DRAM支援TLBアクセス回路2010にDRAMにアクセスさせる(段階2105において)。DRAM1920からの応答が段階2110として示されている。「ヒット」がある場合、すなわち、変換データの必要なインスタンスがDRAM支援TLB内に見つかった場合、その変換データは段階2115としてローカルTLBに戻され、プロセスが終了する。見つからなかった場合、DRAM支援TLBアクセス回路は、要求された変換データのインスタンスが利用可能でないことを制御回路2000に示し(「有効な」信号を設定しないこと、又は「有効ではない」ことを示す状態に設定することによって)、制御回路2000がページ・テーブル・ウォーク・アクセス回路2020に要求2120を発行して、必要な変換を取得するためにページ・テーブル・ウォークを行うようにする。確立された技法を使用して、ページ・テーブル・ウォークは、ページ・テーブルの必要な階層にアクセスして変換を取得するために、複数の連続するメモリ・アクセス2125を含む。結果は、段階2130において提供された必要な変換であり、最終的に段階2135においてローカルTLB1905に送信され、プロセスは終了する。
段階2160によって示されるように、図21の時間クリティカルパスの一部を形成しないが、入力初期メモリ・アドレスの変換データが現在変換データ・バッファによって保持されていないとき、制御回路は、ページ・テーブル・アクセス回路から受信した入力初期メモリ・アドレスの変換データをDRAM内の変換データ・バッファに記憶するように構成される。
以前に提案された実例では、DRAM支援TLBルックアップが失敗又は欠落するまで、ページ・テーブル・ウォークは開始されないので、最悪の場合、ローカルTLB1905による2100における最初の要求と、要求された変換データを受信するローカルTLB1905との間に長い遅延2150が存在する可能性がある。
対照的に、図22は、本開示の実例による例示的な構成を概略的に示しており、制御回路が、DRAM支援TLBから変換データの必要なインスタンスの取り出しを要求するように構成され、DRAM支援TLBからの取り出し要求の処理の完了前に、ページ・テーブル・ウォーク・アクセス回路2010による同じ変換データの取り出しを開始する。
いくつかの実例では、制御回路は実質的に同時に両方のプロセスを開始することができる。
したがって、図22を参照すると、ローカルTLB1905による要求2100の後、制御回路2000は、DRAM支援TLBルックアップ2200を開始し、実質的に同時に、又は少なくともTLBルックアップの完了前に、ページ・テーブル・ウォーク・アクセス回路2020によってページ・テーブル・ウォーク2205を開始する。したがって、両方のプロセスは同時に進行する。これにより、ページ・テーブル・アクセスが必要な状況では、変換データ・バッファ・アクセスが失敗するまで待つのではなく、ページ・テーブル・アクセスを「早期」に開始することによってレイテンシを節約できる。
ページ・テーブル・アクセスの任意の早期終了
しかしながら、DRAM支援TLBアクセス回路2010によるヒットがある場合、任意で、ページ・テーブル・ウォークが終了され得る(段階2210において概略的に示される)。これは必須ではなく、実際にはページ・テーブル・ウォークを完了させることができ、その場合、同じ変換データがページ・テーブルからも取り出されることになるだけである。しかしながら、TLBヒットの場合に2210においてページ・テーブル・ウォークを終了することによって、(もう発生しないページ・テーブル・ウォークの残りの部分に関して)節電が潜在的に達成され得る。
DRAM支援TLBヒットの場合、後続のプロセスは図21と同様であり、2215において、変換データの必要なインスタンスがローカルTLBに提供される。
しかしながら、DRAM支援TLBにミスが存在する場合、ページ・テーブル・ウォークは2220において継続し、段階2225においてページ・テーブル・ウォークからローカルTLB1905に導出された必要な変換の準備に進む。この場合、変換を提供するための全体的なレイテンシ又は時間期間は2232として示されており、たとえば、DRAM支援TLB参照が開始されたのと同時に、又は少なくともDRAM支援TLBルックアップが完了する前にページ・テーブル・ウォークを早期に開始するおかげで、図21に示された構成よりも期間2230として概略的に示されている時間節約がある。
再び、段階2260によって示されるように、図22の時間クリティカルパスの一部を形成しないが、入力初期メモリ・アドレスの変換データが現在変換データ・バッファによって保持されていないとき、制御回路は、ページ・テーブル・アクセス回路から受信した入力初期メモリ・アドレスの変換データをDRAM内の変換データ・バッファに記憶するように構成される。
図23は、上記の議論に適切な方法を示す概略フローチャートである。
ステップ2300において、初期メモリ・アドレス空間内の初期メモリ・アドレスと出力アドレス空間内の対応する出力メモリ・アドレスとの間のアドレス変換を定義する変換データを取り出すために、ページ・テーブル・データがアクセスされる。
本明細書では、初期メモリ・アドレス空間は仮想メモリ・アドレス空間であり得、出力メモリ・アドレス空間は物理メモリ・アドレス空間であり得る点に留意されたい。しかしながら、いくつかの他の構成では、場合によっては、変換プロセス又は少なくとも変換プロセスの全範囲を個々のオペレーティング・システムからを隠し、いわゆるハイパーバイザによってIPAからPAへの変換が実行されるように、いわゆる中間物理アドレスが使用される。本明細書で論じられるものと同じ原則は、VAからPAへの変換、VAからIPAへの変換及び/又はIPAからPAへの変換のいずれかに関連し得る。
したがって、様々な実施例が考えられ、そのすべて又はいずれかは、
初期メモリ・アドレス空間は仮想メモリ・アドレス空間であり、出力メモリ・アドレス空間は物理メモリ・アドレス空間である、又は、
初期メモリ・アドレス空間は中間物理メモリ・アドレス空間であり、出力メモリ・アドレス空間は物理メモリ・アドレス空間である、又は、
初期メモリ・アドレス空間は仮想メモリ・アドレス空間であり、出力メモリ・アドレス空間は中間物理メモリ・アドレス空間である、
技法を使用して実装され得る。
多段階変換構成では、これらの技法が変換段階のうちの1つ又は複数に使用され得る。
図23を再び参照すると、ステップ2310において、初期メモリ・アドレス空間のサブセットについて、変換データの1つ又は複数のインスタンスがDRAM支援TLBなどの変換データ・バッファに記憶される。
ステップ2320において、ローカルTLB1905から受信されたものなどの、変換されるべき入力初期メモリ・アドレスに応答して、変換データは、DRAM支援TLBなどの変換データ・バッファからの取り出しのために要求される。
次いで、ステップ2330において、変換データ・バッファからの取り出し要求の処理が完了する前に、上述した回路2020などのページ・テーブル・アクセス回路によって入力(必要)初期メモリ・アドレスの変換データの取り出しが開始される。
実際に、ステップ2340において、要求されたデータがDRAM支援TLBから首尾よく取り出された場合、次いでステップ2350において、上述したように任意であるが、DRAM支援TLBなどの変換データ・バッファから入力初期メモリ・アドレスの変換データの取り出しに応答して、ページ・テーブルから入力初期メモリ・アドレスに対する変換データの取り出しの取消しを開始することを含むことができる。これは、場合によっては、ページ・テーブル・アクセスの少なくとも一部を回避することによって電力を節約することができる。
そうではなく、データがDRAM支援TLBから首尾よく取り出されない場合、ステップ2360において、必要な変換データがページ・テーブル・ウォークメカニズムによって取得され、DRAM支援TLBに記憶され得る。
ステップ2320、2330は図23において連続的に示されているが、いくつかの実例では(ページ・テーブル・アクセスが必要とされることが分かった場合、潜在的に改善された全体的なレイテンシの節約を提供するために)、制御回路は、変換データ・バッファから入力初期メモリ・アドレスの変換データの取り出しを要求することと実質的に同時に、ページ・テーブル・アクセス回路によって入力初期メモリ・アドレスに対する変換データの取り出しを開始するように構成され得る。言い換えれば、ステップ2320、2330は実質的に同時に発生することができる。原理的には、ステップ2330は、2つのステップのうちの第1のステップとして開始されることさえできる。しかしながら、例示的な実施例の最も広い態様は、変換データ・バッファ・ルックアップの完了前にページ・テーブル・アクセスを開始することだけを想定しており、依然としてレイテンシの節約を達成することができる。
予測の導出
次に図24を参照すると、いくつかの実例では、制御回路2000は、入力初期メモリ・アドレスが現在変換データ・バッファによって保持されているかどうかの予測を導出するように構成される。この予測が導出され、使用され得る方法については、以下で論じる。
一般に、必要な変換がDRAM支援TLBによって保持される可能性があるかどうかの予測が提供される場合、ページ・テーブル・ルックアップを遅延又は回避させることが可能である。他の実例では、ページ・テーブル・アクセスが要求される可能性が高いという予測が提供された場合、DRAM支援TLBルックアップを回避又は遅延させることが可能である。これらのインスタンスのいずれかが電力を節約できる。しかしながら、予測が間違っている場合、システムの全体的なレイテンシを図21のレイテンシに似たレイテンシに戻すことによって、レイテンシ・ペナルティを導入する可能性がある。言い換えれば、予測が、入力初期メモリ・アドレスが現在変換データ・バッファによって保持されているという少なくとも第1の閾値尤度を示す場合、制御回路は、変換データ・バッファから応答が受信されるまで、ページ・テーブル・アクセス回路によって入力初期メモリ・アドレスに対する変換データの取り出しの開始を延期するように構成される。他の実例では、予測が、入力初期メモリ・アドレスが現在変換データ・バッファによって保持されているという第2の閾値未尤度未満を示す場合、制御回路は、変換されるべき入力初期メモリ・アドレスのインスタンスのサブセットを超えないために、変換データ・バッファから入力初期メモリ・アドレスの変換データの取り出しを要求するように構成される。
先に述べたように、制御回路2000は、DRAM1920によって保持されるデータにアクセスするために、バッファ・ルックアップ回路2010及びページ・テーブル・ウォーク・アクセス回路2020を制御する。バッファ・ルックアップ回路2010は、DRAM支援TLBルックアップが成功したか否かを示すために、可用性信号2015を制御回路2000に提供する。例示的な構成では、その可用性信号が、カウンタ回路2400を形成する1つ又は複数のカウンタにも提供される(図24において)。カウンタ回路2400は、変換データ・バッファによる応答のうち、応答は、要求された変換データと、要求された変換データが現在変換データ・バッファによって保持されていないことを示すデータを備える応答のインスタンス(負の可用性指示2015など)とを備えることを示した可用性信号の応答のインスタンスの相対数を検出するように構成されている。
したがって、制御回路は、変換データ・バッファによる応答のうち、要求された変換データを備える応答のインスタンスと、要求された変換データが現在変換データ・バッファによって保持されていないことを示すデータを備える応答のインスタンスとの相当数を検出するために、カウンタ回路を備え得る。
いくつかの実例では、カウンタ回路2400は、要求された変換データ(正の可用性信号2015)を提供する変換データ・バッファに応答して、一方の極性(たとえば、インクリメント)のカウント値を変更し、データを保持していない変換データ・バッファに応答して、他方の極性(たとえば、デクリメント)のカウント値を変更するための回路を備え、すなわち、バッファ・ルックアップ回路2010は、要求された変換データが現在変換データ・バッファによって保持されていないことを負の可用性表示2015などのデータを提供する。いずれの場合にも反対の極性のいずれかが使用され得、インクリメント量及びデクリメント量は互いに異なっていてもよく、+/-1である必要はない。言い換えれば、インクリメントの大きさは、デクリメントの大きさと同じである必要はない。
比較器2410は、カウント値を第1の閾値THR1及び第2の閾値THR2と比較する。いくつかの実例では、カウンタは、カウント値が上限カウント限界を上回らないように、又は下限カウント限界(0など)を下回らないように、飽和カウンタであり得る。
カウンタ回路2400は1つのカウンタを備えることができ、又は他の実例では、予測が現在のトランザクションの分類とよりよく一致され得るように、メモリ・アドレス・トランザクションの1つ又は複数のカテゴリの相対数を検出するために複数のカウンタを備えることができる。例示的なカテゴリのリストは、以下からなるリストから選択された1つ又は複数を備えることができる。
・変換を要求する仮想マシンを示すカテゴリ(たとえば、変換要求の一部を形成する仮想マシン識別子によって示されるように)と、
・複数の初期アドレス空間のうちの初期アドレス空間を示すカテゴリ(たとえば、変換要求の一部を形成するアドレス空間識別子によって示される)と、
・変換を要求するプロセッサのプログラム・カウンタを示すカテゴリ(たとえば、変換要求の一部を形成するプログラム・カウンタ値によって示されるように)と、
・変換が要求される初期アドレスを示すカテゴリ。
閾値THR1、THR2のうちの1つは、上限閾値などの第1の閾値尤度を示す値であり得る。予測又はカウント値が少なくとも第1の閾値尤度を示す場合、これは入力初期メモリ・アドレスが現在変換データ・バッファによって保持されている可能性を示し、制御回路2000は、応答が変換データ・バッファから受信されるまで、ページ・テーブル・ウォーク・アクセス回路2020による、その入力初期メモリ・アドレスの変換データの取り出しの開始を延期するように構成される。したがって、この閾値を使用して、動作は図21において概略的に示された動作に戻ることができる。予測が正しい場合、これは図22の動作よりも電力を節約する。予測が間違っている場合、レイテンシは図21のものよりも悪くはならない。この予測は、DRAM支援TLBによって満たされた最近の変換要求のカウンタ数について(一般的に又は全体的に、或いは複数のカウンタによってカバーされるカテゴリの特定の値について)発生する上限閾値に少なくとも基づいている。
入力初期メモリ・アドレスが現在変換データ・バッファによって保持されている可能性がより低いことを表す第2の閾値尤度は、より低いカウント値によって表され、カウント又は関連するカウントが第2の閾値未満である場合、これは、変換されるべき入力初期メモリ・アドレスのインスタンスのサブセットを超えないために、変換データ・バッファから入力初期メモリ・アドレスの変換データの取り出しを要求する制御回路を発生させる。いくつかの実例では、これはまったくインスタンスになり得ない可能性があるが、これは、尤度が成功したTLBルックアップのカウントによって決定される場合、DRAM支援TLBによって保持されるデータの増加したカウント又は増加した尤度を検出することを困難にする可能性がある。言い換えれば、カウントが下限閾値を下回ったときにDRAM支援TLBがもはや使用されない場合、必要とされる変換を保持するDRAM支援TLBの尤度が決して増加し得ない状況を発生させる可能性がある。その潜在的な問題に対処するために、モジュロNベースで1からNまで反復して変換データ・アクセスのインスタンスをカウント・アップし、Nは1より大きい整数である、任意のさらなるカウンタ2420は、ここでは、ルックアップ回路2010によってDRAM支援TLBルックアップを強制する(たとえば、同じ動作の一部として予測メカニズムをリセットする)ために、信号2430によって、比較器2420から来る尤度情報を無効にすることができる(たとえば、Nに達するたびに)。言い換えれば、サブセットは、変換されるべき入力初期メモリ・アドレスのN個のインスタンスにおいて1であり得、Nは1より大きい整数である。
したがって、上述したような第2の閾値の使用は、予測が、入力初期メモリ・アドレスが現在変換データ・バッファによって保持されていることが第2の閾値尤度未満であることを示す場合、制御回路は、変換データ・バッファから入力初期メモリ・アドレスの変換データの取り出しを要求しないように構成される、構成の実例を提供する。
DRAM内のストレージ
図25は、図19のDRAM1920の例示的な構成の態様を概略的に示し、ストレージ場所のアレイを提供するためのダイナミック・ランダム・アクセス・メモリの実例を提供する。
DRAM1920は、行及び列に配置されたストレージ場所2505のアレイ2500と、行バッファ2510と、列マルチプレクサ2515と、行デコーダ2520とを備える。DRAMの場合、各ストレージ場所2505はビットセルのグループを備え、各ビットセルは、対応するストレージ場所2505によって表される全体値の1ビットに対応する1又は0を表すために選択的に充電又は放電され得るコンデンサを備える。
DRAM1920へのアクセスは2段階で実行される。第1に、行アドレス2525を指定する起動コマンドが発行される。行デコーダ2520は、対応する行2535を起動して、対応する行のストレージ場所2505の各々に記憶された情報を行バッファ2510にもたらす。第2に、列アドレス2530は、実際の読出し/書込みコマンドに付随し、読出し/書込みコマンドは、アクティブ行内の指定された列に対応する行バッファ2510のエントリを選択するために列マルチプレクサ2515を制御し、そのエントリから読み出された情報を読出しデータとして出力すること、又は書込みコマンドとともに提供される書込みデータに基づいてそのエントリ内のデータを更新することのいずれかを行う。書込み動作の場合、行バッファ2510への書込みは、対応するストレージ場所2505にも伝播して戻され得る。行バッファ2510とアクティブ行2535との間の接続を閉じるプリチャージ・コマンドを使用して行が閉じられる前に、同じアクティブ行内で複数の読出し/書込み動作が実行され得、アクティブ行2535のストレージ場所が、行バッファ2510へのあらゆる書込みを反映するように更新され、行バッファ2510をリセットして、別の行がアクティブ行として選択されるようにする。
したがって、本明細書で説明する例示的なDRAM支援変換データ・バッファは、選択された行にアクセスし、選択された行から行バッファに情報を転送するためのアクセス回路(行デコーダなど)を備える。例示的な構成では、ダイナミック・ランダム・アクセス・メモリは、1行未満のエントリの各々のデータ・バースト内のデータを読み出し、キー値に対応する行バッファの一部を送信するように構成される。一般に、例示的な構成では、DRAMは、データ・バースト内のデータを通信し、提供されたキーに対応する行バッファの部分のみを送信するように構成される。「バースト」という用語は、データ・アレイからデータを読み出す方法ではなく、DRAMが通信する方法を説明する点に留意されたい。この技法は、キーが一致した後に必要なデータを出力するために使用され得る。
図26は、図25のメモリから、具体的には、この文脈では図25のメモリのアクティブ行2535から取り出されたデータがロードされた行バッファ2510から、変換データを取り出すための技法の動作を概略的に示しており、メモリ・アレイの行のそれぞれの部分からの情報を記憶するための複数のエントリを備える。
キー値2600は、少なくとも変換されるべき仮想メモリ・アドレスに依存する。行バッファは、セット2610などのキー値データの複数のセットを含む。行バッファK、K、K、Kにおける各キー値は、それぞれの値エントリV、V、V、Vに関連付けられる。記憶されたキー値K、…、Kと同じ仮想メモリ・アドレスに依存する新しいキー値2600を導出することによって、比較回路2620は、行バッファ2510の少なくとも1つのキー・エントリK、…、Kに記憶された情報とキー値2600とを比較することができ、各キー・エントリは、対応する出力メモリ・アドレスの少なくとも1つの表現を記憶するための関連値エントリV、…、Vを有する。このようにして、比較回路2620は、少なくとも1つのキー・エントリのうちのどれが、もしあれば、キー値2600に一致する情報を記憶する一致するキー・エントリであるかを識別することができる。
回路2634は、出力回路2630の動作を制御するために、4つの比較回路2620の出力2632をフォーマットに結合し、出力回路2630は、比較出力2632の制御下で値エントリV、…、Vのうちの1つを出力値2640として出力し、一致するキー・エントリがある場合、少なくとも一致するキー・エントリに関連付けられる値エントリ内の出力メモリ・アドレスの表現を出力できるようにする。
値エントリは、図27を参照して以下に説明するように、必要な変換を提供する。
したがって、図19、図20、及び図25と関連して図26を参照すると、初期メモリ・アドレス空間内の初期メモリ・アドレスと出力アドレス空間内の対応する出力メモリ・アドレスとの間のアドレス変換を定義する変換データを取り出すためにページ・テーブルにアクセスするためのページ・テーブル・アクセス回路2020と、初期アドレス空間のサブセットに対して、変換データの1つ又は複数のインスタンスを記憶するための変換データ・バッファ2010、1920と、行及び列に配置されたストレージ場所2505のアレイを備える変換データ・バッファと、アレイの行のそれぞれの部分からの情報をそれぞれ記憶するための複数のエントリ2610を備える行バッファ2510と、行バッファの少なくとも1つのキー・エントリK~Kの各々に記憶された情報とキー値を比較することであって、各キー・エントリが、対応する出力メモリ・アドレスの少なくとも1つの表現を記憶するための関連値エントリを有することと、少なくとも1つのキー・エントリのうちのどれが、もしあれば、キー値に一致する情報を記憶する一致するキー・エントリであるかを識別することとを行うために、少なくとも初期メモリ・アドレスに依存するキー値2600に応答する比較回路2620と、一致するキー・エントリがある場合、一致するキー・エントリK~Kに関連付けられる値エントリV~Vにおける少なくとも出力メモリ・アドレスの表現を出力するための出力回路2630とを備えるメモリ・アドレス変換装置1915の実例が提供される。
例示的な実施例は、必要な行(たとえば、ハッシュされた初期メモリ・アドレスによって、又は初期メモリ・アドレスの一部に依存してアクセスされ得る)が潜在的に単一のメモリ・アクセスとしてアクセスされ、次いで、その行が必要な変換を含むどうかを検出するためにその行の内容が初期メモリ・アドレスに依存するキー値と比較されるように、単一のメモリ・アクセスを使用してDRAM支援変換データ・バッファ内の変換データにアクセスするための効率的なメカニズムを提供することができる。DRAMへのメモリ・アクセスが潜在的に比較的遅いのでこれは、変換を取り出すためのレイテンシとメモリトラフィックを潜在的に削減することができ、したがってそのようなアクセスを1つだけ必要とすることは有益であり得る。メモリ行に記憶された変換データのキー-値の配列を提供することによって、複数の変換が単一のハッシュされた(又は他の依存関係)初期メモリ・アドレスによってアクセスされる行に記憶され得、それによってDRAM支援変換データ・バッファのストレージの効率を向上させることができる。具体的には、初期メモリ・アドレスの少なくとも一部へのハッシュされた又は他の依存関係を使用することによって、メモリ行が初期メモリ・アドレスに対して効果的に予約され得る。例示的な構成では、DRAM行のインデックスはハッシュ(又はその一部)(VFN、VMID、ASID)であり、キーについても同じである。DRAMの行とキーとの組合せは、特定のタプル(VFN、VMID、ASID)に固有のものでなければならない。ハッシュ値の実例は、ランダム化(又は擬似ランダム化)されるべき初期メモリ・アドレスに対するメモリ行の分配を可能にする。メモリ行が一杯である場合(潜在的に他の初期メモリ・アドレスもそこを指すことがあるため)、また新しい変換が記憶される必要がある場合(たとえば、制御回路が、ページ・テーブル・アクセス回路から受信した入力仮想メモリ・アドレスの変換データを変換データ・バッファに記憶するように構成されるように、入力仮想メモリ・アドレスの変換データが変換データ・バッファによって現在保持されていない場合)、選択された行が変換データを記憶するために不十分な未使用容量を有することを検出回路によって検出したことに応答して(たとえば、読出し動作の場合と同様に行を選択するために同じハッシング/依存関係を使用して)、上書きのために選択された行内のキー・エントリ及び関連付けられる値エントリ(たとえば、行自体、又は異なるメモリ、或いはメモリ・コントローラの制御下のメモリ領域に記憶された情報に基づく置換ポリシー)を選択し、それによって、選択された行内の未使用のキー及び値エントリ、並びに値エントリを提供するために、ビクティム削除回路が使用され得る。例示的な選択基準は、最近アクセスされたキー値及び一致するエントリと、キー値及び一致するエントリのランダム又は擬似ランダム選択と、最近アクセスされたものではないキー値及び一致するエントリと、選択された行に対する先入れ先出し選択とからなるリストから選択された1つ又は複数を備えることができる。
例示的な構成では、キー値は、そのリストは、変換を要求する仮想マシンを示すデータと、複数の仮想アドレス空間のうちの初期アドレス空間を示すデータと、変換が要求される初期アドレスを示すデータとからなるリストから選択された1つ又は複数に依存することができる。したがって、これらの技法を使用すると、キー値は関連付けられる値によって提供される必要な変換を定義することができる。
図27は、キーが、仮想マシン識別子(VMID)と、アドレス空間識別子(ASID)と、初期メモリ・アドレスを少なくともフレームの解像度又はページ・サイズに定義する仮想フレーム番号(VFN)との少なくとも一部の連結を備える、キー-値ペアを概略的に示し、この実例では、値は、出力アドレスを少なくともフレームの解像度又はページ・サイズに定義する物理フレーム番号、またこれらの実例では、読出し/書込み/実行を定義する1つ又は複数の属性、又は他の実例では、変換に関連付けられる許可などの連結を備える。したがって、キー値は、例示的な実施例では、変換を要求する仮想マシンを示すデータと、複数の仮想アドレス空間のうちの仮想アドレス空間を示すデータと、変換が必要な仮想アドレスを示すデータとからなるリストから選択された1つ又は複数に依存する。
これらのフィールドの例示的なデータサイズは以下の通りである。
したがって、各キー-値ペアは(たとえば)16バイトを占有し、そのような4つのペアが例示的な64バイトのメモリ行に記憶されることを可能にする。
メモリ位置のアレイの行を選択することに関して、変換データ・バッファが、初期メモリ・アドレスの一部に依存してアレイの行を選択するための行選択回路と、選択された行にアクセスし、選択された行から行バッファ2510に情報を転送するためのアクセス回路(図25の2520)とを備えるように、いわゆるハッシュ生成器2800(図28)が使用され得る。与えられた特定の実例では、行選択回路は、行がハッシュ値に依存して選択されるように、仮想メモリ・アドレスの少なくとも一部を表す入力データ2810からハッシュ値を生成するように構成されたハッシュ生成器2800などのハッシュ生成器を備える。上述のように、例示的な構成では、DRAM行のインデックスはハッシュ(又は、その一部)(VFN、VMID、ASID)であり、キーについても同じことが行われる。DRAMの行とキーとの組合せは、特定のタプル(VFN、VMID、ASID)に固有のものでなければならない。
図29は、DRAM支援変換データ・バッファを提供するメモリ・アレイにデータを書き込むための回路を概略的に示す。書込みプロセスは、入力仮想メモリ・アドレスの変換データが現在変換データ・バッファによって保持されていないときに、制御回路がページ・テーブル・アクセス回路から受信した入力仮想メモリ・アドレスの変換データを変換データ・バッファに記憶するように構成されている点で、図23のステップ2360によって表されるような状況で発生する。図29の構成は、本明細書に記載されているキー-値構造が使用されている場合、この書込みに従う。図29の回路は、行を選択し、初期メモリ・アドレス又は少なくともその一部に応じて行アドレス2525を埋めるために図28の構成を使用する行セレクタ2900を備える。これは、変換データ・バッファ内に変換データを記憶するために、行選択回路が、変換データのそのインスタンスのための初期メモリ・アドレスの少なくとも一部に応じて、アレイの行を選択するように構成されている実例を提供する。
選択された行は、処理のために行バッファ2510に移動される。検出器2920は、選択された行内のすべての(キー・エントリ)が占有されているかどうかを検出し、占有されている場合、ビクティム選択及び削除回路2930は、現在のエントリの中で最も古いものを削除するなどのビクティム選択プロセスを使用して、現在のエントリのうちの1つを削除のために選択する。ストレージ回路2940は、新しい(キー、値)ペアを行バッファ2510に書き込み、次いで、行バッファは、上述のようにメモリ・アレイにコピー・バックされる。
したがって、例示的な構成は、選択された行内に変換データを記憶するための書込み回路2920、2930、2940の実例を提供し、書込み回路は、選択された行に変換データを記憶するための未使用のキー・エントリ及び値エントリがあるかどうかを検出するための検出回路2920と、選択された行が変換データを記憶するために不十分な未使用容量を有することを検出回路によって検出したことに応答して、上書きのために選択された行内のキー・エントリ及び関連付けられる値エントリを選択し、それによって、選択された行内の未使用のキー、及び値エントリ、並びに値エントリを提供するためのビクティム削除回路2930と、選択された行内の未使用のキー及び値エントリへの変換データを記憶するためのストレージ回路2940とを備える。実例では、ビクティム削除回路は、最近アクセスされたキー値及び一致するエントリからなるリストから選択された1つ又は複数のビクティム選択基準に従って、キー・エントリ及び関連付けられる値エントリを選択するように構成される。ビクティム削除回路は、有効な空き空間を作るために、キー値及び一致するエントリを積極的に削除することもでき、又は選択されたデータの新しいデータによって上書きを単に制御することもできる。
このプロセスは、図30の概略的なフローチャートによって表され、ステップ3000において、行は、変換のための初期メモリ・アドレス又は仮想メモリ・アドレスの少なくとも一部に従って選択される。ステップ3010において、その行の内容が行バッファ2510にロードされる。ステップ3020において、選択された行内にキー-値ペアにとって利用可能な空き空間がある場合、制御はステップ3040に移る。選択された行内にキー-値ペアにとって利用可能な空き空間がない場合、ステップ3030において、(ビクティム)のキー-値ペアが削除のために選択され、削除される。次いで、ステップ3040において、新しいエントリが行内で利用可能な空き空間に書き込まれ、ステップ3050において、行がメモリに書き戻される。この書戻しは、DRAMコントローラのポリシーに応じて遅れる可能性がある点に留意されたい。しかしながら、将来のある時点でストレージ・アレイに書き戻される。
図31は、
初期メモリ・アドレス空間内の初期メモリ・アドレスと出力アドレス空間内の対応する出力メモリ・アドレスとの間のアドレス変換を定義する変換データを取り出すために、ページ・テーブルにアクセスするステップ(ステップ3100において)と、
初期アドレス空間のサブセットに対して、行及び列内に配置されたストレージ場所のアレイを有する変換データ・バッファに、変換データの1つ又は複数のインスタンスを記憶するステップ(ステップ3110において)と、
アレイの行のそれぞれの部分からの情報をそれぞれ記憶するために複数のエントリをバッファリングするステップ(ステップ3120において)と、
少なくとも初期メモリ・アドレスに依存するキー値に応答して、キー値を、行バッファの少なくとも1つのキー・エントリ(たとえば、少なくとも2つのキー・エントリ)の各々に記憶された情報と比較するために、対応する出力メモリ・アドレスの少なくとも1つの表現を記憶するための関連付けられる値エントリを有する各キー・エントリを比較するステップ(ステップ3130において)と、
を備える要約方法を表す概略的なフローチャートである。
ステップ3130における比較の結果、行が要求された変換を含まない場合、制御はステップ3140に移り、コントローラ2000によって「使用不可」が設定されていることを示すために「有効な」信号が設定される。さもなければ、本方法は、
少なくとも1つのキー・エントリのうちのどれが、もしあれば、キー値に一致する情報を記憶する一致するキー・エントリであるかを識別するステップと(ステップ3150において)、
一致するキー・エントリがある場合、少なくとも一致するキー・エントリに関連付けられる値エントリ内の出力メモリ・アドレスの表現を出力するステップ(ステップ3160において)、
のように継続する。
本出願において、「~ように構成された」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の配置又は方法を意味する。たとえば、装置は、定義された動作を提供する専用のハードウェアを有してもよく、又はプロセッサ又は他の処理デバイスが機能を実行するようにプログラムされてもよい。「~ように構成された」は、定義された動作を提供するために、装置要素が何らかの方法で変更される必要があることを意味しない。
本発明の例示的な実施例を、本明細書において添付の図面を参照して詳細に説明したが、本発明はこれらの正確な実施例に限定されず、添付の特許請求の範囲によって定義されるように、本発明の範囲及び趣旨から逸脱することなしに、当業者によって様々な変更、追加、及び修正が行われ得ることを理解されたい。たとえば、従属請求項の特徴の様々な組合せは、本発明の範囲から逸脱することなしに、独立請求項の特徴によって行われ得る。
100 装置
105a プロセッサ
105b プロセッサ
110a 専用の変換索引バッファ
115 メモリ
120 コントローラ
125 相互接続
130 制御回路
135 入力ポート
140 出力ポート
145 メンテナンス・キュー
150 メンテナンス回路
155 アドレス・ストレージ
160 キャッシュ
200 装置
210 入力ポート
220 メンテナンス・キュー回路
230 ルックアップ回路
240 制御回路
250 メンテナンス回路
260 結合回路
310 CPU
800 充填キュー回路
1000 カウンタ
1200 装置
1210 入力アドレス・ポート
1220 プロセッサ要素
1230 変換索引バッファ(TLB)
1240 出力アドレス・ポート
1250 入力データ・ポート
1260 キャッシュ
1270 出力データ・ポート
1280 制御回路
1290 メモリ
1400 領域ポインタ
1410 変換
1420 データ
1500 フローチャート
1560 ストレージ場所w
1570 ストレージ場所w
1580 ストレージ場所w
1600 第1のインジケータ
1610 第2のインジケータ
1650 第1のストレージ場所
1660 第2のストレージ場所
1900 処理要素(PE)
1905 変換索引バッファ
1910 相互接続回路
1915 メモリ・アドレス変換装置
1920 ダイナミック・ランダム・アクセス・メモリ(DRAM)
1930 DRAMコントローラ
2000 制御回路
2005 信号
2010 DRAM支援TLBアクセス回路
2015 信号
2020 ページ・テーブル・ウォーク・アクセス回路
2400 カウンタ回路
2410 比較器
2420 カウンタ
2430 信号
2500 DRAMバンク
2505 ストレージ場所
2510 行バッファ
2515 列マルチプレクサ
2520 行デコーダ
2525 行アドレス
2530 列アドレス
2600 キー値
2610 セット
2620 比較回路
2630 出力回路
2632 出力
2634 回路
2640 出力値
2800 ハッシュ生成器
2810 入力データ
2900 行セレクタ
2920 検出器
2930 ビクティム選択及び削除回路
2940 ストレージ回路

Claims (17)

  1. プロセッサ回路から入力アドレスを受信するための入力アドレス・ポートと、
    前記入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するためのアドレス・ストレージと、
    前記出力アドレスを出力するための出力アドレス・ポートと、
    データを受信するための入力データ・ポートと、
    前記データを複数の場所のうちの1つに記憶するためのデータ・ストレージと、
    前記データ・ストレージに記憶された前記データを出力するための出力データ・ポートと、
    前記データ・ストレージに前記入力アドレスと前記出力アドレスとの間の前記変換を記憶させるための制御回路と
    を備え、
    前記制御回路が、前記入力アドレスが前記アドレス・ストレージ及び前記データ・ストレージにないことに応答してページ・ウォークを発生させるための信号を出すように適合され、
    前記制御回路が、前記データ・ストレージに、少なくとも1つの第1の条件に依存して前記入力アドレスと前記出力アドレスとの間の前記変換を記憶させるように適合され、
    前記第1の条件が、
    前記アドレス・ストレージのミス率と、
    前記アドレス・ストレージのヒット率と、
    前記アドレス・ストレージのアクセス速度と、
    前記データ・ストレージのミス率と、
    前記データ・ストレージのヒット率と、
    前記データ・ストレージのアクセス速度と
    を含むリストからのものである、
    装置。
  2. 前記データ・ストレージと前記アドレス・ストレージが別個のメモリである、請求項1に記載の装置。
  3. 前記データ・ストレージと前記アドレス・ストレージが同じメモリ内の異なる領域である、請求項1に記載の装置。
  4. 前記複数の場所がnウェイのセット・アソシエイティブ・メモリの形態を取り、
    前記制御回路が、前記データ・ストレージに前記nウェイの1つ又は複数の転用されたウェイに前記変換を記憶させるように適合される、請求項3に記載の装置。
  5. 前記複数の場所がnウェイのセット・アソシエイティブ・メモリの形態を取り、
    前記制御回路が、前記データ・ストレージに前記メモリの1つ又は複数の転用されたセットに前記変換を記憶させるように適合される、請求項3に記載の装置。
  6. 前記アドレス・ストレージ及び前記データ・ストレージに前記変換が存在しない場合に、前記変換に対する要求に応答して、前記制御回路が、ページ・ウォークを発生させるための信号を出すように適合される、請求項1から5までのいずれか一項に記載の装置。
  7. 前記アドレス・ストレージによって使用される領域と前記データ・ストレージによって使用される領域との間の境界を示すための領域ポインタを備える、請求項3に記載の装置。
  8. 置換ポリシーが、前記複数の場所のそれぞれについて、前記データよりも前記変換記憶嗜好することを示す、請求項1に記載の装置。
  9. 前記置換ポリシーが、動的に構成可能である、請求項8に記載の装置。
  10. 前記制御回路が、前記入力アドレスと前記出力アドレスとの間の前記変換を前記データ・ストレージの一部に記憶させるように適合される、請求項1から9までのいずれか一項に記載の装置。
  11. 前記一部のサイズが少なくとも1つの第2の条件に依存する、請求項10に記載の装置。
  12. 前記第2の条件が、
    前記アドレス・ストレージのミス率と、
    前記アドレス・ストレージのヒット率と、
    前記アドレス・ストレージのアクセス速度と、
    前記データ・ストレージのミス率と、
    前記データ・ストレージのヒット率と、
    前記データ・ストレージのアクセス速度と
    を含むリストからのものである、請求項11に記載の装置。
  13. 前記アドレス・ストレージにおける前記入力アドレスのミスに応答して、読出し要求が前記変換のために前記データ・ストレージに送られる、請求項1から12までのいずれか一項に記載の装置。
  14. ページ・ウォーク要求が出されるのと並行して、前記読出し要求が前記データ・ストレージに送られる、請求項13に記載の装置。
  15. 入力アドレスに基づいて前記出力アドレスが決定されたことに応答して、前記装置が、前記出力アドレスに関連付けられる前記データ・ストレージに記憶されたデータをフェッチするように適合される、請求項1から14までのいずれか一項に記載の装置。
  16. 装置によって行われる方法であって、
    入力アドレス・ポートでプロセッサ回路から入力アドレスを受信するステップと、
    アドレス・ストレージにおいて、前記入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するステップと、
    入力データ・ポートでデータを受信するステップと、
    前記データをデータ・ストレージに記憶するステップと、
    制御回路によって前記データ・ストレージに前記入力アドレスと前記出力アドレスとの間の前記変換を記憶させるステップと、
    前記入力アドレスが前記アドレス・ストレージ及び前記データ・ストレージにないことに応答して、前記制御回路によってページ・ウォークを発生させるための信号を出すステップと
    を備え、
    前記データ・ストレージは、少なくとも1つの第1の条件に依存して前記入力アドレスと前記出力アドレスとの間の前記変換を記憶するものであり、
    前記第1の条件が、
    前記アドレス・ストレージのミス率と、
    前記アドレス・ストレージのヒット率と、
    前記アドレス・ストレージのアクセス速度と、
    前記データ・ストレージのミス率と、
    前記データ・ストレージのヒット率と、
    前記データ・ストレージのアクセス速度と
    を含むリストからのものである、
    方法。
  17. プロセッサ回路から入力アドレスを受信するための手段と、
    前記入力アドレスと出力アドレスとの間の変換を出力アドレス空間に記憶するための手段と、
    データを受信するための手段と、
    前記データを記憶するための手段であって、前記入力アドレスと前記出力アドレスとの間の前記変換を記憶するようになされている、手段と、
    前記入力アドレスが前記変換を記憶するための手段及び前記データを記憶するための手段にないことに応答してページ・ウォークを発生させるための信号を出すための手段と、を備え、
    前記データを記憶するための手段は、少なくとも1つの第1の条件に依存して前記入力アドレスと前記出力アドレスとの間の前記変換を記憶するように適合され、
    前記第1の条件が、
    前記変換を記憶するための前記手段のミス率と、
    前記変換を記憶するための前記手段のヒット率と、
    前記変換を記憶するための前記手段のアクセス速度と、
    前記データを記憶するための前記手段のミス率と、
    前記データを記憶するための前記手段のヒット率と、
    前記データを記憶するための前記手段のアクセス速度と
    を含むリストからのものである、
    装置。
JP2018213366A 2017-11-22 2018-11-14 複数のデータ・タイプのためのデータ・ストレージ Active JP7311959B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GR20170100523 2017-11-22
GR20170100523 2017-11-22

Publications (2)

Publication Number Publication Date
JP2019096307A JP2019096307A (ja) 2019-06-20
JP7311959B2 true JP7311959B2 (ja) 2023-07-20

Family

ID=66532359

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018213366A Active JP7311959B2 (ja) 2017-11-22 2018-11-14 複数のデータ・タイプのためのデータ・ストレージ

Country Status (3)

Country Link
US (1) US10866904B2 (ja)
JP (1) JP7311959B2 (ja)
KR (1) KR20190059220A (ja)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020062418A1 (en) 1998-08-31 2002-05-23 International Business Machines Corporation Partition of on-chip memory buffer for cache
JP2009003768A (ja) 2007-06-22 2009-01-08 Fujitsu Ltd メモリ共有システム装置
JP2016504686A (ja) 2012-12-21 2016-02-12 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated アドレス変換プロービングを用いる処理デバイスおよび方法
JP2016177687A (ja) 2015-03-20 2016-10-06 株式会社東芝 メモリシステム

Family Cites Families (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6051955A (ja) * 1983-09-01 1985-03-23 Mitsubishi Electric Corp 数値制御装置
US4622631B1 (en) * 1983-12-30 1996-04-09 Recognition Int Inc Data processing system having a data coherence solution
US4905188A (en) * 1988-02-22 1990-02-27 International Business Machines Corporation Functional cache memory chip architecture for improved cache access
US5526504A (en) 1993-12-15 1996-06-11 Silicon Graphics, Inc. Variable page size translation lookaside buffer
JPH07287668A (ja) * 1994-04-19 1995-10-31 Hitachi Ltd データ処理装置
JPH09101916A (ja) * 1995-10-06 1997-04-15 Fujitsu Ltd マルチプロセス処理装置
US5960463A (en) * 1996-05-16 1999-09-28 Advanced Micro Devices, Inc. Cache controller with table walk logic tightly coupled to second level access logic
US5915262A (en) * 1996-07-22 1999-06-22 Advanced Micro Devices, Inc. Cache system and method using tagged cache lines for matching cache strategy to I/O application
US5946718A (en) * 1997-05-30 1999-08-31 National Semiconductor Corporation Shadow translation look-aside buffer and method of operation
US6182266B1 (en) 1997-09-12 2001-01-30 Lucent Technologies, Inc. Self-auditing protection method for sorted arrays
US6535949B1 (en) * 1999-04-19 2003-03-18 Research In Motion Limited Portable electronic device having a log-structured file system in flash memory
EP1182567B1 (en) * 2000-08-21 2012-03-07 Texas Instruments France Software controlled cache configuration
US6697909B1 (en) 2000-09-12 2004-02-24 International Business Machines Corporation Method and apparatus for performing data access and refresh operations in different sub-arrays of a DRAM cache memory
US6851070B1 (en) 2001-08-13 2005-02-01 Network Appliance, Inc. System and method for managing time-limited long-running operations in a data storage system
JP4026753B2 (ja) 2002-07-25 2007-12-26 株式会社日立製作所 半導体集積回路
US7810067B2 (en) 2002-08-30 2010-10-05 Sap Aktiengesellschaft Development processes representation and management
US7171539B2 (en) 2002-11-18 2007-01-30 Arm Limited Apparatus and method for controlling access to a memory
US20050021925A1 (en) 2003-07-25 2005-01-27 Clark Lawrence T. Accessing in parallel stored data for address translation
US20050080934A1 (en) 2003-09-30 2005-04-14 Cota-Robles Erik C. Invalidating translation lookaside buffer entries in a virtual machine (VM) system
US7181556B2 (en) 2003-12-23 2007-02-20 Arm Limited Transaction request servicing mechanism
US7433364B2 (en) 2003-12-24 2008-10-07 Intel Corporation Method for optimizing queuing performance
US7251710B1 (en) * 2004-01-12 2007-07-31 Advanced Micro Devices, Inc. Cache memory subsystem including a fixed latency R/W pipeline
US7562179B2 (en) * 2004-07-30 2009-07-14 Intel Corporation Maintaining processor resources during architectural events
US8151082B2 (en) 2007-12-06 2012-04-03 Fusion-Io, Inc. Apparatus, system, and method for converting a storage request into an append data storage command
GB2451668A (en) 2007-08-08 2009-02-11 Advanced Risc Mach Ltd Error correction in a set associative cache
US9087102B2 (en) 2007-10-09 2015-07-21 International Business Machines Corporation Adaptive query processing infrastructure
US9244855B2 (en) * 2007-12-31 2016-01-26 Intel Corporation Method, system, and apparatus for page sizing extension
US9569349B2 (en) * 2008-12-19 2017-02-14 Ati Technologies Ulc Method and apparatus for reallocating memory content
WO2010095182A1 (ja) 2009-02-17 2010-08-26 パナソニック株式会社 マルチスレッドプロセッサ及びデジタルテレビシステム
US8510511B2 (en) 2009-12-14 2013-08-13 International Business Machines Corporation Reducing interprocessor communications pursuant to updating of a storage key
EP2529374A4 (en) 2010-01-28 2014-04-02 Hewlett Packard Development Co MEMORY ACCESS METHODS AND APPARATUS
US8756377B2 (en) 2010-02-02 2014-06-17 Arm Limited Area and power efficient data coherency maintenance
GB2479780B (en) 2010-04-22 2018-04-04 Advanced Risc Mach Ltd Preload instruction control
US8732430B2 (en) * 2011-03-22 2014-05-20 Oracle International Corporation Method and apparatus for using unused bits in a memory pointer
US8935506B1 (en) 2011-03-31 2015-01-13 The Research Foundation For The State University Of New York MemX: virtualization of cluster-wide memory
US9086989B2 (en) * 2011-07-01 2015-07-21 Synopsys, Inc. Extending processor MMU for shared address spaces
TWI521343B (zh) 2011-08-01 2016-02-11 Toshiba Kk An information processing device, a semiconductor memory device, and a semiconductor memory device
US8930674B2 (en) * 2012-03-07 2015-01-06 Soft Machines, Inc. Systems and methods for accessing a unified translation lookaside buffer
US9081706B2 (en) 2012-05-10 2015-07-14 Oracle International Corporation Using a shared last-level TLB to reduce address-translation latency
US8924832B1 (en) 2012-06-26 2014-12-30 Western Digital Technologies, Inc. Efficient error handling mechanisms in data storage systems
US9129071B2 (en) 2012-10-24 2015-09-08 Texas Instruments Incorporated Coherence controller slot architecture allowing zero latency write commit
US9208102B2 (en) 2013-01-15 2015-12-08 Qualcomm Incorporated Overlap checking for a translation lookaside buffer (TLB)
US9652376B2 (en) 2013-01-28 2017-05-16 Radian Memory Systems, Inc. Cooperative flash memory control
US10445229B1 (en) 2013-01-28 2019-10-15 Radian Memory Systems, Inc. Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies
US9229854B1 (en) 2013-01-28 2016-01-05 Radian Memory Systems, LLC Multi-array operation support and related devices, systems and software
WO2014142867A1 (en) 2013-03-14 2014-09-18 Intel Corporation Power efficient level one data cache access with pre-validated tags
US9218383B2 (en) 2013-03-15 2015-12-22 International Business Machines Corporation Differentiated secondary index maintenance in log structured NoSQL data stores
US10210096B2 (en) 2013-10-01 2019-02-19 Ampere Computing Llc Multi-stage address translation for a computing device
US9535614B2 (en) 2013-11-21 2017-01-03 Sandisk Technologies Llc Temperature based flash memory system maintenance
US9293188B2 (en) 2014-02-03 2016-03-22 Advanced Micro Devices, Inc. Memory and memory controller for high reliability operation and method
US10140178B2 (en) 2014-06-05 2018-11-27 International Business Machines Corporation Verifying a status level of stored encoded data slices
US11531624B2 (en) 2015-02-06 2022-12-20 Arm Limited Address translation in a data processing apparatus
GB2538054B (en) 2015-04-28 2017-09-13 Advanced Risc Mach Ltd Data processing apparatus, controller, cache and method
US20160365137A1 (en) 2015-06-11 2016-12-15 Broadcom Corporation Pre-Emphasis and Equalization for DRAM
US9626300B2 (en) * 2015-07-27 2017-04-18 Google Inc. Address caching in switches
US9678788B2 (en) 2015-11-10 2017-06-13 International Business Machines Corporation Enabling poll/select style interfaces with coherent accelerators
US20170162235A1 (en) 2015-12-02 2017-06-08 Qualcomm Incorporated System and method for memory management using dynamic partial channel interleaving
US10061707B2 (en) * 2015-12-26 2018-08-28 Intel Corporation Speculative enumeration of bus-device-function address space
US9727484B1 (en) * 2016-01-29 2017-08-08 International Business Machines Corporation Dynamic cache memory management with translation lookaside buffer protection
US9846652B2 (en) * 2016-03-31 2017-12-19 Intel Corporation Technologies for region-biased cache management
EP3264317B1 (en) * 2016-06-29 2019-11-20 Arm Ltd Permission control for contingent memory access program instruction
US10719451B2 (en) * 2017-01-13 2020-07-21 Optimum Semiconductor Technologies Inc. Variable translation-lookaside buffer (TLB) indexing
US10380032B2 (en) * 2017-03-09 2019-08-13 Internatinoal Business Machines Corporation Multi-engine address translation facility
JP2019016135A (ja) * 2017-07-06 2019-01-31 富士通株式会社 情報処理システム、情報処理システムの制御プログラム及び情報処理システムの制御方法
US11232037B2 (en) 2017-10-23 2022-01-25 Seagate Technology Llc Using a first-in-first-out (FIFO) wraparound address lookup table (ALT) to manage cached data
US10929308B2 (en) * 2017-11-22 2021-02-23 Arm Limited Performing maintenance operations
US10831673B2 (en) * 2017-11-22 2020-11-10 Arm Limited Memory address translation

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020062418A1 (en) 1998-08-31 2002-05-23 International Business Machines Corporation Partition of on-chip memory buffer for cache
JP2009003768A (ja) 2007-06-22 2009-01-08 Fujitsu Ltd メモリ共有システム装置
JP2016504686A (ja) 2012-12-21 2016-02-12 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated アドレス変換プロービングを用いる処理デバイスおよび方法
JP2016177687A (ja) 2015-03-20 2016-10-06 株式会社東芝 メモリシステム

Also Published As

Publication number Publication date
KR20190059220A (ko) 2019-05-30
US20190155742A1 (en) 2019-05-23
US10866904B2 (en) 2020-12-15
JP2019096307A (ja) 2019-06-20

Similar Documents

Publication Publication Date Title
US11803486B2 (en) Write merging on stores with different privilege levels
JP7340326B2 (ja) メンテナンス動作の実行
JP6719027B2 (ja) 巨大ページをサポートするメモリ管理
EP1388065B1 (en) Method and system for speculatively invalidating lines in a cache
US8782348B2 (en) Microprocessor cache line evict array
JP5536658B2 (ja) バッファメモリ装置、メモリシステム及びデータ転送方法
US20170293567A1 (en) Proxy identifier for data access operation
WO2019018665A1 (en) PRIVATE CACHE STORAGE FOR ACCESS TO LOCAL STORAGE DATA
US20110167223A1 (en) Buffer memory device, memory system, and data reading method
US10831673B2 (en) Memory address translation
KR102482516B1 (ko) 메모리 어드레스 변환
US9639467B2 (en) Environment-aware cache flushing mechanism
US20020188805A1 (en) Mechanism for implementing cache line fills
JP2001249846A (ja) キャッシュメモリ装置及びデータ処理システム
JP7311959B2 (ja) 複数のデータ・タイプのためのデータ・ストレージ
US20090157968A1 (en) Cache Memory with Extended Set-associativity of Partner Sets
KR101976320B1 (ko) 라스트 레벨 캐시 메모리 및 이의 데이터 관리 방법
US7143239B2 (en) Cache structure and methodology
JP5791133B2 (ja) リプレースメントデータメモリ装置、中央演算装置及びリプレースメントデータ処理用プログラム
GR20180200044U (el) Μεταφραση διευθυνσεων μνημης
US20120102271A1 (en) Cache memory system and cache memory control method
GR20180200050U (el) Πραγματοποιηση λειτουργιων συντηρησης
GR20180200051U (el) Μεταφραση διευθυνσεων μνημης
JP2012194742A (ja) リプレースメントデータメモリ装置、中央演算装置及びリプレースメントデータ処理方法
GR20180200062U (el) Αποθηκευτικος χωρος δεδομενων για πολλαπλους τυπους δεδομενων

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211105

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20221026

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221027

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230307

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230606

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: 20230614

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230707

R150 Certificate of patent or registration of utility model

Ref document number: 7311959

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150