有没有一种方法可以像在 Intel 系统中那样以编程方式禁用 AMD 系统上的硬件预取器,如 this topic 中所述
专用于 AMD Opteron Barcelona 或 Istanbul 架构。
最佳答案
所有 AMD 系列 10h 处理器(包括 Barcelona 和 Istanbul)都有两个不同的硬件预取器。
第一个是传统的数据缓存预取器,它识别上升或下降缓存行访问的连续流。可以通过将 MSRC001_1022 的第 13 位设置为“1”来禁用它。
另一个硬件预取器是“内存 Controller 预取器”。这是一个更通用的预取器,但仅在内存 Controller 内运行(即,它不会将预取数据发送到内核——它只是使内存 Controller 能够在内核请求时更快地返回它)。
- 此预取器的主要控制在 PCI 配置空间中,功能 2,偏移量 11Ch,在功能 2 中的附加控制,Barcelona 之后的处理器的偏移量 1B0h。
- 我通过/dev/mem 设备驱动程序更新 PCI 配置空间中的值,成功地在“实时”Barcelona 系统上禁用和重新启用此预取器。 (不要在家里尝试这个!)
- 内存 Controller 预取器的事件由硬件性能计数器事件 1F0h 和 UnitMasks 02 和 04 显示。
- 请注意,上海/ Istanbul 尔/MagnyCours 的内存 Controller 预取器“一致”运行(意味着缓存一致性探测操作与内存预取一起发出),而巴塞罗那的内存 Controller 预取器不发出缓存一致性操作(它们在内核对高速缓存行的请求到达内存 Controller 之前不会发出。
上述内容记录在 BIOS 和内核开发人员指南中,适用于 10h 系列处理器:http://support.amd.com/us/Processor_TechDocs/31116.pdf
关于linux - 以编程方式禁用 AMD 系统上的硬件预取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275587/