ダウンロードリスト

プロジェクト概要

パソコン(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)をベースとします。

システム要件

システム要件が設定されていません

リリース時刻: 2016-11-13 20:03
tinyvisor 1.8 (1 個のファイル 非表示)

リリースノート

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 を再起動すると、ストールすることがある

変更履歴

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 を登録