Windows 10/11 높은 DPC latency 문제의 원인이 뭘까

 High DPC Latency Problem


  윈도우 10/11에서 높은 DPC Latency로 인한 불편함을 겪는 빈도가 작년부터 갑자기 급증했습니다. LatencyMon등으로 확인해보면 주로 NVidia 드라이버, 혹은 NTFS 드라이버 쪽에서, 혹은 둘 다에서 높은 DPC 레이턴시가 확인됩니다.

  이로 인한 증상으로는, 당연히 전체적인 Windows의 성능 저하가 있으며 체감되는(짜증나는) 증상으로는 Windows Explorer 혹은 일부 Windows Forms 앱, 대부분의 WPF 앱을 드래그/리사이즈 할 때 마우스에 렉이 걸리며 끌리는 현상이 발생하고, 그보다 더 심하게 드래그/리사이즈 하는 윈도우가 미친듯이 늦게 반응하는 현상이 있습니다.

원인 파악


  저는 작년 6월 혹은 7월부터 이러한 증상을 인지하기 시작했습니다. 사실 생각해보면 재작년 말 쯤부터 이런 증상이 있었던 것 같긴 한데 그건 정확하지 않고, 확실히 아 뭔가 있구나 하고 인지한 것은 위 시각부터입니다.

  인지하게 된 계기는 Windows 11 프리뷰 버전을 설치하면서 발생한 마우스 렉 및 Windows Explorer, 일부 Windows Forms app, 대부분의 WPF app의 리사이즈/드래그시 발생하는 끌림 현상을 목격하면서 이러한 문제가 있다는 것을 인지하게 됐습니다. 이런 증상이 무엇 때문인지 알 수 있게 도와주는 프로그램을 찾다가 LatencyMon을 알게 되었고, 해당 프로그램을 돌려보니 엔비디아 관련 드라이버 또는 NTFS 관련 드라이버, NTOS 관련 드라이버에서 평균 3ms, 최대 200ms의 DPC Latency가 발생했습니다.

  처음에는 Windows 11 문제인 줄 알고 Windows 10으로 롤백했었고, 실제로 롤백한 뒤 얼마동안은 괜찮았기에 Windows 10을 쭉 사용하려 했으나 얼마 지나지 않아 Windows 10에서도 비슷한 증상이 발생하기 시작했습니다. 여기서 비슷한 증상이라 적은 이유는, Windows Explorer/Forms/WPF 끌림 현상은 없었지만 Windows 11에서 발생한 다른 증상이 발생했기 때문입니다.

또 다른 증상


  그 다른 증상이란 바로 GPU를 사용하는 게임에서 발생하는 키보드 입력 지연입니다.
  롤, 마인크래프트, 콜오브듀티, 오버워치와 같은 FPS게임은 물론 Rimworld와 같은 시뮬레이션 게임 역시 얄짤없이 마우스는 바로바로 움직이지만 키보드 입력 및 마우스 클릭이 적게는 100ms 이상, 길면 20초(20,000ms) 이상 지연되는 현상이 생겼습니다.

  롤을 예로 들면, 게임 화면(상대방의 움직임, 나의 움직임, 미니맵, 스킬창 애니메이션 등)은 멀쩡히 아무 일 없는 듯 렉이 없이 보이고 마우스 역시 내가 손을 움직이는 대로 바로바로 반응해 움직이지만, 이동 명령(우클릭), 스킬 사용(QWERDF), 카메라 시점을 자신에게 고정(SPACE) 등의 클릭/키보드 입력은 위에 작성한 대로 지연이 발생했습니다.
  때문에 마치 200ms~20,000ms의 동적인 네트워크 지연(ping)이 발생하는 환경에서 게임을 하는 듯한 고통을 받게 됐습니다. 화면도 잘 보이고 적도 잘 보이고 나도 잘 보이고 마우스도 잘 움직이고 모든게 멀쩡한 듯 보이지만, 스킬을 발사하려 하면 1초 뒤, 혹은 3초 뒤, 심하면 20초 뒤에 현재 마우스 커서 위치에서 나가고(시전하려 했던 마우스 커서 위치가 아님. 마우스는 바로바로 이동하기에), 특히 위험한 상황에서 소환사 주문을 사용하려 했는데 그 때엔 나가지 않아서 죽고, 부활한 뒤에 뜬금없이 점멸이 사용될 때의 그 기분은 표현할 수가 없습니다.

  또 다른 예로, 배그를 들 수 있습니다. 마우스는 잘 움직이기에 시점은 자유자재로 전환됩니다. 위를 볼 수도, 옆을 볼 수도, 뒤를 볼 수도 있습니다. 하지만, 분명 왼쪽으로 가고자 A키를 눌렀지만, 그러기 위해서 뗀 W키가 떼졌다는 이벤트가 지연되어 왼쪽 대각선으로 3초정도 이동한 뒤 왼쪽으로 가지고, 그 때문에 당황해 S와 D를 누른 게 다시 5초 지연돼 또 5초동안 오른쪽 대각선 뒤로 이동하고... 정말 총체적 난국이었죠. 당연히 인벤토리 열기(TAB) 역시 지연돼 누른지 한참 뒤에 갑자기 인벤토리가 열리고, 앉기(CTRL), 기울이기(QE), 재장전(R), 발사(LMB), 조준(RMB) 모두 마찬가지로 지연이 발생합니다. 오로지 시점 전환만 바로바로 되고, 나머지는 모두 지연이 발생하는 것이죠.

원인을 찾아가는 과정


  차라리 컴퓨터라도 구렸다면 그러려니 했겠지만, 제 컴퓨터는 나름 플래그쉽 사양이기에 그럴 수도 없었습니다. 도대체 원인이 뭘까 악에 받쳐 찾기 시작했죠. 그러던 도중 LatencyMon을 사용하게 되고, 이것저것 시도하게 되었습니다.

  처음 시도한 것은 DISM++ 도구를 사용해 쓸데없는 서비스를 사용 안 함 설정하는 것이었습니다. GameDVR 서비스가 이러한 문제를 유발시킬 수 있다고 하기에 해당 서비스를 사용하지 않도록 설정했고, 제가 생각하기에 이런 문제를 유발시킬 수 있겠다 싶은 시스템 서비스/응용 프로그램 서비스를 모두 사용 안 함 처리했습니다.
  지금 생각하면 플라시보 효과 같지만, 조금 나아진 것 같았습니다. 하지만, 여전히 문제는 존재했죠.

  그래서 그 다음으로 시도해 본 것은 HPET 비활성화와 High Definition Audio Controller 비활성화, 기타 사용하지 않는 오디오 장치 비활성화입니다. 예로부터 HPET가 시스템에 성능 저하를 가져온다고 널리 알려져 있었기에 시도해봤지만, 역시 조금 나아지는 것 같다- 정도의 느낌일 뿐 문제는 그대로였습니다.

  그 다음에 시도한 것은 BIOS의 TPM 2.0 기능을 비활성화 하는 것이었습니다. 놀랍게도, 효과가 눈에 띄게 있었습니다. 여전히 간간히 증상이 약하게 생기긴 했지만, 초 단위로 지연되는 증상은 사라졌습니다.

  어리석게도 저는 이 정도로 줄었으니, MS나 NVidia의 업데이트 도중 뭔가 문제가 있었고 제가 그 문제를 방지하는 해결책을 찾은 줄 알았습니다. 실제로, 일부 유저는 이것만으로도 충분할 수 있습니다. (실험되지 않음)

  그러나 저는 그 약간의 딜레이조차 거슬렸기에(발생할 때 약 200ms~300ms), 더 나은 방법을 찾기 위해 인터넷을 뒤져봤습니다. 그러던 도중 IRQ 충돌 대기 시간 최적화 방법을 찾아냈고, MSITool을 사용해 권장 사항대로 인터럽트 모드와 우선 순위를 변경했습니다. 이것 역시 눈에 띄는 변화가 있었습니다. 여전히 50ms~60ms 정도의 체감 지연이 있었지만, 이제 충분히 게임을 플레이할 수 있는 상황이 된 것이죠.

다시 발생한 증상


  그리고 위에 적은 배그 증상이 발생했습니다. 롤은 플레이하는 데 아무런 문제가 없는데, 배그는 여전히 수 초에서 수십 초의 입력 지연이 발생했습니다. 이 때 전 깨달았죠. 제가 해결했다고 생각했던 것은 단지 임시 방편이었을 뿐이라는 걸. 사실 아무것도 해결된 건 없었던 것이고, 50ms에서 60ms의 레이턴시조차 발생하면 안 되는 것이었습니다. 아마도 롤이 저사양 게임이었던지라 50ms에서 60ms에서 머물렀을 뿐이지 고사양 게임에선 얄짤없이 지연이 발생하는 모양이었습니다. 그 근거는, PUBG의 해상도를 1280x720으로 낮추고 옵션 역시 매우 낮음으로 진행하면 지연이 없다시피 했지만 해상도를 한 단계 올릴 때마다, 또 옵션을 한 단계 올릴 때마다 지연이 발생하는 주기와 지연의 길이가 점점 늘어나 QHD 중간 옵션 이후부터는 플레이가 불가능할 정도로 문제가 심각해지기 때문입니다.

진정한 원인 파악


  그래서 생각했습니다. 제가 생각하기에, Windows 설정을 건드리면서 할 수 있는 것은 다 해봤다고 판단했습니다. 이렇게까지 했는데 문제가 계속 발생한다면 충분히 커뮤니티에 이슈가 됐을만 하지만 막상 검색해보면 동일하거나 비슷한 증상에 대한 글은 그리 많지 않았습니다.

  그렇다면 문제의 원인은 많은 유저가 공통적으로 사용하는 장치/드라이버/하드웨어에 있지 않을 것이라고 생각했습니다. 즉, NVidia나 Windows 10/11 그 자체가 아닌 다른 어딘가에 문제가 있을 것이라고 생각했습니다.

  그래서 곰곰히 기억을 더듬어 올라가봤죠. 처음에 도달한 곳은 작년 6월에서 7월, Windows 11 프리뷰 버전으로 업데이트하고 문제가 발생한 시점이었습니다. 하지만, Windows 10으로 롤백해도 같은 문제가 생겼죠.
  좀 더 오래 전으로 더듬어 올라가보니 문제가 없던 때는 재작년 말 쯤이었고, 작년 첫 우르프가 나왔을 때 이런 증상을 처음 겪게 되었다는 것을 알게 되었습니다.
  그래서 다시 기억을 더듬어 내려와보니, 그 때 쯤 바뀐 것이 딱 하나 있었습니다. 바로 안티바이러스 프로그램.

결론 도출 및 검증


  문제를 인지하기 전까지, 혹은 심각해지기 전까지는 Avast 안티바이러스 프로그램을 사용하고 있었습니다. 그러나 그 때 당시 Avast UI에 심각한 버그가 있어서 결국 구독을 취소하고 Avira 안티바이러스 프로그램으로 옮겼습니다. 그리고 얼마 뒤 Windows 10 업데이트가 있었고, 또 조금 뒤 Windows 11 프리뷰 빌드가 출시되었죠.

  시기가 딱 맞았습니다.

  설마 설마 하며 Avira 안티바이러스를 제거했습니다. 결과는? 당연히 모든 문제가 해결됐죠.

  겁나게 긴 DPC Latency 문제가 사라진 것은 물론, 100ms 미만의 적은 지연조차 싹 사라졌습니다. 원래 반응이 이렇게 빨랐나 싶을 정도로 게임이 바로바로 반응합니다. 탐색기는 다시 빠릿빠릿해졌고, 가끔씩 폴더를 열 때 내용이 그리 많지 않음에도 몇 초씩 걸리는 증상도 사라졌습니다. 

결론. Avira 안티바이러스가 문제였다. 그러나 복합적인 문제일 수 있다.


  일단 1차적인 결론은 Avira 안티바이러스가 문제였다고 볼 수 있습니다. COMODO 방화벽은 문제가 없는 것으로 확인됐고(Avira가 돌아갈 때도 켜져있었고 제거했을 때도 켜져있었지만 Avira를 제거하니 COMODO가 켜져있건 말건 지연이 말끔히 사라짐), 다른 안티바이러스 백신, 즉 Microsoft Windows Defender나 Avast를 재설치해도 전혀 지연 문제가 발생하지 않았기 때문이죠.

  그러나 Avira 안티바이러스만이 이 문제를 발생시켰다고 결론을 내리기는 힘들 것 같습니다. 일단 위에 적은 것처럼 제가 이 문제를 해결하기 위해 시도한 것들이 너무 많고(IRQ MSI mode, 서비스 사용 안 함 처리, HPET 비활성화, High Definition Audio 컨트롤러 비활성화, 사용하지 않는 오디오 장치 비활성화, ...), MS Windows Defender, Avira, Avast 외의 다른 백신을 사용해본 적이 없기 때문입니다.

  따라서 최종 결론은 Avira와 같은 기능을 사용하는 안티바이러스 백신이 충돌을 일으켜 DPC 레이턴시를 폭증시킬 수 있다가 되겠습니다.

  제 경우, Avast, MS Windows Defender, COMODO Firewall문제가 없습니다. 그러나 다른 백신은 어떻게 될 지 모르니, 동일한 증상을 겪는 분께서는 자신의 백신 혹은 프로그램이 충돌을 일으키진 않는지 확인해보시기 바랍니다. (예를 들어 PUBG의 경우 Fasoo DRM 소프트웨어와 충돌이 발생하면 이와 같은 증상이 생길 수 있다고 합니다. 그러나 게임이 아닌 Windows Explorer를 드래그하는데 드래그가 끌린다거나, 마우스 포인터가 두 개가 되어 한 개는 창과 같이 밀려버리고 한 개는 움직이는 대로 움직인다거나 한다면 저와 같은 증상일 가능성이 높습니다)

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭

테일즈위버 OST 전곡 모음