[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 メーリングリストの案内