linux的HZ, Tick, Jiffies

來源:互聯網
上載者:User

     Linux核心幾個重要跟時間有關的名詞或變數,底下將介紹HZ、tick與jiffies。

(1)HZ

      Linux核心每隔固定周期會發出timer interrupt (IRQ 0),HZ是用來定義每一秒有幾次timer interrupts。舉例來說,HZ為1000,代表每秒有1000次timer interrupts。 HZ可在編譯核心時設定,具體查詢設定方法可參見上篇文章《linux運行多久了》。其中HZ可設定100、250、300或1000。以核心版本預設值為250,做實驗:
       觀察/proc/interrupt的timer中斷次數,並於一秒後再次觀察其值。理論上,兩者應該相差250左右。

adrian@adrian-desktop:~$ cat /proc/interrupts|grep timer && sleep 1 && cat /proc/interrupts|grep timer
     0: 9309306 IO-APIC-edge timer
     0: 9309562 IO-APIC-edge timer
補充結果:以上結果是單CPU上運行,在我自己的雙核電腦上並沒有得到預計結果,懷疑是否適合雙核電腦實驗。

(2)Tick

      Tick是HZ的倒數,意即timer interrupt每發生一次中斷的時間。如HZ為250時,tick為4毫秒(millisecond)。

(3)全域變數xtime

      xtime是timeval資料結構變數,首先看timeval結構
struct timeval
{
      time_t tv_sec; /***second***/
      susecond_t tv_usec;/***microsecond***/
}

1秒=1000毫秒(3個零),1秒=1000 000微秒(6個零),1秒=1000 000 000納秒(9個零),1秒=1000 000 000 000皮秒(12個零)。秒用s表現,毫秒用ms,微秒用us表示,納秒用ns表示,皮秒用ps表示,他們的分級單位是千,即每次3個零。所以microsecond是表示us。
      xtime是從cmos電路中取得的時間,一般是從某一曆史時刻開始到現在的時間,也就是為了取得我們作業系統上顯示的日期。這個就是所謂的“系統時鐘”,它的精確度是微秒。
(4)Jiffies

      在<linux/jiffies.h>,定義了Jiffies為Linux核心變數(32位元變數,unsigned long),它被用來紀錄系統自開機以來,已經過多少的tick,在linux核心中jiffies遠比xtime重要。每發生一次timer interrupt,Jiffies變數會被加一。jiffies 與絕對時間之間的轉換,用兩個宏來完成兩種時間單位的互換:JIFFIES_TO_NS()、NS_TO_JIFFIES()。

      硬體給核心提供一個系統定時器用以計算和行政時間,值得注意的是,Jiffies於系統開機時,並非初始化成零,而是被設為-300*HZ (kernel/time.c),即代表系統於開機五分鐘後,jiffies便會溢位。那溢位怎麼辦?事實上,Linux核心定義幾個macro(timer_after(unknown, known)、time_after_eq(unknown, known)、time_before(unknown, known)與time_before_eq(unknown, known)),即便是溢位,也能藉由這幾個macro正確地取得jiffies的內容。

      可以利用jiffies設定逾時等,譬如:

unsigned long timeout = jiffies + tick_rate * 2; // 2秒鐘後逾時,比如tick_rate=250,經過500次的tick中斷,2S就過了

if(time_before(jiffies, timeout)

{
       // 還沒有逾時

}
else

{
       // 已經逾時

}

      另外,80x86架構定義一個與jiffies相關的變數jiffies_64 ,此變數64位元,要等到此變數溢位可能要好幾百萬年。因此要等到溢位這刻發生應該很難吧。那如何經由jiffies_64取得jiffies資訊呢?事實上,jiffies被對應至jiffies_64最低的32位元。因此,經由jiffies_64可以完全不理會溢位的問題便能取得jiffies。

(5)除了系統定時器jiffies外,還有一個與時間有關的時鐘:系統時鐘(RTC),這是一個硬體時鐘,用來持久存放系統時間,系統關閉後靠主板上的微型電池保持計時。系統啟動時,核心通過讀取RTC來初始化Wall Time,並存放在xtime變數中,這是RTC最主要的作用。

 

參考原文:http://blog.csdn.net/bdc995/archive/2009/05/03/4144031.aspx

參考原文:http://blog.csdn.net/linweig/archive/2010/03/04/5341231.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.