LilyVM と仮想化技術

榮樂 英樹<hdk̲2@users.sourceforge.net>

内容z 背景z LilyVM
z その他の VM およびユーザレベル OS
z CPU による VM のサポート

1 台の‫ב‬算機で複数の OS を動かしたいz OS の移行 (Mac OS 9 と Mac OS X)
z 異なるシステムの組み合わせ(Windows と NetBSD)
z 動作テストz 開発など1 台の‫ב‬算機で複数の OS を動かす方法
z 仮想‫ב‬算機 (VM) (Type-I, Type-II)z ユーザレベル OS
z VM + ユーザレベル OS

仮想‫ב‬算機 (VM) (Type-I)
z ホスト OS が存在しないタイプの仮想‫ב‬算機z 例: VMware ESX
Server, XenshGuest OS kernel
Virtual Machine Monitor
ハードウェア仮想‫ב‬算機 (VM) (Type-II)z 実機用のOSをそのまま実行できる、下位層のシステム（ホストOS）から完全に独立した実行環境を提供する
z 例: Bochs, VMware
Workstation, QEMUshGuest OS kernelsh

VM
Host OS kernel
ハードウェアユーザレベル OS
z OS をユーザプロセスとして実行する
z 実機用の OS を移植して作られている
z 例: User-mode Linux(UML)shsh

ユーザレベルOS kernel
Host OS kernel
ハードウェアVM + ユーザレベル OS
z VM が、特権命令や入出力装置などのうち、必要なಊ分だけをエミュレートする
z LilyVM [http://lilyvm.sf.net]
y 特権命令などをコンパイル時にエミュレートするコードに書き換える
y ユーザレベル OS カーネル: 自動変換 + わずかな修正
y ホスト OS: NetBSD, FreeBSD,
Linuxy ゲスト OS: NetBSD, FreeBSD,
Linux 2.4

shsh

VMユーザレベルOS kernel

Host OS kernel
ハードウェアNetBSD で LilyVM
z ホスト OS の ptrace() に以下の機能をઉ加する必要がある
y PTRACE_SYSEMU(または PTRACE_SYSCALL)y 制御レジスタ %cr2、エラーコード、およびトラップ番号を取得するための機能

z 本体へのઉ加を希望します!

LilyVM の開発予定z ‫ژ‬速化
y 浮動小数点関連
y MMU まわりy ネットワークz AMD64, Power PC 等のサポート

その他の VM およびユーザレ
ベル OS
z VMwarez Bochsz QEMUz Plex86
z Xen
z User-mode Linuxz coLinux

比ѕVM

ユーザレベ
ル OS

VM と機械‫ل‬命令の変換

その他

VMwareQEMU,Bochs

User-mode
Linux

LilyVM

Plex86

Xen

coLinux

VM が提供するアブストラクション実機

実機なし

実機

実機

Xen

なし

ゲスト OS の修正不要

不要

移植 (大)

自動自動移植(小)移植(小)ホスト OS との隔離

大大小小大

大なし

仮想化のオーバヘッド

?

特大なし

中大小小

ホスト

x86

x86, PPC 等

x86, PPC 等x86

x86

x86

x86

ライセンス

商用

LGPL

GPL

GPL

LGPL

GPL

GPL

VMwarez x86 の VM ソフトウェアの老舗
z 詳細不明y ring 3 は元の機械‫ل‬命令をそのまま実行しているという噂だが、ring 0 やリアル・モードも速いし...

Bochsz CPU および周辺装置をエミュレートする
z 移植性が‫ژ‬いz オーバヘッドがఫ常に大きいshGuest OS kernel
shBochs
Host OS kernel
ハードウェアQEMUz CPU および周辺装置をエミュレートする
z 機械‫ل‬命令を動的に変換することによって‫ژ‬速化しているz カーネルモジュール
によりさらなる‫ژ‬速化が進められている

shGuest OS kernelsh

QEMU
Host OS kernel
ハードウェアPlex86z CPU の一ಊと周辺装置をエミュレートする
z ゲスト OS の機械‫ل‬
命令をऍ的に変換している
z カーネルモジュール
によりメモリ空間の切り替えなどを行う

shModified Linuxsh

Plex86

Host OS kernel + module
ハードウェアXenz ゲスト OS を Xen アーキテクチャに移植している
z 周辺装置の制御のために Linux をひとつ使うsh
Guest OS kernel
Xen
ハードウェアcoLinuxz ホスト OS のデバイスドライバとしてLinux を動作させる
z MMU や割り込みに関するಊ分が多く修正されている
z 性能はఫ常に良いshshcoLinux kernel
Windows or Linux kernel
ハードウェアUser-mode Linuxz Linux 上でプロセスとして動作するようにLinux が移植されている
z ptrace() など OS に依存する機能を使っていて移植性が低い

shsh

User-mode LinuxkernelLinux kernel
ハードウェア

比ѕVM

ユーザレベ
ル OS

VM と機械‫ل‬命令の変換

その他

VMware

QEMU,
Bochs

User-mode
Linux

LilyVM

Plex86

Xen

coLinux

VM が提供するアブストラ
クション

実機

実機

なし

実機

実機

Xen

なし

ゲスト OS の修正不要

不要

移植 (大)

自動自動移植(小)移植(小)ホスト OS との隔離

大

大

小

小

大

大なし

仮想化のオー
バヘッド?

特大なし

中大

小

小

ホスト

x86

x86, PPC 等

x86, PPC 等

x86

x86

x86

x86

ライセンス

商用LGPLGPLGPLLGPL

GPLGPLCPU による VM のサポート
z 背景
y VM の必要性が‫ژ‬まってきている
y 従来の IA-32 における VM 開発は難しい(センシティブなఫ特権命令の存在等)

z VMM の実現を容易にするための IA-32 の拡張
y Intel Virtualization Technologyy AMD64 Pacifica

Intel Virtualization
Technology
z Virtual Machine Control data Structure(VMCS) : 制御レジスタや状態などを含む
z MMU 関連: physical-address extension ?
Guest 0VM Exit
VMXON

Guest 1
VM
EntryVMM

VM ExitVMXOFFIntel Virtualization Technology Specification for the IA-32 Intel Architecture(C97063-002) Figure 1-1 より引用

AMD64 Pacifica
z Intel のものとにたような機能のはず
z Intel のものとの互換性がないらしい

CPU による VM のサポートのポイント
z 命令エミュレーションは基本的に不要z I/O 命令およびハードウェア割り込みのエミュレーションは必要

CPU による VM のサポートで何が変わるか: LilyVM
z 新機能がユーザレベルから使えれば...
y 大幅‫ژ‬速化?
y I/O 命令は今の書き換える方法のほうが‫ژ‬速な可能性がある

z ホスト OS が新機能をうまくユーザレベルに提供できるかどうか
y ゲスト OS からのホスト OS の呼び出し等

CPU による VM のサポートで何が変わるか: その他の VM
z VMware: 性能向上
z Bochs: 今まで通り
z QEMU: x86 on x86 における性能向上?
z Plex86: ?
z Xen: 性能向上?、Windows 対応
z User-mode Linux: 今まで通り
z coLinux: 今まで通り

まとめz LilyVM [http://lilyvm.sf.net]
y 機械‫ل‬命令の書き換え
y NetBSD への機能ઉ加z その他の VM およびユーザレベル OSz CPU による VM のサポート