Improving idle behavior in tickless systems
December 28, 2018, This article was contributed by Marta Rybczyńska
CPU处理器在实际执行代码的时候,很多时间其实是没有什么事情要做的,会在等待device和timer的中断。此时可以切换到idle mode,关掉内部大部分电路,停掉不再用的clock。进入这种低功耗状态,有助于减缓电池消耗。一般处理器都设计了多种idle mode,更深的idle mode,也就能消耗更少的功耗,不过也带来了一些缺点,就是进出更深的idle mode的时候耗费更多,例如会需要更多时间来进出idle mode,更深的idle mode也有可能会不得不把所有cache内容都清空抛弃掉。Linux kernel里面的cpuidle子系统就一直掌管这部分决策,选择进入哪个idle mode。最近Rafael Wysocki提议了一组新的governor来在tickless的系统上使用,预计会比当前的menu governor更加精确。
Cpuidle governors
人们很难预测下一个event什么时候发生,顶多能做的就是根据过去的历史记录来猜测一下。如果系统行为发生改变,这些猜测就很可能出错。有些设备会产生固定周期的中断,比较好预测。cpuidle governor通过测量这些周期间隔,从而预测下一次device中断会在什么时候。此外,系统调度模块以前一直有一个固定周期的时钟中断,曾经一直是按照100或者1000HZ的频率来上报中断给kernel。不过几年前开始tickless kernel大行其道,系统时钟中断通常会大大推后,系统也就有更长的时间没有中断,从而进入更深的idle stat