최근에 좀 오래된 PC에서 벼르다 IE 9을 윈도우 업데이트를 통해 인스톨하게 되었다. 사용에 그닥 어려움을 못 느꼈는데, 유달리 Flash 컨트롤이 많은 사이트에서는 High CPU 현상으로 사용에 어려움이 겪게 되었다. Flash 컨트롤 때문인가 할 수도 있지만, IE 9을 삭제한 이후에 IE 8에서는 해당 사이트에서 동일한 High CPU현상이 발생하지 않으므로, 그렇다고 보기 어려웠다. 왜 그런지 궁금한지라, 무심코 디버거를 붙여 봤더만,
-ml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />-ml:namespace prefix = o />
0:026> !runaway
User Mode Time
Thread Time
4:91c 0 days 0:06:55.040
14:4f8 0 days 0:00:00.811
12:434 0 days 0:00:00.327
11:8dc 0 days 0:00:00.296
15:b48 0 days 0:00:00.046
…
0:026> g
…
(b40.4ac): Break instruction exception - code 80000003 (first chance)
eax=7ffd6000 ebx=00000000 ecx=00000000 edx=77ddd7eb esi=00000000 edi=00000000
eip=77d73370 esp=126bfe90 ebp=126bfebc iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
ntdll!DbgBreakPoint:
77d73370 cc int 3
0:027> !runaway
User Mode Time
Thread Time
4:91c 0 days 0:07:02.450
14:4f8 0 days 0:00:00.826
12:434 0 days 0:00:00.327
11:8dc 0 days 0:00:00.312
15:b48 0 days 0:00:00.046
….
4번 쓰레드에서 뭔가 열심히 하고 있는 것으로 보여, 쓰레드를 살펴볼 수 밖에…
ChildEBP RetAddr Args to Child
02caa1a8 6ce10316 12466ed4 085be3dc 0000104c nvd3dum!QueryOglResource+0x13b643
02caa2e0 6ce04988 00000000 00000108 00000413 nvd3dum!QueryOglResource+0x7f496
02caa378 6ce04b67 00000000 00000000 00000413 nvd3dum!QueryOglResource+0x73b08
02caa3ac 6cd8e3c5 07c81be0 00000000 00000000 nvd3dum!QueryOglResource+0x73ce7
02caa5c8 6d25e61d 02506800 02caa5dc 00000000 nvd3dum!OpenAdapter+0xffffd5c5
02caa618 6d260d0a 01653248 00000000 01638430 D3D10Level9!LDDMUMDevice::UnderlyingCopySubResource+0xb7
02caa664 6d262bc2 02caa80c 02caa834 02caa85c D3D10Level9!CResourceCopyProxy::GPUCopyMips+0xcc
02caa698 6d264e25 02caa834 02caa80c 02caa85c D3D10Level9!CResourceCopyProxy::GPUCopy+0x53
02caa7e8 6d265810 02caa834 02caa80c 02caa85c D3D10Level9!CResourceCopyProxy::Copy+0x456
02caa884 6ec9e8de 0159b8b8 01653248 00000000 D3D10Level9!UMDevice::ResourceCopyRegion_Default+0x71
02caa8bc 627a01a9 0159a4b8 00000031 00000000 d3d10_1core!CBaseResource<ID3D10Resource,6>::CopySubresourceRegion+0x14e
02caa994 62c9800e 07a13878 016531d8 02caaa10 MSHTML!CDXSystem::CopyTexture+0x195
02caaa50 62c980e7 07a13878 016383c0 00000000 MSHTML!CDXSystem::ReadbackTexture+0x1ae
02caaa70 62caa2d0 016383c0 00000003 00000000 MSHTML!CDXSystem::SaveTextureAsWICBitmap+0x66
02caaa9c 62caa6d4 00000000 00000000 0b388820 MSHTML!CDXSwapChainTargetSurface::SaveAsWICBitmap+0x65
02caaac8 62ca5c17 002f10a8 00000002 00000000 MSHTML!CStagingSurfaceDCHolder::Initialize+0xa7
02caaae0 62a3c490 002f10a8 00000000 02caab14 MSHTML!RefCounted<CStagingSurfaceDCHolder,SingleThreadedRefCount>::Create<IDCHolder,CDXRenderTarget *,CRect const *>+0x74
02caab60 626e41c5 02cad980 02cada7c 02caadd4 MSHTML!CGDIRenderMode::OnBegin+0x84
02caab8c 62bdeb0c 002f10a8 00000000 02cada7c MSHTML!CDXRenderTarget::GetDC+0x1e0
02caabbc 62bdcac7 02caac00 02cab39c 02cad8e0 MSHTML!TSmartResource<CDispSurfaceDCMode>::Acquire<CDispSurface *,CRect *>+0x6a
02caac18 62bdc773 0ccacd88 02cad8e0 00000001 MSHTML!CPeerHolder::DrawPeerWithLegacyPath+0x272
02caade8 62bb2b7e 0ccacd88 02caae20 00000002 MSHTML!CPeerHolder::Draw+0x346
02caae74 62bb29da 00000004 02cab25c 02cab24c MSHTML!CElement::DrawClientLayers+0x26e
02caaf1c 62ded213 00000002 02cab25c 02cab24c MSHTML!CElement::DrawClientLayers+0xc6
02caaf48 62dfea69 02cab25c 02cab24c 02cad980 MSHTML!CLayoutBlock::DrawClientLayers+0x67
02caaf7c 62e271dc 02cab25c 02cab24c 02cad980 MSHTML!HtmlLayout::ContainerBox::DrawClientLayers+0x4f
02cab284 62a996a3 0cba9c98 079ce9c0 02cab418 MSHTML!CDispNode::DrawAtWindowTop+0x27e
02cab354 628f81e5 02cab4c4 00000000 04001200 MSHTML!CDispRoot::DrawEntire+0x254
02cab498 628f7a51 079ce9c0 02cab4c4 003007ec MSHTML!CDispRoot::DrawRoot+0x2d2
02cad89c 62882107 003007ec 00000000 00000000 MSHTML!CView::RenderView+0x1f1
02cada90 62881eac 00300608 00000001 07930390 MSHTML!CDoc::PaintWorker+0x408
02cadaa8 629a290a 00300238 00000000 000ca59d MSHTML!CPaintController::OnUpdateBeat+0x42
02cadad0 629a2ffc 00300238 00000ae4 07930390 MSHTML!CPaintBeat::OnBeat+0x1f0
02cadaf4 628819ff 07930390 00000000 00300238 MSHTML!CPaintBeat::OnVSyncMethodCall+0xbe
02cadb38 62944bec 2a343c98 00000000 0000000f MSHTML!GlobalWndOnPaintPriorityMethodCall+0x104
02cadb80 77a186ef 00040270 0000081f 00000000 MSHTML!GlobalWndProc+0x160
02cadbac 77a179cc 62944afe 00040270 0000000f USER32!InternalCallWinProc+0x23
02cadc24 77a170f4 00000000 62944afe 00040270 USER32!UserCallWinProcCheckWow+0xe0
02cadc80 77a1738f 005741b8 0000000f 00000000 USER32!DispatchClientMessage+0xda
02cadca8 77d8627e 02cadcc0 00000018 02cadd0c USER32!__fnDWORD+0x24
02cadcd4 77a17ba7 77a17bba 02cadd74 2a082903 ntdll!KiUserCallbackDispatcher+0x2e
02cadcd8 77a17bba 02cadd74 2a082903 002a3668 USER32!NtUserDispatchMessage+0xc
02cadd1c 77a18e9c 62944afe 00000000 02cafe54 USER32!DispatchMessageWorker+0x3d5
02cadd2c 6f561acc 02cadd74 0027b498 0027b4b4 USER32!DispatchMessageW+0xf
02cafe54 6f581996 0027b498 00276e98 763215a2 IEFRAME!CTabWindow::_TabWindowThreadProc+0x722
02caff10 763215b0 01592ba8 002720e0 02caff38 IEFRAME!LCIETab_ThreadProc+0x317
02caff20 6f56fcdb 00276e98 00000000 00000000 iertutil!CIsoScope::RegisterThread+0xab
02caff38 76631114 002720e0 02caff84 77d9b429 IEFRAME!Detour_DefWindowProcA+0x6c
4번 쓰레드는 MSHTML에서 온 렌더링 쓰레드로 보인다. nvd3dum.dll은 NVIDIA Windows Vista WDDM driver 로 이를 사용하는 것으로 봐서는 IE 9에서의 하드웨어 렌더링 기능으로 기인한 듯 보인다. 오히려 이건 성능 향상으로 위한 IE 9에서의 새로운 조치가 아닌가? 하지만, 해당 쓰레드에서 High CPU가 발생하는 것으로 봐서는 문제가 있다.
일단, 해당 NVIDIA Driver를 최신으로 업그레이드 해봤지만, 크게 도움이 되지 않았다. 그러므로, 해당 비디오 드라이버가 충분한 하드웨어 렌더링 기능을 지원하지 못하는 듯 하다. 이 경우에는 하드웨어 렌더링을 사용할 수 없으므로, 인터넷 익스플러러의 인터넷 옵션의 고급 탭에서 설정 중 가속 그래픽의 “GPU 렌더링대신 소프트웨어 렌더링 사용”을 선택하여 하드웨어 렌더링을 사용하지 않고 소프트웨어 렌더링으로 처리할 수 있다. 물론, 설정 후 브라우져 재 시작하여 문제를 재현해봤으나, 문제가 재현되지 않음을 확인할 수 있었다.
최근 덧글