以编程方式禁用AMD系统上的硬件预取

Mar*_*ark 6 linux prefetch amd-processor

有没有一种方法可以在AMD系统上以编程方式禁用硬件预取器,就像在本主题中讨论的英特尔系统一样

专门针对AMD Opteron Barcelona或Istanbul架构.

Joh*_*pin 5

所有AMD系列10h处理器(包括巴塞罗那和伊斯坦布尔)都有两个不同的硬件预取器。

  1. 第一个是传统的数据高速缓存预取器,它可以识别高速缓存行访问的连续或连续流。可以通过将MSRC001_1022的位13设置为“ 1”来禁用它。

  2. 另一个硬件预取器是“内存控制器预取器”。这是一个较为通用的预取程序,但仅在内存控制器内运行(即,它不会将预取的数据发送到内核-它只是使内存控制器可以在内核请求时更快地返回数据)。

    • 此预取器的主要控制权在PCI配置空间中,功能2(偏移量11Ch),附加功能在功能2中,位于巴塞罗那之后的处理器的偏移量1B0h。
    • 我已经通过/ dev / mem设备驱动程序更新了PCI配置空间中的值,从而在“实时”巴塞罗那系统上禁用和重新启用了该预取器,从而获得了成功。(不要在家尝试!)
    • 硬件性能计数器事件1F0h与UnitMask 02和04一起显示了内存控制器预取器的活动。
    • 请注意,上海/伊斯坦布尔/ MagnyCours的内存控制器预取器“一致地”运行(意味着高速缓存一致性探测器操作与内存预取一起发出),而巴塞罗那的内存控制器预取器不进行高速缓存一致性操作(它们不这样做)。直到内核对缓存行的请求到达内存控制器为止)。

上面的内容记录在《 BIOS和内核10h系列处理器的内核开发人员指南》中:http : //support.amd.com/us/Processor_TechDocs/31116.pdf