キーボードの遅延:遅れはどこで生まれ、どう測るのか
キーボードの遅延とは、指がキーを押し始めた瞬間から、キーボードがその入力をパソコンに送り終えるまでの時間です。遅延は4か所で積み重なります。キーが沈むまでの移動、キーボードによるキーのスキャン、デバウンス、そしてUSBのポーリングです。ブラウザが入力を知るのはキーボードが送ったあとなので、この遅延を測れるWebサイトはありません。測定では、キーを押すソレノイドと、入力がキーボードから出た時点を記録するUSBアナライザーを使います。遅延を減らすには、アクチュエーションポイントを浅くし、ポーリングレートを最高にして、デバウンスはキーが二重入力にならない範囲で最も低く設定します。
キー入力がパソコンに届くまでに待たされる場所
- キーストロークスイッチが反応する位置までキーが沈む
- スキャンキーボードのチップが、格子状に並んだキーを1行ずつ調べる
- デバウンススイッチの接点の跳ね返りが収まるのを待つか、跳ね返りを無視する
- USBポーリングパソコンが次にキーボードへ新しい入力を問い合わせるまで、入力が待たされる
合計:キーボードの遅延
Webページが時間を計り始められるのはここから
パソコンとディスプレイ ゲームが入力を使ってフレームを描き、ディスプレイがそれを表示する。ここが入力遅延の残りの部分
遅延はどこで生まれるか
- キーストローク。キーがアクチュエーションポイントに届くまでは、何も起きません。1秒240フレームで撮影すると、ふつうのキー入力でキーが底まで沈むのに4〜8フレームかかりました。キーの移動だけで、10 msくらいは簡単に加わります。その測定で最も速かったキーボードは、キーの移動距離もほかより格段に短いものでした。
- スキャン。ほとんどのキーボードはキーを格子状に配線し、1行ずつ調べています。スキャンの遅いキーボードでは、スイッチが閉じてから数ミリ秒たって、ようやく入力に気づくことがあります。
- デバウンス。スイッチの接点は、閉じる瞬間にわずかな間だけ跳ね返ります。キーボードは、入力をすぐに送って跳ね返りを無視するか、接点が落ち着くまで待ちます。多くの自作キーボードで使われているオープンソースのファームウェアQMKでは、デバウンス時間の初期値は5 msです。
- USBポーリング。パソコンは、ポーリングレートの間隔でキーボードに新しい入力がないか問い合わせます。問い合わせの直後に押されたキーは、次の問い合わせまで待たされます。
ポーリングレートをミリ秒で見る
問い合わせの間隔は、1,000 msをポーリングレートで割った値です。入力が待たされる時間は、平均するとその半分です。
| ポーリングレート | 問い合わせの間隔 | 平均の待ち時間 |
|---|---|---|
| 125 Hz | 8 ms | 4 ms |
| 250 Hz | 4 ms | 2 ms |
| 500 Hz | 2 ms | 1 ms |
| 1000 Hz | 1 ms | 0.5 ms |
| 8000 Hz | 0.125 ms | 0.0625 ms |
125 Hzから1,000 Hzに上げると、平均で3.5 ms短くなります。実際に測定されたキーボードどうしの差は、それよりはるかに大きいものです。2017年にDan Luuが21台のキーボードを測ったところ、結果は15〜60 msで、その中の2台のゲーミングキーボードはほかより速くありませんでした。
キーボードの遅延の測り方
- ソレノイドとUSBアナライザー。RTINGSとLTT Labsは、ソレノイドでキーを押してそれがキーに触れた瞬間を記録し、入力がキーボードから出た時点をUSBアナライザーで記録します。RTINGSは200回の押下の平均を取ります。どちらも測定の前に、デバウンスを最も低く、ポーリングレートを最も高くするなど、キーボードを最速の設定にしています。
- 接続方式ごとに測る。LTT Labsは、有線、2.4 GHzワイヤレス、Bluetoothを別々に測ります。接続方式によって遅延が大きく変わることがあるためです。
- ロジックアナライザー。Dan Luuはロジックアナライザーを使って、キーを押し始めてから、その入力によるUSBパケットが出るまでの間隔を計りました。
- 自宅ではカメラか光センサー。キーと画面を一緒にスローモーションで撮影する(1秒240フレームなら、1フレームは4.2 ms)か、オープンソースのOSLTTのような光センサーを画面に取り付けます。どちらもキーから画面までの全体を計る方法で、キーボードだけの遅延はわかりません。
Webサイトでキーボードの遅延を測れない理由
ブラウザがキー入力を知るのは、キーボードが入力を送り、パソコンがそれを受け渡したあとです。つまり、このページで説明したことはすべて、Webページが時間を計り始める前に終わっています。合図からキーを押すまでの時間を計るテストが測っているのは自分の反応で、それにはキーボードよりずっと長い時間がかかります。ブラウザで確かめられるのは、すべてのキーが反応するか、いくつのキーを同時に押せるか(キーボードテスト)と、キーが二重に入力されないか(キーボード二重入力テスト)です。
キーボードの遅延を減らす方法
- ポーリングレートを最高にする。メーカーのアプリに設定があれば、そこで変更します。
- デバウンスを下げる。アプリで変更できる場合の話ですが、キーが二重入力にならない最も低い設定で止めてください。文字が二重に出るようになったら、キーボードで文字が二重に入力される原因をご覧ください。
- アクチュエーションポイントを浅くする。磁気スイッチやアナログ入力のキーボードでは、キーがどこまで沈んだら入力とみなすかを設定できます。WootingなどのキーボードにあるRapid Triggerでは、さらに、キーを戻し始めた瞬間に入力が離され、もう一度押し込んだ瞬間に再び入力されます。
- ゲームでは最速の接続方式を使う。複数の接続方式に対応したキーボードなら、レビューで最も速いと測定された方式を使いましょう。
- そのあと、ほかの部分を見直す。ふつうはキーボードよりも、フレームレートやディスプレイのほうが大きな遅延を生みます。入力遅延を減らす方法をご覧ください。
リニア、タクタイル、クリッキーの違いと、メーカー公式のアクチュエーションポイントや作動荷重は、キーボードの軸で紹介しています。
出典:Dan Luu(英語)「キーボードの遅延」、RTINGS(英語)「キーボード遅延の測定方法」、LTT Labs(英語)「Labsのキーボードテストの方法」、QMK(英語)「デバウンスのアルゴリズム」、Wooting(英語)「Rapid Triggerの設定方法」、OSLTT(英語)「オープンソースの遅延テストツール」。