在systemd服务文件中,可以设置以下与调度有关的选项(在systemd.exec
手册页中,如果我输入错了,请纠正我):
尼斯 为执行的进程设置默认的尼斯级别(调度优先级)。取介于-20(最高优先级)和19(最低优先级)之间的整数。有关详细信息,请参见setpriority(2)。
这是熟悉的不错的水平。由于最近的Linux内核具有“自动分组”功能,因此其效果似乎已“被颠覆”。因此,以下选项可能是我真正想要设置的选项,以使进程保持良好的桌面体验。
CPUSchedulingPolicy 设置已执行进程的CPU调度策略。采用其他,批处理,空闲,fifo或rr中的一种。有关详细信息,请参见sched_setscheduler(2)。
CPUSchedulingPriority 设置已执行进程的CPU调度优先级。可用优先级范围取决于所选的CPU调度策略(请参见上文)。对于实时调度策略,可以使用1(最低优先级)和99(最高优先级)之间的整数。有关详细信息,请参见sched_setscheduler(2)。
CPUSchedulingResetOnFork 采用布尔参数。如果为true,则将在执行的进程派生时重置提升的CPU调度优先级和策略,因此不会泄漏到子进程中。有关详细信息,请参见sched_setscheduler(2)。默认为false。
我了解最后的选择。从前两个方面的解释中可以得出,我可以选择一个调度策略,然后根据该策略确定优先级。对我来说,尚不清楚我应该为哪种任务选择什么。例如,为备份任务选择“空闲”是否安全(因为要进行重复数据删除,因此占用大量CPU,还是比较安全)?
总的来说,我想要的是对每个策略都有一个易于理解的概述,以及每个策略的优先级和针对特定目的的适用性。同样,与尼斯水平的相互作用也是令人感兴趣的。
除了CPU调度,还有IO调度。我猜这对应于ionice
(如果我错了,请纠正我)。
IOSchedulingClass 设置已执行进程的I / O调度类。取0到3之间的整数,或者取值为none,实时,最大努力或空闲字符串之一。有关详细信息,请参见ioprio_set(2)。
IOSchedulingPriority 设置已执行进程的I / O调度优先级。取0(最高优先级)到7(最低优先级)之间的整数。可用优先级取决于所选的I / O调度类(请参见上文)。有关详细信息,请参见ioprio_set(2)。
我们在这里看到的结构与CPU调度相同。我也在寻找相同的信息。
对于所有的“计划”选项,所指的手册页对我来说还不够清楚,主要是在将内容翻译成某种程度上具有技术倾向的台式机用户的观点。
nice
值)。