AMD 工程师 K Prateek Nayak 最近发现,Linux 内核中一个大约 20 年前的芯片组解决方法仍被应用于现代 AMD 系统,在某些情况下,它负责损害现代 Zen 硬件性能。幸运的是,一个修复程序正在进行中,它可以限制旧系统的工作方法,从而帮助提升现代系统的性能。
上周发布了一个 ACPI 处理器空闲代码的补丁,以避免现代 AMD Zen 系统上的旧芯片组工作方法。自从 ACPI 支持在 2002 年被添加到 Linux 内核以来,一直有一个 " 假等待操作 " 来处理一些芯片组的 STPCLK# 没有被及时处理的问题。这个假的 I/O 读数会延迟进一步的指令处理,直到 CPU 完全停止。这是一些使用威盛芯片组的 AMD Athlon 时代系统的问题。但在过去 20 年里,新的芯片组没有这个问题。
在过去 20 年里,一个针对现在的古老芯片组的 Linux 内核解决方法仍然被不必要地应用于现代 AMD 系统,这反过来又会损害特定工作负载的性能。K Prateek Nayak 发现,即使是现代的 AMD 系统,也仍然在应用这种变通方法。
在 AMD Zen3 系统上用 IBS 对某些工作负载进行采样显示,大量的时间花在假操作上,这被错误地算作 C-State 驻留。一个大的 C-State 驻留值可以促使处理器在随后的空闲实例中推荐一个更深的 C-State,开始一个恶性循环,导致在繁忙和空闲阶段之间快速切换的工作负载性能下降。
一个这样的工作负载是 Tbench,在某些运行中可以观察到大规模的性能下降。至少对于 Tbench 来说,Linux 内核中的这种长期的、无条件的工作方法一直在损害 AMD Ryzen / Threadripper / EPYC 在特定工作负载中的性能。这个变通方法并没有影响到现代英特尔系统,因为那些较新的英特尔平台使用替代的基于 MWAIT 的 intel_idle 驱动代码路径。
AMD 的补丁演变成了英特尔 Linux 工程师 Dave Hansen 的这个补丁。那个将 " 假等待 " 的工作方法限制在旧系统上的补丁已经排到了 TIP 的 x86/ 紧急分支。由于它走的是 "x86/ 紧急 " 的路线,而且修复了一个在现代硬件上不需要的工作方法,这个补丁很可能会在本周作为 Linux 6.0 内核提交,而不是需要等到下一个(v6.1)合并窗口再提交。
原文地址:http://www.myzaker.com/article/6331cfec8e9f094bf3098b0d