转储x86 CPU的TLB缓冲区内容

3

是否可以从TLB(翻译后备缓存,这是CPU中的特殊缓存)中获取虚拟页面到物理页面的翻译列表?我的意思是现代x86或x86_64;我想以编程方式实现,而不是使用JTAG并将所有TLB条目移出。


当你的代码运行时,通常会更改TLB的内容。你如何避免这种情况发生? - John Saunders
TLB转储应该很小,以便稍微改变TLB。对于非全关联的TLB,有一些银行方法(由操作系统辅助)可以保持应用程序TLB与TLB转储工具的TLB不相交(如页面着色)。 - osgx
2个回答

6

Linux内核没有这样的转储程序,但是有一篇来自Linux内核的页面介绍了缓存和TLB:https://www.kernel.org/doc/Documentation/cachetlb.txt "Cache and TLB Flushing Under Linux." David S. Miller

在80386DX(以及80486,可能还有1998年的“嵌入式奔腾”100-166 MHz / "Embedded Pentium MMX 200-233 MHz")中有一个TLB转储:

  • 1 - 书籍 "MICROPROCESSORS: THE 8086/8088, 80186/80286, 80386/80486 AND THE PENTIUM FAMILY", ISBN 9788120339422, 2010, 第579页

这是通过测试寄存器TR6 TR7完成的:

  • 2 - 2008年Godse&Godse的书籍《微处理器和微控制器》 ISBN 9788184312973 第SA3-PA19页:“3.2.7.3 测试寄存器”“目前只定义了两个测试寄存器(TR6-TR7)。...这些寄存器用于检查分页单元的转换后备缓冲器(TLB)。”
  • 3 德国文章:“x86编程和操作模式(第5部分)。测试寄存器TR6和TR7”,有关寄存器:“为了检查转换后备缓冲器,有两个测试寄存器TR6和TR7。它们被称为测试命令寄存器(TR6)和测试数据寄存器(TR7)。”
  • 4 Intel的“嵌入式Pentium®处理器系列开发人员手册”,第26部分“模型特定寄存器和功能”第8页“26.2.1.2 TLB测试寄存器”

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

2
您可以从TLB中获取VA-PA转换列表,但可能需要使用处理器仿真器(如qemu)。您可以从http://wiki.qemu.org/Main_Page下载和安装qemu。
您可以启动存储在磁盘映像中的内核(通常为qcow2或raw格式),然后运行应用程序。您可能需要调整qemu中的代码来打印TLB的内容。请查看“qemu/exec.c”中的“tlb_*”函数,您可能想要添加一个“tlb_dump_function”来打印TLB的内容。据我所知,这是打印TLB内容的最接近方法。
附言:我开始回答这个问题,然后意识到它已经一年了。

但这仍然很有趣。QEMU模拟了哪个TLB?你对使用Bochs或PTLsim模拟器有什么看法? - osgx
你说的是哪个TLB?qemu是一个处理器模拟器,可以模拟x86-64、sparc或其他类型的CPU。我没有使用过Bochs,但最新版本的PTLsim使用qemu进行功能仿真。PTLSim用于模拟时序信息。 - Bhushan
Bhushan,模拟TLB的参数是什么? - osgx
2
默认情况下,它是一个256条目的TLB,但可配置。 TLB条目的定义可在(https://github.com/qemu/qemu/blob/master/cpu-defs.h#L81)上找到。 - Bhushan
2
QEMU会像真正的x86 CPU一样进行TLB预取操作吗? - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接