LWN:hybrid scheduling更加复杂了!

关注了就能看到更多这么棒的文章哦~

Hybrid scheduling gets more complicated

By Jonathan Corbet
September 30, 2022
LPC
DeepL assisted translation
https://lwn.net/Articles/909611/

10 多年前新出现的 Arm big.LITTLE 架构给内核的 CPU 调度器(scheduler)带来了挑战:如果 CPU 各自的能力不同,应该如何决定将进程分配给哪个 CPU?在那之后,情况还在继续变得复杂;新的系统不断带来新的怪癖,必须牢记这些怪癖才能实现最佳的调度策略。在 2022 年的 Linux Plumbers Conference 上,Len Brown 和 Ricardo Neri 谈到了英特尔的 hybrid 系统以及他们正在进行的工作,以便在这些系统上正确地进行调度。

05c9fef15692a8c5e4bb0c17e91becef.png

Brown 布朗首先介绍了英特尔的 hybrid CPU,他说,这些 CPU 是 "Pcores "和 "Ecores "的组合。Pcores 具有更高的性能,也支持同步多线程(SMT,simultaneous multi-threading)。Ecore 则相反,更注重功耗效率而不是性能;Ecore 曾被称为 "Atom" CPU。这两种类型的 CPU 都实现了相同的指令集,因此一个进程可以在这两种 CPU 之间自由迁移。

直到 4.9 版本的内核,都是将系统上的所有 CPU 视为平等的;这意味着指定的进程将会表现出不同的性能,仅仅取决于调度器将其放在系统中哪个 CPU 上执行。从 4.10 开始,英特尔的 ITMT(Intel Turbo Boost Max Technology 的缩写)就使得调度程序在其他条件相同的情况下更倾向于 Pcores 而不是 Ecores。这样一来,效果就是尽可能地将进程放在更快的 CPU 上,但它也会只在系统中 SMT 的 CPU 都忙起来之后才会使用 Ecores,这就导致整体性能下降。从 5.16 版本开始,这个问题已经得到了解决;现在 Ecore 会比一个繁忙的 CPU 的 SMT 兄弟 CPU 更优先。

Pcores 更快;它们运行的时钟频率更高,但也能在每个时钟周期完成更多的工作。因此,仅靠时钟频率不足以比较一个系统中两个 CPU 的能力。为了解决这个问题,硬件给每个 CPU 提供了性能和效率的打分;如果条件发生变化了的话,可以在运行时来改变这些分数,布朗说。

不过,情况实际上要比这更复杂。CPU 类型之间的性能差异取决于在那个时刻正在执行哪些指令。在 Pcore 上运行使用了 VNNI 指令的程序(用来加速机器学习的应用),比起运行其他普通程序更有优势。存在四种不同性能的等级,主要取决于指令的类型,Pcore 和 Ecore 的性能表现的差异在每一种类型中都是不同的。

为了能最佳地在这样一个系统中进行调度,内核应该使用 Pcore 来运行那些能够受益最多的进程。不能指望应用程序开发人员了解这四种性能等级中哪一种是最适合他们的代码的,而且可能会随着程序的执行而改变这个类型,但是 CPU 肯定知道在某个特定的时间内正在执行哪些类型的指令。因此,每个 CPU 都会公开一个寄存器,来表明哪个性能等级最能描述当前运行的进程。这使得内核能够分配一个 class ID,并在调度决策中使用。

e9bc8ab29ba8da50343435ad946d715b.png

Neri 接手,介绍做了哪些工作来利用这个信息。每个进程的 classID 被存储在其 task_struct 结构中。这个信息的首先用在了 idle load balancer 中,在某个 CPU 已经没有任务可执行时,就会调用这个 idle load balancer,并查看是否应该从系统中其他负载更重的 CPU 中提取任务迁移过来。这部分代码可以查看每个候选 task 的 class ID,从而找到移动哪个 task 可以获得最大好处(或损失最小)。这种检查在两端都要做;如果一个 task 在大量使用非常适合当前 CPU 运行的指令,那么尽可能不要把它迁移到别的 CPU。

有一位听众问,是否可以从用户空间来调整某一个正在运行的进程的 class ID。Brown 回答说,这个功能可以用于调试,但是没有人想过把它作为一个最终支持的正式 feature。

Neri 继续说到,内核的 NUMA balance 代码也可以查看 class ID,并在 node 之间交换 task,如果能获得更好的系统性能的话。类似的工作也可以在 busy load balancing (用于在繁忙的系统中平衡负载)做。这个想法让一些开发者感到紧张,因为它很容易破坏负载平衡,造成性能下降,而要到很久以后才被发现。Neri 强调说,只有在现有的启发式判断下来两个选项打成平手的情况下,才会在负载平衡决策中考虑 class ID。

会议的最后时刻专门讨论了英特尔 Alder Lake CPU(今年早些时候开始出货)上的调度问题。具体来说,内核的 energy-ware scheduling 启发式方法在这些 CPU 上并不好用。某些特性使 energy 状况变得复杂;这些特性包括 SMT、英特尔的 "turbo boost" 模式,以及 CPU 内部的电源管理机制。对于许多 workload 来说,在表面上更耗电的 Pcore 上运行可能比使用 Ecore 更 efficient。不过,讨论这个问题的时间不足,会议也就此告一段落了。

[感谢 LWN 订阅者对编者参加这次活动的支持。]

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

format,png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值