Virtual Machine Architectures, Implementations,

“An Introduction to Virtualization”
by Amit Singh
http://www.kernelthread.com/publications/virtualization/
のまとめ
大山 恵弘
2004年10月5日
A Loose Definition
virtualization is a framework or methodology of
dividing the resources of a computer into
multiple execution environments, by applying
one or more concepts or technologies such as
hardware and software partitioning, time-sharing,
partial or complete machine simulation,
emulation, quality of service, and many others
Why Virtualization?
低負荷サーバを少ないマシンに集める
レガシーアプリケーションを動かす
サンドボックス
資源消費制御・保証、スケジューラ、QoS
存在しないハードウェアの提供

SCSI devices, multiple processors, networks of
computers
Why Virtualization?
複数のOSを同時に動かす
デバッグ、性能モニタ
fault and error containment (platform for fault
injection experiment)
マイグレーション
packagingによりアプリケーションsuiteを
applianceとして扱える
Why Virtualization?
実験のためのツール

isolation, save the state
既存のOSをSMP上で動かすことを可能に
する
任意のテストシナリオを作る
既存のOSにnew featureを入れる
Migration, backup, recoveryを簡単にする
Why Virtualization?
バイナリ互換性を提供
ホスティング

secure, cost-effective
楽しい
Privileged and Non-privileged
Instructions
おなじみの内容
“Analysis of the Intel Pentium’s Ability to Support
a Secure Virtual Machine Monitor”

Pentiumでは少なくとも17個の命令が
non-virtualizable

STR命令はどんな特権レベルでも実行可能で、
RPLを返す
TLB
IA-32のTLBはハードウェア制御
Alpha, MIPS, PA-RISC, SPARCのTLBはソフト
ウェア制御

ソフトウェア制御のほうが仮想化しやすい
IA-32のTLBエントリはタグつけできない
システムコールの仮想化
ptraceなどでフック

システムコールをnullify
getpidや無効システムコールに変える
 ホストがシステムコールのための処理を実行

アイドルループ
普通のOSはやることがないときループする
でもこれはVM上だと困る
VM上では、アイドルループを実行するかわ
りに、サスペンドしてほしい
Denaliはそのための仮想命令を持つ

idle-with-timeout
エミュレータ
ARMn
multiprocessor cycle-accurate simulator
 ARM processor coreのクラスタをsimulateできる

ABI/API Emulation
WABI (Windows Application Binary Interface)
Sunのマシンの上でWindowを動かす
 Windows callを「等価な」UNIX callに変換
 x86上では命令を直接実行
 SPARC上ではemulation and/or binary translation

Lxrun
x86のLinux a.outをSCO OpenServer, SCO
UnixWareなどの上で動かす
UNIX system callをon-the-flyでremap
Linux shared libraryが必要
Linux dynamic loaderが必要
つまりLxrunはシステムコールエミュレータ
である
その他
Real-time LynxOSの新しいバージョンはLinux
ABI互換性を持つ
FreeBSDはLinuxとバイナリ互換。linprocfsは
Linuxのprocfsのsubsetをemulate
WineはWindowsアプリケーションをLinux,
FreeBSD, Solarisで動かす

x86専用
各論
bochs

x86, I/O device, custom BIOSをエミュレート
Chorus

Chorusのカーネルは、その上に分散OSを実装できる
ような低レベルフレームワークを提供
chroot()
Denali



IA-32 VMM
信頼できないサービスを隔離環境で動かせる
ゲストOSを書き換える
各論
Disco
Goal: (大きな実装の手間なく)大規模共有メモ
リ計算機で効率的に走るよう現代のOSを拡張
 複数VMを載せられるVMM
 マルチスレッド共有メモリプログラムとして
実装されている
 ホストOSのすべての資源を仮想化して提供

各論
Ensim
Virtual Private Server
 OSを安全にpartitionできる
 QoS, complete isolation, manageability
 Solaris, Linux, Windows

FreeBSD jail
chroot + α
 FreeBSDのカーネル内の各所で実装

各論
Hive


複数の独立したカーネル(cell)からなる分散システム
cell内にfaultをとじこめて信頼性を向上させる
HP-UX Virtual Partitions (VPAR’s)



VPARは自分のHP-UXコピーを走らせる
VPARは動的生成可能
vPar MonitorというVMM




ハードのすぐ上で稼動
ハードウェア資源の所有権をVMインスタンスに割り当てる
vParはメモリとI/Oハードウェアを直接アクセスする
vParは割り当てられていないハードウェアを意識しない
各論
Linux/RK

QoSをポータブルな形で入れる
IBM’s Logical Partitioning (LPAR)
複数の独立したAIX, LinuxのOSイメージを一つの
サーバ上で走らせる
 動的にactive partitionに資源を加えたり取り除い
たりできる
 iSeriesなどのサーバもlogical partitioningをサポート

各論
POWER4

仮想化を助ける仕組みがある
Mac-on-Linux


PowerPC上でMac OSとLinuxを動かすことができる
カーネルモジュールとして実装
MAE (Macintosh Application Environment)


SunOSやHP-UX上で仮想的なMac環境を実現
Motorola 68LC040をエミュレート
各論
Microsoft Virtual Server
Nemesis (by U. of Cambridge)




QoSのサポートのために設計された
Nemesis kernelは小さくて軽量
ほとんどのOSコードはアプリケーションプロセス内で
実行される
一つの大域的なページテーブル



(単一アドレス空間)
プロセスごとのメモリ保護はある
いわゆるマイクロカーネル?
各論
Plex86

x86仮想機械
プログラミング言語VM
UCSD P-System, p-code
 JVM
 .NET CLI

QLinux

LinuxをQoSで拡張
各論
Shade

コードがホスト上で動くように動的にクロスコン
パイルするVM
SILK (Scout In the Linux Kernel)
Scoutはsmall network applianceのためのモジュ
ラーなOS
 Scoutはカーネルモジュールとして存在。自分
のCPUスケジューラとスレッドパッケージを含む

各論
Simics
完全システムシミュレーションのためのプラット
フォーム
 Simicsハードウェアの上で、VxWorks (PowerPC),
OSE (PowerPC), Solaris (SPARC), Windows (x86,
AMD64)が動く
 sparc-solaris, x86-linux, x86-windows版あり

各論
SimOS

完全マシンシミュレータ
CPU, cache, multiprocessor memory buses, network
devices, disk drives, other I/O devicesなどをモデル
可能
 Simicsに非常に似ている


Embraというプロセッサエミュレータをoptionally
に使う

動的バイナリ変換
各論
QuickTransit by Transitive Corporation
MIPS, PowerPC, mainframe processorなどのコー
ドをx86やItaniumやOpteronで実行可能
 MIPS, x86 , mainframe processorなどのコードを
PowerPC上で実行可能
 様々なUNIX OS間でのsystem call mapping
 dynamic binary translation

各論
Solaris
Solaris containers
 Solaris Resource Manager (SRM)
 Zones

trusted container
 BSD “jail” concept
 アプリケーションにとっては実際の機械に見える、
安全で隔離された実行環境

各論
Solaris Virtual Private Server
カーネルは一つのものを共有
 複数の隔離実行環境に分けられる
 各環境ごとに独立に管理、設定、リブート、
シャットダウンができる
 薄いソフトウェア層で実現
 カーネルモジュールの集合で大半は実装
 アプリケーションは修正なしで走る

各論
Sphera


ホスティングの自動化と管理をするソフトウェアの会社
VDS (Virtual Dedicated Server)

一つの物理マシンをソフトウェアで複数の実行環境に分ける
SWSoft

Virtuozzo


Virtual Private Serverを作れる
Virtuozzo instanceは動的にpartitionされることができ、QoS保証も
ある
各論
TCP/IPスタックの仮想化
User-Mode Linux
UMLinux

faultが存在するときのLinuxマシンの動作を
評価するためのフレームワーク
Virtual PC
VMware
z/VM