定时器机制调整,减少不必要的时钟中断
原理
在Linux内核2.6.17版本之前,Linux内核为每个CPU设置一个周期性的时钟中断,Linux内核利用这个中断处理一些定时任务,如线程调度等。这样导致就算CPU不需要定时器的时候,也会有很多时钟中断,导致资源的浪费。Linux内核2.6.17版本引入了nohz机制,实际就是让时钟中断的时间可编程,减少不必要的时钟中断。
修改方式
执行cat /proc/cmdline查看Linux内核的启动参数,如果有nohz=off关键字,说明nohz机制被关闭,需要打开。修改方法如下:
修改前后,可以通过如下命令观察timer_tick的调度次数,其中$PID为要观察的进程ID,可以选择CPU占用高的进程进行观察:
perf sched record -- sleep 1 -p $PID perf sched latency -s max
输出信息中有如下信息,其中591字段表示统计时间内的调度次数,数字变小说明修改生效。
timer_tick:(97) | 7.364 ms | 591 | avg: 0.012 ms | max: 1.268 ms
- 在“/boot”目录下通过find -name grub.cfg找到启动参数的配置文件。
- 在配置文件中将nohz=off去掉。
- 重启服务器。
父主题: 优化方法