当我使用 Gentoo 作为访客运行我的虚拟机时,我发现有相当大的开销来自tick_periodic
函数。(这是在每个定时器中断时运行的函数。)该函数更新全局jiffy
使用write_seqlocks
,这会导致开销。
这是我的内核配置文件中的 grepHZ
和相关内容。
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(_SC_CLK_TCK)
,我得到 100 作为我的计时器频率。那么我的系统的定时器频率是多少?
我想要做的是将频率降低到 100,如果可能的话甚至更低。虽然它可能会影响poll
/select
和调度程序时间片的交互性和精度,但我准备牺牲这些东西来减少定时器中断,因为它会加速 VM。
当我试图找出必须做的事情时,我在某个地方读到了你可以通过更改配置文件来做到这一点,否则我读到在引导参数中添加 divider=10 就可以了,在其他地方我读到了如果即使不增加定时器频率也可以设置为CONFIG_HIGH_RES_TIMERS
实现低延迟定时器,则不需要任何东西,并且在无滴答系统中也可以做到这一点CONFIG_NO_HZ
。
我对什么是正确的方法感到非常困惑。
我想要的只是将定时器中断降到尽可能低。
我能知道这样做的正确方法吗?