“Survey of System Virtualization Techniques” by Robert Rose のまとめ 大山 恵弘 2004年10月5日
はじめの言葉 講義レポートのようなサーベイだが、役に立つ内容もありそうなので、一応チェック
複数の計算機システムを持つ 利点 隔離 性能 バグのあるアプリケーションの影響が他の アプリケーションにおよばないようにする アプリケーションをそのためのシステムに置くことにより、資源に独占的にアクセスできる
本論文で扱う二つのトレンド Full system virtualization Paravirtuailzation 全ハードウェアアーキテクチャを模擬 Paravirtuailzation OSを書き換える
Formal Requirements for a Virtualizable Computer Architecture Popek and Goldberg 1974, “For any computer a virtual machine monitor may be constructed if the set of sensitive instructions for that computer is a subset of the set of privileged instructions” 簡単に言えば「特権命令はトラップする」 ゲストVMが特権命令を実行しようとしたら、プロセッサはVMMに制御を戻す IA-32はこれを満たさない
VMMの3つの本質的特徴 VMM上で動く任意のプログラムは、実機上で走った場合と同じ効果を示す タイミングをのぞく 仮想プロセッサ命令の統計的に支配的な部分集合は実プロセッサで直接実行される つまりエミュレータとはちがうということ VMMはシステム資源を完全に制御する VMはVMMを経由せずに直接資源をアクセスできない これらの特徴は、満たすのが難しいor望ましくないと わかりつつある
Full System Virtualization 最初のfull system virtualization system: CP-67 on IBM 360/67 mainframe 各ユーザに完全な仮想的なSystem/360を見せた 遅いので、IBMは仮想化支援のための特殊なアーキテクチャを持つ計算機を作ると決めた → VM/370で初めて実現
IA-32の仮想化 なぜ難しいか? 特権モードでなくても実行できるのに、システムの安定性に被害を与える命令群がある Open platform 非常に多数のデバイスとデバイスドライバがある
Robin and Irvine’s Analysis on IA-32 Non-sensitive, non-privileged instructions may be run directly on the processor Sensitive, privileged instructions trap Sensitive, non-privileged instructions detected 17 “problem instructions” sensitiveなのにtrapしない
Virtualizing IA-64 Some groups are beginning to assess the IA-64 platform’s ability to host virtual machines HPはすでにHP/UXとLinuxを仮想化するIA-64フレームワークを開発した Windows Server版の作業は開始しようとしている 仮想化の最大の問題はデバイスの多さ
IA-64にあってIA-32にない重要な特徴 Ring compression ゲストVMはVMMより高いリングで走る
Full System Virtualizationの欠点 プロセッサが仮想化を意識していないので、仮想化のためにはspecial tricksが必要 仮想記憶管理(VM/370では“shadow mapping”と言われている)を効率的に仮想化することはすごく難しい 特にIA-32では Denaliでは仮想記憶を廃止した
仮想記憶管理の問題 intercept all virtual memory calls to the CPU translate “virtual machine” space into the system’s real space using yet another page table retrieve the memory return the memory to the virtual machine
Paravirtualization Denaliのおもしろいところ Idle loops Interrupt queueing VM内でbusy waitすることの回避策 “Idle” instructionを呼ぶと他のVMに制御が移る Interrupt queueing 割り込みがきたときに、すぐにそれをVMに渡さない 割り込みをキューイング 割り込みを渡すべきVMが次にスケジュールされたら渡す Interrupt semantics 割り込みセマンティクスの変更 タイマなどに影響
Denali No virtual memory No BIOS 各VMをsingle address spaceに制限 システム情報を読み出し専用仮想レジスタで提供
Denali 汎用I/Oデバイス 汎用デバイスの小さな集合だけを上に見せる ゲストOSの性能が大きく向上する
Xen’s Approach to Paravirtualizing the IA-32 architecture ページテーブル 各VMはハードウェアページテーブルを読み出し専用でしかアクセスできない ページテーブルの更新はキューイングされてVMMに よって処理される ゲストVMはVMMよりも一つ低いリングで走る ゲストOSがトラップハンドラをVMMに登録 ゲストOSがシステムコールハンドラをプロセッサに直接登録
Xen No hardware interrupts Generic Devices Denaliと同じく、XenはゲストVMに高速な汎用 デバイスの小さい集合のみを提供