导读 | 一个由英特尔发起的、旨在改进Linux内核公平调度程序代码的补丁系列,也看到了来自AMD工程师和其他利益相关者的测试/反馈,并继续进行改进。这个补丁系列的重点是避免在不必要的情况下发生过多的跨核唤醒(Cross-CPU Wake-up)。这样一来,这些补丁有助于提高Linux的性能,特别是在高核数系统上。 |
英特尔工程师Chen Yu在Patch前的解释提到:Linux内核调度器的改进是围绕唤醒当前CPU上的短任务,以避免跨核CPU唤醒。
如果唤醒者和被唤醒者都是短时任务,通过将被唤醒者放在被唤醒的CPU上来抑制跨CPU唤醒。短时间的任务可能会成为高负荷系统的麻烦制造者,因为它可能带来频繁的上下文切换。这个策略只在系统繁忙时生效。因为当还有闲置的CPU时,抑制闲置CPU的扫描是不合理的。
首先,介绍一下短时任务的定义。然后利用第一个补丁,选择一个本地CPU进行唤醒。
AMD和英特尔平台都从开发中的补丁中受益。受益情况根据工作负载和系统首先的繁忙程度而不同。这些补丁特别有利于AMD EPYC和英特尔至强服务器处理器,以及其他具有高核心数的HEDT系统。
总的来说,在一些过载的情况下有性能的改善。比如will-it-scale,netperf。而在英特尔至强2 x 56C机器上测试的schbench、hackbench、tbench和商业RDBMS的OLTP工作负载上,没有明显的影响。
根据Prateek在Zen3上的测试,大多数基准测试的结果都是小胜或与sched:tip相当。SpecJBB的Critical-jOps得到了改善,而Max-jOPS受到了不太成功,但这可能是在预期范围内。
当客户数量等于CPU时,在Rome 2 x 64C机器上观察到netperf(localhost)的吞吐量改善。
总的来说,这些好处似乎很小,但可以测量。考虑到许多不同方面所追求极致的内核优化,每一点都有帮助,而且非常受欢迎。当这些最新的补丁进入主线时,我将对它们进行测试。
今天对补丁进行了第六次修订,更新了围绕检查唤醒/唤醒CPU选择的行为,以避免可能出现的Redis性能倒退。
现在看到这个调度器增强功能在v6.3内核中出现已经太晚了,但我们会看到这项工作在未来几周/几个月内的进展,希望最终能在未来的Linux内核版本中成为对今天的高核心数服务器有益的改进。
更多Linux资讯请查看:https://www.linuxprobe.com/