Linux 6.3 收到了一个 Linux CPU 调度程序修复补丁,修复了自 2019 年底以来一直存在于主线内核中的 “ CFS 调度器计算不平衡导致的整数溢出” 问题。

该问题最先在英特尔至强可扩展 Sapphire Rapids 服务器上发现,自 2019 年 10 月被报告以来,一直存在于主线内核。当时报告该 Bug 的具体表现为:

CFS 的重新平衡算法存在问题,kernel/sched/fair.c 中的 calculate_imbalance 函数可能由于整数溢出错误导致产生的结果不正确。

该算法旨在将一些任务从最繁忙的组拉到本地组。但是当两个组都或将变得过载时,算法不会将本地组推到调度域的平均负载之上。

而且,在某些情况下,该平衡算法的计算可能是错误的,导致无意义的任务迁移,甚至放大不平衡。

Linaro 的 Vincent Guittot 已发送了一组修复补丁来处理该不平衡溢出问题。 他解释说,“当本地组完全繁忙但其平均负载高于系统负载时,计算不平衡将溢出,本地组不是拉动此负载的最佳目标。”

该修复补丁已紧急进入 Linux 6.3-rc7 内核版本,具体解决方式是:如果本地组的负载超过平均系统负载,则不要尝试从本地组中拉出任何任务。

一旦被主线采用,该补丁应该会被反向移植到最近的稳定 Linux 内核版本。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。