Mouse polling rate
If you have invested in a high resolution mouse, adjusting the USB polling rate is a common trick to utilise the added precision it brings. The polling rate (or report rate) determines how often the mouse sends information to your computer. Measured in Hertz (Hz), this setting equates to lag time (in ms).
By default, the USB polling rate is set at 125 Hz. The table below represents combinations of Hz values and their corresponding delay time:
Hz | ms |
---|---|
1000 | 1 |
500 | 2 |
250 | 4 |
125 | 8 |
100 | 10 |
If the polling rate is set at 125 Hz, the mouse cursor can only be updated every 8 milliseconds. In situations where lag is critical (for example games), it is useful to decrease this value to as little as possible. Increasing the polling interval will improve precision at the trade-off of using more CPU resources, therefore care should be taken when adjusting this value.
Contents
Setting the polling rate
Here we are using the usbhid
module of the kernel to set a custom "mousepoll" rate. Add the following line according to Kernel modules#Setting module options:
/etc/modprobe.d/modprobe.conf
options usbhid mousepoll=[polling interval]
The [polling interval]
is a number in ms from the table above. For example, to set a polling rate of 500Hz:
options usbhid mousepoll=2
To change the polling rate without rebooting
# modprobe -r usbhid && modprobe usbhid
Then unplug and replug your mouse.
Displaying current mouse rate
A tool exists (named evhz) that can display the current mouse refresh rate -- useful when checking that your customized polling settings have been applied.
You can install it from AUR evhz-gitAUR or compile it yourself:
Save evhz.c (its github page)
Compile it with:
$ gcc -o evhz evhz.c
Then execute as root:
# ./evhz
Alternatively, Windows tools such as DirectX mouserate checker can be run using WINE.
Displaying device polling rate
Device information including polling rates can be found in debugfs if it is mounted and you have root access.
First, identify the Bus and Device number of your device with:
$ lsusb
Then print out the file as root and find the corresponding bus and device output:
# cat /sys/kernel/debug/usb/devices
The Ivl
field indicates the polling interval, thus 1/Ivl is the polling rate. For example, Ivl=1ms
would be a 1000Hz polling rate.
Further Reading
- CS:S Mouse Optimization Guide -- largely aimed at Windows users, though the same principles apply for Linux.