本「
IT談話館」一般公開記事は、10年以上の実務経験を持つ上級Windowsエンジニアを想定しています。
本館は、Windowsカーネル深層を解析し、クラッシュ原因をはじめとするシステム内の「異様な動き」を検出・分析する
超高度な技術と実績を保有しています。
Windowsシステムクラッシュ情報とデータ分析
WindowsはSaaSとして提供される時代に入り、その内部は頻繁に更新されています。更新内容の多くは、いろいろな事情から、公にされることはほとんどありません。
本稿は前編「Windowsシステムクラッシュとシステム概要の把握」の内容を前提に起草されています。
前編で紹介した実行結果内の赤色表示ヒントを有効活用できるかどうかは、「Windowsアーキテクチャー」の知識量と理解度に依存します。なお、このクラッシュでは、DPC(Deffered Procedure Call)障害が発生していますが、本稿では触れません。DPC障害の解析技術については本館の「Windows 8/10、WinDbg、割り込み、DPC」一般記事が参考になるでしょう。
実行結果内には2つのプロセス数が表示されています。2つの数値は「2590」と「87」という具合にExectutive層とKernel層で大きく異なっています。これら2つの層で管理しているプロセス数の差は、2500を超えています。この2500という差をどう表現したよいのでしょう。Windowsシステムの暴走といっても言い過ぎではないでしょうし、控えめに性能限界超えといってもよいでしょう。
また、解析依頼者側はVerifierを有効にし、すでに「netr28ux.sys」デバイスドライバーの動作をかなり調査していることが分かります。さらには、割り込み要求レベル(IRQL)は10進数の13ということになっており、常識的には、CPUへの高位割り込みが発生していることが分かります。この場合、とりあえず、Windowsアーキテクチャーを支える割り込みメカニズに焦点を当て、新しい解析コードを作成し、次のような情報を収集することになるでしょう。
*Core->00 Pcr->0xfffff80250b71000 Prcb->0xfffff80250b71180 CurrentThread->0xfffff80250bcaa00 IntObj->0xfffff80250855800 IntLevel->2 Irql->13
Trapframe->0xfffff802522b7880 PreviousIrql->02 PreviousRip->ndis!NdisMIndicateReceiveNetBufferLists+0x825 (fffff800`9eabe585)
Core->01 Pcr->0xffffd000d41cd000 Prcb->0xffffd000d41cd180 CurrentThread->0xffffe001973c3080
Core->02 Pcr->0xffffd000d4349000 Prcb->0xffffd000d4349180 CurrentThread->0xffffe00193ecf880
Core->03 Pcr->0xffffd000d43c7000 Prcb->0xffffd000d43c7180 CurrentThread->0xffffe00191e44040
この情報は、割り込み要求レベル「2」の処理過程で別の上位割り込み「13」が発生したことを示しています。前者の割り込みは「ndis」から要求されていることも分かります。ここまでの数値データ分析結果を総合すると、次のようなNDISコマンドを実行し、NICの状態を調査する必要がありそうです。
0: kd> !ndiskd.minidriver
ffffe00195f7b740 - tunnel
ffffe001958df760 - vwifimp
ffffe00193aa3530 - BthPan
ffffe00193b9dba0 - netr28ux
0: kd> !ndiskd.minidriver ffffe00193b9dba0
MINIPORT DRIVER
netr28ux
Ndis handle ffffe00193b9dba0
Driver context NULL
DRIVER_OBJECT ffffe00193b8f080
Driver image netr28ux.sys
Registry path \REGISTRY\MACHINE\SYSTEM\ControlSet001\Services\netr28ux
Reference Count 2
Flags VERIFYING
MINIPORTS
Miniport
ffffe00193ba11a0 - ASUS USB-N53 802.11a/b/g/n Network Adapter
Handlers
Device objects
0: kd> !ndiskd.netadapter ffffe00193ba11a0
MINIPORT
ASUS USB-N53 802.11a/b/g/n Network Adapter
Ndis handle ffffe00193ba11a0
Ndis API version v6.40
Adapter context ffffe00194000000
Driver ffffe00193b9dba0 - netr28ux v1.1
Network interface ffffcf8099358a20
Media type 802.3
Physical medium Native802.11
Device instance USB\VID_0B05&PID_179D\1.0
Device object ffffe00193ba1050 More information
MAC address 60-a4-4c-ec-4c-3d
STATE
Miniport Running
Device PnP Started Show state history
Datapath DIVERTED_BECAUSE_MINIPORT_RESETTING
NBL status NDIS_STATUS_RESET_IN_PROGRESS
Interface Up
Media Connected
Power D0
References 0n18 Show detail
User handles 1
Automatic resets 1
Resets requested 0
Pending OID Unknown value 0xff0c000b
Flags NOT_BUS_MASTER, DEFAULT_PORT_ACTIVATED, CALLING_RESET,
RESET_IN_PROGRESS, SUPPORTS_MEDIA_SENSE,
DOES_NOT_DO_LOOPBACK, MEDIA_CONNECTED
PnP flags PM_SUPPORTED, DEVICE_POWER_ENABLED, RECEIVED_START,
VERIFYING, HARDWARE_DEVICE, NDIS_WDM_DRIVER
More flags PROCESSING_REQUEST, REQUEST_TIMEOUT
.reload ndis.sys....
Reload succeeded.
BINDINGS
Protocol list Driver Open Context
[Next link in list is not readable; aborting the list traversal]
No protocols have an open binding
Filter list Driver Module Context
No filters are attached
MORE INFORMATION
Driver handlers Task offloads
Power management PM protocol offloads
Pending OIDs Timers
Pending NBLs
Wake-on-LAN (WoL) Packet filter
Receive queues Receive filtering
RSS NIC switch
Hardware resources
NDIS ports WMI guids
ご覧のように、NICはリセット状態に入っています。なぜ「リセット+タイムアウト」が発生したのか?この方面に興味のある方は、本館の「Windows XP/7/8/10 Device Driver、Verifier、リンカー」記事が参考になるかもしれません。今回のケースの場合、解析依頼者側はVerifierの出力情報をそれなりに分析しているはずですから、打ち合わせ会議の際には、Verifierの出力情報に含まれるレベルの技術用語を使用し、こちら側の解析計画、手順、および、意図を説明することになります。
システムクラッシュは突然発生し、発生時には事前に指定したタイプのクラッシュダンプファイルが作成されます。ダンプファイルの解析にはそれなりの技術力が必要になります。その技術力をどのように習得するか?敢えて申し上げますが、インターネット上に公開されている情報は現在ではほとんど役に立ちません。各種のフォーラムなどの質疑応答の流れを見れば、時間を浪費するだけであることが分かるはずです。最良の現実的な習得手段は、同一のダンプファイルを所属チーム内の複数の同僚と解析し、解析結果を持ち寄り、真剣に意見交換してみることです。ダンプファイルはC++とアセンブラーベースの超ド級の生きた教材そのものです。