【聊點(diǎn)兒別的】關(guān)于輪詢率和最大延遲的關(guān)系
這期暫時(shí)不打算出視頻,因?yàn)榇嬖跔?zhēng)議,但其實(shí)最主要問(wèn)題還是能找到的相關(guān)資料太少,包括外網(wǎng),興許是我暫時(shí)沒(méi)找對(duì)方法?
?
最早注意到這個(gè)問(wèn)題我是想測(cè)機(jī)械鍵盤的輪詢率,但是找了許久,沒(méi)找到能夠測(cè)試的好辦法。
?
原因很簡(jiǎn)單,目前機(jī)械鍵盤最多的才多少個(gè)按鍵?104、108,對(duì)吧?而對(duì)于一個(gè)輪詢率1000Hz及其以上的鍵盤,你不太可能擁有能夠測(cè)試出它上限手速……除非你能在1秒鐘內(nèi)按鍵次數(shù)達(dá)到1000次以上(這速度恐怕也只有張口就來(lái)的鍵盤俠能夠勝任)。
?
綜上,想要測(cè)試鍵盤的輪詢率,并沒(méi)有什么好辦法!但我還是很奇怪,按理說(shuō)我按住鍵盤的一個(gè)鍵不動(dòng),一直是觸發(fā)狀態(tài),不應(yīng)該能測(cè)出輪詢率嗎?為啥不行?難不成大家都是菜雞?寫(xiě)不出來(lái)測(cè)試程序?所以我說(shuō)這玩意兒是有爭(zhēng)議的!也許姿勢(shì)不對(duì)?
?
那為什么鼠標(biāo)和手柄能非常輕松的測(cè)出來(lái)?好吧,我們還是先把這個(gè)放在一邊,從輪詢率的定義開(kāi)始解釋吧。
?
輪詢率也叫回報(bào)率,它其實(shí)指的是輸入設(shè)備與主機(jī)之間的傳輸數(shù)據(jù)的頻率。
?
注:輸入設(shè)備包括鼠標(biāo)、手柄、鍵盤等等,如果我沒(méi)記錯(cuò),小學(xué)、初中、高中的信息技術(shù)課本上就有講,大學(xué)計(jì)算機(jī)基礎(chǔ)也有講這些東西。
?
或者換句話來(lái)講,輪詢率就是輸入設(shè)備與主機(jī)之間的溝通頻率,比如1000Hz的輪詢率,那就是輸入設(shè)備每間隔1毫秒和主機(jī)通信一次,1秒通信1000次。
?
所以這個(gè)時(shí)候,如果我們忽略其他因素,輸入設(shè)備和主機(jī)之間的通信最大延遲 ≈ 1毫秒。因?yàn)閭鬏敂?shù)據(jù)是周期性的,指令要么落在上個(gè)1毫秒的區(qū)間內(nèi),要么落在下個(gè)1毫秒的區(qū)間內(nèi),之后被傳送走(指令會(huì)落在1毫秒的區(qū)間內(nèi),然后在這個(gè)區(qū)間結(jié)束下個(gè)區(qū)間開(kāi)始的時(shí)間點(diǎn)上被傳送走)。

也就是說(shuō),在1000Hz輪詢率的基礎(chǔ)上,不考慮其他因素,最大延遲會(huì)無(wú)限接近于1ms,而最小延遲則是會(huì)無(wú)限趨近于0。這就是輪詢率周期造成的延遲,我們稱之為“傳輸延遲”。(不考慮其他因素的影響下,此時(shí),“最大延遲” = “傳輸延遲”)
?
那針對(duì)于鼠標(biāo)、手柄,我們是怎么測(cè)出來(lái)它們輪詢率的?這就不得不提另一個(gè)東西了,這是我想測(cè)試鍵盤輪詢率,偶然間發(fā)現(xiàn)的一個(gè)東西——“掃描頻率”
?
原文如下:
The scan rate of a keyboard measures how frequently the keyboard updates (internally) the state of its key matrix. Normally, the scan rate is limited by the bounce time of the key switches used and the debounce algorithm used. For example, the debounce time of Cherry MX mechanical switches is rated at ≤5ms. So assuming a simple algorithm is used that waits 5ms for a switch signal to stabilize, then the scan rate would be limited to 200Hz.
?
The idea used here is that the scan rate of the keyboard effectively determines the shortest delay between a key press and a key release. Using this information we estimate the scan rate as: . ScanRate = 1 / ShortestKeyHold
?
Note that scan rate is not the same as poll rate. On a USB device, poll rate refers to how often the OS will check the USB device for updates. The poll rate together with the scan rate determines the maximum input latency. For example, take the example above were the scan interval is 5ms. If our poll rate is 1000Hz, then the keyboard is polled every 1ms and so the maximal input latency is 1+5=6ms. However, if the scan rate were 100Hz, then the maximal input latency would be 10+5=15ms. Note: It is possible to look up the poll rate of a USB device using software.
?
Take these calculations with a grain of salt.
摘自:https://blog.seethis.link/scan-rate-estimator/
?
看不懂沒(méi)關(guān)系,我來(lái)翻譯一下,原文的大致意思就是除了輪詢率之外,設(shè)備本身還存在一個(gè)掃描頻率!最大延遲和它有著相當(dāng)大的關(guān)系。(其實(shí)叫采樣率也勉強(qiáng)說(shuō)得過(guò)去hhhhh)
?
我們的鼠標(biāo)、手柄,亦或是鍵盤,內(nèi)部都有個(gè)微控制器(MCU,Microcontroller Unit,又叫單片微型計(jì)算機(jī),Single Chip Microcomputer ,或者單片機(jī)),其本質(zhì)上是個(gè)微型計(jì)算機(jī),它負(fù)責(zé)傳感器數(shù)據(jù)的記錄與傳輸。
?
對(duì)于鼠標(biāo),微控制器主要負(fù)責(zé)的傳感器就是鼠標(biāo)底部的光學(xué)引擎,光學(xué)引擎所接觸的平面,反饋的數(shù)據(jù)可以是趨近于無(wú)限的(光學(xué)引擎采集的數(shù)據(jù)肯定是有限的),所以會(huì)達(dá)到微控制器支持的最大掃描頻率。
?
對(duì)于手柄,微控制器主要負(fù)責(zé)的傳感器就是搖桿,搖桿所接觸的平面,也可以看成是無(wú)限的(搖桿本身采集的數(shù)據(jù)肯定是有限的),所以會(huì)達(dá)到微控制器支持的最大掃描頻率。
?
也就是說(shuō),對(duì)于一臺(tái)正常的設(shè)備,它一定是“掃描頻率>輪詢率”的,這就是為什么我們能夠測(cè)出鼠標(biāo)或者手柄輪詢率的原因。
?
所以這個(gè)時(shí)候,隨著“掃描頻率”這個(gè)參數(shù)的引入,最大延遲又變了,最大延遲=掃描延遲+傳輸延遲。假設(shè)掃描頻率是2000Hz,輪詢率是1000Hz,那最大延遲=0.5ms+1ms,最小延遲保持不變,還是無(wú)限趨近于0。
?
所以問(wèn)題來(lái)了:
?
Q:為什么鍵盤輪詢率測(cè)不出來(lái)?
A:我也不知道啊,我也很絕望啊!為啥沒(méi)法測(cè)?我按住一個(gè)鍵不松開(kāi),這不就是個(gè)連續(xù)的過(guò)程嗎?應(yīng)該能測(cè)才對(duì)??!可就是找不到測(cè)試軟件!可能就像鼠標(biāo)按住左鍵或者右鍵不動(dòng)、手柄只按鍵不動(dòng)搖桿,沒(méi)法測(cè)輪詢率一樣的道理吧,具體原因我暫時(shí)不清楚,只能這樣強(qiáng)行解釋hhhh。
?
抬杠:藍(lán)牙就是差,延遲高!哪怕輪詢率一致也不行!
正解:當(dāng)藍(lán)牙和其他連接方式輪詢率保持一致時(shí),延遲是一樣的,不存在藍(lán)牙延遲高!正視自己很重要,摘掉有色眼鏡,先從拒絕歧視做起!你們所謂的延遲高、卡頓,那實(shí)際上是因?yàn)樗{(lán)牙的抗干擾能力不行導(dǎo)致的異常。
?
Q:最大延遲只和那兩個(gè)參數(shù)有關(guān)嗎?
A:顯然不是,我們這是排除人為等諸多因素造成影響之后的數(shù)據(jù),只考慮了硬件本身素質(zhì)。如果較真,人類本身有反應(yīng)時(shí)間,按下鍵盤,鍵程本身也需要消耗時(shí)間等等……想要深入研究我推薦你看看這個(gè):
https://www.zfrontier.com/app/flow/enxgmQEXo9RO
?
Q:掃描頻率>輪詢率是正常的,但如果小于呢?
A:舉個(gè)極端例子,如果掃描延遲是10秒,傳輸延遲是1ms,當(dāng)你使用鼠標(biāo)移動(dòng)時(shí),前10秒鼠標(biāo)會(huì)在電腦屏幕上保持不動(dòng),最后1ms鼠標(biāo)指針會(huì)突然跳到你鼠標(biāo)第10秒停止移動(dòng)的位置上,俗稱卡頓!
?
Q:掃描頻率>輪詢率是正常的,但如果輪詢率過(guò)低呢?
A:同樣會(huì)卡頓,鼠標(biāo)指針在電腦屏幕上斷斷續(xù)續(xù)的,不夠絲滑順暢,就像高刷屏和60Hz普通屏幕的區(qū)別,所以理論上輪詢率越高越好。(但輪詢率肯定存在邊際效應(yīng),達(dá)到人類無(wú)法感知的水平,再提升就沒(méi)啥意義了)
?
抬杠:高輪詢率沒(méi)用,你懂個(gè)**!你知不知道頂級(jí)電競(jìng)選手的反應(yīng)速度大于90ms,奧運(yùn)會(huì)短跑運(yùn)動(dòng)員的起跑反應(yīng)在100ms附近……(此圣經(jīng)摘自我投稿的八位堂手柄推廣視頻評(píng)論區(qū))
正解:這言論確實(shí)足夠逆天的!那我也只能送您兩個(gè)字,**!我當(dāng)然知道人的反應(yīng)時(shí)間是有限的,不過(guò)不好意思,高輪詢率還真有用!因?yàn)檫\(yùn)動(dòng)是個(gè)連續(xù)的過(guò)程,現(xiàn)實(shí)世界沒(méi)有幀率這個(gè)概念!現(xiàn)實(shí)世界無(wú)時(shí)不刻都以無(wú)限的幀率運(yùn)行!難不成您運(yùn)動(dòng)起來(lái)能在現(xiàn)實(shí)世界實(shí)現(xiàn)抽幀? 失敬失敬!閣下真是不一般!
所以設(shè)備的輪詢率必然是越高越好,越高越接近現(xiàn)實(shí),直到人類無(wú)法感知!

?全文完
拓展鏈接匯總:
https://blog.seethis.link/scan-rate-estimator/
https://www.zfrontier.com/app/flow/enxgmQEXo9RO
https://www.zfrontier.com/app/flow/eMbZVvoXG5BW
?