關於Linux的Jiffies/Tick/HZ
Linux核心幾個重要跟時間有關的幾個名詞: HZ、tick、jiffies。
1.linux HZ
Linux核心每隔固定周期會發出timer interrupt (IRQ 0),HZ是用來定義每一秒有幾次timer interrupts。舉例來
說,HZ為1000,代表每秒有1000次timer interrupts,比較常見的設置是HZ=100。
可以通過 cat /proc/interrupt 查看timer中斷次數,並於一秒後再次觀察其值,通過前後差值可以估算HZ的值。
要檢查內核源碼中HZ的值是什麼,可以執行命令:
#cat kernel/.config | grep 'CONFIG_HZ='
還可以直接更改文件param.h
2.Tick
Tick是HZ的倒數,意即timer interrupt每發生一次中斷的時間。如HZ為250時,tick為4毫秒(millisecond)。
3.Jiffies
Jiffies為Linux核心變數(32位元變數,unsigned long),它被用來紀錄系統自開機以來,已經過多少的tick。每發生一次timer interrupt,Jiffies變數會被加一。在ARM體系結構中,jiffies被初始化為jiffies_64,而jiffies_64是一個u64位元變數,在kernel/timer.c中定義:
u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;
即jiffies在系統開機時,並非初始化成零,而是被設為INITAL_JIFFIES(在文件include/linux/jiffies.h中定義為-300*HZ),即代表系統於開機五分鐘後,jiffies便會溢位。那溢位怎麼辦?事實上,Linux核心定義幾個macro(timer_after、time_after_eq、time_before與time_before_eq),即便是溢位,也能藉由這幾個macro正確地取得jiffies的內容。