2016-06-17 45 views
1

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

這不是How to create a high resolution timer in Linux to measure program performance?的副本。我試圖存儲絕對時間,而不是計算相對時間差。時鐘必須堅持一個電源週期。

+0

如果在同一納秒內插入兩行,該怎麼辦? – melpomene

+0

[如何在Linux中創建高分辨率計時器以測量程序性能?](http://stackoverflow.com/questions/6749621/how-to-create-a-high-resolution-timer-in-linux對程序性能) –

+0

@StephenP我不這麼認爲。我期待存儲絕對時間,而不是計算時間差異。 – Patrick

回答

0

如果納秒的精度是真的對你足夠: date +%s%N

+0

這是嚴格增加的結果嗎?它會在閏秒的應用過程中重複嗎? – Patrick

+0

除了在啓動和定期(取決於漂移率可能是幾小時,幾天,幾周...)強制* ntp *更新之外,沒有任何機器特定的時鐘保證始終增加。即使是第二個問題,這個時間基礎也會被調整。你遇到了現實世界的限制。 –

+0

假設有可能兩個調用在同一納秒內完成,但實際上它是不太可能的(特別是在單線程上)。而且,正如@Bradley Ross所說,硬件有限制。 是的,重複是可能的情況下閏秒。 – pjanek

1

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

+0

我需要特殊的硬件才能獲得恆星時間嗎? – Patrick

+0

看看http://tycho.usno.navy.mil。它解釋了許多這些問題。基本上,您正在查看不包含閏秒的GPS時間。 (這是美國官方計時員,美國海軍天文臺)。它擁有關於各種時間標準的所有信息:UT1,UTC等。計算機由內部時鐘週期驅動。如果兩個動作發生在相同的時鐘週期但在不同的內核上,它們將在相同的納秒內發生。如果兩個事件在同一納秒發生,隨機將十納秒添加到其中一個時間的情況如何。 –

1

沒有特定的順序:

要確保你的時間是免費的節省時間的變化使用日期的-u參數使用UTC時間。從系統管理員那裏更新時間總是在增加。

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

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

如果你真的需要增加時間,你可能需要編寫自己的命令或函數來記住上次。如果在同一時間添加和偏移量爲1,則根據需要經常增加偏移量以確保獨特的時間,直到硬件時間大於您的調整時間。

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

1

基於這個問題,其他的答案,並討論評論...
你可以得到「納秒的精度是嚴格遞增,並保持在上電循環」使用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?
•如果在同一納秒內實際發生兩個事件,是否可以接受重複條目?
•等

根據導致開發此應用程序的真實需求可能有許多折衷。

+0

NTP時間包括閏秒嗎?如果沒有,是否有可能將系統同步到系統時間,但不會將閏秒應用於系統時間? – Patrick

+0

也許我可以設置NTP守護進程來撼動閏秒? – Patrick