パソコン(PC)に内臓されているCPUとメモリ、I/Oを分割して各VMに割り当て、OSにそれらを直接制御させることで、ホストOSなしで各OSが独立して動作可能なHypervisor(VMM)を開発するプロジェクトです。
最初の目標は、ひとつのPCでふたつのOSを動作させること、次の目標は各OSを個別に再起動可能にすることでしたが、2014年1月にこれらの目標を達成し、1.0をリリースしました。
OSは、Linux、Windows、FreeBSDが動きます。
VMMはBitVisor(BSDライセンス)をベースとし、AMLインタープリタや標準ライブラリの一部の関数をNetBSDやFreeBSDから移植しています。 Guest BIOSはSeaBIOS(GPL)をベースとします。
全ての 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の初期化に失敗する
------------------------------------------------------------------------ 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 参照 ------------------------------------------------------------------------