“An Introduction to Virtualization” by Amit Singh http://www 大山 恵弘 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? 実験のためのツール 既存のOSをSMP上で動かすことを可能にする 任意のテストシナリオを作る 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上だと困る 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 Chorus chroot() Denali x86, I/O device, custom BIOSをエミュレート Chorusのカーネルは、その上に分散OSを実装できる ような低レベルフレームワークを提供 chroot() Denali IA-32 VMM 信頼できないサービスを隔離環境で動かせる ゲストOSを書き換える
各論 Disco Goal: (大きな実装の手間なく)大規模共有メモリ計算機で効率的に走るよう現代のOSを拡張 複数VMを載せられるVMM マルチスレッド共有メモリプログラムとして 実装されている ホストOSのすべての資源を仮想化して提供
各論 Ensim FreeBSD jail Virtual Private Server OSを安全にpartitionできる QoS, complete isolation, manageability Solaris, Linux, Windows FreeBSD jail chroot + α FreeBSDのカーネル内の各所で実装
各論 Hive HP-UX Virtual Partitions (VPAR’s) 複数の独立したカーネル(cell)からなる分散システム cell内にfaultをとじこめて信頼性を向上させる HP-UX Virtual Partitions (VPAR’s) VPARは自分のHP-UXコピーを走らせる VPARは動的生成可能 vPar MonitorというVMM ハードのすぐ上で稼動 ハードウェア資源の所有権をVMインスタンスに割り当てる vParはメモリとI/Oハードウェアを直接アクセスする vParは割り当てられていないハードウェアを意識しない
各論 Linux/RK IBM’s Logical Partitioning (LPAR) QoSをポータブルな形で入れる 複数の独立したAIX, LinuxのOSイメージを一つのサーバ上で走らせる 動的にactive partitionに資源を加えたり取り除いたりできる iSeriesなどのサーバもlogical partitioningをサポート
各論 POWER4 Mac-on-Linux MAE (Macintosh Application Environment) 仮想化を助ける仕組みがある 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 プログラミング言語VM QLinux x86仮想機械 UCSD P-System, p-code JVM .NET CLI QLinux LinuxをQoSで拡張
各論 Shade SILK (Scout In the Linux Kernel) コードがホスト上で動くように動的にクロスコンパイルする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 完全マシンシミュレータ Embraというプロセッサエミュレータをoptionallyに使う 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 SWSoft ホスティングの自動化と管理をするソフトウェアの会社 VDS (Virtual Dedicated Server) 一つの物理マシンをソフトウェアで複数の実行環境に分ける SWSoft Virtuozzo Virtual Private Serverを作れる Virtuozzo instanceは動的にpartitionされることができ、QoS保証もある
各論 TCP/IPスタックの仮想化 User-Mode Linux UMLinux Virtual PC VMware z/VM faultが存在するときのLinuxマシンの動作を 評価するためのフレームワーク Virtual PC VMware z/VM