系统相关
首页 > 系统相关> > linux – 以编程方式禁用AMD系统上的硬件预取

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

作者:互联网

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

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

解决方法:

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

>第一个是传统的数据缓存预取程序,它可以识别连续的缓存行访问升序或降序流.可以通过将MSRC001_1022的第13位设置为“1”来禁用它.
>其他硬件预取器是“内存控制器预取器”.这是一个更通用的预取器,但仅在内存控制器内运行(即,它不会将预取数据发送到核心 – 它只是使内存控制器在核心请求时更快地返回它).

>此预取器的主要控制是PCI配置空间,功能2,偏移11Ch,功能2中的附加控制,巴塞罗那后处理器的偏移1B0h.
>通过/ dev / mem设备驱动程序更新PCI配置空间中的值,我成功地在“实时”Barcelona系统上禁用和重新启用此预取器. (不要在家里试试!)
>内存控制器预取程序的活动由硬件性能计数器事件1F0h显示,UnitMasks 02和04.
>请注意,上海/伊斯坦布尔/ MagnyCours的内存控制器预取器“连贯”运行(意味着缓存一致性探测操作与内存预取一起发布),而巴塞罗那的内存控制器预取器不发出缓存一致性操作(它们不是’ t发出,直到核心对高速缓存行的请求到达内存控制器).

以上内容记录在BIOS和Kernel Developer’s Guide for Family 10h处理器:http://support.amd.com/us/Processor_TechDocs/31116.pdf

标签:linux,prefetch,amd-processor
来源: https://codeday.me/bug/20190522/1151145.html