Linux中是否有一個時鐘精度達到納秒級,嚴格通過電源週期增加和維護?我試圖將時間序列數據存儲在數據庫中,其中每行都有唯一的時間戳記。我是否需要使用外部時間源(如GPS接收器)來執行此操作?我希望時間戳可以轉換成GPS時間。Linux中的唯一時間戳
這不是How to create a high resolution timer in Linux to measure program performance?的副本。我試圖存儲絕對時間,而不是計算相對時間差。時鐘必須堅持一個電源週期。
Linux中是否有一個時鐘精度達到納秒級,嚴格通過電源週期增加和維護?我試圖將時間序列數據存儲在數據庫中,其中每行都有唯一的時間戳記。我是否需要使用外部時間源(如GPS接收器)來執行此操作?我希望時間戳可以轉換成GPS時間。Linux中的唯一時間戳
這不是How to create a high resolution timer in Linux to measure program performance?的副本。我試圖存儲絕對時間,而不是計算相對時間差。時鐘必須堅持一個電源週期。
大多數計算機現在有軟件,使用互聯網定期校正系統時間。這意味着系統時鐘每隔幾毫秒可以上升或下降幾毫秒。請記住,電腦時鐘有一些漂移。如果您不想要閏秒問題,請使用恆星時間(不需要閏秒修正)。由於互聯網上延遲的差異,ntp將在微秒或毫秒範圍內關閉。那些能夠滿足你要求的時鐘是五萬美元以上。
我需要特殊的硬件才能獲得恆星時間嗎? – Patrick
看看http://tycho.usno.navy.mil。它解釋了許多這些問題。基本上,您正在查看不包含閏秒的GPS時間。 (這是美國官方計時員,美國海軍天文臺)。它擁有關於各種時間標準的所有信息:UT1,UTC等。計算機由內部時鐘週期驅動。如果兩個動作發生在相同的時鐘週期但在不同的內核上,它們將在相同的納秒內發生。如果兩個事件在同一納秒發生,隨機將十納秒添加到其中一個時間的情況如何。 –
沒有特定的順序:
要確保你的時間是免費的節省時間的變化使用日期的-u參數使用UTC時間。從系統管理員那裏更新時間總是在增加。
%N的問題在於您實際獲得的精度取決於硬件,並且可能比%N小得多。運行一些實驗來找出答案。對此的警告往往是無處不在,但仍然被忽視。
如果您正在編寫Cish代碼,請參閱utime()函數,並使用gmtime()而不是localtime()函數將其轉換爲文本。查看strftime()函數來格式化整數部分的時間。你會發現strftime()格式的字段與日期命令格式的基本匹配,日期調用strftime。真正的偏執狂願意編寫額外的代碼可以使用CLOCK_MONOTONIC來確保你的時間在增加。
如果你真的需要增加時間,你可能需要編寫自己的命令或函數來記住上次。如果在同一時間添加和偏移量爲1,則根據需要經常增加偏移量以確保獨特的時間,直到硬件時間大於您的調整時間。
Linux傾向於支持NTP來獲取網絡時間。前面提到的確保增加時間的功能將有助於向後跳躍,因爲跳躍通常不是很大。
基於這個問題,其他的答案,並討論評論...
你可以得到「納秒的精度是嚴格遞增,並保持在上電循環」使用CLOCK_REALTIME
結果相結合的clock_gettime()
並從使用CLOCK_MONOTONIC
- 與一些注意事項。
首先,關閉NTP。在每次系統重啓時運行NTP一次,以便與世界同步您的時間,但不要在系統啓動時更新時間。這將避免向後滾動時間。如果不這樣做,你可以得到諸如
20160617173556 1001
20160617173556 1009
20160617173556 1013
20160617173555 1020 (notice the second went backward)
20160617173556 1024
(在這個例子中,我只是用YYMMDDhhmmss
其次是一些虛構的單調時鐘值的序列。)
然後你面對商業決策。
•與嚴格增加唯一性相比,匹配世界時間有多重要?
。 (硬件時鐘漂移可能會影響世界時間的準確性)
•鑑於此決定,是否值得投資專用硬件,而不是標準(甚至是高端)PC?
•如果在同一納秒內實際發生兩個事件,是否可以接受重複條目?
•等
根據導致開發此應用程序的真實需求可能有許多折衷。
如果在同一納秒內插入兩行,該怎麼辦? – melpomene
[如何在Linux中創建高分辨率計時器以測量程序性能?](http://stackoverflow.com/questions/6749621/how-to-create-a-high-resolution-timer-in-linux對程序性能) –
@StephenP我不這麼認爲。我期待存儲絕對時間,而不是計算時間差異。 – Patrick