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