관리 메뉴

kisoo

Kernel Mode에서의 High CPU issue 본문

01.About Programming /3.Debug Lab

Kernel Mode에서의 High CPU issue

JamesK78 2009. 3. 30. 15:32

High CPU 문제는 Memory Leak 문제와 함께 troubleshooting 하기가 껄끄러운 문제이다. 대부분이 적절한 Tool의 도움을 받아야만 풀 수 있다는 것도 유사하다. 일반적으로 High CPU Issue Performance Monitor의 도움을 받아 특정 Application CPU를 소비하고 있다는 것을 확인할 수 있으며, High CPU 기간 동안 메모리 덤프를 수집하여 누가 지속적으로 CPU time을 잡아 먹고 있는 지를 확인하는 작업이 일반적이었다. 이러한 작업은 kernel mode에서 CPU를 소비하는 경우에 어려움이 있었다. 문제 시점에 kernel dump를 수집한다고 해도 이는 snapshot 이기 때문에 High CPU가 지속되는 과정을 단정 짓기 어려웠다. 그러므로, Kernel trace를 위한 CPU Sampler 와 같은 Tool이 필요한데, Xperf 라는 Tool은 이러한 CPU Sampler를 제공하는 유용한 Tool이다. Perfmon 이나 필요에 의한 Kernel Dump User Dump와 함께 Check 할 경우에 문제를 보다 정확하게 좁힐 수 있다. 특히, High CPU rates Callstack을 제공하는 데, 이는 XP Windows 2003과 같은 Vista 이전 OS에서는 제공되지 않아서 안타깝다.

 

Xperf 는 다음의 Link에서 download 받을 수 있다.

http://msdn.microsoft.com/en-us/performance/cc752957.aspx

 

Download 받으면, trace capture 하는 xperf.exe View할 수 있는 xperfview.exe를 제공한다. 먼저, trace를 수집하는 방법은 여러 가지가 존재하지만, 다음과 같이 간단하게 수집할 수 있다. Vista에서 Administrator 권한 하에서 작업을 한다.

 

          xperf –on DiagEasy

 

그리고, trace 수집이 요구되는 일정기간이 지난 후에 다음과 같이 trace를 종료하여 자료를 수집한다.

 

          xperf –d ktlog.etl

 

이와 같이 High CPU 상태에서의 Kernel trace log를 수집할 수 있다. 그리고, 해당 etl file xperfview.exe에서 open하여 확인한다.

아래의 데이터는 CPU sampling by process의 화면이다.


메뉴에 Graphs 항목이 존재하는 데, CPU Sampling 외에도 CPU Disk utilization by process 또는 thread, interrupt service routine 이나 deferred procedure call, hard faults 그리고, Disk IO detail한 정보들을 graph로 확인할 수 있다. 특히, CPU sampling CPU consuming rates에 따른 Callstack 정보를 확인할 수 있는 데, 해당 정보를 얻기 위해서는 Symbol Files을 맞춰 줄 필요가 있다. Trace 메뉴에 configure symbol paths Click 하면, _NT_SYMBOL_PATH 입력 창이 있는 데, 여기에 Microsoft public symbol path(srv*c:\pubsymbols*http://msdl.microsoft.com/download/symbols )를 입력한다. 그리고, trace 메뉴의 load symbols Check 하면, CPU sampling 시에 Symbols load 될 것이다. 그리고, 마우스를 이용하여 상위 그림에서처럼 임의의 view select 할 수 있고 또는 전체 view select 한 후에 simple summary table click 하면 CPU sampling 정보를 얻을 수 있다.

반드시 load symbols check되어 있는 것을 확인해야 한다. 그래야만 아래 sample data처럼, module에 대한 function 정보를 추출할 수 있다.


CPU sampling data를 보면, 직관적으로 %Weight정보를 통해서 Process CPU rates을 확인할 수 있으며, Module 정보에 따른 어떤 Function CPU를 많이 소비하고 있는 지 여부를 확인할 수 있으므로, 해당 정보를 통해 High CPU Issue를 보다 쉽게 접근할 수 있다. 보다 구체적인 Callstack 정보는 summary table을 Click 하면 다음과 같이 stack 정보를 알 수 있다. stack 정보는 Callstack 정보이므로, 오른쪽 마우스를 Click하여 해당 stack을 Copy하여 확인하는 것이 필요할 수 있다.
Comments