[BitVisor-devel:89] BitVisor上のWindows 10がブルースクリーンを発生させる

Satoru Takekoshi satorut @ osss.cs.tsukuba.ac.jp
2016年 10月 31日 (月) 10:24:03 JST


筑波大学の竹腰です。

BitVisor上でWindows
10を動作させると、作業中に突然ブルースクリーン(BSoD)が発生する事象を私の手元環境で確認しました。相当時間調査したものの、原因の特定には至っていません。現時点で分かった事や回避策を共有します。
もしどなたか心当たりがお有りでしたら、お教え頂ければ幸いです。

=== 環境等 ===
BitVisor (commit 6cab66b), configは初期状態です。

OS: Windows 10 Pro Build 14393 (x86_64),
アップデートや追加ドライバを一切インストールしていない、クリーンインストール直後の状態です。
M/B: ASRock Z170 Extreme4, BIOS設定は全てデフォルトです。
CPU: Intel Core i7-6700
RAM: 16GB

エラーコード: HAL_INITIALIZATION_FAILED

WindowsのクラッシュダンプをWinDbgで開き、コマンド"!analyze -v"を実行した結果をwindbg_analyze.txtとして添付します。

=== 再現方法 ===
1. grub(UEFI)からBitVisorを起動する(grubに戻る)。
2. grubからWindows 10を起動する。
3. 自動ログイン後、放置する。
4. 早ければ数分、遅くても数時間以内に、BSoDが発生する。

=== 回避策 ===
1. BIOS設定でC statesを全て無効にする。
2. BIOS設定でコア数を1つにする(物理1コア, HTT無効)。
3. RDTSCでVMexitさせる(exitしてきたら単純にVMM内でrdtscした値を返す)。
4. ゲストに見せるCPUIDの返り値からInvariant TSC bitを落とす。
5. ゲストに見せるCPUIDの返り値にHypervisor present bitを立てる。

上記の回避策を別々に実行した結果、それぞれの場合で、少なくとも10時間BSoDが発生しませんでした。
(偶然や、根本原因とは別の副作用の可能性を否定できず、完全に回避できているかどうかは分かりません)

=== 試した事 ===
HPET, SpeedTest, HTTを無効化してみましたが、BSoDは発生しました。
RDPMCでVMexitするようにしてみましたが、BSoDまでに一度もVMexitが発生しなかったので、Performance
Counterは関係ないと考えます。

=== 考察 ===
BSoDを発生させる箇所は、常に同一の箇所(hal!HalpTimerDpcRoutine+0x1751e)でした。当該箇所の処理を確認すると、その箇所を通る度にHalpTimerLastAlwaysOnCounterValueという符号なし64bit値を新しい値に更新しつつ、新しい値が古い値より小さくないかを判定し、小さい場合にはBSoDを発生させるようになっています。変数名と処理内容から考えるに、常に増加する事が期待されるカウンタが減少した事によるBSoDであると推測します。
windbg_analyze.txt中のBugCheckパラメーターの3番目(Arg3)が新しい値で4番目(Arg4)が古い値なのですが、新しい値(000000040807ec47)が比較的小さい一方で、古い値(ffffffdce850fdfb)が符号なし64bit数値として上限間近の値になっています。この値から、間違った大小関係の2値での減算か、予期しない桁溢れが何処かで起きているものと推測します。
-------------- next part --------------

Microsoft (R) Windows Debugger Version 10.0.14321.1024 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.


Loading Dump File [C:\Windows\Minidump\102416-7125-03.dmp]
Mini Kernel Dump File: Only registers and stack trace are available


************* Symbol Path validation summary **************
Response                         Time (ms)     Location
OK                                             C:\Windows\System32

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
OK                                             D:\Symbols
Symbol search path is: D:\Symbols
Executable search path is: C:\Windows\System32
Windows 10 Kernel Version 14393 MP (8 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 14393.0.amd64fre.rs1_release.160715-1616
Machine Name:
Kernel base = 0xfffff800`c3c89000 PsLoadedModuleList = 0xfffff800`c3f8e060
Debug session time: Mon Oct 24 15:13:19.528 2016 (UTC + 9:00)
System Uptime: 0 days 0:12:01.294
Loading Kernel Symbols
...............................................................
................................................................
........................
Loading User Symbols
Loading unloaded module list
.........
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

BugCheck 5C, {113, 27, 40807ec47, ffffffdce850fdfb}

Probably caused by : ntkrnlmp.exe ( nt!KiRetireDpcList+440 )

Followup:     MachineOwner
---------

0: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

HAL_INITIALIZATION_FAILED (5c)
Arguments:
Arg1: 0000000000000113
Arg2: 0000000000000027
Arg3: 000000040807ec47
Arg4: ffffffdce850fdfb

Debugging Details:
------------------


DUMP_CLASS: 1

DUMP_QUALIFIER: 400

BUILD_VERSION_STRING:  10.0.14393.0 (rs1_release.160715-1616)

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:  P3.40

BIOS_DATE:  07/20/2016

BASEBOARD_MANUFACTURER:  ASRock

BASEBOARD_PRODUCT:  Z170 Extreme4

BASEBOARD_VERSION:                        

DUMP_TYPE:  2

BUGCHECK_P1: 113

BUGCHECK_P2: 27

BUGCHECK_P3: 40807ec47

BUGCHECK_P4: ffffffdce850fdfb

CPU_COUNT: 8

CPU_MHZ: d50

CPU_VENDOR:  GenuineIntel

CPU_FAMILY: 6

CPU_MODEL: 5e

CPU_STEPPING: 3

CPU_MICROCODE: 6,5e,3,0 (F,M,S,R)  SIG: 74'00000000 (cache) 74'00000000 (init)

CUSTOMER_CRASH_COUNT:  3

DEFAULT_BUCKET_ID:  WIN8_DRIVER_FAULT

BUGCHECK_STR:  0x5C

PROCESS_NAME:  System

CURRENT_IRQL:  2

ANALYSIS_SESSION_HOST:  DESKTOP-2P07OOA

ANALYSIS_SESSION_TIME:  10-31-2016 01:50:03.0087

ANALYSIS_VERSION: 10.0.14321.1024 amd64fre

LAST_CONTROL_TRANSFER:  from fffff800c3c2c97e to fffff800c3dd2f90

STACK_TEXT:  
fffff800`c5b3a988 fffff800`c3c2c97e : 00000000`0000005c 00000000`00000113 00000000`00000027 00000004`0807ec47 : nt!KeBugCheckEx
fffff800`c5b3a990 fffff800`c3cc0260 : fffff800`c5b3ab00 00000000`00000001 00000000`00140001 00000000`00000002 : hal!HalpTimerDpcRoutine+0x1751e
fffff800`c5b3a9e0 fffff800`c3dd601a : 00000000`00000000 fffff800`c3fcb180 fffff800`c4046940 ffffb18f`4df8d080 : nt!KiRetireDpcList+0x440
fffff800`c5b3ac60 00000000`00000000 : fffff800`c5b3b000 fffff800`c5b35000 00000000`00000000 00000000`00000000 : nt!KiIdleLoop+0x5a


STACK_COMMAND:  kb

THREAD_SHA1_HASH_MOD_FUNC:  d68cae87149cb27dfa1453a2d23f9091bbd646d0

THREAD_SHA1_HASH_MOD_FUNC_OFFSET:  3b2ac544a23b222ce8f3b2d1122109351e1fc29a

THREAD_SHA1_HASH_MOD:  e8151c9fa3f777d5e5d2f940763bb64b2ebaa681

FOLLOWUP_IP: 
nt!KiRetireDpcList+440
fffff800`c3cc0260 4c8b742440      mov     r14,qword ptr [rsp+40h]

FAULT_INSTR_CODE:  24748b4c

SYMBOL_STACK_INDEX:  2

SYMBOL_NAME:  nt!KiRetireDpcList+440

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: nt

IMAGE_NAME:  ntkrnlmp.exe

DEBUG_FLR_IMAGE_TIMESTAMP:  578998f1

IMAGE_VERSION:  10.0.14393.0

BUCKET_ID_FUNC_OFFSET:  440

FAILURE_BUCKET_ID:  0x5C_HAL_TIMER_POWER_MANAGEMENT_FAILURE_27_nt!KiRetireDpcList

BUCKET_ID:  0x5C_HAL_TIMER_POWER_MANAGEMENT_FAILURE_27_nt!KiRetireDpcList

PRIMARY_PROBLEM_CLASS:  0x5C_HAL_TIMER_POWER_MANAGEMENT_FAILURE_27_nt!KiRetireDpcList

TARGET_TIME:  2016-10-24T06:13:19.000Z

OSBUILD:  14393

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:  2016-07-16 11:16:17

BUILDDATESTAMP_STR:  160715-1616

BUILDLAB_STR:  rs1_release

BUILDOSVER_STR:  10.0.14393.0

ANALYSIS_SESSION_ELAPSED_TIME: 38a

ANALYSIS_SOURCE:  KM

FAILURE_ID_HASH_STRING:  km:0x5c_hal_timer_power_management_failure_27_nt!kiretiredpclist

FAILURE_ID_HASH:  {ee38763b-db4f-d666-1f52-39838082483f}

Followup:     MachineOwner
---------



BitVisor-devel メーリングリストの案内