2008. 9. 16. 17:37

마우스 Polling Rate

일반적으로 PC 는 현재 연결되어 있는 주변장치들이 어떤 상태에 있는지, 또한 데이터 전송을 원하는지를 지속적으로 체크하여 제어한다. 이러한 전송제어 방식을 Polling 이라고 한다. 이 Polling 이 이루어지는 주기, 즉 Polling Rate 는 PS/2 포트의 경우 100Hz, USB 포트는 125Hz 가 기본값이며, 이는 곧 PC 가 10ms / 8ms 마다 한 번씩 주변 장치들을 체크하고 정보를 전송받는다는 의미다.
 
그런데 수 ms 마다 한 번씩 체크를 한다는 것은, 다시 말해 한 번의 데이터 전송이 이루어진 후 다시 갱신이 되기까지 수 ms 의 딜레이가 발생한다는 것과도 같은 의미다. 마우스의 경우 이러한 딜레이는 곧 반응 속도와 움직임의 부드러움과도 연관되는 부분이므로, 이러한 딜레이를 줄이기 위해선 Polling Rate 를 높여 줄 필요가 있다.
1000 / [마우스의 Polling Rate (Hz) 평균값] = [마우스의 반응 지연 시간 (ms) 평균값]
(예: Polling Rate 가 250Hz 일 경우: 1000 / 250 = 4 → 마우스 반응 지연 시간: 4ms)
Polling Rate 는 PS/2 포트의 경우 최대 200Hz 까지만 상향 가능하지만, USB 포트는 최대 1000Hz 까지 가능하다. 따라서 PS/2 보다는 USB 포트를 이용하는 것이 좋으며, 이 글에서도 역시 USB 의 Polling Rate 를 높이는 방법에 대해서만 설명하도록 하겠다.
 
우선 현재 USB 마우스가 어느 정도의 Polling Rate 로 작동하고 있는지 확인해 보자. 우리는 일반적으로 많이 쓰이는 MouseRate 프로그램이 아닌, DirectInput 을 이용해 보다 정확한 값을 측정하는 DirectInput MouseHz 를 사용할 것이다. 우선 해당 프로그램을 다운로드받아 실행한 다음, 마우스를 '최대한 빠른 속도로' 움직여 보자. 그러면 다음과 같은 화면이 나타날 것이다.
 
 


↑ DirectInput MouseHz 프로그램을 실행하고 마우스를 움직였을 경우 - 기본 상태
 
 
별도의 설정을 하지 않은 경우라면 우측 하단의 Average 값이 125Hz 로 나와 있을 것이다. 이는 앞서 말했듯 USB 장치의 Polling Rate 기본값이다. 그리고 좌측에 표시되는 History 값은 마우스 입력이 시스템에 반영되기까지의 지연 시간이다. 즉, 마우스를 움직인 직후부터 커서가 움직이기까지 걸리는 시간이 최대 8ms 까지 소요된다는 것이다. USB Polling Rate 를 높이게 되면 이러한 딜레이를 최대 1ms 까지로 줄일 수 있다.
 
Windows XP 의 경우 USB 장치 제어를 담당하는 usbport.sys 라는 시스템 파일이 있는데, 이 파일을 수정하면 Polling Rate 를 제어할 수 있다. 원래는 직접 해당 파일을 편집해야 하지만, 요즘은 이를 자동으로 해 주는 많은 패치 프로그램들이 있기 때문에 이것들을 사용하면 된다. 이 글에서는 XP-USB-Patcher 를 사용해 패치를 진행해 보도록 하겠다 (참고로, 되도록이면 안전모드 상에서 진행하는 것이 좋다).
 
프로그램을 실행하고 나서 아래의 [Patch] 버튼을 클릭하면 파일 선택 대화상자가 나타나는데, C:\Windows\System32\drivers 폴더 안에 있는 usbport.sys 파일을 선택해 준 다음 [확인] 을 누르면 다음 과정으로 진행된다.
 
 


↑ XP-USB-Patcher 실행 후 usbport.sys 파일을 선택한 모습
 
 
백업 파일을 만들겠냐는 질문이 나오면 하단의 [Yes] 버튼을 클릭하고 (이 경우 원본 파일은 usbport.sys.bak 로 저장된다), 1000Hz / 500Hz / 250Hz 중 원하는 설정에서 [Yes] 버튼을 누르면 된다. 값이 높을 수록 반응 딜레이가 짧아지지만, 너무 높은 값을 지정하면 그만큼 CPU 리소스가 많이 소모되기 때문에 심지어는 게임 상에서 마우스를 크게 움직이면 프레임 드롭이 발생하는 등의 부작용이 있을 수 있다. 따라서 사양이 충분치 않은 유저라면 500Hz 정도로 설정하는 것을 추천한다.
 
 


↑ Polling Rate 를 500Hz 로 지정한 모습
 
 
이렇게 패치를 하고 나서 재부팅을 한 다음 다시 DirectInput MouseHz 를 이용해 Polling Rate 를 측정해 보자. 정상 적용이 되었다면 대략 아래와 같이 Average 값이 500Hz 에 가깝게 나오고 History 부분의 딜레이 역시 작게 나올 것이다.
 
 


↑ Polling Rate 를 500Hz 로 변경한 이후 다시 측정한 결과
 
 
한 가지 유념할 것은, 이 Polling Rate 값 지정은 마우스 자체에 반영이 되는 것이 아니라 자신의 PC 상에 적용되는 설정이라는 것이다. Polling Rate 는 PC 자체가 주변 기기들의 상태나 데이터 전송 요청 여부를 체크하는 빈도수를 높이는 것이지 마우스 자체의 성능을 높이는 것은 아니다. 따라서 마우스 센서의 Pixel-Skipping 이나 Negative Acceleration 등을 원천적으로 해결해 주진 못한다. 또한 값이 너무 높을 경우 CPU 리소스가 많이 소모될 수 있으며 (하지만 최신 CPU 를 쓰고 있다면 성능이 충분하기 때문에 크게 걱정할 필요는 없다), 일부 USB 사운드 카드 등의 경우 작동에 이상이 발생할 수도 있으니 주의를 요한다.