导致 MySQL 性能下降,Linux 6.19 紧急禁用 NEXT_BUDDY
Linux 6.19 内核的开发工作已接近尾声,但在代码冻结前的最后关头,调度器子系统迎来了一次紧急调整。
根据 Phoronix 的最新报道以及内核邮件列表的动向,Linux 开发团队决定在 6.19 版本中默认禁用一项名为 "NEXT_BUDDY" 的调度器特性。这一决定源于该特性在特定负载下导致的性能倒退。
什么是 NEXT_BUDDY?
NEXT_BUDDY 是 Linux 内核调度器中的一个逻辑选项。它的主要目的是优化任务唤醒时的抢占行为。
在多任务处理中,当一个进程唤醒另一个进程时,通常意味着这两个进程之间存在数据交互。理论上,如果能够尽快调度被唤醒的进程运行,或者让这两个进程在物理距离较近的 CPU 核心上运行,可以有效利用 CPU 缓存,从而提升性能。
NEXT_BUDDY 的机制倾向于让被唤醒的任务获得更高的调度优先级,或者更积极地抢占当前运行的任务。在 EEVDF(Earliest Eligible Virtual Deadline First)调度算法被引入内核后,NEXT_BUDDY 逻辑经过了重写,以适配新的调度目标。
为何禁用?
尽管理论很好,但实际测试数据表明,重写后的 NEXT_BUDDY 并没有在所有场景下带来预期的收益,反而造成了显著的性能损失。
根据 Tip 分支(tip/tip.git)中 sched/urgent 的提交记录,主要的问题集中在以下几个测试场景:
- 1. MySQL 数据库性能下降:当客户端和服务器运行在不同的服务器实例上时,开启 NEXT_BUDDY 导致了吞吐量下降。
- 2. SPECjbb 测试倒退:Java 业务基准测试 SPECjbb 报告了峰值指标的降低。
- 3. DayTrader 性能倒退:这是一个模拟在线股票交易系统的基准测试,被认为代表了真实的某些企业级负载,测试结果同样显示性能受损。
内核开发者认为,虽然在某些情况下该特性可能带来收益,但上述报告的倒退尤其是涉及数据库和企业级应用的场景是无法接受的。
技术细节与决策
该特性的回退补丁包含了一段明确的解释。开发者承认,在无法预知未来的情况下,很难保证一个调度策略在所有场景下都是通用的优化。
最初该特性随 EEVDF 的引入而被禁用,随后在 commit e837456fdca8 中为了适配 EEVDF 目标而被重新启用和重写。然而,目前的测试硬件资源有限,难以在短时间内彻底排查出导致 MySQL 和 DayTrader 性能下降的根本原因。
为了保证 Linux 6.19 的稳定性,维护者采取了保守策略:默认禁用 NEXT_BUDDY。
这并不意味着该功能被彻底移除。代码依然保留在内核中,但默认配置下将不会激活该逻辑,直到后续版本中开发者能够修复这些性能回退问题,或者找到更精细的启用条件。
Linux 调度器的优化始终是一个权衡的过程。通用操作系统需要兼顾吞吐量和延迟,并覆盖从嵌入式设备到超级计算机的各种硬件组合。
此次 Linux 6.19 在发布前夕禁用 NEXT_BUDDY,再次证明了基准测试在内核开发中的核心地位。对于运行数据库或 Java 中间件的用户来说,这是一个利好消息,避免了升级新内核后可能出现的莫名性能下降。