2012-12-06 79 views
0

我在JVM/Linux上有一個依賴於System.nanoTimeSystem.currentTimeMillis的生產系統。在NTP完全搞砸之前,我一直處於這種情況,所以時鐘的運行速度要比實時速度快得多或者比實時速度慢(並且擺輪會影響上述兩種Java方法)。以編程方式進行健全性檢查Linux時鐘

我怎樣才能最好地監測nanoTimecurrentTimeMillis接近正確的速度運行?我希望定期測量這些方法中的變化量,並將這些變量與同一時期的「已知」變化量進行比較。什麼是「已知」三角洲的可靠來源? C/C++解決方案很好。

+0

你怎麼知道他們不是?順便說一句 - NTP試圖保持與另一個時鐘同步的時間考慮網絡速度。它必須加快/減慢速度,以保持兩者同步。 –

回答

0

時間的可靠來源,特別是在虛擬機上,必須在機器外部。我假設你不能訪問專門的硬件(如原子鐘或GPS接收器),所以你下一個最好的選擇就是NTP。找到您附近的NTP服務器,通過系統時鐘獲取'before'時間,通過NTP獲取時間,然後讀取時鐘之後的'時間'。比較「之前」和「之後」的平均值與NTP值之間的差異。你不應該指望這個差值爲零(你的網絡延遲可能在兩個方向上都不一樣)。監測一段時間的差異。我預計這種變化會降低趨勢,但如果您發現趨勢以任何程度的信心增長(或減少),那麼您可能會搞砸了。

+0

只要數值很小且不變,我想這並不重要。對於實時系統使用JVM(即依靠非常準確的時間)也可能不是一個好的解決方案。 –

+0

我不需要像原子鐘那樣可靠的時間源(昂貴的,或者依賴於某人正確配置的NTP),我只需要知道我可以信任哪些硬件定時器不會通過NTP更改頻率(以及每天幾秒很好,我只是在尋找巨大的偏差)。我讀過關於rdtsc是不變的,但我想知道這是否合適。 – Mike