由英特尔发起的最新内核性能补丁改进了 Linux 内核的公平调度程序代码,这个补丁系列的重点是避免不必要的跨 CPU 唤醒,可增强搭载高核心数 CPU 的 Linux 系统性能。
该 Linux 内核调度补丁主要是将短任务放在当前 CPU 上,以避免跨 CPU 唤醒。Intel 工程师陈宇在补丁邮件中解释道:
在高负载系统中,短期任务频繁跨 CPU 唤醒可能会成为性能问题的主要来源,因为它会带来频繁的上下文切换。
在该补丁生效后,如果唤醒者和被唤醒者都是短期任务,则通过仅将唤醒者放置在唤醒 CPU 上,来抑制跨 CPU 唤醒。
该策略仅在系统繁忙时生效,在还有空闲CPU的时候禁止空闲 CPU 进行扫描是不合理的。
该代码也得到了 AMD 工程师和其他利益相关者的测试/反馈,AMD 和英特尔平台都受益于这系列补丁。
据外媒 Phoronix 介绍,这些补丁特别有利于 AMD EPYC 和英特尔至强服务器处理器,以及其他具有高内核数的 HEDT 系统,具体的性能改进程度则因工作负载和系统繁忙程度而异。
总体而言,在 Intel Xeon 2 x 56C 机器上测试时,该补丁在某些超载情况下对性能有提高,比如 will-it-scale,netperf。但对 schbench、hackbench、tbench 和使用商业 RDBMS 的 OLTP 工作负载没有明显影响。
根据 Prateek 对 Zen3 的测试,大多数基准测试结果都取得了小的优化,与 sched:tip 相当。SpecJBB Critical-jOps 有所改善,而 Max-jOPS 受到的影响很小,但可能在预期范围内。ycsb-mongodb 在 NPS1 模式下有小幅提升。
当客户端数量等于 CPU 时,在 Rome 2 x 64C 机器上可观察到 netperf(localhost) 的吞吐量改进。
目前该公平调度性能补丁进行了第六次修订,更新了检查唤醒和选择唤醒 CPU 功能,以避免可能的 Redis 性能回归。
说实话,性能提升并不是十分明显,且适用范围较小。但蚊子腿也是肉,就看 LIinus 是否会合并这系列补丁。