X86 CPU拉请求已经为Linux 6.8内核做好了准备,除了添加新的AMD Zen功能标志轻松隔离不同代的CPU外,还对AMD CPU进行了优化,以避免不必要的MFENCE+LFENCE障碍。
Linux x86/x86_64内核在访问某些MSR时设置了MFENCE和LFENCE同步障碍,因为这是英特尔CPU的必要行为,并由英特尔工程师添加到Linux内核中。但是在AMD处理器上不需要MFENCE+LFENCE屏障,因此Linux6.8的这个优化消除了在AMD处理器上运行时的这种行为。特别是,AMD处理器上的时间戳校准(TSC)和x2APIC型号特定寄存器(MSR)不需要MFENCE+LFENCE屏障。
我写了关于这件事的文章性能优化回到最初为Linux内核开发它的时候。现在,它即将登陆Linux6.8。
使用修改后的IPI基准测试,AMD评估了绕过此同步障碍对性能的影响:
对比x2AVIC修复前后的性能,可以看出性能提升了~4%。
在Zen4系统上,使用未修改的ipi工作台(在带有和不带有ware_wrmsr_figure()的情况下使用‘esh-ipi’选项)捕获的性能也显示了在没有使用ware_wrmsr_figure()的情况下显著的性能改进。‘esh-ipi’选项忽略CCX或ccd,只选取随机的vCPU。
WINE_WRMSR_FIVEN()的平均吞吐量(10次迭代),
累计吞吐量:4933374 IPI/S平均吞吐量(10次迭代),不使用WARTY_WRMSR_FARCH(),
累计吞吐量:6355156 IPI/s”
在AMD处理器上不序列化MSR访问的更改可以在X86/CPU拉入 for Linux 6.8, albeit too bad this behavior wasn't properly gated for being Intel-specific in the first place.