Linux 可以在不同的 CPU 核心上同时执行线程,也可以在可运行线程数超过单个核心承载能力时,让这些线程分时使用该核心。调度器会根据调度策略、优先级、CPU 亲和性和工作负载作出选择。对于普通的分时调度策略,Nice 值是其中一项输入。
进程 · 第 8 课
进程的 Nice 值
了解 Nice 值如何影响普通 Linux 进程的 CPU 调度权重。
理解 Nice 值
传统的 Nice 值范围是 -20 到 19:
- 数值越低,任务相对于同类任务拥有的调度权重越大。
- 数值越高,任务越“友好”,获得的相对权重也越小。
- 默认值通常是
0。
Nice 值不会预留一定比例的 CPU,也不保证任务立即执行。当多个相近的可运行任务争用 CPU 时间时,它的作用最明显。实时调度策略、cgroup、CPU 亲和性、I/O 等待以及其他控制机制都可能对实际表现产生更大的影响。
在相同的普通调度策略下,哪个 Nice 值会获得更大的相对 CPU 权重?
查看 Nice 值
在 top 中,NI 列显示 Nice 值。也可以用 ps 明确请求该字段:
$ ps -o pid,ni,pri,stat,cmd -p 3245
NI 是用户可见的 Nice 值。PRI 或类似的列可能是由调度器派生出的优先级,而且其取值尺度会随工具和调度类别而变化,因此不要假定这两列可以互换。
top 中通常由哪一列显示 Nice 值?
使用 `nice` 启动命令
使用 nice 可以按调整后的 Nice 值启动新命令:
$ nice -n 5 long-computation
具体能够请求的调整幅度以及所接受的语法,应查看本机手册。非特权用户通常可以增大 Nice 值,让命令变得更加“友好”。如果要降低 Nice 值,从而获得更有利的调度权重,则需要相应权限或已配置的资源限制。
nice -n 5 long-computation 会执行什么操作?
使用 `renice` 更改现有进程
对于已经运行的进程,应使用 renice:
$ renice -n 10 -p 3245
这条命令请求把 PID 3245 的 Nice 值设为 10。由于 PID 可以被重复使用,应先核实目标,再确认最终生效的值。所需权限取决于进程所有权、特权、资源限制和系统策略。通常可以增大自己所拥有进程的 Nice 值;若想撤销这一更改,没有相应权限时可能无法做到。
哪个工具用于更改现有进程的 Nice 值?
管理和监控 Linux 进程实验提供了查看和修改 Nice 值的受控环境。应比较相互争用 CPU 的计算密集型任务,而不要期待在系统空闲时看到明显差异。
课程已完成
你已完成 进程的 Nice 值
现在,你可以理解和调整进程的 Nice 值,而不会把它误认为 CPU 使用保证。
Nice 值越低,表示相对调度权重越大。
应将
NI与派生的优先级字段分开理解。启动命令时使用
nice。对已经存在且核实过的进程使用
renice。