本「
IT談話館」一般公開記事は、10年以上の実務経験を持つ上級Windowsエンジニアを想定しています。
本館は、Windowsカーネル深層を解析し、クラッシュ原因をはじめとするシステム内の「異様な動き」を検出・分析する
超高度な技術と実績を保有しています。
Windows XP/7/8/10のシステムワーカースレッド解析(基礎)
WindowsはSaaSとして提供される時代に入り、その内部は頻繁に更新されています。更新内容の多くは、いろいろな事情と理由から、公にされることはほとんどありません。
Windows 10の短周期の内部更新は、性能向上と互換性維持に加え、ML/DL/AI時代への対応と位置付けられています。簡単に表現すれば、Windows 10はCloudサービスと連携しながらBig Dataを収集・蓄積する「ソフトウェアセンサー」、という役割を担っています。本「IT談話館」は、そのソフトウェアセンサーのユーザー空間とカーネル空間を独自の解析コードで詳しく解析する技術を保有し、「Windowsメモリダンプ解析サービス」を提供しています。
メモリダンプを解析すると、システム内の「異様な動き」を検出・解析することができます。「異様な動き」の中には、システムパフォーマンスの低下、既存アプリの動作異常、あるいは、セキュリティー脅威なども含まれます。本館サービスをご利用の際には、所属チーム内でご協議の上、「ご連絡」ください。
本稿では、Windows XP/7/8/10それぞれの環境で採取されたカーネルメモリダンプを本「IT談話館」の独自解析コードで解析し、システムワーカースレッドの変遷を考察します。システムワーカースレッドは、Windowsシステムが用意するサービススレッドであり、貴重なシステム機能の一つです。なお、解析コードの開発知識の習得には、「時間と予算の投資」が必要です。
それでは、Windows XP時代のシステムワーカスレッドの様子から見てみましょう。
kd> version
Windows XP Kernel Version 2600 (Service Pack 2) UP Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 2600.xpsp_sp2_gdr.070227-2254
Machine Name:
Kernel base = 0x804d9000 PsLoadedModuleList = 0x8055c620
Debug session time: Wed Jun 4 19:50:12.855 2008 (UTC + 9:00)
System Uptime: 0 days 0:09:06.425
32-bit Kernel summary dump: C:\Users\Toyota\AppData\Local\Temp\000000c80_MEMORY.DMP
Microsoft (R) Windows Debugger Version 10.0.10240.9 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
[---]
この情報は次のようなことを示しています。
- このカーネルメモリダンプは32ビットWindows XP SP2環境で採取された
- PCには1個のプロセッサーが搭載されている
- システムクラッシュは2008年6月4日19時50分頃発生している
- 使用されているWinDbgは、64ビットのバージョン「10.0.10240.9」である
システムワーカースレッドの解析時には、WinDbg内蔵の「!exqueue」コマンドを使用するのが一般的です。このコマンドを実行すると、次のような結果が返されてきます。
kd> !exqueue
**** Critical WorkQueue ( Threads: 7/512, Concurrency: 0/1 )
THREAD 8133eda8 Cid 0004.0010 Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 8133eb20 Cid 0004.0014 Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 8133e898 Cid 0004.0018 Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 8133e610 Cid 0004.001c Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 8133e388 Cid 0004.0020 Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 812e8738 Cid 0004.00c0 Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 812e84b0 Cid 0004.00c4 Teb: 00000000 Win32Thread: 00000000 WAIT
**** Delayed WorkQueue ( Threads: 7/512, Concurrency: 1/1 )
WARNING: active threads = maximum active threads in the queue. No new
workitems schedulable in this queue until they finish or block.
THREAD 8133d030 Cid 0004.0024 Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 8133dda8 Cid 0004.0028 Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 8133db20 Cid 0004.002c Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 8133d898 Cid 0004.0030 Teb: 00000000 Win32Thread: 00000000 READY on processor 0
THREAD 8133d610 Cid 0004.0034 Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 8133d388 Cid 0004.0038 Teb: 00000000 Win32Thread: 00000000 WAIT
THREAD 8133c030 Cid 0004.003c Teb: 00000000 Win32Thread: 00000000 WAIT
PENDING: ExWorkItem (fdbbea50) Routine PROCMON12+0xf92b3dca (00002dca) Parameter (fdbbea50)
**** HyperCritical WorkQueue ( Threads: 1/512, Concurrency: 0/1 )
THREAD 8133cda8 Cid 0004.0040 Teb: 00000000 Win32Thread: 00000000 WAIT
情報内の3点の赤色数値に注目してください。数値を合計すると、「15」となります。「!exqueue」コマンドに相当する本「IT談話館」の独自解析コードの実行結果を見てみます。
Started ...
System(0x81341830) BasePriority-> 8 ActiveThreads->70
001 Thread:->0x8133EDA8 Priority->13 State->05 Irql->00 00000000
002 Thread:->0x8133EB20 Priority->13 State->05 Irql->00 00000000
003 Thread:->0x8133E898 Priority->13 State->05 Irql->00 00000000
004 Thread:->0x8133E610 Priority->13 State->05 Irql->00 00000000
005 Thread:->0x8133E388 Priority->13 State->05 Irql->00 00000000
006 Thread:->0x8133D030 Priority->12 State->05 Irql->00 00000000
007 Thread:->0x8133DDA8 Priority->12 State->05 Irql->00 00000000
008 Thread:->0x8133DB20 Priority->12 State->05 Irql->00 00000000
009 Thread:->0x8133D898 Priority->12 State->01 Irql->00 00000000
010 Thread:->0x8133D610 Priority->12 State->05 Irql->00 00000000
011 Thread:->0x8133D388 Priority->13 State->05 Irql->00 00000000
012 Thread:->0x8133C030 Priority->12 State->05 Irql->00 00000000
013 Thread:->0x8133CDA8 Priority->15 State->05 Irql->00 00000000
014 Thread:->0x812E8738 Priority->13 State->05 Irql->00 00000000
015 Thread:->0x812E84B0 Priority->13 State->05 Irql->00 00000000
Ended ...
この結果を見ると、先ほどの「15」という数値は、システムワーカースレッドの数を示していることが分かります。また、システムワーカースレッドには、「Critical WorkQueue」(Priority->13)、「Delayed WorkQueue」(Priority->12)、および、「HyperCritical WorkQueue」(Priority->15)の3種類のスレッドが存在することもわかります。赤色のデータは実行優先度値「12」を持つスレッド「0x8133D898」は「Delayed WorkQueue」(Priority->12)であることを示しています。
ここまでのWindows XP時代の解析結果は、次のようなことを示しています。
- 15個のシステムワーカースレッドが用意されている
- 3種類のシステムワーカースレッドは実行優先度値でそれぞれの役割が区別されている
- 「Concurrency: 1/1」は、プロセッサー数と実行スレッド数がそれぞれ1個であることを示している
Windows 7時代に入るとどのように変化するでしょう。
4: kd> version
Windows 7 Kernel Version 7601 (Service Pack 1) MP (8 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 7601.22616.amd64fre.win7sp1_ldr.140303-2307
Machine Name:
Kernel base = 0xfffff800`03a54000 PsLoadedModuleList = 0xfffff800`03c98890
Debug session time: Sat Sep 20 09:58:01.081 2014 (UTC + 9:00)
System Uptime: 0 days 2:46:44.174
64-bit Kernel summary dump: C:\CrashDumps\windows7.dmp
Microsoft (R) Windows Debugger Version 10.0.10240.9 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
[---]
この情報は次のようなことを示しています。
- このカーネルメモリダンプは64ビットWindows 7 SP1環境で採取された
- PCには8個のプロセッサーが搭載されている
- システムクラッシュは20014年9月20日9時58分頃発生している
- 使用されているWinDbgは、64ビットのバージョン「10.0.10240.9」である
「!exqueue」コマンドを実行してみます。
4: kd> !exqueue
**** Critical WorkQueue ( Threads: 7/512, Concurrency: 0/8 )
THREAD fffffa8006d74b50 Cid 0004.0018 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006da5040 Cid 0004.001c Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006d89b50 Cid 0004.0020 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006d7bb50 Cid 0004.0024 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006d9eb50 Cid 0004.0028 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa800f0c1b50 Cid 0004.1910 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa800e9d6470 Cid 0004.1470 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
**** Delayed WorkQueue ( Threads: 7/512, Concurrency: 0/8 )
THREAD fffffa8006d3ab50 Cid 0004.002c Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006d3a660 Cid 0004.0030 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006d82b50 Cid 0004.0034 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006d82660 Cid 0004.0038 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006d25040 Cid 0004.003c Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006d25b50 Cid 0004.0040 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
THREAD fffffa8006d25660 Cid 0004.0044 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
**** HyperCritical WorkQueue ( Threads: 1/512, Concurrency: 0/8 )
THREAD fffffa8006d24040 Cid 0004.0048 Teb: 0000000000000000 Win32Thread: 0000000000000000 WAIT
「15」というシステムワーカースレッドの数は変化していません。本「IT談話館」の独自解析コードの結果も見てみましょう。
Started ...
System(0xfffffa8006d0f740) BasePriority-> 8 ActiveThreads->200
001 Thread:->0xFFFFFA8006D74B50 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
002 Thread:->0xFFFFFA8006DA5040 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
003 Thread:->0xFFFFFA8006D89B50 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
004 Thread:->0xFFFFFA8006D7BB50 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
005 Thread:->0xFFFFFA8006D9EB50 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
006 Thread:->0xFFFFFA8006D3AB50 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
007 Thread:->0xFFFFFA8006D3A660 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
008 Thread:->0xFFFFFA8006D82B50 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
009 Thread:->0xFFFFFA8006D82660 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
010 Thread:->0xFFFFFA8006D25040 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
011 Thread:->0xFFFFFA8006D25B50 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
012 Thread:->0xFFFFFA8006D25660 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
013 Thread:->0xFFFFFA8006D24040 Priority->15 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
014 Thread:->0xFFFFFA800F0C1B50 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
015 Thread:->0xFFFFFA800E9D6470 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff800`03ad14a8)
Ended ...
すでに確認している次の2点も変化がありません。
- 15個のシステムワーカースレッドが用意されている
- 3種類のシステムワーカースレッドは実行優先度値でそれぞれの役割が区別されている
システムワーカースレッドの仕様は、Windows 8.1出荷のタイミングで「大幅に変更」され、8.1環境で採取されたカーネルメモリダンプを解析すると、次のようなデータを取得することができます。
0: kd> version
Windows 8.1 Kernel Version 9600 MP (4 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 9600.17328.amd64fre.winblue_r3.140827-1500
Machine Name:
Kernel base = 0xfffff802`50871000 PsLoadedModuleList = 0xfffff802`50b47370
Debug session time: Fri Nov 7 14:50:46.222 2014 (UTC + 9:00)
System Uptime: 0 days 21:21:18.953
64-bit Kernel bitmap dump: C:\CrashDumps\windows81.dmp
Microsoft (R) Windows Debugger Version 10.0.10240.9 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
[---]
同じように、「!exqueue」コマンドを実行してみます。
0: kd> !exqueue
GetGlobalValue: unable to get NT!KeNumberNodes type size
残念ながら、カーネルの内部変更の影響もあり、「!exqueue」コマンドは使えなくなったようです。本館の独自解析コードを実行すると、次のような結果が返されてきます。
Started ...
System(0xffffe0019161f040) BasePriority-> 8 ActiveThreads->176
001 Thread:->0xFFFFE00191DC2880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
002 Thread:->0xFFFFE00196DC7080 Priority->15 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
003 Thread:->0xFFFFE001976DC040 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
004 Thread:->0xFFFFE0019286E880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
005 Thread:->0xFFFFE00197885600 Priority->08 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
006 Thread:->0xFFFFE00197769880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
007 Thread:->0xFFFFE00196B5B880 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
008 Thread:->0xFFFFE0019282A040 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
009 Thread:->0xFFFFE00191E44040 Priority->14 State->02 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
010 Thread:->0xFFFFE00195594040 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
011 Thread:->0xFFFFE00197A75880 Priority->16 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
012 Thread:->0xFFFFE001970D2880 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
013 Thread:->0xFFFFE001974EA880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
014 Thread:->0xFFFFE001974E9880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
015 Thread:->0xFFFFE00197546880 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
016 Thread:->0xFFFFE00192957880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
017 Thread:->0xFFFFE001928D5880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
018 Thread:->0xFFFFE001970D3880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
019 Thread:->0xFFFFE0019291D880 Priority->10 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
020 Thread:->0xFFFFE00197530880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
021 Thread:->0xFFFFE00197548880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
022 Thread:->0xFFFFE00191C05880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
023 Thread:->0xFFFFE00197798340 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
024 Thread:->0xFFFFE001977CA040 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
025 Thread:->0xFFFFE001977DC880 Priority->10 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
026 Thread:->0xFFFFE001928B4880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
027 Thread:->0xFFFFE00197555880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
028 Thread:->0xFFFFE001978C8040 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
029 Thread:->0xFFFFE00197497040 Priority->15 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
030 Thread:->0xFFFFE00197867880 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
031 Thread:->0xFFFFE0019240D740 Priority->15 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
032 Thread:->0xFFFFE00197A54300 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
033 Thread:->0xFFFFE00192CF2040 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
034 Thread:->0xFFFFE001978C9880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
035 Thread:->0xFFFFE001970E0040 Priority->10 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
036 Thread:->0xFFFFE00197524880 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
037 Thread:->0xFFFFE00192976540 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
038 Thread:->0xFFFFE00192C97040 Priority->09 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
039 Thread:->0xFFFFE00191F0F040 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`508e0350)
Ended ...
0: kd> !thread 0xFFFFE00191E44040
THREAD ffffe00191e44040 Cid 0004.10e4 Teb: 0000000000000000 Win32Thread: 0000000000000000 RUNNING on processor 3
Not impersonating
DeviceMap ffffc0018c609610
Owning Process ffffe0019161f040 Image: System
Attached Process N/A Image: N/A
Wait Start TickCount 4920252 Ticks: 1 (0:00:00:00.015)
Context Switch Count 117144 IdealProcessor: 0 NoStackSwap
UserTime 00:00:00.000
KernelTime 00:00:05.593
Win32 Start Address nt!ExpWorkerThread (0xfffff802508e0350)
Stack Init ffffd000231b3c90 Current ffffd000231b35c0
Base ffffd000231b4000 Limit ffffd000231ae000 Call 0
Priority 14 BasePriority 13 UnusualBoost 0 ForegroundBoost 0 IoPriority 2 PagePriority 5
Child-SP RetAddr : Args to Child : Call Site
ffffd000`231b3110 fffff802`5093c59c : ffffd000`231b39f0 ffffd000`231b32e0 ffffd000`231b39f0 00000000`00000001 : nt!RtlpLookupFunctionEntryForStackWalks+0x7a
ffffd000`231b3180 fffff802`5093b20c : ffff8000`00000000 ffffffff`ffffffff ffffd000`00000000 00000000`00000005 : nt!RtlpWalkFrameChain+0x2d4
ffffd000`231b3870 fffff802`5093b0b0 : 00000000`00000003 ffffd000`231b3940 00000000`00000000 ffffe001`93b61c30 : nt!RtlWalkFrameChain+0x84
ffffd000`231b38b0 fffff802`50f015fd : fffff800`9eb18c0d ffffd000`231b3949 00000000`00000000 00000000`00000000 : nt!RtlCaptureStackBackTrace+0x44
ffffd000`231b38e0 fffff802`50efa432 : ffffe001`93ba1200 ffffe001`93ba1200 00000000`00000000 fffff802`00000000 : nt!VfDeadlockReleaseResource+0x99
ffffd000`231b39b0 fffff800`9eb18c0d : ffffe001`93ba11a0 ffffe001`93ba1200 00000000`00000000 ffffe001`90df8030 : nt!VerifierKeReleaseSpinLock+0x92
ffffd000`231b39f0 fffff800`9eaed1d5 : fffff800`9eac0001 ffffe001`93ba11a0 fffff800`9eac0001 fffff802`50b20300 : ndis!ndisMResetMiniportInternal+0xe1
ffffd000`231b3af0 fffff802`508e05e3 : fffff800`9eac00ec ffffd000`231b3bd0 ffffe001`93ba11a0 ffffe001`91e44040 : ndis!ndisQueuedCheckForHang+0x2d0e9
ffffd000`231b3b50 fffff802`5096fe70 : ffffe001`92feb660 ffffe001`91e44040 ffffe001`91e44040 ffffe001`9161f040 : nt!ExpWorkerThread+0x293
ffffd000`231b3c00 fffff802`509c67c6 : ffffd000`d4349180 ffffe001`91e44040 ffffe001`95df0080 00000000`00000001 : nt!PspSystemThreadStartup+0x58
ffffd000`231b3c60 00000000`00000000 : ffffd000`231b4000 ffffd000`231ae000 00000000`00000000 00000000`00000000 : nt!KiStartSystemThread+0x16
赤色のデータを見ると、解析依頼者はクラッシュ発生に備えてVerifierを有効にしているようですから、次の処理手順としてはこの別稿「Windows XP/7/8/10 Device Driver、Verifier、リンカー」などの記事が参考になるでしょう。
今度は、最新のWindows 10環境で採取されたカーネルメモリダンプの解析結果を見てみましょう。
1: kd> version
Windows 8 Kernel Version 10240 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 10240.16393.amd64fre.th1_st1.150717-1719
Machine Name:
Kernel base = 0xfffff802`2941a000 PsLoadedModuleList = 0xfffff802`2973f030
Debug session time: Mon Aug 3 17:16:15.086 2015 (UTC + 9:00)
System Uptime: 0 days 1:19:12.780
64-bit Kernel bitmap dump: C:\CrashDumps\windows10.dmp
Microsoft (R) Windows Debugger Version 10.0.10240.9 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
[---]
この情報は次のようなことを示しています。
- このカーネルメモリダンプは64ビットWindows 10環境で採取された
- PCには2個のプロセッサーが搭載されている
- システムクラッシュは20015年8月3日17時16分頃発生している
- 使用されているWinDbgは、64ビットのバージョン「10.0.10240.9」である
- Windows 10のカーネルはWindows 8のカーネルアーキテクチャーを踏襲している
本「IT談話館」の独自解析コードの実行結果を見てみましょう。
Started ...
System(0xffffe001502a3040) BasePriority-> 8 ActiveThreads->144
001 Thread:->0xFFFFE0015209E840 Priority->06 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
002 Thread:->0xFFFFE00153A256C0 Priority->15 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
003 Thread:->0xFFFFE00153A16040 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
004 Thread:->0xFFFFE00152C36040 Priority->23 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
005 Thread:->0xFFFFE001512B5640 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
006 Thread:->0xFFFFE0015099A200 Priority->06 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
007 Thread:->0xFFFFE0015471A440 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
008 Thread:->0xFFFFE00153B7D480 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
009 Thread:->0xFFFFE0015129A040 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
010 Thread:->0xFFFFE00150857840 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
011 Thread:->0xFFFFE001510A1600 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
012 Thread:->0xFFFFE0015074B040 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
013 Thread:->0xFFFFE00154604040 Priority->13 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
014 Thread:->0xFFFFE001546BE840 Priority->12 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
015 Thread:->0xFFFFE00153A15040 Priority->06 State->05 Irql->00 nt!ExpWorkerThread (fffff802`29492680)
Ended ...
これまでには見られない実行優先度値が採用されています。この実行結果は次のように整理できます。
- 15個のシステムワーカースレッドが用意されている
- 5種類のシステムワーカースレッドは実行優先度値でそれぞれの役割が区別されているようだ
実行優先度値「06」と「23」が新たに追加され、システムワーカースレッドの種類が2つほど増えています。増えた背景の解析作業は興味のあるところですが、本稿では割愛させていただきます(「参照」)。
WinDbgに付属する「!exqueue」コマンドはWindowsのバージョンアップの流れの中で使えなくなりましたが、本館の独自解析コードはバージョンアップの影響を受けることなく、目的の結果を返してくれます。Windows 10からはクラウドとの連携が進み、サービス(Windows As A Service)として提供されるようになり、いつどのタイミングでシステム内部が変更され、どのような(悪)影響が発生するのかを予測できなくなりました。変更内容は、いろいろな事情から、非公開にされています。