---
title: 定时器机制调整，减少不必要的时钟中断
description: "在Linux内核2.6.17版本之前，Linux内核为每个CPU设置一个周期性的时钟中断，Linux内核利用这个中断处理一些定时任务，如线程调度等。这样导致就算CPU不需要定时器的时候，也会有很多时钟中断，导致资源的浪费。Linux内核2.6.17版本引入了nohz机制，实际就是让时钟中断的时间可编程，减少不必要的时钟中断。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/tuningtip/kunpengtuning_12_0012.html
sourcePath: /source/zh/perftuning/tuningtip/kunpengtuning_12_0012.html
indexId: 10bffb4dbca76d4ed4107e4cbad413a38d8b9d9ad027df631ac93d943b199b5958
---
# 定时器机制调整，减少不必要的时钟中断

#### 原理

在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
```


1. 在“/boot”目录下通过find -name grub.cfg找到启动参数的配置文件。
2. 在配置文件中将nohz=off去掉。
3. 重启服务器。
