2011-06-30 121 views
3

我需要在kernl-space和user-space之間交換一個struct timeval(通過netlink消息),以便計算消息創建和用戶空間中的細化。 我在內核空間中使用函數jiffies_to_timeval;在用戶空間我呼籲gettimeofday ...但如果我打印兩個結構的秒數我獲得了200秒的差異...我無法弄清楚這個原因。內核空間和用戶空間的時間差

任何想法?

謝謝大家!

+0

我找到了一個解決方案...而不是函數'jiffies_to_timeval'我用'do_gettimeofday'現在所有的作品...所以,這兩個函數有什麼區別? – MirkoBanchi

回答

5

還有several clocks inside of Linux。差異歸結爲它們是否在機器暫停時打勾,是否嘗試追蹤「掛鐘時間」以及它們的分辨率如何。

do_gettimeofday可能不是你想要使用的,因爲那個時鐘試圖跟蹤「掛鐘時間」;也就是說,它實際上可以向前或向後跳轉。如果某人或某事(如NTP)決定在兩次閱讀之間設置系統時鐘,該怎麼辦?

對於計時,我建議使用POSIX clock_gettime函數和CLOCK_MONOTONIC時鐘ID。 (您可能必須與-lrt編譯你的用戶空間應用程序,雖然)。

我相信clock_gettime也存在一個內核函數,雖然我沒有我的內核源代碼的時刻派上用場......

+0

感謝Nemo的回覆!你是對的,但似乎沒有clock_gettime作爲內核函數:(也許有類似的功能? – MirkoBanchi

+1

找到了一些在線內核源代碼,看起來像這些活在'posix_timers.c'中。在內核中嘗試'do_posix_clock_monotonic_gettime'(並且讓我知道它是否可以工作,以便我可以更新我的答案...) – Nemo

+0

是的,它的工作原理非常完美......我在內核空間的用戶空間交互約100〜 200微秒,非常感謝Nemo! – MirkoBanchi

相關問題