降低linux内核定时器频率

Dee*_*ght 16 linux timer linux-kernel

当我以Gentoo作为客户运行我的虚拟机时,我发现tick_periodic功能有相当大的开销.(这是在每个定时器中断上运行的函数.)此函数更新导致开销的全局jiffy使用write_seqlocks.

这是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
Run Code Online (Sandbox Code Playgroud)

显然它已将配置设置为1000,但是当我这样做时sysconf(_SC_CLK_TCK),我得到100作为我的计时器频率.那么我系统的定时器频率是多少?

我想要做的是将频率降低到100,如果可能的话甚至更低.虽然它可能影响poll/ select和调度程序时间片的交互性和精度,但我准备牺牲这些东西以减少定时器中断,因为它会加速VM.

当我试图找出必须完成的工作时,我在某个地方读到你可以通过更改配置文件来实现这一点,否则在那里我读到将bootider = 10添加到boot参数就完成了工作,否则我在那里读到了如果您可以设置CONFIG_HIGH_RES_TIMERS即使不增加定时器频率的触发低延迟定时器也不需要,并且使用无定时系统也是如此CONFIG_NO_HZ.

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

我想要的是将定时器中断降低到尽可能低的程度.

我能知道这样做的正确方法吗?

jle*_*ahy 19

别担心!你的困惑只不过是预料之中的.Linux计时器中断非常混乱,并且历史悠久且令人兴奋.

CLK_TCK

Linux没有sysconf系统调用,glibc只返回常量值100.抱歉.

HZ < - 你可能想要什么

配置内核时,您可以选择100Hz,250Hz,300Hz或1000Hz的定时器频率.所有这些都得到支持,虽然1000Hz是默认值,但它并不总是最好的.

人们通常会在评估延迟(桌面或网络服务器)时选择较高的值,而在评估吞吐量(HPC)时选择较低的值.

CONFIG_HIGH_RES_TIMERS

这与定时器中断无关,它只是一种允许您拥有更高分辨率定时器的机制.这基本上意味着对呼叫的超时select可能比1/HZ秒更准确.

分频器

此命令行选项是Red Hat提供的修补程序.您可以使用它(如果您使用的是Red Hat或CentOS),但我会小心.它导致了很多错误,您可能只需要使用不同的Hz值重新编译.

CONFIG_NO_HZ

这实际上并没有做太多,它是为了省电,这意味着当没有任何执行时,滴答将停止(或至少变得不那么频繁).这可能已在您的内核上启用.当至少一个任务可运行时,它没有任何区别.

Frederic Weisbecker实际上有一个待处理的补丁,它将这种情况概括为仅运行一个任务的情况,但还有一段距离.

  • 本书的第10章(http://www.makelinux.net/books/lkd2/)有一些很好的信息,但除此之外你真的需要查看源代码.评论很好.LXR是你的朋友(http://lxr.linux.no/linux).`do_timer`是你可能感兴趣的功能. (3认同)