内核配置建议:
一、配置NO_HZ子系统:
内核有以下几种HZ配置供选择:
CONFIG_HZ_PERIODIC ##周期性tick
CONFIG_NO_HZ_IDLE ##在系统idle状态下,禁止tick
CONFIG_NO_HZ_FULL ##在系统idle或只有一个任务在运行的状态下,禁止tick
默认状态下,内核的时钟tick配置为CONFIG_NO_HZ_IDLE,也就是在idle的情况下关掉时钟中断。
开启CONFIG_NO_HZ_FULL以支持全动态时钟系统,可以让单个实时任务性能更高,干扰越小。
另外NO_HZ_FULL需要和命令行参数配合使用,需要在kernel cmdline中指定要启动的CPU。
如,在一个16核CPU的系统上,通过cmdline指定nohz_full=1-15,表示所有核(除0核)使能全动态时钟tick。
当系统启动后,手动迁移一些对延迟不铭感的rcu后台线程:
# for i in `pgrep rcu[^c]` ; do taskset -pc 0 $i ; done
验证系统已经使能了NO_HZ_FULL系统:(也可以使用一个死循环脚本:while :; do d=1; )
perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 stress -t 1 -c 1