What's a CPU to do when it has nothing to do

2022-05-13 20:21:11 浏览数 (2)

如果没有任何要运行的CPU,则CPU处于空闲状态。或者,更精确地说,Linux内核具有许多内部调度类,包括特殊的空闲类。如果没有任何类在给定的CPU上运行任何任务(空闲类除外),则将CPU视为空闲。如果硬件对此不予考虑,那么CPU将不得不运行无用的指令,直到实际工作需要它为止。但是,这是一种非常低效的用电方式,因此大多数CPU支持许多低功耗状态,内核可以将它们置于低功耗状态,直到需要它们进行有用的工作为止。

空闲状态不能随意进入或退出。进入和退出都需要一些时间,而且功耗会暂时略微高于当前状态(进入空闲状态时的正常状态)和高于正常状态(目的地状态从空闲状态退出时的状态)。尽管越来越多的空闲状态消耗越来越少的功率,但进入和退出它们的成本却越来越大。这意味着对于较短的空闲时间,相当浅的空闲状态是对系统资源的最佳利用。对于更长的空闲时间,更深的空闲状态的成本将通过增加空闲时的节电来证明。因此,在决定CPU空闲多长时间之前,预测CPU空闲多长时间才是内核的最大利益。这是空闲循环的工作。

在此循环中,CPU调度程序会注意到CPU处于空闲状态,因为它没有CPU可以做的工作。然后,调度程序将调用调速器,调速器会尽力预测要进入的适当空闲状态。当前内核中有两个调速器,分别称为“菜单”和“梯形图”。它们在不同的情况下使用,但是它们都尝试做大致相同的事情:跟踪CPU空闲时的系统状态以及空闲时间。这样做是为了预测新闲置的CPU可能会保留多长时间,从而预测哪种空闲状态最适合它。

CPU调度程序的时钟滴答声使这项工作特别困难。这是一个由CPU调度程序运行的计时器,用于分时CPU:如果要在单个CPU上运行多个作业,则每个作业只能运行一段时间,然后定期搁置另一份工作。此刻度不需要在空闲的CPU上运行,因为没有作业可以共享CPU。此外,如果允许滴答声可以在其他空闲的CPU上运行,则它将通过限制CPU可能保持空闲状态的时间来防止调控器选择深度空闲状态。因此,在4.16及更低版本的内核中,调度程序在调用调控器之前禁用了滴答。当CPU被中断唤醒时,调度程序将决定是否有工作要做,如果有,

如果调速器预测到很长的空闲时间,并且闲置时间变长,则调速器“获胜”:CPU将进入深度空闲状态,并节省了电源。但是,如果调速器预测到长时间处于空闲状态,而该周期变短,则调速器会“丢失”,因为进入短时空闲状态的成本无法通过节电来弥补。更糟糕的是,如果调速器预测的空闲时间很短,则无论实际的空闲时间如何,它都会丢失:如果实际的时间很长,可能会漏掉潜在的节电功能;如果时间很短,则停止和重新启动时钟的成本就会增加。不必要的报酬。或者换种说法,因为停止和开始滴答需要付出一定的代价,

Wysocki考虑过尝试重新设计调速器以解决此问题,但得出的基本问题是,在调用调速器之前,即在知道建议的空闲状态之前,刻度已停止。因此,他对内核4.17的空闲循环进行了重新设计,以便 在调节器对空闲状态提出建议做出停止滴答的决定。如果建议长时间闲置,则停止滴答声,以免过早唤醒CPU。如果建议短时间闲置,请勾选该勾号,以避免支付将其关闭的费用。这意味着,滴答也是一种安全网,如果空闲时间比预期的要长,它会唤醒CPU,并为调速器提供另一次纠正错误的机会。

当空闲的CPU被中断唤醒时,无论是从运行的滴答声还是其他事件唤醒,调度程序都会立即决定是否有工作要做。如果存在,则在需要时重新启动刻度线;但是,如果没有,将立即重新调用州长。由于这意味着现在可以在运行滴答声和停止滴答声时调用调速器,因此必须对调速器进行重新设计以考虑到这一点。

Wysocki希望从早些时候重新检查赢/输表,并希望这项工作可以改善情况。如果预计将长时间闲置,则滴答声仍会停止,因此不会发生任何变化。如果实际闲置时间长,我们赢了;如果闲置时间短,我们就输了。但是,如果可以预测会出现短暂的空闲,那么我们会更好:如果实际的空闲时间很短,那么我们就节省了停止和重新启动时钟的成本;如果实际的空闲时间很长,那么不停机的计时器将唤醒我们并提供我们又一次对预测樱桃大吃一惊。

由于博弈论不能替代现实世界的数据,因此Wysocki在许多系统上对此进行了测试。上图是所有测试系统的特性,并显示了空闲系统上功耗随时间的变化。绿线是旧的空闲循环,红线是新的空闲循环:新方案下的功耗更少,而且比以前更可预测。并非所有经过测试的CPU都在绿线和红线之间显示出较大的差距,但所有CPU都在颠簸的绿色线下方显示了一条平坦的红线。就像Wysocki所说的那样,这种新方案比以前的方案预测短闲置的频率要少,但是正确的是,它们经常更短。

Wysocki在回答观众的问题时说,这项工作与体系结构无关。英特尔CPU将特别受益,因为它们具有比较多的闲置状态数组,可以由州长选择,如果正确预测,则州长有最佳表现的机会。但是ARM CPU也将受益。

随着胜利的发展,空闲功耗的下降20%似乎很小,但事实并非如此。任何希望能够很好地应对峰值负载的系统在正常运行时都需要备用容量,这将表现为空闲时间。上图显示了我的邮件/会话/文件传输/ VPN / NTP /等上的CPU使用率。过去一年中的服务器;明亮的黄色是空闲时间。节省20%的电量确实会让我的托管服务提供商非常满意,这对地球也有好处。

0 人点赞