Linux 時鍾與計時器


對 Linux 系統來說,時鍾和計時器是兩個十分重要的概念。時鍾反應的是絕對時間,也可認為是實時時間。計時器反應的則是相對時間,即相對於系統啟動后的計時。操作系統內核需要管理運行時間(uptime)和牆上時間(wall time),而內核中大量事務需要由時間驅動。

系統時鍾

系統內核需要借助硬件設施來管理時間,實時時鍾(RTC)是用來持久存放系統時間的設備,它由主機電池供電,因此即使關閉系統,實時時鍾仍然在持續工作。

當系統啟動時,系統內核從實時時鍾(RTC)讀取實時時間,並將該時間轉換為自 1970 年 1 月 1 日零時零分零秒以來所經歷的秒數(即 Linux 時間秒),並將該秒數保存在系統變量 xtime 中。可以說實時時鍾的主要作用就是初始化 xtime 變量。

系統計時器

系統計時器驅動着周期性發生的事件,在 X86 架構的系統中,系統計時器通常是一種可編程硬件芯片。系統計時器的頻率稱之為節拍率(tick rate),在內核中使用 HZ 變量來表示節拍率。

對 X86 架構系統而言,內核版本 2.4 之前,系統計時器的節拍率為 100。自內核版本 2.6 開始,系統計時器節拍率設置為 1000。節拍率 HZ = 1000 的含義是系統計時器每秒鍾可產生 1000 次中斷請求,每一個計時中斷周期稱之為一個節拍(tick),也就是說每個節拍時長為 1 秒 / 1000次 = 0.001 秒 = 1 毫秒。節拍的時長決定着系統時間控制的精度,當節拍率從 100 提升到 1000 時,也就意味着系統計時器的精度從 10 毫秒提升到了 1 毫秒,這大大提高了系統對時間驅動事件調度的精度。而過於頻繁的時鍾中斷會不可避免地增加系統計時開銷。

系統計時器及其計時中斷處理程序是 Linux 內核管理機制的中樞,計時中斷處理程序會定期地處理以下事務(包含而不限於):

  1. 更新系統運行時間(uptime)
  2. 更新牆上時間(wall time)
  3. 在對稱多處理器系統(SMP)上,均衡調度各處理器上的運行隊列
  4. 檢查當前進程時間片(time slice)是否耗盡,如果耗盡,則重新調度
  5. 運行超時的動態定時器
  6. 更新資源耗盡和處理器時間的計算

節拍、節拍率、節拍數

運行時的 Linux 內核會周期性地發出計時中斷請求(IRQ),每秒鍾發出的計時中斷請求數稱之為節拍率,每次計時中斷周期稱之為節拍,實際計時中斷次數稱之為節拍數。

Linux 內核的節拍率在編譯時通過變量 HZ 來指定,一般設置為 100 或 1000,表示每秒中斷 100 次或 1000 次。如果節拍率設置為 1000,那么一個節拍周期則為 1 秒 / 1000 次 = 1 毫秒。Linux 系統使用變量 jiffies 來記錄系統開機以來經歷的節拍數,即從系統啟動開始,每發生一次計時中斷,jiffies 則加 1。通過計算 jiffies 所表示的節拍數,便可得到系統的運行時間。

節拍數轉換為時間

時間(秒) = 節拍數 × 節拍時長 = 節拍數 / 節拍率

時間轉換為節拍數

節拍數 = 時間(秒) / 節拍時長 = 時間(秒) × 節拍率

因此若已知系統內核 HZ = 1000,jiffies = 1000 時,便可以快速算出系統的運行時間為 jiffies / HZ = 1000 / 1000 = 1 秒

術語

名詞 釋義 備注
Real Time Clock (RTC) 實時時鍾
Wall Time 牆上時鍾 即當前實時時間
Uptime 運行時間
Time Slice 時間片
Timer 計時器
Timer Interrupt Request (IRQ) 計時中斷請求
HZ 每秒計時中斷請求次數,也可稱為節拍率(tick rate) HZ 值一般為 100, 250, 300 或 1000。最常見的為 1000 和 100。
Tick 節拍 Tick 與 HZ 互為倒數,表示單次計時中斷的時長。
Jiffies 節拍數 表示系統開機以來的節拍數,即經歷的 Tick 數量。
Second (s)
Millisecond (ms) 毫秒 1s = 1000ms
Microsecond (us) 微秒 1ms = 1000us
Nanosecond (ns) 納秒 1us = 1000ns
Picosecond (ps) 皮秒 1ns = 1000ps

Ref.:

Linux 內核中的 jiffies 及其作用介紹及 jiffies 等相關函數詳解
Linux Kernel - Jiffies
Kernel Timer Systems


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM