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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:マウス en:Mouse polling rate 高解像度マウスを購入したときは、マウスの精度を活用するために USB のポーリングレー...」)
 
 
(2人の利用者による、間の2版が非表示)
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|evhz}} ツールを使うことでマウスのリフレッシュレートを表示できます。
  +
  +
{{AUR|evhz-git}} パッケージをインストールして root で以下のコマンドを実行:
  +
  +
# evhz
  +
  +
{{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}} モジュールを使って "mousepoll" のカスタムレートを設定します。以下を {{ic|/etc/modprobe.d/modprobe.conf}} ファイルに追加してください:
 
   
  +
{{ic|usbhid}} [[カーネルモジュール]]の {{ic|mousepoll}} オプションを使うことでポーリングレートを設定できます。デフォルトの値は 0 で、デバイスによって要求された値が使用されます。
options usbhid mousepoll=[polling interval]
 
  +
  +
オプションの現在の値を確認するには:
  +
  +
{{hc|$ systool -m usbhid -A mousepoll|2=Module = "usbhid"
  +
mousepoll = "0"}}
  +
  +
設定を変更するには以下のファイルを作成:
  +
  +
{{hc|/etc/modprobe.d/usbhid.conf|2=options usbhid mousepoll=4}}
   
[polling interval] は上記の表における ''ms'' の数値に置き換えてください。えばポーリングレートを 500Hz に設定するには:
+
上記の例ではポーリングレートを 250Hz するよう要求しています。
   
  +
再起動せずにポーリング間隔を変更するには:
options usbhid mousepoll=2
 
   
  +
# modprobe -r usbhid && modprobe usbhid
再起動せずにポーリングレートを変更するには:
 
   
  +
{{Warning|2番目のコマンドが失敗した場合、USB マウスやキーボードが全て使えなくなります。マシンを再起動するか SSH で接続しないと操作できなくなります。}}
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.}}
 
   
  +
{{Note|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] オプションを調整すると良いでしょう。}}
{{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.}}
 
   
== 現在マウスレートの表示 ==
+
== 既知問題 ==
現在のマウスのリフレッシュレートを表示することができるツールが存在します (''evhz'' という名前です)。カスタマイズしたポーリングレートが適用されたかチェックするときに有用です。
 
   
  +
=== 要求したポーリングレートの半分でポーリングされる ===
[[AUR]] から {{AUR|evhz-git}} をインストールするか自分でコンパイルしてください:
 
  +
2015年5月現在、特定の設定ではデバイスのポーリングレートを 1000Hz (1ms) にできないというカーネルバグが存在します。[https://bbs.archlinux.org/viewtopic.php?pid=1528109 フォーラムスレッド] や [https://bugzilla.kernel.org/show_bug.cgi?id=60586 バグレポート] を見てください。
   
  +
デバイスを、異なるドライバーが適用された USB ポートに繋ぐことが回避策となることがあります。
[https://github.com/ian-kelling/evhz/raw/master/evhz.c evhz.c] を保存 ([https://github.com/ian-kelling/evhz evhz の github ページ])
 
   
  +
=== ポーリングレートが変更されない ===
次のコマンドでコンパイル:
 
  +
USB 3 ドライバー {{ic|xhci-hcd}} が {{ic|usbhid}} {{ic|mousepoll}} の設定を無視することがあります。[https://www.spinics.net/lists/linux-usb/msg94744.html linux-usb メーリングリストのメッセージ] や [https://bugzilla.kernel.org/show_bug.cgi?id=82571 バグレポート] を参照してください。
   
  +
{{ic|xhci-hcd}} モジュールはデバイスによるインターバル要求を受け入れるので、デバイスのハードウエアやファームウエアの設定ドキュメントを確認してください。
gcc -o evhz evhz.c
 
   
  +
デバイスを、異なるドライバーが適用された USB ポートに繋ぐと回避策となることがあります。
root で実行:
 
   
  +
他の回避策としては、BIOS の設定を変更するか、{{ic|xhci-hcd}} モジュールを[[ブラックリスト]]に入れて、xHCI を無効にする方法があります。しかし、xHCI を無効にすると、{{ic|ehci-hcd}} モジュールが利用され、USB 3 ポート全てが USB 2 相当に制限されます。
./evhz
 
   
  +
{{Tip|{{ic|/sys/kernel/debug/usb/devices}} の USB ハブデバイスにおける {{ic|S: Manufacturer}} の行を確認すると、利用されている {{ic|hcd}} ドライバーが確認できます。}}
もしくは、[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 にも当てはまる部分があります。

2021年2月19日 (金) 21:57時点における最新版

関連記事

高解像度マウスを購入したときは、マウスの精度を活用するために 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 で接続しないと操作できなくなります。

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

ノート: usbhid モジュールを initramfs イメージに組み込む場合、イメージにも /etc/modprobe.d/usbhid.conf を追加する必要があります。カーネルモジュール#/etc/modprobe.d/ 内のファイルを使うのノートを見てください。または、カーネルコマンドラインに usbhid.mousepoll=X を追加する方法もあります。カーネルモジュール#カーネルコマンドラインを使うを見てください。
ヒント: デフォルトのポーリング間隔よりも小さな値を使用する場合、マウスのアクセラレーション設定の VelocityScale オプションを調整すると良いでしょう。

既知の問題

要求したポーリングレートの半分でポーリングされる

2015年5月現在、特定の設定ではデバイスのポーリングレートを 1000Hz (1ms) にできないというカーネルバグが存在します。フォーラムスレッドバグレポート を見てください。

デバイスを、異なるドライバーが適用された USB ポートに繋ぐことが回避策となることがあります。

ポーリングレートが変更されない

USB 3 ドライバー xhci-hcdusbhid mousepoll の設定を無視することがあります。linux-usb メーリングリストのメッセージバグレポート を参照してください。

xhci-hcd モジュールはデバイスによるインターバル要求を受け入れるので、デバイスのハードウエアやファームウエアの設定ドキュメントを確認してください。

デバイスを、異なるドライバーが適用された USB ポートに繋ぐと回避策となることがあります。

他の回避策としては、BIOS の設定を変更するか、xhci-hcd モジュールをブラックリストに入れて、xHCI を無効にする方法があります。しかし、xHCI を無効にすると、ehci-hcd モジュールが利用され、USB 3 ポート全てが USB 2 相当に制限されます。

ヒント: /sys/kernel/debug/usb/devices の USB ハブデバイスにおける S: Manufacturer の行を確認すると、利用されている hcd ドライバーが確認できます。

参照

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