[討論] DPC latency 跟 HPET (clock相關)
先簡單介紹一下標題那兩個東西
HPET是High Precision Event Timer的縮寫
是控制電腦timer的一種硬體
相對PIT(programmable interval timer), RTC(real-time clock)屬於較新的規格
可比RTC更精確同步電腦上各周邊硬體的timing(透過更高的頻率)
XP不支援HPET,Vista後都有支援
http://en.wikipedia.org/wiki/HPET
DPC Latency是代表各周邊延遲時間
在本版 #17xtUljY 有版友介紹了一下
通常越低越好,數值越高也代表發生爆音機率越高
這一篇介紹了兩個檢測工具
http://www.empro10001.com/troubleshoot-tc.htm
DPC Latency Checker和 LatencyMon
可用來觀測和檢查哪個周邊影響延遲比較大
要使用HPET硬體,通常可在一般較新的主版bios上找到選項
開啟或不開啟HPET, HPET 32位元或64位元模式
但只打開bios選項還不夠
想要完全開啟 在OS如windows上還要加上"bcdedit /set useplatformclock true"參數
所以基於BIOS和OS設定
基本上你會得到四種clock模式:
TSC+LAPICs Low performance (slow timers + syncing) = 2.76MHz
LAPICs low performance (slow timer - no syncing) = 3.5Mhz
TSC+HPET medium performance (slow and fast timer + syncing) = 3.8Mhz
HPET high performance (fast timer - no syncing) = 14.3MHz
第一個是BIOS關閉HPET或主機版不支援HPET,OS不設置useplatformclock
第二個是BIOS關閉HPET,OS設置useplatformclock true
第三個是BIOS開啟HPET,OS不設置useplatformclock
第四個是BIOS開啟HPET,OS設置useplatformclock,HPET正確開啟後的模式
要確認跑在甚麼模式可以用WinTimerTester檢查 對照QueryPerformanceCounter值
詳細請看這串,上面講的選項都在裡面 http://ppt.cc/W3ra
例如個人的主機版BIOS的HPET預設值是開啟,跑32bit
Windows 7 64預設值關閉
所以是跑第三個clock模式
而現在我是跑64位元OS,所以有把BIOS的HPET設為64位元,OS開啟useplatformclock
所以是第四個
而關閉或開啟HPET可能會影響DPC Latency
進而影響遊戲或媒體播放效能
差別例子如:
http://ppt.cc/yhrE
會造成這樣的結果
有一說是因為HPET是跑在sytem memory裡 (第四個clock模式)
而TSC模式是跑在CPU的register裡 所以比較快 (第一個clock模式)
來源: http://ppt.cc/Rvd~
所以結論就是打開跟關閉HPET,或是說上面那四種clock模式
通常是會影響DPC Latency的
只是相關討論爬來爬去發現分成兩派
一派是說打開HPET比較好 (主要讓HPET硬體控制clock,理論上clock精度較高)
一派是說關閉HPET比較好 (主要讓CPU控制clock,效能較高,延遲低)
個人也還在猶豫要設成哪種模式
以上是個人爬了一下相關資料的心得,跟大家分享
不知各位是否有何看法
有錯也請指正,謝謝
追加:
再補充一個東西
跟上面HPET設定是獨立的
這串討論到後面有講到Windows timer resolution
http://forums.guru3d.com/showthread.php?t=368604
簡單說就是作業系統timer的最小解析度
若是你最小解析度不夠小
這樣比如說像你音效卡延遲設定設比這個解析度還小都是沒意義的
所以可以說越小越好
這邊有個工具
http://forums.guru3d.com/showthread.php?t=376458
安裝成服務常駐後可以把Windows timer resolution設定成最小值 (Windows 7是0.500ms)
設成開機自動執行服務步驟如下:
我是下載Second version (C# implementation) of system service這版
安裝方法有兩種
方法1:
開cmd,打以下(兩行接成一行)
sc.exe create STR binpath= "(解壓路徑)\SetTimerResolutionService.exe"
displayname= "Set Timer Resolution Service" obj= LocalSystem start= auto
方法2:
先灌好.Net Framework 4.0
然後打開cmd
先 cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
然後執行 InstallUtil /i (解壓路徑)\SetTimerResolutionService.exe
要移除的話 InstallUtil /u (解壓路徑)\SetTimerResolutionService.exe
再開ClockRes檢查Current timer interval是否為0.500ms
http://technet.microsoft.com/en-us/sysinternals/bb897568.aspx
要暫時執行的話可改用Timer Resolution:
http://ppt.cc/C-R-
下載1.2版即可, Vista以後也可以用
關閉後會回復原值
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.127.240.219
※ 編輯: lhan 來自: 59.127.240.219 (03/24 13:55)
→
03/24 13:59, , 1F
03/24 13:59, 1F
推
03/24 14:20, , 2F
03/24 14:20, 2F
→
03/24 14:20, , 3F
03/24 14:20, 3F
推
03/24 14:26, , 4F
03/24 14:26, 4F
推
03/24 14:30, , 5F
03/24 14:30, 5F
→
03/24 14:30, , 6F
03/24 14:30, 6F
→
03/24 14:41, , 7F
03/24 14:41, 7F
→
03/24 14:41, , 8F
03/24 14:41, 8F
※ 編輯: lhan 來自: 59.127.240.219 (03/24 14:51)
推
03/24 19:31, , 9F
03/24 19:31, 9F
→
03/24 19:33, , 10F
03/24 19:33, 10F
推
03/24 22:26, , 11F
03/24 22:26, 11F
→
03/24 22:26, , 12F
03/24 22:26, 12F
→
03/24 22:27, , 13F
03/24 22:27, 13F
→
03/24 22:28, , 14F
03/24 22:28, 14F
→
03/24 22:28, , 15F
03/24 22:28, 15F
修正一下SetTimerResolutionService安裝方式
※ 編輯: lhan 來自: 59.127.240.219 (03/25 00:05)
→
03/25 00:26, , 16F
03/25 00:26, 16F
→
03/25 00:27, , 17F
03/25 00:27, 17F
推
03/25 00:39, , 18F
03/25 00:39, 18F
→
03/25 00:39, , 19F
03/25 00:39, 19F
→
03/25 00:41, , 20F
03/25 00:41, 20F
→
03/25 00:41, , 21F
03/25 00:41, 21F
→
03/25 02:28, , 22F
03/25 02:28, 22F
→
03/25 02:30, , 23F
03/25 02:30, 23F
→
03/25 02:32, , 24F
03/25 02:32, 24F
→
08/18 07:04, , 25F
08/18 07:04, 25F
→
10/05 06:04, , 26F
10/05 06:04, 26F