如何更改Linux(linaro,ubuntu,debian)上下文切换频率?
我可以权衡使用响应速度较慢的系统来获得更高效的系统。
EDIT1:我有一个主要进程,我想尽可能快地运行(每秒最大时钟周期),因此我想降低上下文切换频率(=增加时间片)。问题是如何做到这一点,并且会产生重大影响。我可以计算上下文切换的成本吗?意思是,我可以估计是否将时间片增加两倍,对于我关心的主要流程,我的性能提升将是多少?
如何更改Linux(linaro,ubuntu,debian)上下文切换频率?
我可以权衡使用响应速度较慢的系统来获得更高效的系统。
EDIT1:我有一个主要进程,我想尽可能快地运行(每秒最大时钟周期),因此我想降低上下文切换频率(=增加时间片)。问题是如何做到这一点,并且会产生重大影响。我可以计算上下文切换的成本吗?意思是,我可以估计是否将时间片增加两倍,对于我关心的主要流程,我的性能提升将是多少?
Answers:
如果您的任务是在特定CPU上请求时间的唯一进程,则在任务:-)之间将没有上下文切换。但是,CPU仍可能会被中断,从而导致上下文切换到内核并返回。一个可能的原因是抢占计时器,检查该CPU是否还有其他任务要运行...
Linux的可避免产生对CPU的任何占先定时器中断时不会有任何理由这样做。请参阅CONFIG_NO_HZ_FULL
。要使用此功能,必须在构建内核时将其启用,并且必须使用引导选项将其启用。
默认情况下,没有CPU将是自适应滴答CPU。“ nohz_full =“引导参数指定了自适应行情CPU。例如,“ nohz_full = 1,6-8”表示CPU 1、6、7和8是自适应行情CPU。请注意,禁止将所有CPU标记为自适应刻度CPU [...]
LWN.net说:“根据Ingo Molnar的说法,自适应标记CPU将节省多达1%的CPU时间。” 内核文档说这有六种不同的成本,并且还有“已知问题”列表。
此收益相对较小,特别是与减少多个任务之间的上下文切换频率的潜在吞吐量收益相比,如本答案所述:如何更改Linux CPU调度程序使用的时间片长度?
缩略语:这些测量值早于Spectre,Meltdown,KPTI和x86 ASID支持之前:-(。而且我想它们也适用于较旧的硬件。请咨询内核专家或运行您自己的测量值,了解上下文切换的成本如何更改了您特定的内核版本和硬件... ASID可以缓解PTI,除了非常频繁地调用内核的软件外,主要的例子是数据库。但是我对数字并不太了解。
Molnar对原始RFC补丁的希望是,随着时间的流逝,“大多数Linux发行版可能会启用它”。我注意到Fedora 28提供了带有NO_HZ_FULL
支持的默认内核。但是,Debian 9没有。
最近,Linux v4.17 从nohz_full
CPU 去除了剩余的1 Hz计时器滴答。我认为对吞吐量的影响很小:-),但是NO_HZ_FULL
当CPU上有多个可运行的进程时,我一直在尝试遵循收益的状态-
一旦达到0 Hz,我们也可以[n]从nr_running> = 2中删除周期性的滴答假设,本质上仅按照sched_latency约束要求我们执行的频率中断繁忙的任务-每4到40毫秒一次,具体取决于nr_running 。
这有点令人困惑,因为抢占已经在v2.6.25-rc1中使用单独的更精确的滴答开始,提交8f4d37ec073c,“ sched:high-res preemption tick”。通过同一LWN.net文章上的此评论找到:https : //lwn.net/Articles/549754/)。