簡體   English   中英

Linux中的唯一時間戳

[英]Unique time stamp in Linux

Linux中是否有一個具有納秒精度的時鍾,通過電源循環嚴格增加和維護? 我試圖將時間序列數據存儲在數據庫中,其中每行具有唯一的時間戳。 我是否需要使用外部時間源(如GPS接收器)來執行此操作? 我希望時間戳可以進入或轉換為GPS時間。

這不是如何在Linux中創建高分辨率計時器來衡量程序性能的重復 我試圖存儲絕對時間,而不是計算相對時間差。 時鍾必須在電源循環中持續存在。

大多數計算機現在都有使用互聯網定期更正系統時間的軟件。 這意味着系統時鍾可以每隔幾毫秒上升或下降。 請記住,計算機時鍾有一些漂移。 如果你不想要閏秒問題,請使用恆星時間(沒有閏秒校正)。 由於互聯網上的延遲不同,ntp將在微秒或毫秒范圍內關閉。 滿足您要求的時鍾是五萬美元以上。

沒有特別的順序:

為了確保您的時間沒有節省時間更改,請使用date的-u參數來使用UTC時間。 這總是在增加,從系統管理員處理時間更正。

%N的問題在於您實際獲得的精度取決於硬件,並且可能遠低於%N允許的精度。 運行幾個實驗來找出答案。 對此的警告往往是無處不在,但仍然被忽視。

如果您正在編寫Cish代碼,請參閱utime()函數並使用gmtime(),而不是localtime()類型函數來轉換為文本。 查看strftime()函數來格式化整數部分時間。 您會發現strftime()格式字段與日期命令格式的字段完全匹配,因為日期調用strftime。 願意編寫附加代碼的真正偏執狂可以使用CLOCK_MONOTONIC來確保您的時間在增加。

如果你真的需要增加時間,你可能需要編寫自己的命令或函數來記住最后一次。 如果在同一時間內調用,則添加和偏移量為1.根據需要經常遞增偏移量,以確保在硬件時間大於調整時間之前的唯一時間。

Linux傾向於支持NTP獲取網絡時間。 前面提到的確保增加時間的功能將有助於向后跳躍,因為跳躍通常不大。

基於這個問題,其他答案和評論中的討論......
通過使用CLOCK_REALTIME和使用CLOCK_MONOTONIC組合clock_gettime()的結果,您可以獲得“通過電源周期嚴格增加和維持的納秒精度” - 以及一些注意事項。

首先,關閉NTP。 在每次系統重啟時運行NTP一次以與世界同步您的時間,但不要在系統啟動時更新時間。 這樣可以避免向后滾動時間。 如果不這樣做,你就可以獲得一個序列

20160617173556 1001
20160617173556 1009
20160617173556 1013
20160617173555 1020 (notice the second went backward)
20160617173556 1024

(對於這個例子,我只是使用YYMMDDhhmmss然后是一些虛構的單調時鍾值。)

然后你面臨商業決策。

•與嚴格增加獨特性相比,匹配世界時間有多重要?
(硬件時鍾漂移可能會隨着世界時間而下降)
•鑒於這一決定,是否值得投資專用硬件,而不是標准(甚至是高端)PC?
•如果在同一納秒內實際發生兩個事件,是否可以重復輸入?
•等

根據導致開發此應用程序的真實要求,可能存在許多權衡。

如果納秒精度對您來說真的足夠了: date +%s%N

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM