윈도우 기본 프로세스들은 그 안에 어떤 Thread가 돌고 있는지 알 수 없다. 프로세스 목록을 보면 "System"이 CPU를 엄청 사용해대고 있는데, 왜지? 그냥 이대로는 알 수 없다. 게다가 더 짜증나는 건, 상시적으로 사용률이 10%를 넘어가니 노트북 팬이 계속 돌고 시끄럽다. 으악!

이렇게 어떤 프로그램이 CPU 사용 중인지 궁금한 적이 있을거다. 이럴 때, 필요한 건 프로세스 탐색기(Process Explorer)다. <윈도우에서 기본 제공하는 작업관리자와는 다른 것> 프로세스 탐색기는 열려 있거나 로드된 핸들 및 DLL 프로세스에 대한 정보를 표시한다. 다운로드 후 실행하면 다음과 같은 화면을 볼 수 있다.
프로세스 탐색기에서 자세히 알고 싶은 프로세스를 더블 클릭하면, 팝업창이 뜨면서 Threads탭을 통해 Thread들을 확인할 수 있다. 하지만 당연히도 "System" 프로세스에는 Thread가 표시되지 않는다. 그냥 0x000000000으로 나타난다. (일반적인 프로세스의 경우 Threads를 누르면 실행 중인 DLL 등이 보인다.) 
프로세스 탐색기로 확인할 수 없다는 걸 알았다. 다음으로 "윈도우즈 성능 분석 및 시스템 평가 도구", Windows ADK (Assessment and Deployment Kit)를 사용해 보자. Windows ADK 안에는 Windows Performance Recorder와 Windows Performance Analyzer가 포함되어 있다. 이 2개의 도구를 사용하면 시스템 프로세스들도 자세히 볼 수 있다.
Windows용 이벤트 추적(ETW)을 기반으로 하는 성능 기록 도구다. 먼저 관리자 권한으로 실행된 파워쉘에서 wpr 명령어를 통해 윈도우즈에서 발생하는 이벤트를 기록한다. 짧은 시간동안 기록한다 해도 이벤트수가 많아 생각보다 용량이 크다. (저장하는데 시간도 좀 소요된다.)
PS C:\>
PS C:\>
PS C:\> wpr -start CPU -filemode
아무런 반응이 나타나지 않음. <기록시작>
.
.
PS C:\>
PS C:\>
PS C:\> wpr.exe -stop C:\dev\rec.etl
Press Ctrl+C to cancel the stop operation.
100% [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]
The trace was successfully saved.

WPR로 기록된 파일을 분석하는 툴이다. WPR을 통해 저장된 파일(*.elt)을 Open file..로 오픈한다. 오픈까지 시간이 약간 소요된다. 
파일이 정상적으로 열리면, Generic Events, CPU Usage, Memory Utilization이 나온다. 내가 궁금한 것은 CPU Usage니까, Computation 부분을 더블클릭한다. 
그러면 오른쪽에 Series에서 실행 중인 프로세스를 알 수 있다. 여기서는 System을 살펴보겠다. 먼저 System을 더블클릭하고, 그 밑에 Root를 더블 클릭한다. 그러면 System 프로세스를 자세히 볼 수 있게 된다. Weight로 정렬해서 nvlddmkm.sys가 가장 사용률이 높다는 점을 찾을 수 있다.

찾아보니, nvlddmkm.sys는 그래픽 카드와 Windows 커널 간의 저수준 통신을 담당하는 드라이버로 확인되었다. 그래픽 카드가 문제의 원인일 수 있다는 점을 알았으니, NVIDIA App 통해 모든 드라이버와 관련 프로그램을 최신 버전으로 업데이트해 본다. 그러자 더 이상 동일한 현상이 발생하지 않았다.