問題タブ [tlb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
caching - プロセッサ x86/x86_64 では、L1、L2、および L3 でのキャッシングに物理または仮想アドレッシングが使用されていますか?
プロセッサ x86/x86_64 で L1、L2、および L3(LLC) のキャッシングに使用されるアドレッシングはどれですか?物理または仮想 (PT/PTE およびTLBを使用) で、PAT(ページ属性テーブル)はそれに影響しますか?
この場合、ドライバー (カーネル空間) とアプリケーション (ユーザー空間) に違いはありますか?
簡単な回答 - Intel は、仮想的にインデックスが作成され、物理的にタグ付けされた(VIPT) L1 キャッシュを使用しています。
- L1 -仮想アドレス指定 (
8-way
定義のためのキャッシュでは、virt と phys で同じであるSet
必要があります)12 bits
- L2 -物理アドレッシング (Virt-2-Phys の TLB へのアクセスが必要)
- L3 -物理アドレッシング (Virt-2-Phys の TLB へのアクセスが必要)
c - コードスニペットでTLBミスの数を見つける方法は?
ページ サイズが 1KB であると仮定して、次のコード スニペットのようなコードで TLB ミスの数を計算するにはどうすればよいですか。
この#TLBミスを知ることに加えて、ほぼすべての特定のコードスニペットでTLBミスの数を計算できる一般的なルールを知ることに興味があります。
caching - TLB を使用した仮想メモリの設計
次の問題が発生しましたが、正確にどのようにアプローチすればよいかわかりません。
次のプロパティを持つ仮想メモリ システムを考えてみましょう。
・35ビットの仮想アドレス
・16KBページ
・32ビットの物理アドレス
この仮想メモリ システムが 8 ウェイ セット アソシアティブ TLB で実装されているとします。TLB には合計 256 の TLB エントリがあり、各 TLB エントリは 1 つの仮想ページから物理ページへの変換を表します。
64 KB のデータ キャッシュは、双方向セット アソシアティブ キャッシュです。データ キャッシュのブロック サイズは 128 バイトです。
以下の図と同様の方法で描画された図を使用して、仮想から物理へのマッピングを示します (ただし、この質問で指定された TLB とデータキャッシュに必要なすべての変更を加えてください)。
各メモリ アドレスの TLB とデータ キャッシュに出入りするすべてのフィールドと信号の幅 (および実行される比較の数) を指定します。
いくつかのパラメーターを計算する方法についてはある程度のアイデアがありますが、そうでなければ道に迷ってしまいます。
たとえば、仮想アドレスは 35 ビット幅なので、2^35 の可能な仮想アドレスがあることがわかります。
16KB のページ (16*1KB = 2^4 * 2^10 = 2^14KB) があるので、(3^35)/(2^14) = 2^21 ページ テーブル エントリが必要であることがわかります。
最後に、私のキャッシュ サイズは 64 * 1KB = 2^16 バイトのキャッシュであることがわかりました。
しかし、これらの手順の後、私は迷子になります。どんな助けでも大歓迎です。
caching - x86 CPU キャッシュ/TLB のコンテンツをダンプ/変更できますか?
どのアプリやシステム カーネルも、CPU キャッシュや TLB の内容にアクセスしたり、内容を変更したりできますか?
このウェブサイトから、CPU キャッシュに関する短い説明を見つけました。
「CPUキャッシュに直接アクセスできるプログラミング言語はありません。キャッシュの読み取りと書き込みは、ハードウェアによって自動的に行われます。キャッシュをあらゆる種類の個別のエンティティとして扱う命令を書く方法はありません。キャッシュへの読み取りと書き込みは、サイドとして行われます。 -メモリに触れるすべての命令に影響します。」
このメッセージから、CPU キャッシュ/TLB の内容を読み書きする方法がないようです。
しかし、上記の情報と矛盾する別の情報も入手しました。この情報は、デバッグ ツールが CPU キャッシュの内容をダンプ/表示できる可能性があることを意味します。
現在、私は混乱しています。だから私を助けてください。
caching - 非データ キャッシュ ミス (命令、TLB など) の兆候は何ですか?
パフォーマンスが重要なコードをデバッグして逆アセンブリを確認する場合、データキャッシュ ミスによるボトルネックを見つけるのはそれほど難しくありません。
ロード/ストア命令は通常のボトルネックになる傾向があります。つまり、プログラムを停止すると、予期しないメモリ アドレスからロードするロード/ストア命令の近くでプログラムが停止する可能性があります。
同様に、分岐の予測ミスを見つける 1 つの方法は、通常、プログラムを壊すと特定のジャンプの近くでプログラムが停止するかどうかを確認し、次にコードを調べて、ジャンプが予測可能かどうかを確認することです。
(または、少なくとも、それが私がそのようなボトルネックを見つけようとする方法です。間違った症状を探している場合はお知らせください..)
しかし、他の種類のキャッシュ ミスの症状は何ですか?
それらがまれであることは知っていますが、出現した場合にそれらを見つける方法を知りたい.
「その他の」キャッシュとは、次のようなものを意味します。
- 命令キャッシュ
- 変換ルックアサイド バッファー
- 私が知っておくべき他の重要なキャッシュのボーナスポイントですが、私は気づいていません
c - コード スニペットの配列で TLB ミスの適切なストライドを見つける
システムに、ページ サイズが 8KB の 32 エントリの TLB があるとします。配列「データ」へのほぼすべてのアクセスでTLBミスを達成するには、MAXとストライドを何に設定する必要がありますか?
これは、答えがある演習の期末試験ですが、わかりません。最終的な答えは、stride=2k MAX=33*stride です。
このようなタイプの質問でTLBミスの数を見つける方法を理解するのに役立つ完全な回答は、本当に感謝しています。
memory-management - ページングおよび TLB オペレーティング システム
私はOSクラスのこの質問に本当にこだわっています.誰かが答えを教えてくれるのではなく、誰かがそれを解決する方法を教えてくれたらいいのですが.
質問例:
このシステムは、単純なページングと TLB を使用します。
各メモリ アクセスには 80ns が必要です
TLB アクセスには 10ns が必要
TLB ヒット率は 80% です。
TLB による実際のスピードアップを計算しますか?
注:必要なメモリアクセスを変更し、TLBアクセスには質問の一部が必要です。答えが欲しくないと言ったので、それを解決する方法にすぎません。
c++ - プロセスメモリサイズが大きくなるとTLBミスが増える?
私は C++ で書いたプログラムを持っています。Linux では、プロセスに一定量のメモリが割り当てられます。一部はスタック、一部はヒープ、一部はテキスト、一部はBSSです。
次のことは正しいですか。
プロセスのヒープ コンポーネントに割り当てられるメモリの量が増えると、変換ルックアサイド バッファ ミスが発生する可能性が高くなりますか?
一般的に言って、アプリケーション プロセスが消費するメモリが多いほど、TLB ミスの可能性が高くなりますか?
arm - uboot が最初に TLB、icache、BP 配列を無効にするのはなぜですか
arm プラットフォームでは、u-boot は最初に TLB、icache、および BP 配列を無効にしますが、その理由は何ですか? それは必要ですか?