Download List

Projeto Descrição

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).

System Requirements

System requirement is not defined

Liberado: 2016-11-13 20:03
tinyvisor 1.8 (1 files Esconder)

Release Notes

TinyVisor 1.8


新機能

  • BitVisor の開発ソースツリーから最近の改造内容と取り込むことで、 2MB の EPT に対応しました。


その他の変更

  • VMM とゲスト BIOS のベースを新しくしました。
  • IOMMU 関連処理を改善しました。
    • IOMMU が対応している IO ページテーブルのレベルが異なる場合に対応しました。
    • 明示的に VM に割り当てた PCI デバイスの source id 以外の source id を持つ DMA については、VM0 のメモリにアクセスするようにしました。
    • デバイスを VM に割り当てる時は、全ての IOMMU の Context Table を更新するようにしました。
    • PCI デバイスが持つ MMIO リソースのアドレスを、IOMMU の IOPT に登録するようにしました。
    • Intel Core i7-800 や i7-500 の場合、BIOS が VT-d に非対応であっても、 VMM が VT-d を有効にするが、2つ存在する IOMMU の 2 つ目 を有効化していなかったため、有効化するようにしました。
  • EPT 対応だが unrestricted guest 非対応の CPU でのメモリ使用量を節約するため、 SPT1 をデフォルトにしました。
  • TTY_SERIAL を有効にすると、画面とシリアルコンソールの両方にメッセージを出力し、TTY_SERIAL を無効にすると、画面のみにメッセージを出力するようにました。
  • 2MB の EPT に対応しました。


修正した問題

  • VM1 の OS が IO port 0x64 (KBD CMD) を読み込んだ時に不定値を返すバグを修正しました
  • snprintf のフォーマット文字列としてユーザの入力文字列を指定しているバグを修正しました(コンパイルエラーの修正)


動作確認内容

Fedora 24、Debian 8、FreeBSD 10.3、Windows 10(VM0のみ)が起動、再起動可能なことなどを確認しています。 詳細は以下を参照してください。

https://sourceforge.jp/projects/tinyvisor/wiki/%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E6%99%82%E3%81%AE%E8%A9%95%E4%BE%A1%E9%A0%85%E7%9B%AE


既知の問題

次の問題があります。

  • #36761 VM1 で起動した FreeBSD 10.3 を再起動すると、xHCI と AHCI がタイムアウトする
  • #35570 VM1 で Debian 8 を再起動すると、ログイン画面が表示されない(回避策あり)
  • #35527 VM1 で Fedora 22 を再起動すると、ログイン画面が表示されない
  • #34742 UEFI 環境において、VM0 で Windows 8.1,10 を起動すると、シリアルコンソールへ VMM のメッセージが出力されなくなる
  • #33655 VM0 で Windows 8.1 を再起動すると、ストールすることがある

Changelog

VMM

リビジョン:   245:6b537a3de727
タグ:         tip
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sun Nov 13 17:07:57 2016 +0900
要約:         TTY_SERIAL を有効にすると、画面とシリアルコンソールの両方にメッセージを出力し、TTY_SERIAL を無効にすると、画面のみにメッセージを出力するようにした。

リビジョン:   244:47e4b09fa4b9
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sat Oct 29 23:11:04 2016 +0900
要約:         VM1 の OS が IO port 0x64 (KBD CMD) を読み込んだ時に不定値を返すバグを修正した。

リビジョン:   242:48b223ea78dd
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sat Oct 15 23:29:33 2016 +0900
要約:         df64c61f21c1 以降、IOMMU が 1 つも存在しないと、 ASSERT に失敗して panic するようになったため、VM 0 しか存在しない場合は ASSERT に失敗しないよう修正した。

リビジョン:   241:ee2406fd2537
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Wed Oct 12 21:55:11 2016 +0900
要約:         Intel Core i7-800 や i7-500 には VT-d の IOMMU が 2 つ存在するが、2 つ目の IOMMU を有効化していなかったため、有効化するようにした。

リビジョン:   240:7088ef9b2615
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Mon Oct 10 22:25:06 2016 +0900
要約:         EPT 対応だが unrestricted guest 非対応の CPU でのメモリ使用量を節約するため、 SPT1 をデフォルトにした。

リビジョン:   239:5b8a7190c10d
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Mon Oct 10 22:01:19 2016 +0900
要約:         メモリ不足時に ASSERT 失敗のメッセージで panic するのではなく、 "Out of memory" のメッセージで panic するようにした。

リビジョン:   236:0c025cefee02
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sun Oct 09 19:59:08 2016 +0900
要約:         INIT 関数呼び出し時のデバッグメッセージで空ページ数を出力するようにした

リビジョン:   235:dac8057f313e
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sun Oct 09 19:20:01 2016 +0900
要約:         pci_restrict_access というメッセージを削除した。

リビジョン:   234:61ef496a261d
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sun Oct 09 18:07:29 2016 +0900
要約:         デバイスを VM に割り当てる時は、全ての IOMMU の Context Table を更新するようにした。IOMMU や IOPT の lock 処理を見直した。起動時に、 io-domain の情報を出力するようにした。

リビジョン:   233:70d496d5c7ad
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Mon Sep 19 17:44:01 2016 +0900
要約:         UEFI のゲスト BIOS を使用し、かつ、割り当てたメモリの量が少なく 4GB 以上のアドレスにメモリがマップされなかった場合に、 RTC (CMOS) で取得するメモリ量が不正になっていたバグを修正した。

リビジョン:   232:190fa71a1603
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sat Sep 17 21:00:27 2016 +0900
要約:         TTY_SERIAL を有効にしても、 VMM のメッセージを画面にも出力するようにした。 TTY_SERIAL を無効にしても、シリアルコントローラの IO port をフックし、ACPI の _DIS を無効にするようにした。

リビジョン:   231:a5072d936d56
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sat Sep 17 20:34:01 2016 +0900
要約:         IOMMU が対応している IO ページテーブルのレベルが異なる場合に対応した。

リビジョン:   230:25b1818336f9
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sun Jul 24 07:13:27 2016 +0900
要約:         PCI デバイスが持つ MMIO リソースのアドレスを、IOMMU の IOPT に登録するようにした。

リビジョン:   229:8561331acce6
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sat Jul 23 23:54:45 2016 +0900
要約:         IOPT の更新時に IOMMU のキャッシュをフラッシュするか否かを、全ての IOMMU の Capability レジスタを参照して決めるようにした。Supported Adjusted Guest Address Width も、全ての IOMMU を確認するようにした。

リビジョン:   228:df64c61f21c1
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Sat Jul 23 11:33:07 2016 +0900
要約:         明示的に VM に割り当てたPCIデバイスの source id 以外の source id を持つ DMA については、VM0 のメモリにアクセスするようにした。 Root Entry や Context Entry、 IO PTE の更新前にゼロクリアをするようにした。

リビジョン:   227:5627072bf66f
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Wed Jul 20 23:23:56 2016 +0900
要約:         VM0 以外の VM も 2MB EPT ページに対応した。割り当てたデバイスの MMIO リソースが 4KB 以下の場合、GP2HP で変換不可にした。

リビジョン:   226:bb13be786efc
親リビジョン: 211:892c703b53e5
親リビジョン: 225:cf65f2b45794
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Tue Jul 19 22:13:22 2016 +0900
要約:         最新の BitVisor の改造を TinyVisor へマージした。

リビジョン:   211:892c703b53e5
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Mon Jul 18 14:43:00 2016 +0900
要約:         snprintf のフォーマット文字列としてユーザの入力文字列を指定しているバグを修正した。

ゲストBIOS

リビジョン:   17:d2cda9308731
親リビジョン: 15:51e62c37761c
親リビジョン: 16:1c90f0440f5e
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Thu Jul 28 22:01:33 2016 +0900
要約:         SeaBIOS 1.9.3 をマージした

リビジョン:   16:1c90f0440f5e
ブランチ:     upstream
親リビジョン: 10:de0b91ffe31a
ユーザ:       Yuichi Watanabe <yuichi_xy@ybb.ne.jp>
日付:         Thu Jul 28 21:59:02 2016 +0900
要約:         SeaBIOS 1.9.3 を登録