TLB (変換ルックアサイド バッファー、これは CPU の特別なキャッシュ) から (仮想ページから物理ページへの) 変換のリストを取得することは可能ですか? 最新の x86 または x86_64 を意味します。JTAGを使用してすべてのTLBエントリをシフトアウトするのではなく、プログラム的な方法でそれを行いたいです。
2 に答える
Linux カーネルにはそのようなダンパーはありません。キャッシュと tlb に関する Linux カーネルのページがあります: https://www.kernel.org/doc/Documentation/cachetlb.txt「Linux でのキャッシュと TLB のフラッシュ」。デビッド・S・ミラー
80386DX (および 80486、そしておそらく "Embedded Pentium" 100-166 MHz / " Embedded Pentium MMX 200-233 MHz" には 1998 年)にそのような TLB ダンプがありました。
- 1 - 本「マイクロプロセッサー: 8086/8088、80186/80286、80386/80486 およびペンティアム ファミリー」、ISBN 9788120339422、2010 年、579 ページ
これは、テスト レジスタ TR6 TR7 を介して行われました。
- 2 - Book "Microprocessors & Microcontrollers" by Godse&Godse, 2008 ISBN 9788184312973 ページ SA3-PA19: "3.2.7.3 Test Registers" "2 つのテスト レジスタ (TR6-TR7) のみが現在定義されています。... これらのレジスタは、変換のチェックに使用されます。ページング ユニットのルックアサイド バッファー (TLB) です。」
- 3「x86-Programmierung und -Betriebsarten (Teil 5). Die Testregister TR6 und TR7」、レジスタに関するドイツの記事: 「Zur Prüfung des Translation-Lookaside-Buffers sind die zwei Testregister TR6 und TR7 vorhanden. Sie werden als Test-Command- Register (TR6) und Testdatenregister (TR7) bezeichnet. "
- 4 Intel の「Embedded Pentium® Processor Family Developer's Manual」、パート「26 Model Specific Registers and Functions」8 ページ「26.2.1.2 TLB Test Registers」
TR6 はコマンド レジスタで、リニア アドレスが書き込まれます。TLB への書き込み、または TLB からの行の読み取りに使用できます。TR7 は、TLB への書き込みまたは TLB からの読み出しを行うデータです。
ウィキペディアはhttps://en.wikipedia.org/wiki/Test_registerで、TR6/TR7 を読むと「80486 より新しい CPU で無効なオペコード例外を生成する」と述べています。
mov tr6/tr7 のエンコーディングは、特権レベル 0 でのみ利用可能でした: http://www.fermimn.gov.it/linux/quarta/x86/movrs.htm
0F 24 /r movl tr6/tr7,r32 12 Move (test register) to (register)
movl %tr6,%ebx
movl %tr7,%ebx
0F 26 /r movl r32,tr6/tr7 12 Move (register) to (test register)
movl %ebx,%tr6
movl %ebx,%tr7
TLB に保存されている VA-PA 変換のリストを取得できますが、qemu
. http://wiki.qemu.org/Main_Pageから qemu をダウンロードしてインストール
できます。ディスク イメージ (通常は qcow2 または raw 形式) に保存されているカーネルを起動し、アプリケーションを実行できます。TLB の内容を表示するには、qemu のコードを微調整する必要がある場合があります。tlb_*
関数を参照してください。tlb_dump_functionqemu/exec.c
を追加して、TLB の内容を出力することができます。私の知る限り、これが TLB の内容をダンプするのに最も近い方法です。
PS: この質問に答え始めてから、それが 1 年前のものであることに気付きました。