ハードウェアTLB管理を備えたマイクロプロセッサ(Intel x86-64など)でTLBミスが発生し、プロセッサがページテーブルを歩いている場合、これらの(オフチップ)メモリアクセスはキャッシュ階層(L1、L2など)を通過します。 )?
ハードウェアTLB管理を備えたマイクロプロセッサ(Intel x86-64など)でTLBミスが発生し、プロセッサがページテーブルを歩いている場合、これらの(オフチップ)メモリアクセスはキャッシュ階層(L1、L2など)を通過します。 )?
回答:
はい、Intel x86-64プロセッサでは、TLBミスが発生し、プロセッサがページテーブルを歩いているときに、それらのオフチップメモリアクセスがキャッシュ階層を通過します。
私はまだいくつかの詳細について少しあいまいですが、他の答えがそれらを埋めることを願っています-ページウォークを非常に詳細に説明しているIntelまたはAMDのマニュアルはありませんか?私の理解は:
Thomas W. Barr、Alan L. Cox、Scott Rixnerの2ページ目の図。 「翻訳キャッシュ:スキップして、歩いてはいけません(ページテーブル)」 は、「MMUキャッシュによって保存されたエントリ」と「L2データキャッシュによって保存されたエントリ」の間に線を引きます。(これは、新しいCPUを設計する人々にとって有用な論文になる可能性があります。これは、「電子設計」のトピックに完全に当てはまります)。
ステファン・エラニアンとデビッド・モスバーガー。 「IA-64 Linuxカーネルの仮想メモリ」 およびUlrich Drepper。 「すべてのプログラマは、メモリについて何を知っている必要があります」 と、おそらくスタックオーバーフロー- (これはEDのためのビットオフトピックであるIA-64ページテーブルを扱うことのオペレーティングシステムを書く人々のために有用かもしれ紙「operating- system」タグ、「osdev」タグ、またはOSDev.org wiki がそのトピックに適しています。
Intelの533ページの表A-10。 「 Intel®64 およびIA-32アーキテクチャソフトウェア開発者マニュアル」「PAGE_WALKS.CYCLES ...は、ページウォークのほとんどがキャッシュによって満たされるか、L2キャッシュミスを引き起こすかを示唆できます。」
invlpg
、特定のvirt addrのTLBキャッシングを無効にする以外に、それはないと思います。HWページウォークでその仮想アドレスのエントリが見つからない場合、またはエントリのアクセス許可でアクセスが許可されていない場合、#PF
例外が発生します。OSはページテーブルを更新し(ディスクからデータをページングするか、コピーオンライトを実行した後)、障害のあるロード/ストアが再実行され、HWページウォークが成功するように再開することで処理します。
これは、電子機器のスタック交換ではなく、コンピューターアーキテクチャのスタック交換に属していることに同意する傾向がありますが、これはここにあるためです。
@davidcaryは正しいです。
いくつかの歴史:
Intel x86ページテーブルウォークは、P5(別名Pentium)までキャッシュされませんでした。より正確には、ページテーブルウォークのメモリアクセスはキャッシュされず、キャッシュをバイパスしました。それまでのほとんどのマシンはライトスルーであったため、キャッシュと一致する値を受け取りました。しかし、彼らはキャッシュをスヌープしませんでした。
P6、別名Pentium Pro、およびAFAIK以降のすべてのプロセッサのページテーブルウォークは、キャッシュにアクセスし、キャッシュから取得した値を使用できました。したがって、ライトバックキャッシュを使用していました。(もちろん、MTRRで定義されたキャッシュ不可メモリにページテーブルを配置することもできます。しかし、OSのデバッグには役立ちますが、これは大きなパフォーマンスの低下になります。)
ちなみに、この「ページテーブルウォークメモリアクセスがデータキャッシュにアクセスする可能性がある」は、「ページテーブルエントリがTLB Ttranslation Lookasideバッファに格納(キャッシュ)される」とは別です。一部のマシンでは、TLBは「トランスレーションキャッシュ」と呼ばれます。
別の関連する問題は、ページテーブルの内部ノードが、さらに多くのTLBのようなデータ構造、たとえばPDEキャッシュにキャッシュされる可能性があることです。
1つの重要な違い:データキャッシュは一貫性があり、スヌープされます。ただし、TLBおよびPDEキャッシュはスヌープされません。つまり、一貫性がありません。結論として、ページテーブルは非コヒーレントTLBやPDEキャッシュなどにキャッシュされる可能性があるため、ページテーブルエントリがそうである可能性がある場合、ソフトウェアは個々のエントリまたはバルクグループ(TLB全体など)を明示的にフラッシュする必要がありますキャッシュが変更されます。少なくとも「危険」な方法で変更された場合、RW-> R-> Iから変更された場合、またはアドレスを変更された場合。
これは、新しいタイプの非コヒーレントTLBのようなキャッシングが追加されるたびに、これが行われていないという暗黙の仮定があったため、一部のOSが壊れたと言ってもいいと思います。