Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

DPC_WATCHDOG_VIOLATIONと、WinDbgによるmemory.dmpの解析

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 SDKVisual Studioの追加コンポーネントとしてインストールできるし、単体でもインストールすることができる。
ここでは単体インストールで、特にWinDbgのみをインストールする。次のサイトからインストーラをダウンロードできる。

developer.microsoft.com

ダウンロードを実行すると、必要なコンポーネントの選択画面が表示される。「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を諦め、他のブラウザへ乗り換える。

余談

WinDbgMicrosoft Storeでも配布されているのだが、2019年9月15日時点ではPreview版だ。この投稿で紹介しているものと比べて機能が豊富なのだが、インタフェイスが異なっている。Preview版はMicrosoft Storeからダウンロードできる。

docs.microsoft.com

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
---------