Télécharger la liste

Description du projet

TinyVisor is a hypervisor(VMM) which assigns cpus, memory and I/O in personal computer(PC) to VMs, and allows OSs controlling them. OSs work without host OS.

The first milestone is that two OSs work in one PC. The second milestone is that OSs reboot individually. The milestones have been achived in Jan. 2014, and 1.0 is released.

Linux, Windows, and FreeBSD work.

VMM is based on BitVIsor(BSD license). AML interpriter and some functions of standard library are ported from NetBSD and FreeBSD.

Guest BIOS is based on SeaBIOS(BSD license).

Système requise

System requirement is not defined

Livrée : 2014-05-18 22:11
tinyvisor 1.2 (1 files Cacher)

Notes de release

TinyVisor 1.2 (r200)


新機能

全ての VM の OS がシャットダウンすることを待ち合わせてから、PC の電源を落とすようにしました。

Fedora 20 から xHCI に接続した USB デバイスを使えるようにしました。

PCID (process-context identifier) に対応している OS である FreeBSD 10.0 を起動可能にしました。


その他の変更

VM1 の OS から PCIe の memory mapped configuration access 可能にしました。

Intel VT の VPID に対応しました。


動作確認内容

以下のことを確認済です。


1. USB メモリに TinyVisor をインストール可能なこと。

2. Linux のファイルシステムに TinyVisor をインストール可能なこと。

3. vm0 のみで OS を起動可能なこと。

36. vm0 のみで OS を起動した後、再起動可能なこと。

37. vm0 のみで OS を起動した後シャットダウンすると、PC の電源が OFF になること。

14. qemu 上で TinyVisor を起動可能なこと。

28. IvyBridge マシンにおいて、次の組み合わせで OS を起動可能なこと。
   vm0: Debian GNU/Linux 7.0 (amd64版)
   vm1: FreeBSD 10.0-RELEASE (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E
        USB: Intel 7 Series/C210 Series ChipsetのxHCI

18. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: Fedora 20 (x86_64版)
   vm1: Debian GNU/Linux 7.0 (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E
        USB: Intel 7 Series/C210 Series ChipsetのxHCI
        VGA: GeForce 8400 GS

29. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: FreeBSD 10.0-RELEASE (amd64版)
   vm1: Fedora 20 (x86_64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E
        USB: Intel 7 Series/C210 Series ChipsetのxHCI
        VGA: GeForce 8400 GS

26. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。
   vm0: Windows 8.1 (64ビット版)
   vm1: Debian GNU/Linux 7.0 (amd64版)
        この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。
        SATA: ASMedia ASM1062 
        NIC: Realtek RTL8111E
        USB: Intel 7 Series/C210 Series ChipsetのxHCI
        VGA: GeForce 8400 GS

12. IvyBridge マシンにおいて vm1 で動作している Debian GNU/Linux 7.0
    (amd64版) を再起動可能なこと。

20. IvyBridge マシンにおいて vm1 で動作している Fedora 20 (x86_64版)
    を再起動可能なこと。

21. IvyBridge マシンにおいて vm0 で動作している Debian GNU/Linux 7.0
    (amd64版) を再起動可能なこと。

31. IvyBridge マシンにおいて vm0 で動作している FreeBSD 10.0-RELEASE
    (amd64版) を再起動可能なこと。

23. IvyBridge マシンにおいて vm0 で動作している Fedora 20 (x86_64版)
    を再起動可能なこと。

32. 次の組み合わせで両方の OS をシャットダウンすると、PC の電源が OFF
    になること
   vm0: Debian GNU/Linux 7.0 (amd64版)
   vm1: FreeBSD 10.0-RELEASE (amd64版)

33. 次の組み合わせで両方の OS をシャットダウンすると、PC の電源が OFF
    になること
   vm0: Fedora 20 (x86_64版)
   vm1: Debian GNU/Linux 7.0 (amd64版)

34. 次の組み合わせで両方の OS をシャットダウンすると、PC の電源が OFF
    になること
   vm0: FreeBSD 10.0-RELEASE (amd64版)
   vm1: Fedora 20 (x86_64版)

35. 次の組み合わせで両方の OS をシャットダウンすると、PC の電源が OFF
    になること
   vm0: Windows 8.1 (64ビット版)
   vm1: Debian GNU/Linux 7.0 (amd64版)

24. Debian GNU/Linux 7.0 (amd64版)でビルド可能なこと。

25. Fedora 20 (x86_64版)でビルド可能なこと。


修正した問題

#33614 VM1でFedora 20を起動すると、xHCIに接続されているデバイスが認識できない

#33509 FreeBSD 10.0を起動したところ、VMMがpanic

#32902 VM1でFedora 20を再起動すると、xHCIに接続されているデバイスが認識できない


既知の問題

#33655 VM0でWindows 8.1を再起動すると、ストールすることがある

#33196 qemuでVM0のOSを再起動させるとVMMがpanic

#32901 VM1でFedora 20を再起動すると、ログイン画面が表示されない

#32660 VM0で起動したFreeBSDを再起動すると、NICで通信ができない

#32404 VM1にCPUを1個しか割り当てずにVM1でFreeBSDを起動しようとすると、NICがリンクアップしない

#31392 vm1のFreeBSDを再起動すると、AHCIの初期化に失敗する

Changelog

------------------------------------------------------------------------
r178 | yuichi_xy | 2014-03-30 12:20:11 +0900 (日, 30  3月 2014) | 1 line

INSTALL ファイルを更新
------------------------------------------------------------------------
r179 | yuichi_xy | 2014-04-05 22:31:15 +0900 (土, 05  4月 2014) | 1 line

VMM の起動時にビルド日時を出力するようにした。ソースファイルの変更がない場合は、vmm.elf が再作成されないようにした。
------------------------------------------------------------------------
r180 | yuichi_xy | 2014-04-05 22:51:39 +0900 (土, 05  4月 2014) | 1 line

Makefile を少し修正
------------------------------------------------------------------------
r181 | yuichi_xy | 2014-04-06 22:42:00 +0900 (日, 06  4月 2014) | 1 line

VMM が panic した時に不正値が表示されないようにするため、VMCS をゼロ初期化するようにした
------------------------------------------------------------------------
r182 | yuichi_xy | 2014-04-19 17:00:59 +0900 (土, 19  4月 2014) | 1 line

xHCIをVM1に割り当てた場合に、USB 2.0のポートをxHCIにつなげるように設定するようにした。 #33614 参照
------------------------------------------------------------------------
r183 | yuichi_xy | 2014-04-20 10:08:32 +0900 (日, 20  4月 2014) | 1 line

CR3のビット63が1にならないようにした。#33509 参照
------------------------------------------------------------------------
r184 | yuichi_xy | 2014-04-20 10:36:54 +0900 (日, 20  4月 2014) | 1 line

PTE のキャッシュ制御関連ビットを flags に変換し忘れている箇所を修正。 #33509 参照
------------------------------------------------------------------------
r185 | yuichi_xy | 2014-04-26 20:59:43 +0900 (土, 26  4月 2014) | 1 line

Intel VT の VPID を有効にした。OS が CR3 へ書き込んだ時には VMM が TLB を無効化する。 #28957 参照
------------------------------------------------------------------------
r186 | yuichi_xy | 2014-04-26 22:59:35 +0900 (土, 26  4月 2014) | 1 line

OS が CR4 へ書き込んだ時も、 TLB を無効化するようにした。 #28957 参照
------------------------------------------------------------------------
r187 | yuichi_xy | 2014-04-29 07:50:08 +0900 (火, 29  4月 2014) | 5 lines

メモリ管理の実装を見なおした。
  * SPT1の場合は、VM-entry時に常にTLBを無効化するようにした(r40の変更を元に戻した)。
  * [VT] EPTが有効でかつページングが有効の場合は、cpu_mmu_spt_tlbflushを呼ばないようにした。
  * [SVM] CR4の更新時、TLBを無効化するようにした。
  * [SVM] invlpg命令実行時、TLBを無効化するようにした。
------------------------------------------------------------------------
r188 | yuichi_xy | 2014-04-29 20:59:26 +0900 (火, 29  4月 2014) | 1 line

BIOS: スリープ (_S3 と _S4) を無効化した。
------------------------------------------------------------------------
r189 | yuichi_xy | 2014-04-29 21:19:01 +0900 (火, 29  4月 2014) | 1 line

全ての VM の OS がシャットダウンすることを待ち合わせてから、PC の電源を落とすようにした。シャットダウン時、OS は PM1a_CNT レジスタに対し書き込み S5 への遷移を要求するため、それを VMM が検出する。全ての VM の OS から要求が来たら、VMM が PC を S5 へ遷移させる。#27963 参照
------------------------------------------------------------------------
r190 | yuichi_xy | 2014-05-03 13:57:50 +0900 (土, 03  5月 2014) | 1 line

BIOS: INT 10h AH=0Eh BIOS コール時に、OS が指定した文字を dprintf してシリアルコンソールへ出力する機能を無効化した。
------------------------------------------------------------------------
r191 | yuichi_xy | 2014-05-03 21:08:28 +0900 (土, 03  5月 2014) | 1 line

PIT 割り込みのエミュレーションが意図せず無効になる不具合を修正した。 #33011 参照
------------------------------------------------------------------------
r192 | yuichi_xy | 2014-05-03 23:09:13 +0900 (土, 03  5月 2014) | 1 line

I/O APICエミュレータと、RTC エミュレータのデバッグメッセージを見直した。
------------------------------------------------------------------------
r193 | yuichi_xy | 2014-05-04 17:13:24 +0900 (日, 04  5月 2014) | 1 line

VM0 以外の VM の場合、VM の初期化時に Local APIC 割り込みをマスクするようにした。また、LINT0 だけでなく LINT1 の LVT も書き込み不可能にした。
------------------------------------------------------------------------
r194 | yuichi_xy | 2014-05-05 22:34:06 +0900 (月, 05  5月 2014) | 1 line

BIOS: ATA デバイスドライバとフロッピーデバイスドライバを無効化した
------------------------------------------------------------------------
r195 | yuichi_xy | 2014-05-05 22:36:02 +0900 (月, 05  5月 2014) | 1 line

VMM と Guest BIOS のインタフェースである fw-cfg を実装した。 etc/irq0-override, etc/screen-and-debug, etc/system-states の設定値を、VMM から Guest BIOS へ渡すようにした。
------------------------------------------------------------------------
r196 | yuichi_xy | 2014-05-05 22:52:48 +0900 (月, 05  5月 2014) | 1 line

BIOS: r195 で、etc/system-states が存在しない場合のデフォルト値を間違えたため、修正した。
------------------------------------------------------------------------
r197 | yuichi_xy | 2014-05-06 00:07:45 +0900 (火, 06  5月 2014) | 1 line

VM1 の OS から PCIe の memory mapped configuration access を可能にした。 #33008 参照
------------------------------------------------------------------------
r198 | yuichi_xy | 2014-05-06 18:07:37 +0900 (火, 06  5月 2014) | 1 line

OS が PM1b_CNT レジスタに書き込んだ時に比較する値を間違えていたため修正した。
------------------------------------------------------------------------
r199 | yuichi_xy | 2014-05-17 23:48:32 +0900 (土, 17  5月 2014) | 1 line

Secondary Bus Reset を発行した直後に、D3Hot D0リセットを行おうとしてコンフィグレーションアクセスしてしまうため、Secondary Bus Resetをひと通り発行した後、2秒待ってからD3Hot D0リセットを行うようにした。#32901 参照
------------------------------------------------------------------------
r200 | yuichi_xy | 2014-05-18 20:46:41 +0900 (日, 18  5月 2014) | 1 line

D3Hot D0のリセットの対象デバイスが、バス0上のデバイスだけだったので、他のバス上のデバイスも対象にした。また、No Soft Resetビットが立っているデバイスは対象外にした。 #33818 参照
------------------------------------------------------------------------