2013-02-17 88 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