有 20 年历史的 Linux 解决方法仍在拖慢 AMD 系统的速度

AMD 自 2002 年以来已经取得了长足的进步,但 Linux 内核仍然将现代 Threadripper 视为 Athlon 时代的系统——至少在一个可能导致滞后的方面。

AMD 工程师 Prateek Nayak 最近向 Linux 的处理器空闲驱动程序提交了一个补丁,该补丁将“跳过基于 Zen 微架构的处理器的虚拟等待”。 当 ACPI 支持在 2002 年被添加到 Linux 内核时——由 Andy Grover 编写,由 Linus Torvalds 承诺——它包括一个“虚拟等待操作”。 除了延迟下一条指令直到 CPU 可以通过 STPCLK# 命令完全停止之外,系统基本上没有其他目的读取数据。 在 ACPI 实施的早期,当某些芯片组不会像人们期望的那样进入空闲状态时,这可以实现一些节能和兼容性。

但是今天基于 Zen 的 AMD 芯片不需要这种解决方法,而且,正如 Nayak 所写,它正在伤害它们,至少在 Linux 上的特定工作负载中是这样。 使用基于指令的采样 (IBS) 工作负载进行的测试表明,“大量时间花费在虚拟操作上,而这些时间错误地被视为 C-State 驻留。” CPU,看到所有这些低努力的虚拟工作,可以进入更深、更慢的 C 状态,这会使 CPU 需要更长的时间来“唤醒”,尤其是在需要在忙和空闲状态之间进行大量切换的工作上。

广告

Nayak 在双插槽 Zen3 系统上针对基线 Linux 内核、完全禁用 C2 状态的内核和修补了虚拟等待操作的内核在 tbench 中运行测试。 与基准内核相比,他的修补版本的最小 MB/s 吞吐量增加了 1,390%,平均 MB/s 增加了 51%,通常只比完全禁用 C2 稍稍落后。

根据 Phoronix 博客,英特尔系统避免了 AMD 的遗留诅咒,因为它们使用基于 MWAIT 的系统至少十年。 这导致英特尔的 Dave Hansen 提交了一个紧急补丁。 他的解决方案是将“虚拟等待”限制在英特尔系统上,这样不会影响“远程现代英特尔系统”,并在内核的空闲驱动程序中添加注释,说明正在发生的事情——并鼓励阅读者“考虑将系统移动到更现代的闲置机制。”

如果本周提交了删除或限制“虚拟等待”的紧急补丁,它可能会生成 Linux 6.0 内核,Torvalds 预计将在下周发布。

资讯来源:由0x资讯编译自ARSTECHNICA,版权归作者Kevin Purdy所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢