前幾天嘗試修改了Linux kernel把實時線程收到timer interrupt頻率降低成了一天一次(Linux如何對一個核完全屏蔽timer interrupt?),在測試觀察階段我重點關注了獲取系統時間戳的性能,發現clock_gettime延時比預期的高。

後來發現這個問題和改內核無關,是個Linux上普遍存在的問題:我在不同硬體配置和系統設置Linux伺服器或PC上做了測試,發現clock_gettime延時經常高於100 ns,且十分不穩定(範圍在20 ~ 1000 ns)。這對於需要記錄時間戳的實時系統或一個用時間戳做性能測試的普通程序來說都不是一個好消息。

然後,我簡單看了下Linux timekeeping和clock_gettime VDSO的實現,覺得在user space實現同樣精確且和系統嚴格對時的納秒級時間戳是可行的。於是嘗試實現了下,發現效果符合預期:獲取納秒時間戳的延時可以穩定在10 ns左右(所有工作在8條連續的CPU指令內完成,且沒有函數調用)。項目鏈接:github.com/MengRao/tscn,具體細節可以看README,歡迎大家試用並提出反饋。

最後插一句題外話,我為什麼有空搞這些亂七八糟的東西?因為單身狗就是有時間吶。。。求妹子,坐標上海。。。

推薦閱讀:

相關文章