
以前、GEEKY Fab.のUSBゲームパッド基板の遅延について聞かれたときに、「遅延はゼロです」って答えたことがあります。

よくない回答だったと反省してます。
言い訳させてもらうと、「(他のコンバーターと比べてだと)遅延ゼロです」というニュアンスで回答したんですが、ごめんなさい。
結局、遅延どれくらいかも答えてないですし。
ということで、今回はコントローラー(ゲームパッド)やマウス、キーボードなどのUSBゲーミングデバイスにはどれくらい遅延があるのかって話をちゃんとしたいと思います。
遅延について理解することで、ゲーミングデバイスを選ぶ時の参考にもなると思います。
USBの通信速度について
USBコントローラーやマウス、キーボードは、HID(Human Interface Device)というUSBデバイスに分類されます。
これらのデバイスはPCなどのホストのUSB2.0ポートで接続されます。
USB2.0は速度によってLow-Speed (LS), Full-Speed (FS), High-Speed (HS)の三つに分かれます。
これらの通信速度は次の通りで、LSが一番遅く、HSが一番速いです。
区分 | 通信速度 |
---|---|
LS | 1.5 Mbps |
FS | 12 Mbps |
HS | 480 Mbps |
一見、この通信速度で遅延が決まりそうな気がしますよね。
実は違います。
コントローラーなどのHIDが送るデータ量は数十バイトしかないので、LSだろうがHSだろうが送りさえすれば一瞬で届くのです。
では遅延の原因はなんなんでしょうか?
遅延の正体はポーリング
USBではホスト(PC)がデバイスに「データある?」と一定周期で問い合わせをしています。
問い合わせが来た時に初めてデバイスはホストにデータを送ります。
この仕組みをポーリングといい、問い合わせの周期をポーリング間隔といいます。
このポーリングが遅延の正体です。
さっきも言った通り、LSだろうがHSだろうが送り始めればデータは一瞬で届きます。
でもポーリング間隔でしかデータを送らないのです。
なので、最悪の場合、ポーリング間隔だけ遅延が発生することになります。
このポーリング間隔もLS, FS, HSによって異なり、最短間隔はそれぞれ以下のようになっています。
区分 | 最短ポーリング間隔 | 相当するポーリングレート |
---|---|---|
LS | 10 ms | 100 Hz |
FS | 1 ms | 1000 Hz |
HS | 0.125 ms | 8000 Hz |
イメージしやすいようにシミュレーターを作ってみました。
デバイス側のゲートが開く時間間隔がポーリング間隔です。
ゲートを開けろという命令はPC側から出しています。
こう見るとLS, FS, HSで全然違いますね。
USB HIDのポーリング間隔=遅延
では、USBコントローラーやマウス、キーボードなどのUSB HIDはLS, FS, HSのどれで接続されるのでしょうか?
答えはほぼほぼFSです。
なので、みなさんのUSBデバイスは1msのポーリング間隔でつながる…と言いたいところですが、FSだからと言って全部1msで繋がるわけではないです。
そこは結局、デバイスのUSB設定次第になります。
例えば、PCに付属してきた普通のキーボード(TK-FCM085)は10ms、8bitdoのXinput互換のコントローラー(SN30 -amazon link)は4ms (PC接続時)、logiのゲーミングキーボード(G-PKB-002LNd -amazon link)は1msとなっていました。
この設定値はUSBデバイスの”USB Descriptor“の中に書いてあって、例えばUSB Tree Viewなどのソフトで簡単に確認することができます。

ちなみに、GEEKY Fab.のゲームパッド化シリーズは1ms (デフォルトファームウェアの場合)です。

1msはどれくらいの遅延?
最短の1msだと普段のゲームプレイでは遅延を感じることはまずないかと思います。
Bluetoothの無線コントローラーだと、速いものでも8ms程度になります。
一般的なBluetoothコントローラーだともっと遅いと思いますが、それでも遅延を感じる人はかなり少ないんじゃないでしょうか?
もちろん私も感じられないです。
ちなみに、低遅延の無線ゲーミングデバイスもありますが、それらの解説はまた別の機会で。
モニターのリフレッシュレートと比べても1msは圧倒的に速いです。
一般的なモニターのリフレッシュレートが60Hz(=16.7ms)、速いものでも240Hz(=4.2ms)ですからね。
1フレーム内で何回もデータを送っていることになります。
でももっと速いデバイスはある
でももっと速いUSBゲーミングデバイスを見たことないですか?
例えば、ポーリングレート8000Hz (=0.125ms)のゲーミングキーボード!とか。

キーボードとかのHIDはFSで接続されるって話だったのに、不思議ですね。
どうやってFSの限界を超えた低遅延を達成しているのでしょうか?
感のいい人は気づいているかもしれませんね。
FSじゃなくてHSで接続するようにすればいいのです。
HSだと、最大ポーリングレート8000Hz (=ポーリング間隔 0.125ms)になり、ちょうど8000Hzのゲーミングキーボード実現!ってわけです。
でも、一つ問題があります。
さっきの話の通りキーボードなどのHIDはPCとFSでしかつながってくれません。
これはPCのドライバが原因です。
ポーリングなどのUSBデバイスへの問い合わせは、USB通信専用のソフトウェアであるUSBドライバが担当しています。
WindowsなどのOSには、USBマウスやキーボードを挿してすぐに使えるように「標準のUSB HIDドライバ」が最初から用意されています。
ただ、この標準ドライバはFSで動くように作られています。
だから普通はHSの高速通信はできません。
なので、HSで繋がるためには専用のドライバを作る必要があるのです。
実際に8000Hzを実現しているゲーミングデバイスは、メーカーが独自のHS対応ドライバを用意しています。
ということで、ゲーミングマウスとかゲーミングキーボードを買った人はちゃんとドライバもインストールしましょうね。
ドライバをインストールしないと8000Hzでポーリングしてくれてないですよ、たぶん。
最後に
以上、簡単にUSBの遅延について説明してみました。
USBは伝送速度の方に目が行きがちですが、ゲーミングデバイスに重要なのはポーリングレートのほうだってことがわかってもらえたかと思います。
みなさんのゲーミングデバイス選びに参考になれば幸いです。
私?
もちろん私は1msのUSBコントローラーと8msのBluetoothコントローラーで十分です。
私のポーリングレートが遥かに低速なので。

今回はこれで終わります。
読んでくれてありがとうございました。
コメント