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).
TinyVisor 0.8 (r92) 以下のことを確認済みです。 1. USB メモリに TinyVisor をインストール可能なこと。 2. Linux のファイルシステムに TinyVisor をインストール可能なこと。 3. vm0 のみで OS を起動可能なこと。 4. 次の組み合わせで OS を起動可能なこと。 vm0: Debian GNU/Linux 6.0 (amd64版) vm1: FreeBSD 9.0-RELEASE (amd64版) 5. 次の組み合わせで OS を起動可能なこと。 vm0: FreeBSD 9.0-RELEASE (amd64版) vm1: Debian GNU/Linux 6.0 (amd64版) 6. 次の組み合わせで OS を起動可能なこと。 vm0: Debian GNU/Linux 6.0 (amd64版) vm1: Debian GNU/Linux 6.0 (amd64版) 7. vm1 で Linux を起動し以下のI/Oデバイスを動作させることができること。 vm1 のOS は Linux とする。 SATA: 玄人志向 SATA312-PCIe (Marvell 88SE9128) NIC: Realtek RTL811DH USB: 玄人志向 USB3.0N4-PCIe (ルネサス uPD720200) VGA: GeForce 8400 GS 8. vm1 で FreeBSD を起動し以下のI/Oデバイスを動作させることができること。 SATA: 玄人志向 SATA312-PCIe (Marvell 88SE9128) NIC: Realtek RTL811DH 9. vm1 で動作している Debian GNU/Linux 6.0 (amd64版) を再起動可能なこと。 ただし、ビデオカードの初期化に失敗(#31391)。 10. vm1 で動作している FreeBSD 9.0-RELEASE (amd64版) を再起動可能なこと。 ただし、AHCI の初期化時にストール(#31392)。 11. qemu 上で TinyVisor を起動可能なこと。 お問い合わせは、 tinyvisor-devel@lists.sourceforge.jp 宛にメールを送付してください。
------------------------------------------------------------------------ r65 | yuichi_xy | 2012-09-30 15:12:31 +0900 (日, 30 9月 2012) | 1 line vm1 に TOLM 以上のメモリを割り当て可能にした。 #27964 参照。 ------------------------------------------------------------------------ r66 | yuichi_xy | 2012-09-30 15:41:18 +0900 (日, 30 9月 2012) | 1 line r64 で、 vm1 に TOLM 以下のメモリを割り当てた場合に、e820 マップが不正になり Guest Linux が panic するようになったので、修正。 ------------------------------------------------------------------------ r67 | yuichi_xy | 2013-01-02 12:46:54 +0900 (水, 02 1月 2013) | 1 line TTY_SERIAL を無効化するとビルドエラーとなる不具合を修正 ------------------------------------------------------------------------ r68 | yuichi_xy | 2013-01-02 16:16:08 +0900 (水, 02 1月 2013) | 1 line make config で I/O のホック(仮想化)の有無を指定可能にした。 ------------------------------------------------------------------------ r69 | yuichi_xy | 2013-01-02 18:13:35 +0900 (水, 02 1月 2013) | 1 line プロセッサが monitor や mwait 命令に対応していない場合、仮想 BSP でないプロセッサを freeze 状態にするようにした。 ------------------------------------------------------------------------ r70 | yuichi_xy | 2013-01-02 19:27:57 +0900 (水, 02 1月 2013) | 1 line メッセージの出力方法を修正 ------------------------------------------------------------------------ r71 | yuichi_xy | 2013-01-04 13:28:28 +0900 (金, 04 1月 2013) | 1 line BitVisor の SPT 3 を復活させた。 #28662 参照 ------------------------------------------------------------------------ r72 | yuichi_xy | 2013-01-04 13:48:44 +0900 (金, 04 1月 2013) | 1 line BitVisor の SPT 3 のマージミスを修正。 #28662 参照 ------------------------------------------------------------------------ r73 | yuichi_xy | 2013-01-04 17:56:53 +0900 (金, 04 1月 2013) | 1 line SPT3 のマージ漏れを修正。 Shadow Page Table には Host の PAT の Index の値を設定するようにした。 ------------------------------------------------------------------------ r74 | yuichi_xy | 2013-01-04 19:17:22 +0900 (金, 04 1月 2013) | 1 line BitVisor 1.2 の SPT3 をバックポートした。 ------------------------------------------------------------------------ r75 | yuichi_xy | 2013-01-04 21:37:33 +0900 (金, 04 1月 2013) | 1 line SPT3 のメモリリークを修正 (BitVisor 1.3 をバックポート) ------------------------------------------------------------------------ r76 | yuichi_xy | 2013-01-06 10:35:16 +0900 (日, 06 1月 2013) | 1 line SIPI を待つため monitor/mwait 命令を使用していたが、qemu がこれらの命令に対応していないため、hlt 命令を使用して SIPI を待ち IPI で復帰させるようにした。 VM 単位に設定していた割り込みのフックを、CPU 単位に設定するようにした。 ------------------------------------------------------------------------ r77 | yuichi_xy | 2013-01-06 16:55:20 +0900 (日, 06 1月 2013) | 1 line SIPI の待ち合わせで hlt 命令を実行するとき、IPI のタイミングによっては hlt から復帰できなくなる可能性があったため、sti 命令と hlt 命令を続けて実行するよう修正した。他にも、すれ違いが発生する可能性がある部分を修正した。 ------------------------------------------------------------------------ r78 | yuichi_xy | 2013-05-02 12:02:34 +0900 (木, 02 5月 2013) | 2 lines vm1 の OS がキーボードコントローラにリセットを指示した時に、VCPU とメモリをリセットして、GuestBIOS をロードし、Guest BIOS の実行を開始するようにした。 #27962 参照 VM-entry に失敗した時に VMCS をダンプするようにした。 ------------------------------------------------------------------------ r79 | yuichi_xy | 2013-05-02 17:26:48 +0900 (木, 02 5月 2013) | 1 line vm1 の OS がキーボードコントローラにリセットを指示した時に、vm に割り当てられている他の CPU に INIT IPI を送信するようにした。 #27962 参照 ------------------------------------------------------------------------ r80 | yuichi_xy | 2013-05-02 18:09:12 +0900 (木, 02 5月 2013) | 1 line 仮想 CPU をリセットする時 CR2 レジスタが漏れていたので 0 クリアするようにした。vBSP が INIT 割り込みを受信した時は Guest BIOS を実行するようにした。 #27962 参照 ------------------------------------------------------------------------ r81 | yuichi_xy | 2013-05-03 06:20:28 +0900 (金, 03 5月 2013) | 1 line 仮想プロセッサをリセットする時に、EOI 未発行のベクタに EOI を発行し、APIC を無効化するようにした。 #27962 参照 ------------------------------------------------------------------------ r82 | yuichi_xy | 2013-05-03 15:49:46 +0900 (金, 03 5月 2013) | 1 line 仮想プロセッサをリセットする時に、Activity state と Interruptibility state、Pending debug exceptions を 0 初期化するようにした。#227962 参照 ------------------------------------------------------------------------ r83 | yuichi_xy | 2013-05-03 17:19:30 +0900 (金, 03 5月 2013) | 1 line BIOS: Qemu が存在しないにも関わらず、Qemu の特殊な IO Port から NUMA 情報を取得して SRAT テーブルを作成してしまうバグを修正し、TinyVisor 上では SRAT テーブルを作成しないようにした。 #27962 参照 ------------------------------------------------------------------------ r84 | yuichi_xy | 2013-05-06 14:44:48 +0900 (月, 06 5月 2013) | 1 line ベースアドレスが 0 の I/O リソースと MMIO リソースについては、割り当てられていないと判断するようにした。グローバル変数 mmio_resource と io_resource の type が誤っていたので修正した。空き領域を計算するための終端アドレスを切り落とす処理において、オーバラップが発生して 0xffffffffffffffff になることがあったので修正。 ------------------------------------------------------------------------ r85 | yuichi_xy | 2013-05-11 21:38:25 +0900 (土, 11 5月 2013) | 1 line vm->driver_data の型がポインタの配列になっていたので u64 の配列に修正。 ------------------------------------------------------------------------ r86 | yuichi_xy | 2013-05-11 22:20:49 +0900 (土, 11 5月 2013) | 1 line VM ごとに IO リソースと、MMIO リソースを管理可能にした ------------------------------------------------------------------------ r87 | yuichi_xy | 2013-05-11 22:32:22 +0900 (土, 11 5月 2013) | 1 line VM に割り当てた PCI デバイスのリソースを登録。0x0000 から 0x0fff の間で空いている IO Port は legacy I/O Port として予約。 ------------------------------------------------------------------------ r88 | yuichi_xy | 2013-05-11 23:36:41 +0900 (土, 11 5月 2013) | 1 line vm1 の ACPI Power Managemet レジスタの IO port を PCI デバイスと衝突しないようにした。 #27962 参照 ------------------------------------------------------------------------ r89 | yuichi_xy | 2013-05-12 19:01:32 +0900 (日, 12 5月 2013) | 1 line 全ての仮想 CPU を reset してから、メモリの初期化を行うようにした。仮想 CPU のリセット時にイベントを初期化するようにした。 #27962 参照 ------------------------------------------------------------------------ r90 | yuichi_xy | 2013-05-12 22:26:04 +0900 (日, 12 5月 2013) | 1 line CONFIG_SPT3 をデフォルトで有効にした。VMM の起動のできるだけ始めの方で起動開始のメッセージを出力するようにした。 ------------------------------------------------------------------------ r91 | yuichi_xy | 2013-05-18 22:56:43 +0900 (土, 18 5月 2013) | 1 line currentcpu が初期化される前に panic すると、不正なアドレスにアクセスするバグを修正 ------------------------------------------------------------------------ r92 | yuichi_xy | 2013-05-19 13:54:24 +0900 (日, 19 5月 2013) | 1 line IDT の初期化を優先するため、PIT の初期化を遅延させた。 ------------------------------------------------------------------------