90年代から00年代初頭にかけて、Windowsはよく落ちると言われていた。その時に見かけるのがBSOD (Blue Screen Of Death)と呼ばれる、俗にいうブルー・スクリーンだ。Windows 10の評判は悪いものの、安定稼働にかけては抜群で、ブルー・スクリーンを見かける機会は極端に減ってしまった。とはいえ避けられない事態はあるものだ。
最近、DPC_WATCHDOG_VIOLATIONにより、頻繁にPCが停止する現象に遭遇している。件の障害は、プロセスやドライバが要求されている割込み時間を超えてなお、稼働し続けることにより、所定時間内の応答が得られない場合に生じるものだ。
docs.microsoft.com
障害が発生するとPCはフリーズし、その後ブルー・スクリーンの表示と共にメモリ・ダンプを取得する。5~10分で取得を終えると、PCは再起動する。ユーザーには何が起こったのか全く分からない。
メモリ・ダンプはmemory.dmpというファイルに記録されており、この内容を調べることで、障害解決の指針を得ることができる。このエントリではmemory.dmpを解析するWinDbgのダウンロードから、それを用いた追跡までの手順を紹介する。
WinDbg
docs.microsoft.com
WinDbgはいわゆるデバッガだ。Windows SDKに含まれている。Windows SDKはVisual Studioの追加コンポーネントとしてインストールできるし、単体でもインストールすることができる。
ここでは単体インストールで、特にWinDbgのみをインストールする。次のサイトからインストーラをダウンロードできる。
ダウンロードを実行すると、必要なコンポーネントの選択画面が表示される。「Debugging Tools for Windows」のみを選択する。WinDbgはスタート・メニュー内のフォルダ、Windows Kits内に配置される。
メモリ・ダンプの解析
動作環境のCPUに即したWinDbgを「管理者として実行」する。ファイル・メニューから「Open Crash Dump」を選択し、memory.dmpを開く。
memory.dmpは通常、次のパスに出力されるので、これをそのまま指定すればよい。
%SystemRoot%\MEMORY.DMP
それぞれの環境でのmemory.dmp出力を確認するには、コントロールパネルの次の箇所を参照する。
システム\システムの詳細設定\起動と回復
memory.dmpを開いたら、ハイパーリンク「analyze -v」をクリックする。デバッガによる解析が始まる。
解析によって得られる情報、並びにその解釈は環境次第だ。ここから先の記述は、私が利用している環境に依存した内容だ。参照している解析結果は、このエントリ末尾に掲載している。
メモリ・ダンプ解析結果の解釈
事例1:ドライバ起因
DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000001, The system cumulatively spent an extended period of time at
DISPATCH_LEVEL or above. The offending component can usually be
identified with a stack trace.
Arg2: 0000000000001e00, The watchdog period.
Arg3: fffff80233a65378, cast to nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, which contains
additional information regarding the cumulative timeout
Arg4: 0000000000000000
先頭から順番に解釈していく。まず発生したエラーについての説明がある。ここではDPC_WATCHDOG_VIOLATION (133)について、障害発生時の状況が出力されている。
エントリ冒頭で、該当エラーの公式情報ページを紹介した。該当ページで紹介されているParameter 1~4が、出力結果のArg1~4に相当する。障害発生時のパラメータに何が指定されていたか、が示されている。
私は障害の原因を知りたいので、この情報は重要ではない。
「Debugging Details:」以降の詳細情報を読み進めていく。構成環境に関する情報が中心だが、気になる情報が2点含まれていた。ドライバの稼働に何らかの障害があり、原因となっているドライバはTHPanel.exeのようだ。
DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT
BUGCHECK_STR: 0x133
PROCESS_NAME: THPanel.exe
THPanel.exeとはThunder Masterという、Palit社のビデオ・ボードの動作状況を監視しているアプリケーションだ。
www.palit.com
この解析から、障害解消に向けた対応として、次の2つの指針に至る。
指針1 | Thunder Masterの最新版をインストールする。 障害再発生時、WinDbgを実行する。 |
指針2 | Thunder Masterをアンインストールする。 |
いずれの指針を採用するにせよ、次の障害が発生した際にWinDbgを再実行し、必要な対応を積み重ねていくことになる。
事例2:アプリケーション起因
DPC_WATCHDOG_VIOLATIONの原因は、必ずしもドライバであるとは限らない。例えばChromeが障害を引き起こす場合もあるのだ。このような具合だ。
DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT
BUGCHECK_STR: 0x133
PROCESS_NAME: chrome.exe
このような場合、対応には次の指針が考えられる。
指針1 | Chrome最新版がリリースされているならば、それを利用して様子を見る。 |
指針2 | Canary版、ベータ版など、安定版以外のものがインストールされているならば、それらをアンインストールする。 |
指針3 | あまりに問題が多発するようならば、Chromeを諦め、他のブラウザへ乗り換える。 |
余談
WinDbgはMicrosoft Storeでも配布されているのだが、2019年9月15日時点ではPreview版だ。この投稿で紹介しているものと比べて機能が豊富なのだが、インタフェイスが異なっている。Preview版はMicrosoft Storeからダウンロードできる。
memory.dmp
🔎memory.dmp
Microsoft (R) Windows Debugger Version 10.0.18362.1 AMD64 Copyright (c) Microsoft Corporation. All rights reserved. Loading Dump File [C:\Windows\MEMORY.DMP] Kernel Bitmap Dump File: Kernel address space is available, User address space may not be available. Symbol search path is: srv* Executable search path is: Windows 10 Kernel Version 17134 MP (8 procs) Free x64 Product: WinNt, suite: TerminalServer SingleUserTS Built by: 17134.1.amd64fre.rs4_release.180410-1804 Machine Name: Kernel base = 0xfffff802`33619000 PsLoadedModuleList = 0xfffff802`339c62b0 Debug session time: Wed May 15 00:51:00.908 2019 (UTC + 9:00) System Uptime: 0 days 12:38:11.735 Loading Kernel Symbols ............................................................... ................................................................ ................................................................ ................... Loading User Symbols PEB is paged out (Peb.Ldr = 00000000`00991018). Type ".hh dbgerr001" for details Loading unloaded module list ................. For analysis of this file, run !analyze -v 0: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* DPC_WATCHDOG_VIOLATION (133) The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL or above. Arguments: Arg1: 0000000000000001, The system cumulatively spent an extended period of time at DISPATCH_LEVEL or above. The offending component can usually be identified with a stack trace. Arg2: 0000000000001e00, The watchdog period. Arg3: fffff80233a65378, cast to nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, which contains additional information regarding the cumulative timeout Arg4: 0000000000000000 Debugging Details: ------------------ ************************************************************************* *** *** *** *** *** Either you specified an unqualified symbol, or your debugger *** *** doesn't have full symbol information. Unqualified symbol *** *** resolution is turned off by default. Please either specify a *** *** fully qualified symbol module!symbolname, or enable resolution *** *** of unqualified symbols by typing ".symopt- 100". Note that *** *** enabling unqualified symbol resolution with network symbol *** *** server shares in the symbol path may cause the debugger to *** *** appear to hang for long periods of time when an incorrect *** *** symbol name is typed or the network symbol server is down. *** *** *** *** For some commands to work properly, your symbol path *** *** must point to .pdb files that have full type information. *** *** *** *** Certain .pdb files (such as the public OS symbols) do not *** *** contain the required information. Contact the group that *** *** provided you with these symbols if you need this command to *** *** work. *** *** *** *** Type referenced: TickPeriods *** *** *** ************************************************************************* KEY_VALUES_STRING: 1 PROCESSES_ANALYSIS: 1 SERVICE_ANALYSIS: 1 STACKHASH_ANALYSIS: 1 TIMELINE_ANALYSIS: 1 DUMP_CLASS: 1 DUMP_QUALIFIER: 401 BUILD_VERSION_STRING: 17134.1.amd64fre.rs4_release.180410-1804 SYSTEM_PRODUCT_NAME: To Be Filled By O.E.M. SYSTEM_SKU: To Be Filled By O.E.M. SYSTEM_VERSION: To Be Filled By O.E.M. BIOS_VENDOR: American Megatrends Inc. BIOS_VERSION: P7.10 BIOS_DATE: 11/18/2016 BASEBOARD_MANUFACTURER: ASRock BASEBOARD_PRODUCT: H170 Performance BASEBOARD_VERSION: DUMP_TYPE: 1 BUGCHECK_P1: 1 BUGCHECK_P2: 1e00 BUGCHECK_P3: fffff80233a65378 BUGCHECK_P4: 0 DPC_TIMEOUT_TYPE: DPC_QUEUE_EXECUTION_TIMEOUT_EXCEEDED CPU_COUNT: 8 CPU_MHZ: af8 CPU_VENDOR: GenuineIntel CPU_FAMILY: 6 CPU_MODEL: 5e CPU_STEPPING: 3 CPU_MICROCODE: 6,5e,3,0 (F,M,S,R) SIG: C2'00000000 (cache) C2'00000000 (init) BLACKBOXBSD: 1 (!blackboxbsd) BLACKBOXPNP: 1 (!blackboxpnp) DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT BUGCHECK_STR: 0x133 PROCESS_NAME: THPanel.exe CURRENT_IRQL: d ANALYSIS_SESSION_HOST: PAULOWNIA ANALYSIS_SESSION_TIME: 05-15-2019 10:58:44.0495 ANALYSIS_VERSION: 10.0.18362.1 amd64fre LAST_CONTROL_TRANSFER: from fffff802337ee187 to fffff802337c30a0 STACK_TEXT: fffff802`35d6ab78 fffff802`337ee187 : 00000000`00000133 00000000`00000001 00000000`00001e00 fffff802`33a65378 : nt!KeBugCheckEx fffff802`35d6ab80 fffff802`3365a1ed : 00005248`fc641769 fffff802`32c7b180 00000000`00200246 00000000`002c6cef : nt!KeAccumulateTicks+0x190487 fffff802`35d6abe0 fffff802`3365b2d3 : fffff780`00000300 00000000`00000000 00000000`002c6cef 00000000`00000000 : nt!KiUpdateRunTime+0x5d fffff802`35d6ac30 fffff802`33f6c883 : 00005248`fc635aec 00000000`00000020 00000000`00000000 fffff802`35d63a00 : nt!KeClockInterruptNotify+0x8f3 fffff802`35d6af40 fffff802`33720a65 : fffff802`33fcdcb0 fffff802`35d63a80 ffffd881`53c80c80 fffff802`35d63d28 : hal!HalpTimerClockInterrupt+0x63 fffff802`35d6af70 fffff802`337c495a : fffff802`35d63a80 fffff802`33fcdcb0 fffff802`35d63cb8 fffff802`35d63d28 : nt!KiCallInterruptServiceRoutine+0xa5 fffff802`35d6afb0 fffff802`337c4e47 : 00000000`00000000 ffff9d04`a3b53000 00000000`00000000 00000000`00000000 : nt!KiInterruptSubDispatchNoLockNoEtw+0xea fffff802`35d63a00 fffff802`33658717 : ffff9d04`a3b53000 fffff808`18456b6f ffff9d04`a3b53000 fffff802`35d63d60 : nt!KiInterruptDispatchNoLockNoEtw+0x37 fffff802`35d63b90 fffff802`33658457 : fffff802`35d63cb8 ffff9d04`926ad000 ffff9d05`7f79a1f0 fffff802`00000002 : nt!EtwpLogKernelEvent+0x207 fffff802`35d63c60 fffff802`336579bb : 00000000`00000016 00000000`00000000 ffff9d04`a7473080 00000069`a3a9d00a : nt!KiExecuteAllDpcs+0x3d7 fffff802`35d63da0 fffff802`337c9ff5 : 00000000`00000000 fffff802`32c7b180 ffff8000`56c4e0d0 ffffd881`53c80c80 : nt!KiRetireDpcList+0x1db fffff802`35d63fb0 fffff802`337c9df0 : ffffd881`53c80c80 fffff802`33f6e4e6 00000000`00000000 ffff9d04`9f8c08d0 : nt!KxRetireDpcList+0x5 ffff8000`56c4e010 fffff802`337c9725 : ffff9d04`a2868000 fffff802`337c4281 00000000`00000000 ffffd881`53c80c80 : nt!KiDispatchInterruptContinue ffff8000`56c4e040 fffff802`337c4281 : 00000000`00000000 ffffd881`53c80c80 ffff9d04`a2869290 fffff808`185335fb : nt!KiDpcInterruptBypass+0x25 ffff8000`56c4e050 fffff808`1850f39e : fffff808`185387c4 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiChainedDispatch+0xb1 ffff8000`56c4e1e8 fffff808`185387c4 : 00000000`00000000 00000000`00000000 00000000`00000000 ffff9d04`9f8c08d0 : nvlddmkm+0x1af39e ffff8000`56c4e1f0 fffff808`1853842d : ffff9d04`00000000 ffff9d04`a2868000 00000000`00000001 00000000`0010a1c4 : nvlddmkm+0x1d87c4 ffff8000`56c4e260 fffff808`185384a8 : ffff8000`00000000 ffff8000`00000000 ffff8000`00000000 00000000`00000000 : nvlddmkm+0x1d842d ffff8000`56c4e2d0 fffff808`187c3afc : 00000000`00009800 ffff9d05`7f8d5210 ffff9d04`a283b8c0 00000000`00000000 : nvlddmkm+0x1d84a8 ffff8000`56c4e310 fffff808`187c27a6 : 00000000`00000000 ffff9d04`a2868000 ffff9d04`a283b8c0 00000000`000001c4 : nvlddmkm+0x463afc ffff8000`56c4e350 fffff808`188e9437 : 00000000`00000000 ffff8000`56c4e471 ffff8000`56c4e6b0 ffff9d04`00000000 : nvlddmkm+0x4627a6 ffff8000`56c4e3a0 fffff808`18960035 : ffff9d04`a2868000 00000000`00000000 00000000`00000000 ffff9d04`a2868000 : nvlddmkm+0x589437 ffff8000`56c4e3f0 fffff808`18a92d20 : ffff9d04`a283b8c0 ffff8000`56c4e581 ffff9d04`a2868000 fffff808`18a93631 : nvlddmkm+0x600035 ffff8000`56c4e4c0 fffff808`1896272d : ffff8000`56c4e9f0 b1000000`00000608 ffff9d04`a2868000 fffff808`185360d8 : nvlddmkm+0x732d20 ffff8000`56c4e5d0 fffff808`18964fe3 : ffff9d04`a28c1000 ffff8000`0005e891 ffff8000`56c4e721 ffff9d04`a28c1000 : nvlddmkm+0x60272d ffff8000`56c4e630 fffff808`18966b84 : 00000000`00000001 00000000`00000001 00000000`00000001 fffff802`336538fc : nvlddmkm+0x604fe3 ffff8000`56c4e770 fffff808`186cb86a : 00000000`00000001 ffff9d04`a406c400 00000000`00000000 fffff808`1851dc80 : nvlddmkm+0x606b84 ffff8000`56c4e820 fffff808`189134c2 : ffff9d05`7f7c7650 ffff9d05`7f7c7650 00000000`00000004 ffff9d04`a28a9000 : nvlddmkm+0x36b86a ffff8000`56c4e850 fffff808`1889491c : ffff8000`56c4f834 00000000`00000000 ffff9d05`7f7c7650 fffff808`18542a0e : nvlddmkm+0x5b34c2 ffff8000`56c4e8c0 fffff808`185e3a1b : 00000000`00000000 00000000`00000000 00000000`00000000 ffff8000`56c4eb40 : nvlddmkm+0x53491c ffff8000`56c4e940 fffff808`185b214f : ffff9d04`a52589f0 ffff8000`56c4eae8 ffff9d04`a52589f0 ffff9d04`a2868000 : nvlddmkm+0x283a1b ffff8000`56c4ea60 fffff808`185e367a : ffff9d04`a5258a08 ffff9d04`a52dce58 00000000`00000000 ffff9d04`ab42e5d0 : nvlddmkm+0x25214f ffff8000`56c4ea90 fffff808`185e38b3 : ffff9d04`a8814688 ffff8000`56c4eb40 00000000`00000000 ffff9d04`a52dce58 : nvlddmkm+0x28367a ffff8000`56c4eb20 fffff808`185e3fe8 : 00000000`00000000 ffff9d04`b2000000 ffff8000`00000041 00000000`20802040 : nvlddmkm+0x2838b3 ffff8000`56c4ebd0 fffff808`185e40a0 : 00000000`00000000 00000000`b2000000 00000000`c1d00075 fffff808`18d47200 : nvlddmkm+0x283fe8 ffff8000`56c4ec40 fffff808`18506127 : ffff8000`56c4f7f0 fffff802`33622db3 ffffc503`b8f126f0 00000000`00000000 : nvlddmkm+0x2840a0 ffff8000`56c4ee60 fffff808`18479fd0 : ffff8000`56c4efd0 00000000`00000000 00000000`00000000 ffff8000`56c4efb0 : nvlddmkm+0x1a6127 ffff8000`56c4eec0 fffff808`18eecfe8 : fffff808`18479f55 ffff8000`56c4f700 00000000`00000000 ffff8000`56c4f064 : nvlddmkm+0x119fd0 ffff8000`56c4ef60 fffff808`18eec437 : ffff8000`56c4f7f0 0000004a`ad00b800 ffff8000`56c4f7f0 00000000`00000000 : nvlddmkm!nvDumpConfig+0x22da88 ffff8000`56c4f0d0 fffff808`18ee47c1 : 00000000`00000000 ffff8000`56c4f210 fffff808`18b344e0 ffff9d04`a2935000 : nvlddmkm!nvDumpConfig+0x22ced7 ffff8000`56c4f110 fffff808`18407dda : ffff9d04`a7473001 ffff8000`56c4f3c9 ffff8000`56c4f670 ffff9d04`a7473001 : nvlddmkm!nvDumpConfig+0x225261 ffff8000`56c4f370 fffff808`15348d0c : 00000000`00000008 00000000`00000000 ffff9d04`a7473080 00000000`4e562a2a : nvlddmkm+0xa7dda ffff8000`56c4f430 fffff808`152cb99d : ffff9d04`a4deca38 ffffffff`00000000 ffff9d04`a4deca38 ffffffff`ffffffff : dxgkrnl!DXGADAPTER::DdiEscape+0x13c ffff8000`56c4f4d0 ffffaea4`735fccab : 00000000`000007d2 ffff9d04`a7473080 00000000`7799d3f0 ffffaea4`73602cf3 : dxgkrnl!DxgkEscape+0x168d ffff8000`56c4fa30 fffff802`337d3743 : ffff9d04`00000000 00000000`00993000 00000000`007afda0 00000000`77a74620 : win32kbase!NtGdiDdDDIEscape+0x4b ffff8000`56c4fa80 00000000`779a2c24 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13 00000000`007ae328 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x779a2c24 THREAD_SHA1_HASH_MOD_FUNC: 200222af53b9fbf9196e4760feb25820acab6ca3 THREAD_SHA1_HASH_MOD_FUNC_OFFSET: e4325c91ee882b9510ee3f721e4e44cf0784d6f8 THREAD_SHA1_HASH_MOD: 159e2899d45ee831048b768f9b24a1a6e5bcaa33 FOLLOWUP_IP: nt!KeAccumulateTicks+190487 fffff802`337ee187 cc int 3 FAULT_INSTR_CODE: ab3944cc SYMBOL_STACK_INDEX: 1 SYMBOL_NAME: nt!KeAccumulateTicks+190487 FOLLOWUP_NAME: MachineOwner MODULE_NAME: nt IMAGE_NAME: ntkrnlmp.exe DEBUG_FLR_IMAGE_TIMESTAMP: 5ca31432 STACK_COMMAND: .thread ; .cxr ; kb BUCKET_ID_FUNC_OFFSET: 190487 FAILURE_BUCKET_ID: 0x133_ISR_nt!KeAccumulateTicks BUCKET_ID: 0x133_ISR_nt!KeAccumulateTicks PRIMARY_PROBLEM_CLASS: 0x133_ISR_nt!KeAccumulateTicks TARGET_TIME: 2019-05-14T15:51:00.000Z OSBUILD: 17134 OSSERVICEPACK: 0 SERVICEPACK_NUMBER: 0 OS_REVISION: 0 SUITE_MASK: 272 PRODUCT_TYPE: 1 OSPLATFORM_TYPE: x64 OSNAME: Windows 10 OSEDITION: Windows 10 WinNt TerminalServer SingleUserTS OS_LOCALE: USER_LCID: 0 OSBUILD_TIMESTAMP: 2019-04-02 16:50:10 BUILDDATESTAMP_STR: 180410-1804 BUILDLAB_STR: rs4_release BUILDOSVER_STR: 10.0.17134.1.amd64fre.rs4_release.180410-1804 ANALYSIS_SESSION_ELAPSED_TIME: 3619 ANALYSIS_SOURCE: KM FAILURE_ID_HASH_STRING: km:0x133_isr_nt!keaccumulateticks FAILURE_ID_HASH: {65350307-c3b9-f4b5-8829-4d27e9ff9b06} Followup: MachineOwner ---------