31.3. 配置内核空循环时间
默认情况下,Red Hat Enterprise Linux 8 使用无空循环内核,它不会中断空闲的 CPU 来降低功耗,并允许新处理器利用深度睡眠状态。
Red Hat Enterprise Linux 8 还提供了动态无空选项,这对于对延迟敏感型工作负载(如高性能计算或实时计算)非常有用。默认情况下禁用动态无空选项。红帽建议使用 cpu-partitioning
TuneD 配置集为指定为 isolated_cores
的内核启用动态无空选项。
这个步骤描述了如何永久启用动态无数性行为。
步骤
要在特定内核中启用动态无空行为,在内核命令行中使用
nohz_full
参数指定这些核心。在 16 核系统上,启用nohz_full=1-15
内核选项:grubby --update-kernel=ALL --args="nohz_full=1-15"
# grubby --update-kernel=ALL --args="nohz_full=1-15"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这启用了内核
1
到15
的动态无数性行为,将所有时间保留到唯一未指定的内核(内核0
)。当系统引导时,手动将
rcu
线程移到非延迟敏感的内核中,在本例中是 core0
:for i in `pgrep rcu[^c]` ; do taskset -pc 0 $i ; done
# for i in `pgrep rcu[^c]` ; do taskset -pc 0 $i ; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:在内核命令行中使用
isolcpus
参数,将特定内核与用户空间任务隔离开来。 可选:将内核的
write-back bdi-flush
线程的 CPU 关联性设置为 housekeeping 内核:echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
系统重启后,验证是否启用了
dynticks
:journalctl -xe | grep dynticks
# journalctl -xe | grep dynticks Mar 15 18:34:54 rhel-server kernel: NO_HZ: Full dynticks CPUs: 1-15.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证动态无空配置是否正常工作:
perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 sleep 3
# perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 sleep 3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令会在 CPU 1 上测量升级,同时告诉 CPU 1 休眠 3 秒。
默认内核计时器配置在常规 CPU 上显示大约 3100 勾号:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置动态无数内核后,您应该会看到大约 4 个空循环:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow