降低linux内核计时器频率

降低linux内核计时器频率,linux,timer,linux-kernel,Linux,Timer,Linux Kernel,当我以Gentoo作为来宾运行虚拟机时,我发现tick\u periodic函数带来了相当大的开销。(这是在每次定时器中断时运行的函数。)此函数使用导致开销的write_seqlocks更新全局jiffy 这里是我的内核配置文件中的HZ和相关内容的grep sharan013@sitmac4:~$ cat /boot/config | egrep 'HZ|TIME' # CONFIG_RCU_FAST_NO_HZ is not set CONFIG_NO_HZ=y # CONFIG_HZ_10

当我以Gentoo作为来宾运行虚拟机时,我发现
tick\u periodic
函数带来了相当大的开销。(这是在每次定时器中断时运行的函数。)此函数使用导致开销的
write_seqlocks
更新全局
jiffy

这里是我的内核配置文件中的
HZ
和相关内容的grep

sharan013@sitmac4:~$ cat /boot/config | egrep 'HZ|TIME'

# CONFIG_RCU_FAST_NO_HZ is not set
CONFIG_NO_HZ=y
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
# CONFIG_MACHZ_WDT is not set
CONFIG_TIMERFD=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_X86_CYCLONE_TIMER=y
CONFIG_HPET_TIMER=y
显然,它已将配置设置为1000,但当我执行sysconf(\u SC\u CLK\u TCK)时,我的计时器频率为100。那么,我的系统的定时器频率是多少

我想做的是把频率降到100,如果可能的话甚至更低。虽然它可能会影响
轮询
/
选择
和调度程序时间片的交互性和精度,但我准备牺牲这些东西来减少计时器中断,因为它将加快VM的速度

当我试图找出必须做什么时,我在某个地方读到,你可以通过在配置文件中更改来完成,否则我读到,将divider=10添加到boot参数中可以完成这项工作,如果您可以将
CONFIG\u HIGH\u RES\u TIMERS
设置为实现低延迟定时器,即使不增加定时器频率,也不需要这些功能,并且在无时钟系统
CONFIG\u NO\u HZ
中也可以实现这一点

我对什么是正确的方法感到非常困惑

我所要做的就是将计时器中断降低到尽可能低的水平


我能知道正确的方法吗?

别担心!你的困惑是意料之中的。Linux定时器中断非常混乱,有着漫长而令人兴奋的历史

CLK\u TCK

Linux没有
sysconf
系统调用,glibc只是返回常量值100。对不起


HZ如果我执行
cat/proc/interrupts
2次,我会看到
本地计时器中断在第一次和第二次调用之间增加。但是标记为
IO APIC edge timer
的在两次调用之间保持不变。因此,每个CPU上运行的
本地计时器中断
是否负责递增全局计时器变量
jiffies
,该变量基本上记录自启动以来的节拍数??另外,
IRQ 0
对应于
cat/proc/interrupts
第1行中的计时器中断。。。所以我想我有一个无滴答声的系统,顺便说一句,解释得很清楚。。。谢谢不要担心I/O APIC,本地定时器中断实际上来自本地APIC,这是完全不同的事情。您所看到的IRQ 0是I/O APIC计时器,它可能未使用(启动期间除外)。你说本地计时器中断增量jiffies是正确的,但是。嘿,我读了《专业linux内核架构》一书中的abt timer,还有一点了解linux内核,但我显然还不了解这个过程。。。我必须尝试修改代码,以有效的方式更新jiffies。。。你能推荐一个好的源代码吗?我不仅能理解理论,还能理解内核中的代码。。。。感谢这本书的第10章()提供了一些很好的信息,但除此之外,你真的只需要看看源代码。评论很好。LXR是您的朋友()
do_timer
是您可能感兴趣的函数。“Linux没有sysconf系统调用”。。。不清楚。例如,您可以执行“getconf CLK_TCK”