作者lhan (lhan)
看板Headphone
標題[討論] DPC latency 跟 HPET
時間Sun Mar 24 12:04:11 2013
先簡單介紹一下標題那兩個東西
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)
→ lhan:另外有個fidelizer的工具也不錯 不過會跳視窗所以..bj4(爆 03/24 13:59
推 louis0407:ClockRes是要安裝還是直接使用?? 按了agree後都是一閃 03/24 14:20
→ louis0407:就消失 不知怎麼用 03/24 14:20
推 louis0407:原來要用ms-doc執行才看的到 03/24 14:26
推 louis0407:查了一下現在是10ms 但是first version要怎麼用? 03/24 14:30
→ louis0407:執行SetTimerResolutionService.exe之後沒作用 03/24 14:30
→ lhan:阿抱歉..那個好像只能設成服務 沒辦法直接執行 可以改用這個 03/24 14:41
※ 編輯: lhan 來自: 59.127.240.219 (03/24 14:51)
推 bluesmaple:看到這篇發現WIN8 PRO預設的Current timer interval 03/24 19:31
→ bluesmaple:是15.6ms...改成0.5ms聲音清晰很多 WIN7預設好像比較小 03/24 19:33
推 louis0407:fidelizer我一直在用 剛測試發現聽不出來 一查才發現 03/24 22:26
→ louis0407:fidelizer已經設好了 看來用不到 又 HPET我之前自己測試 03/24 22:26
→ louis0407:發現模式三我聽起來音色最自然 都開跟都關我聽起來都怪 03/24 22:27
→ louis0407:怪得 但之前看討論 都開或著都關似乎比較合乎學理 03/24 22:28
→ louis0407:只是測了幾次都覺得聽起來怪怪的 03/24 22:28
修正一下SetTimerResolutionService安裝方式
※ 編輯: lhan 來自: 59.127.240.219 (03/25 00:05)
→ lhan:其實HPET我也覺得我本來預設值就可以了 是沒差多少 只是看到 03/25 00:26
→ lhan:看到國外最近討論也滿多的 就順便玩玩看也拿過來分享討論 03/25 00:27
推 bluesmaple:工具那個網址裡有弄成懶人包可以選擇3種模式安裝 03/25 00:39
→ bluesmaple:不過後來發現timer會隨著執行的程式有不同的設定值 03/25 00:39
→ bluesmaple:比如開foobar聽音樂時是1 win內建mplay是10 03/25 00:41
→ bluesmaple:SetTimerResolutionService的好處是可以固定0.5 03/25 00:41
→ lhan:沒注意到懶人包..感謝提醒 Cyberdyne那個解壓按兩下就好了 害 03/25 02:28
→ lhan:我多打一堆XD 話說我還沒玩之前預設值就0.5了 不知道是哪個程 03/25 02:30
→ lhan:式調過的就是 玩過一輪結果怎麼試最低只剩1.0ms 只好裝外掛XD 03/25 02:32