Linux - profiling 1 : ktime_get()

收錄於關於 Ameba 的 100 篇


Ref: Timers and Time Management in the Linux Kernel
Ref: Linux Document - Timekeeping


time(): 從 1970 年以來的秒數

xtime :
  - 即是 wall time, 起始時間 1970/1/1 24時開始
  - clocksource
  - do_gettimeofday(): 獲取當前時間, 返回 timeval 結構,  精準度到 us

timeval 結構

struct timeval {
16  __kernel_time_t tv_sec; /* seconds */
17  __kernel_suseconds_t tv_usec; /* microseconds */
18 };
19 

  - getnstimeofday() : 獲取當前時間, 返回 timespec 結構, 精準度到 ns


timespec 結構

struct timespec {
10  __kernel_time_t tv_sec; /* seconds */
11  long tv_nsec; /* nanoseconds */
12 };


  - current_kernel_time(): 返回 kernel 最後一次更新 xtime 的時間, 不包括最後一次 clocksource
    計數

--
monotonic time :
   - 從系統開機到現在的累計時間
   - 不計算休眠時間, 但會受 NTP 調整影響
   - ktime_get_ts() : 返回 timespec 結構
   - ktime_get() : 返回 ktime 結構

ktime_t : s64


--
raw monotonic
   - 和 monotonic time 類似, 但不受 NTP 調整影響


時間種類精度(統計單位)訪問速度累計休眠時間受NTP 調整影響使用函式
xtimeYesYesdo_gettimeofday(), ktime_get_real_ts(), ktime_get_real()
monotonicNoYesktime_get(), ktime_get_ts64()
raw monotonicNoNoktime_get_raw(), getrawmonotonic64()
boot timeYesYesktime_get_boottime()


範例:



完整程式: Github

執行結果:
module init start
module init end
ktime test for profiling
2^10 = 0, spend time: 93508, iterations: 10000

但這每次執行誤差還蠻大的. 後續.


 


留言

熱門文章