IE 9에서의 GPU 렌더링에 의한 성능 이슈가 발생할 수 있다. Windows debugging

최근에 좀 오래된 PC에서 벼르다 IE 9을 윈도우 업데이트를 통해 인스톨하게 되었다. 사용에 그닥 어려움을 못 느꼈는데, 유달리 Flash 컨트롤이 많은 사이트에서는 High CPU 현상으로 사용에 어려움이 겪게 되었다. Flash 컨트롤 때문인가 할 수도 있지만, IE 9을 삭제한 이후에 IE 8에서는 해당 사이트에서 동일한 High CPU현상이 발생하지 않으므로, 그렇다고 보기 어려웠다. 왜 그런지 궁금한지라, 무심코 디버거를 붙여 봤더만,

 

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.dllNVIDIA Windows Vista WDDM driver 로 이를 사용하는 것으로 봐서는 IE 9에서의 하드웨어 렌더링 기능으로 기인한 듯 보인다. 오히려 이건 성능 향상으로 위한 IE 9에서의 새로운 조치가 아닌가? 하지만, 해당 쓰레드에서 High CPU가 발생하는 것으로 봐서는 문제가 있다.

 

일단, 해당 NVIDIA Driver를 최신으로 업그레이드 해봤지만, 크게 도움이 되지 않았다. 그러므로, 해당 비디오 드라이버가 충분한 하드웨어 렌더링 기능을 지원하지 못하는 듯 하다. 이 경우에는 하드웨어 렌더링을 사용할 수 없으므로, 인터넷 익스플러러의 인터넷 옵션의 고급 탭에서 설정 중 가속 그래픽의 GPU 렌더링대신 소프트웨어 렌더링 사용을 선택하여 하드웨어 렌더링을 사용하지 않고 소프트웨어 렌더링으로 처리할 수 있다. 물론, 설정 후 브라우져 재 시작하여 문제를 재현해봤으나, 문제가 재현되지 않음을 확인할 수 있었다.


덧글

댓글 입력 영역