2013-02-17 86 views
14

当我以Gentoo身份运行我的虚拟机作为guest时,发现tick_periodic函数有相当大的开销。 (这是在每个定时器中断上运行的函数)。该函数使用write_seqlocks来更新全局的jiffy,这会导致开销。降低linux内核定时器频率

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

[email protected]:~$ 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和调度程序时间片的交互性和精确性,但我已经准备好为较小的定时器中断牺牲这些功能,因为它会加快虚拟机的速度。

当我试图找出必须完成的工作时,我可以在某处通过更改配置文件来读取,否则在读取时添加divider = 10到启动参数执行作业,否则在那里我读到,如果您可以将CONFIG_HIGH_RES_TIMERS设置为低延迟定时器,即使不增加定时器频率,也不需要任何设置,对于无打盹系统CONFIG_NO_HZ也是如此。

我非常困惑什么是正确的方法。

我想要的只是把定时器中断降到尽可能低。

我可以知道正确的做法吗?

回答

15

别担心!你的困惑只不过是预期的。 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实际上有一个补丁待定,它将这种情况概括为只有一个任务正在运行的情况,但还有一段路要走。

+1

如果我执行了2次cat/proc/interrupts,我看到在第一次和第二次调用之间增加了本地计时器中断。但是标记为'IO-APIC-edge timer'的那个在两次调用之间保持不变。每个CPU上运行的本地定时器中断都负责增加全局定时器变量jiffies,它基本上记录了自引导时间以来的滴答数量。另外'IRQ 0'对应于'cat/proc/interrupts'第一行中的定时器中断...所以我想我有一个'tickless system'顺便说一下非常清楚的解释...谢谢 – Deepthought 2013-02-19 00:10:36

+0

不要担心I/O APIC,本地定时器中断实际上来自本地APIC,这是完全不同的事情。你看到的IRQ 0是I/O APIC定时器,它可能未被使用(除了在启动时)。然而,你说的是本地计时器中断递增jiffies是正确的。 – jleahy 2013-02-19 11:07:45

+0

嘿,我读了这本书中称为专业Linux内核架构的abt计时器,并从理解linux内核了解了一点,但我清楚地不理解这个过程呢...我必须尝试修改以高效的方式更新jiffies的代码......你能否推荐一个好的资源,我不仅可以理解理论,而且可以理解内核中执行工作的代码....谢谢 – Deepthought 2013-02-19 11:49:09