PC的時間精確嗎?

2021-07-09 18:18:41 字數 1578 閱讀 3847

origin: 

rdtsc 讀取不準確這個應該算是cpu的bug,由tsc的計數方式,多核等影響。多核tsc的問題目前ms和amd 通過軟體補丁的方式來解決了。而speedstep以及cpu頻率變化的影響intel已經對tsc進行修正了。

rdtsc 畢竟是比較快速的讀取方法,使用acpi pm timer 需要保護模式切換也會變成乙個問題。

tsc 的計數方式。

(i)variant tsc 該方式下tsc是由cpu的頻率決定,每個cpu clock tsc 加1 pentium m處理器 (family [06h], models [09h, 0dh]); pentium 4以及志強處理器中(family [0fh], models [00h, 01h, or 02h]);和p6家族的處理器,tsc增加的頻率都是會隨著處理器的時鐘變化而變化的

(ii)invariant tsc pentium 4和志強處理器(family [0fh], models [03h and higher]); core solo and core duo處理器 (family [06h], model[0eh]); 志強處理器5100系列和core 2 duo處理器(family [06h], model [0fh]),tsc都不會隨著speedstep的頻率變化而變化

計算機(包括pc server和很多嵌入系統)一般都有乙個rtc(real time clock) 可以讀出比較精確的時間 一年也就差1兩秒那種 但是那一般是乙個外設 通過比較慢的匯流排訪問 比如我搞的乙個嵌入系統 rtc通過i2c匯流排訪問 平均要1ms才能讀一次資料 pc的我沒具體測試過 但是在linux下輸入hwclock就知道了 延時是人能感覺到的 所以系統日常記時一般是用中斷源 os都有定時的中斷 每次中斷都把記憶體裡的系統時鐘值做累加(也有的cpu有專門記時的暫存器 每若干時鐘週期自動加一) 這種時鐘的特點就是精度做短期記時還行 萬分之幾的樣子 長時間積累就很夠嗆了 基本上rtc就是在開機的時候讀一下 同步到系統時鐘(linux下就是用hwclock --hctosys) 

在乙個一般的分時os裡 即使沒有smp 想達到精確到ms的記時也是很困難的 rtc讀取的時間延遲就很難控制 而且就算這個問題能解決得很完美 system call返回到程序被喚醒之間的時間 是由排程器決定的 在乙個非實時os裡 這個時間是非常不確定的 如果這個系統裡有多個執行緒而且都比較忙 或者正好發生了別的硬體中斷 就可能產生乙個遠遠長於1ms的延遲 所以就算時鐘很精確 系統呼叫的結果也是不可依賴的 除非用dos 或者vxworks :-)

恩,這問題做mmo 基於物理**realtime同步時候就更厲害,能掙死人.

最後是的答案是這樣: 想依靠timegettime, gettickcount,getperformancecount,rtsc 得到準確時鐘方法是不存在的.

因為超執行緒cpu受負荷影響,多核,bios bug等一系列因素.導致沒有正常途徑可以得到全世界pc都相同的時鐘.某些情況下(ht),getperformancecount錯得更厲害.

不少論壇有討論.

得到所有pc都準確得毫秒級別時鐘是可能的. 但是驅動級的程式設計.nt core下 非administrator動態載入核心驅動也是不可能的.

所以,只能靠一系列補償演算法和乙個能得到比較準確時鐘的server.

pc中的時間

說明 原文和作者不祥。pc硬體中,有三種基本的獲得時間的方法。1 the tick counter。這是個毫秒 千分之一妙 的記時器,可以用temegettime 或者gettickcount 獲得。這個記時器是有isa中斷控制器控制的 可能現在被虛擬化為主板上的晶元,而不是原來放在cpu中 這是一...

PC會消亡嗎?

當我開啟我的台式電腦,準備上網瀏覽網頁和寫點部落格。我發現我犯了乙個錯誤 做這些事為什麼要開台式電腦呢?要知道我的台式電腦有2.33ghz的主處理器,4g的記憶體。用這樣配置的電腦來做這些事不是殺雞用牛刀嗎?這完全可以用我的平板電腦來做。這促使我思考一些問題 電子裝置小型化的驅動力在 人們購買手機 ...

PC會消亡嗎?

當我開啟我的台式電腦,準備上網瀏覽網頁和寫點部落格。我發現我犯了乙個錯誤 做這些事為什麼要開台式電腦呢?要知道我的台式電腦有2.33ghz的主處理器,4g的記憶體。用這樣配置的電腦來做這些事不是殺雞用牛刀嗎?這完全可以用我的平板電腦來做。這促使我思考一些問題 電子裝置小型化的驅動力在 人們購買手機 ...