「マウスのポーリングレート」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:マウス en:Mouse polling rate 高解像度マウスを購入したときは、マウスの精度を活用するために USB のポーリングレー...」)
 
(同期)
1行目: 1行目:
 
[[Category:マウス]]
 
[[Category:マウス]]
 
[[en:Mouse polling rate]]
 
[[en:Mouse polling rate]]
  +
{{Related articles start}}
高解像度マウスを購入したときは、マウスの精度を活用するために USB のポーリングレートを調整するのが常套手段です。ポーリングレート (またはレポートレート) はマウスがコンピュータに情報を送信する頻度を示します。ヘルツ (Hz) で表されますが、この設定は遅延時間 (''ms'') と等しく考えることができます。
 
  +
{{Related|マウスのアクセラレーション}}
  +
{{Related|全てのマウスボタンを動作させる}}
  +
{{Related articles end}}
  +
高解像度マウスを購入したときは、マウスの精度を活用するために USB のポーリングレートを調整するのが常套手段です。ポーリングレート (またはレポートレート) はマウスがコンピュータに情報を送信する頻度を示します。
   
  +
== ポーリングレートとポーリング間隔 ==
デフォルトでは、USB のポーリングレートは 125 Hz に設定されています。以下は ''Hz'' の値と遅延時間の対応表です:
 
  +
  +
デバイスのポーリングレートはヘルツ (Hz) で表され、ポーリング間隔によってポーリングレートが決まります。ポーリング間隔はミリ秒 (ms) で表記され、遅延時間と置き換えることができます。
  +
  +
デフォルトのポーリング間隔は 10ms です。ただし、USB コントローラはポーリング間隔を2の冪乗に切り捨ててしまいます。したがって、ポーリング間隔が 10ms に設定されている場合、実際には 8ms がポーリング間隔になります。7ms に設定したときは 4ms になります。
   
 
{| class="wikitable grid"
 
{| class="wikitable grid"
25行目: 33行目:
 
|}
 
|}
   
  +
上記はポーリングレートのヘルツの値とポーリング間隔のミリ秒の対応表です。
ポーリングレートが 125 Hz に設定されている場合、マウスカーソルは8ミリ秒毎にしか更新されないことになります。遅延が致命的な状況では (例えばゲームなど)、できるかぎりポーリングレートを下げるのが良いでしょう。ポーリングの間隔を増やすと精度が上がりますが、CPU の使用量とトレードオフになります。値を調整するときはこのことに注意してください。
 
   
  +
ポーリングレートが 125 Hz に設定されている場合、マウスカーソルは8ミリ秒毎にしか更新されないことになります。遅延が致命的な状況 (例えばゲームなど) では、できるかぎりポーリングレートを下げるのが良いでしょう。ただし、ポーリングの間隔を増やすと精度が上がりますが、代わりに CPU の使用量は増加します。値を調整するときはこのことに注意してください。
== ポーリングレートの設定 ==
 
カーネルの {{ic|usbhid}} モジュールを使って "mousepoll" のカスタムレートを設定します。以下を {{ic|/etc/modprobe.d/modprobe.conf}} ファイルに追加してください:
 
   
  +
== ポーリングレートの表示 ==
options usbhid mousepoll=[polling interval]
 
  +
{{ic|evhz}} ツールを使うことでマウスのリフレッシュレートを表示できます。
   
  +
{{AUR|evhz-git}} パッケージをインストールして root で以下のコマンドを実行:
[polling interval] は上記の表における ''ms'' の数値に置き換えてください。例えばポーリングレートを 500Hz に設定するには:
 
   
  +
# evhz
options usbhid mousepoll=2
 
   
  +
{{ic|Average}} の値が安定するまで大きな円を描くようにマウスを動かしてください。確認できたら {{ic|Ctrl+c}} で終了できます。
再起動せずにポーリングレートを変更するには:
 
  +
  +
{{ic|Latest}} の値が安定せず、2つの値をいったりきたりする場合、設定されているポーリングレートがデバイスの限界値を上回っています。[[#USB デバイスの速度]]を見てください。
  +
  +
ポーリングレートは [http://razerblueprints.net/index.php/View-document-details/18-DirectX-mouserate-checker.html DirectX mouserate checker] などの Windows のツールを [[Wine]] で実行することでも確認可能です。
  +
  +
== ポーリング間隔の表示 ==
  +
  +
{{Note|1=以下のコマンドで表示されるのはデバイスによって要求されているポーリング間隔であり、実際に使われている値ではありません。詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=1607073#p1607073 フォーラムスレッド] を参照。}}
  +
  +
ポーリング間隔などのデバイス情報は debugfs で確認できます。root 権限が必要です。
  +
  +
まずは、デバイスの Vendor ID と Product ID を確認してください:
  +
  +
{{hc|$ lsusb|Bus 001 Device 002: ID '''045e''':'''0024''' Microsoft Corp. Trackball Explorer
  +
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub}}
  +
  +
それから確認できた ID を指定して以下のコマンドを実行することでデバイスのデバッグ状態を表示できます:
  +
  +
{{hc|# grep -B3 -A6 ''045e''.*''0024'' /sys/kernel/debug/usb/devices|2=T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 '''Spd=1.5''' MxCh= 0
  +
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
  +
P: Vendor=045e ProdID=0024 Rev= 1.21
  +
S: Manufacturer=Microsoft
  +
S: Product=Microsoft Trackball Explorer®
  +
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
  +
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
  +
E: Ad=81(I) Atr=03(Int.) MxPS= 4 '''Ivl=10ms'''}}
  +
  +
{{ic|Ivl}} がポーリング間隔です。上記の例では 10ms が要求されています ([[#ポーリングレートとポーリング間隔]]で説明しているように実際に使われる値は 8ms になります)。{{ic|Spd}} はデバイスの速度です。詳しくは [[#USB デバイスの速度]]を見てください。他のフィールドの情報については [https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/Documentation/usb/proc_usb_info.txt カーネルドキュメント] を参照してください。
  +
  +
debugfs や root 権限が使えない場合、以下のコマンドでポーリング間隔を表示できます:
  +
{{hc|1=$ lsusb -vd ''045e'':''0024'' | grep bInterval|2=bInterval 10}}
  +
  +
== USB デバイスの速度 ==
  +
  +
[[Wikipedia:USB|USB]] デバイスは特定のビットレートで動作するように設計されています。ポインティングデバイスの多くは "Low Speed" 1.5Mbit/s デバイスです。デバイスの速度は[[#ポーリング間隔の表示]]と一緒に確認できます。
  +
  +
"Low Speed" デバイスは 8ms 未満のポーリング間隔を使うことができません。
  +
  +
全ての USB ハブが "Full Speed" 12Mbit/s を利用できる必要があります。デバイスが接続しているハブの速度は以下のコマンドで確認できます ({{ic|1=Bus=xx}} は[[#ポーリング間隔の表示]]で確認できた値を使います):
  +
  +
{{hc|1=# grep -B1 -A10 "Bus=''01'' Lev=00" /sys/kernel/debug/usb/devices|2=T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 '''Spd=12''' MxCh= 2
  +
B: Alloc= 11/900 us ( 1%), #Int= 1, #Iso= 0
  +
D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
  +
P: Vendor=1d6b ProdID=0001 Rev= 4.01
  +
S: Manufacturer=Linux 4.1.18-1-lts uhci_hcd
  +
S: Product=UHCI Host Controller
  +
S: SerialNumber=0000:00:10.0
  +
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
  +
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
  +
E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms}}
  +
  +
ハブの {{ic|Ivl}} はデバイスのポーリングレートとは無関係です。
  +
  +
== ポーリングレートの設定 ==
   
  +
{{ic|usbhid}} [[カーネルモジュール]]の {{ic|mousepoll}} オプションを使うことでポーリングレートを設定できます。デフォルトの値は 0 で、デバイスによって要求された値が使用されます。
modprobe -r usbhid && modprobe usbhid
 
   
  +
オプションの現在の値を確認するには:
{{Warning|Make sure that both commands execute otherwise you will be unable to use the mouse and keyboard and will have to reboot or ssh into your machine.}}
 
   
  +
{{hc|$ systool -m usbhid -A mousepoll|2=Module = "usbhid"
それからマウスを一度切断してから再度接続してください。
 
  +
mousepoll = "0"}}
   
  +
設定を変更するには以下のファイルを作成:
{{Note|1=If you use the '''usbinput''' and '''udev''' hooks in your initramfs, usbhid will included on the image and you'll need to add {{ic|/etc/modprobe.d/modprobe.conf}} to the FILES entry in {{ic|/etc/mkinitcpio.conf}}. Remember to regenerate your image after changing the config. Without doing this, the module will be inserted during early userspace without the polling option. Alternatively, you can add usbhid.mousepoll=X to your kernel command line.}}
 
   
  +
{{hc|/etc/modprobe.d/usbhid.conf|2=options usbhid mousepoll=4}}
== 現在のマウスレートの表示 ==
 
現在のマウスのリフレッシュレートを表示することができるツールが存在します (''evhz'' という名前です)。カスタマイズしたポーリングレートが適用されたかチェックするときに有用です。
 
   
  +
上記の例ではポーリングレートを 250Hz に設定しています。
[[AUR]] から {{AUR|evhz-git}} をインストールするか自分でコンパイルしてください:
 
   
  +
再起動せずにポーリング間隔を変更するには:
[https://github.com/ian-kelling/evhz/raw/master/evhz.c evhz.c] を保存 ([https://github.com/ian-kelling/evhz evhz の github ページ])
 
   
  +
# modprobe -r usbhid && modprobe usbhid
次のコマンドでコンパイル:
 
   
  +
{{Warning|2番目のコマンドが失敗した場合、USB マウスやキーボードが全て使えなくなります。マシンを再起動するか SSH で接続しないと操作できなくなります。}}
gcc -o evhz evhz.c
 
   
  +
変更を適用するにはマウスを一度切断してから再接続してください。
root で実行:
 
   
  +
{{Note|
./evhz
 
  +
* 2015年5月現在、特定の環境下でデバイスのポーリングレートを 1000Hz (1ms) にできないというカーネルバグが存在します。[https://bbs.archlinux.org/viewtopic.php?pid=1528109 フォーラムスレッド] や [https://bugzilla.kernel.org/show_bug.cgi?id=60586 バグレポート] を見てください。
  +
* usbhid モジュールを initramfs イメージに組み込む場合、イメージにも {{ic|/etc/modprobe.d/usbhid.conf}} を追加する必要があります。[[カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う]]のノートを見てください。または、カーネルコマンドラインに {{ic|1=usbhid.mousepoll=X}} を追加する方法もあります。[[カーネルモジュール#カーネルコマンドラインを使う]]を見てください。}}
   
  +
{{Tip|デフォルトのポーリング間隔よりも小さな値を使用する場合、[[マウスのアクセラレーション]]設定の [http://xorg.freedesktop.org/wiki/Development/Documentation/PointerAcceleration/#VelocityScale VelocityScale] オプションを調整すると良いでしょう。}}
もしくは、[http://razerblueprints.net/index.php/View-document-details/18-DirectX-mouserate-checker.html DirectX mouserate checker] などの Windows のツールを [[Wine]] で実行することも可能です。
 
   
 
== 参照 ==
 
== 参照 ==
*[http://www.overclock.net/computer-peripherals/173255-cs-s-mouse-optimization-guide.html CS:S Mouse Optimization Guide] -- largely aimed at Windows users, though the same principles apply for Linux.
+
*[http://www.overclock.net/computer-peripherals/173255-cs-s-mouse-optimization-guide.html CS:S Mouse Optimization Guide] - Windows ユーザーを対象にしていますが、原則的には Linux にも当てはまる部分があります。

2017年1月7日 (土) 23:02時点における版

関連記事

高解像度マウスを購入したときは、マウスの精度を活用するために USB のポーリングレートを調整するのが常套手段です。ポーリングレート (またはレポートレート) はマウスがコンピュータに情報を送信する頻度を示します。

ポーリングレートとポーリング間隔

デバイスのポーリングレートはヘルツ (Hz) で表され、ポーリング間隔によってポーリングレートが決まります。ポーリング間隔はミリ秒 (ms) で表記され、遅延時間と置き換えることができます。

デフォルトのポーリング間隔は 10ms です。ただし、USB コントローラはポーリング間隔を2の冪乗に切り捨ててしまいます。したがって、ポーリング間隔が 10ms に設定されている場合、実際には 8ms がポーリング間隔になります。7ms に設定したときは 4ms になります。

Hz ms
1000 1
500 2
250 4
125 8
100 10

上記はポーリングレートのヘルツの値とポーリング間隔のミリ秒の対応表です。

ポーリングレートが 125 Hz に設定されている場合、マウスカーソルは8ミリ秒毎にしか更新されないことになります。遅延が致命的な状況 (例えばゲームなど) では、できるかぎりポーリングレートを下げるのが良いでしょう。ただし、ポーリングの間隔を増やすと精度が上がりますが、代わりに CPU の使用量は増加します。値を調整するときはこのことに注意してください。

ポーリングレートの表示

evhz ツールを使うことでマウスのリフレッシュレートを表示できます。

evhz-gitAUR パッケージをインストールして root で以下のコマンドを実行:

# evhz

Average の値が安定するまで大きな円を描くようにマウスを動かしてください。確認できたら Ctrl+c で終了できます。

Latest の値が安定せず、2つの値をいったりきたりする場合、設定されているポーリングレートがデバイスの限界値を上回っています。#USB デバイスの速度を見てください。

ポーリングレートは DirectX mouserate checker などの Windows のツールを Wine で実行することでも確認可能です。

ポーリング間隔の表示

ノート: 以下のコマンドで表示されるのはデバイスによって要求されているポーリング間隔であり、実際に使われている値ではありません。詳しくは フォーラムスレッド を参照。

ポーリング間隔などのデバイス情報は debugfs で確認できます。root 権限が必要です。

まずは、デバイスの Vendor ID と Product ID を確認してください:

$ lsusb
Bus 001 Device 002: ID 045e:0024 Microsoft Corp. Trackball Explorer
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

それから確認できた ID を指定して以下のコマンドを実行することでデバイスのデバッグ状態を表示できます:

# grep -B3 -A6 045e.*0024 /sys/kernel/debug/usb/devices
T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=1.5  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=045e ProdID=0024 Rev= 1.21
S:  Manufacturer=Microsoft
S:  Product=Microsoft Trackball Explorer®
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=10ms

Ivl がポーリング間隔です。上記の例では 10ms が要求されています (#ポーリングレートとポーリング間隔で説明しているように実際に使われる値は 8ms になります)。Spd はデバイスの速度です。詳しくは #USB デバイスの速度を見てください。他のフィールドの情報については カーネルドキュメント を参照してください。

debugfs や root 権限が使えない場合、以下のコマンドでポーリング間隔を表示できます:

$ lsusb -vd 045e:0024 | grep bInterval
bInterval 10

USB デバイスの速度

USB デバイスは特定のビットレートで動作するように設計されています。ポインティングデバイスの多くは "Low Speed" 1.5Mbit/s デバイスです。デバイスの速度は#ポーリング間隔の表示と一緒に確認できます。

"Low Speed" デバイスは 8ms 未満のポーリング間隔を使うことができません。

全ての USB ハブが "Full Speed" 12Mbit/s を利用できる必要があります。デバイスが接続しているハブの速度は以下のコマンドで確認できます (Bus=xx#ポーリング間隔の表示で確認できた値を使います):

# grep -B1 -A10 "Bus=01 Lev=00" /sys/kernel/debug/usb/devices
T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12   MxCh= 2
B:  Alloc= 11/900 us ( 1%), #Int=  1, #Iso=  0
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0001 Rev= 4.01
S:  Manufacturer=Linux 4.1.18-1-lts uhci_hcd
S:  Product=UHCI Host Controller
S:  SerialNumber=0000:00:10.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255ms

ハブの Ivl はデバイスのポーリングレートとは無関係です。

ポーリングレートの設定

usbhid カーネルモジュールmousepoll オプションを使うことでポーリングレートを設定できます。デフォルトの値は 0 で、デバイスによって要求された値が使用されます。

オプションの現在の値を確認するには:

$ systool -m usbhid -A mousepoll
Module = "usbhid"
    mousepoll           = "0"

設定を変更するには以下のファイルを作成:

/etc/modprobe.d/usbhid.conf
options usbhid mousepoll=4

上記の例ではポーリングレートを 250Hz に設定しています。

再起動せずにポーリング間隔を変更するには:

# modprobe -r usbhid && modprobe usbhid
警告: 2番目のコマンドが失敗した場合、USB マウスやキーボードが全て使えなくなります。マシンを再起動するか SSH で接続しないと操作できなくなります。

変更を適用するにはマウスを一度切断してから再接続してください。

ノート:
ヒント: デフォルトのポーリング間隔よりも小さな値を使用する場合、マウスのアクセラレーション設定の VelocityScale オプションを調整すると良いでしょう。

参照

  • CS:S Mouse Optimization Guide - Windows ユーザーを対象にしていますが、原則的には Linux にも当てはまる部分があります。