[BitVisor-devel:121] Re: BitVisor の AHCI ドライバにつきまして
Manabu HIRANO
hirano @ toyota-ct.ac.jp
2020年 12月 14日 (月) 16:20:52 JST
榮樂様、
早速のご回答有り難う御座います、大変助かりました。教えていただいた方法で
検証した結果 やはり 4MiB を超えるリクエストで
drivers/ata/ahci.c
975: ASSERT (totalsize <= 4 * 1024 * 1024);
にひっかかり panic して止まっていることを確認できました。
(config.vmm.panic_reboot=1 として, 再起動することから確認しました)
一時的な回避策として ahci.c の975行目の ASSERT をコメントアウト(していいか
わかりませんが...)すると Windows7 は動作しました。しかし、Windows 10 は起動
しませんでした。 ## Windows7, 10 ともに AHCI ドライバは MS標準でした
教えていただいた VGA の TTY が面白そうだったのですが、Intel HD 510 ではその
ままでは動かなかったので(設定不足の懸念もありますが)、今回は Ethernet
(pro1000) で syslog を飛ばして確認しました。
Windows 10 で起動ディスクを読み込み始めたあたりで syslog に
AHCI 0:2 initialized
AHCI 0:0 initialized
と表示され、その後に Windows 10 のブルーの回復画面が出ることを確認できました。
正確に原因を特定できましたので Windows 10 で動かす場合には ahci.c を改造し
4MiB 以上のリクエストを処理できるようにする必要があることがわかりました。
ちなみに BitVisor で使えるヒープを増やすには単純に core/mm.c の
VMMSIZE_ALL を増やせば大丈夫でしょうか...?
平野
>> 私の理解だと標準の AHCI のパラパススルードライバは(何もせず)通常動作
>> すると思ってい
>> たので、普通に Windows7 や Windows10 も動作すると思っていたのですが...。
>
>> 症状
>> 最新の BitVisor で defconfig の pci に ahci のドライバを追加すると
>> CentOS7はゲストOSとして起動するが、Windows7 はゲストOSとして起動せず。
>> 「Windows を起動しています」の表示で停止したままになりました。
>
> AHCI の para pass-through driver にはひとつ問題があって、4MiB を超える
> 転送量になるリクエストが来ると panic してしまいます。それが引っ掛かっ
> て panic しているのではないでしょうか。Ethernet 経由でログ出力ができる
> 場合はログで、できない場合は config.vmm.panic_reboot=1 にして再起動す
> るかどうか確認してみてください。もしかしたら
> CONFIG_VGA_INTEL_DRIVER=1, CONFIG_TTY_VGA=1, driver=vga_intel で画面へ
> のログ出力も使えるかも知れません。
>
> 本当は、NVMe のように、デバイス側から最大転送サイズを制限できたらいい
> のですが、そういう仕組みがなさそうなので、難しい状態になっています。
> 4MiB を超える指定に単純に対応しても、VMM 側のヒープがそんなに大きくな
> いので、数十 MB の大きなリクエストが来ると処理できない状態になります。
>
> それと、Windows で Intel AHCI driver が使われている場合に、AHCI para
> pass-through driver を改造していろいろやっていると問題が発生したことが
> ありました。こちらは Microsoft 標準の AHCI driver に入れ替えると改善し
> ました。
BitVisor-devel メーリングリストの案内