パソコン(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)をベースとします。
PCに実装されている物理メモリをすべてVMMの仮想アドレス空間に固定的にマップすることで、命令エミュレーションののオーバヘッドを削減し、4GB以降のメモリのみを割り当てたvm1でOSを起動可能にしました。
vm1 に割り当てたデバイスに対し、vm0 の BIOS/OS から I/O アクセスやメモリアクセスができないようにすることで、vm0とvm1を同時起動するときの競合が発生しないようにしました。
バグ修正をしました。「修正した問題」を参照してください。
以下のことを確認済です。
1. USB メモリに TinyVisor をインストール可能なこと。 2. Linux のファイルシステムに TinyVisor をインストール可能なこと。 3. vm0 のみで OS を起動可能なこと。 4. Nehalem マシンにおいて、次の組み合わせで OS を起動可能なこと。 vm0: Debian GNU/Linux 7.0 (amd64版) vm1: FreeBSD 9.1-RELEASE (amd64版) この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。 SATA: 玄人志向 SATA312-PCIe (Marvell 88SE9128) NIC: Realtek RTL811DH 5. Nehalem マシンにおいて次の組み合わせで OS を起動可能なこと。 vm0: FreeBSD 9.1-RELEASE (amd64版) vm1: Debian GNU/Linux 7.0 (amd64版) この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。 SATA: 玄人志向 SATA312-PCIe (Marvell 88SE9128) NIC: Realtek RTL811DH USB: 玄人志向 USB3.0N4-PCIe (ルネサス uPD720200) VGA: GeForce 8400 GS 6. Nehalem マシンにおいて次の組み合わせで OS を起動可能なこと。 vm0: Debian GNU/Linux 7.0 (amd64版) vm1: Debian GNU/Linux 7.0 (amd64版) 7. Nehalem マシンにおいて vm1 で動作している Debian GNU/Linux 7.0 (amd64版) を再起動可能なこと。 8. IvyBridge マシンにおいて、次の組み合わせで OS を起動可能なこと。 vm0: Debian GNU/Linux 7.0 (amd64版) vm1: FreeBSD 9.1-RELEASE (amd64版) この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。 SATA: ASMedia ASM1062 NIC: Realtek RTL8111E 9. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。 vm0: FreeBSD 9.1-RELEASE (amd64版) vm1: Debian GNU/Linux 7.0 (amd64版) この時、vm1のOSから以下のI/Oデバイスを使用可能なこと。 SATA: ASMedia ASM1062 NIC: Realtek RTL8111E 10. IvyBridge マシンにおいて次の組み合わせで OS を起動可能なこと。 vm0: Debian GNU/Linux 7.0 (amd64版) vm1: Debian GNU/Linux 7.0 (amd64版) 11. IvyBridge マシンにおいて vm1 で動作している Debian GNU/Linux 7.0 (amd64版) を再起動可能なこと。
#31963 gcc 4.7.2 で SPT3 を無効化した VMM をコンパイルすると、GRUB のロード中にストール
#31926 vm0 と vm1 を作成した時に vm1 側で AHCI タイムアウトが発生し OS が起動しない
#31858 4GB以上のメモリをvm1に割り当てると、Linux が起動中にストールする
#31857 4GB境界を跨ぐメモリをvm1に割り当てると、vm1の再起動時にAHCIがタイムアウトする
#31925 Qemu上でTinyvisorを起動したところ、Linuxが起動しない
#31392 vm1のFreeBSDを再起動すると、AHCIの初期化に失敗する
#30457 複数のCPUを生成したQEMU上でTinyVisorを動作させると、Guest Linuxがsoft lockupのエラー
#29706 vm0 を GRUB で止めている状態で、 vm1 を起動しシャットダウンすると、0x0F の割り込みが発生し VMM がパニック
#29240 VMM起動後のGRUB画面で、Ctrl+ALT+DELを入力すると、VMMがpanic
#29191 USBメモリにVMMとGRUBを書き込んでみたところ、panic
#28765 boot_drive=81でOSの起動したところ、General protection faultが発生し panic
------------------------------------------------------------------------ r108 | yuichi_xy | 2013-08-31 17:40:32 +0900 (土, 31 8月 2013) | 1 line vm1 に割り当てたデバイスに対し、vm0 の BIOS/OS から I/O アクセスやメモリアクセスができないようにした。 #31926 参照 ------------------------------------------------------------------------ r109 | yuichi_xy | 2013-08-31 22:21:01 +0900 (土, 31 8月 2013) | 1 line vm1 の再起動時、メモリマップエントリの2つ目以降が示すメモリを初期化していないバグを修正 ------------------------------------------------------------------------ r110 | yuichi_xy | 2013-08-31 23:08:05 +0900 (土, 31 8月 2013) | 1 line BIOS の AHCI ドライバを改造し、コマンドリストや FIS のアドレスを設定する時に、上位 32 ビットを 0 に設定するようにした。 #31857 ------------------------------------------------------------------------ r111 | yuichi_xy | 2013-09-01 15:33:59 +0900 (日, 01 9月 2013) | 1 line PC に実装されている物理メモリをすべて VMM の仮想アドレス空間に固定的にマップするようにした。#31858 参照 ------------------------------------------------------------------------ r112 | yuichi_xy | 2013-09-08 15:07:03 +0900 (日, 08 9月 2013) | 1 line LIST2_DEL を、インライン関数を呼び出す実装から、「式の中の文」(丸括弧で囲んだ複文)の実装に修正。#31963 参照 ------------------------------------------------------------------------