AMD64の仮想化技術を利用した 仮想マシンモニタの実装

Slides:



Advertisements
Similar presentations
Linuxを組み込んだマイコンによる 遠隔監視システムの開発
Advertisements

Virtual Editionのご紹介 2012年12月12日.
WPF で作る!! 仮想化支援技術確認ツール CLR/H ひよひよ Crystal Dew World
ファイルキャッシュを考慮したディスク監視のオフロード
オペレーティングシステム 第10回 仮想記憶管理(1)
オペレーティングシステム i386アーキテクチャ(3)
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
クラウド上の仮想マシンの安全なリモート監視機構
クラウドにおける ネストした仮想化を用いた 安全な帯域外リモート管理
Virtual Editionのご紹介 (株)ネットジャパン 法人営業部 2012年7月18日 1.
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
オペレーティングシステム 第11回 仮想記憶管理(2)
中村孝介(九州工業大学) 光来健一(九州工業大学/JST CREST)
KVMにおけるIDSオフロードのための仮想マシン監視機構
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
App. A アセンブラ、リンカ、 SPIMシミュレータ
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
Disco: Running Commodity Operating Systems on Scalable Multiprocessors
XenによるゲストOSの解析に 基づくパケットフィルタリング
大きな仮想マシンの 複数ホストへのマイグレーション
Ibaraki Univ. Dept of Electrical & Electronic Eng.
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
オペレーティングシステム i386アーキテクチャ(2)
全体ミーティング 2009/6/24 D3 西川 賀樹.
ネストした仮想化を用いた VMの安全な帯域外リモート管理
帯域外リモート管理の継続を 実現可能なVMマイグレーション手法
単一システムイメージを 提供するための仮想マシンモニタ
アスペクト指向プログラミングを用いたIDSオフロード
Virtual Editionのご紹介 2012年7月26日.
型付きアセンブリ言語を用いた安全なカーネル拡張
全体ミーティング 金田憲二.
“Survey of System Virtualization Techniques” by Robert Rose のまとめ
KVMにおける仮想マシンの 内部監視機構の実装と性能評価
仮想マシン間にまたがる プロセススケジューリング
VMのメモリ暗号化によるクラウド管理者への情報漏洩の防止
VMのメモリ暗号化による クラウド管理者への情報漏洩の防止
VM専用仮想メモリとの連携による VMマイグレーションの高速化
シャドウデバイスを用いた 帯域外リモート管理を継続可能なVMマイグレーション
実行時情報に基づく OSカーネルのコンフィグ最小化
仮想機械 温故知新 前田俊行 東京大学米澤研究室.
仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ
単一システムイメージを 提供するための仮想マシンモニタ
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
コンピュータの基本構成について 1E16M001-1 秋田梨紗 1E16M010-2 梅山桃香 1E16M013-3 大津智紗子
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
ディジタル回路の設計と CADによるシステム設計
IaaS環境におけるVMのメモリ暗号化による情報漏洩の防止
クラウドにおけるVM内コンテナを用いた 自動障害復旧システムの開発
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
情報実験第 7 回(2016/06/17) OS インストール・起動
Intel SGXを用いた仮想マシンの 安全な監視機構
軽量な仮想マシンを用いたIoT機器の安全な監視
複数ホストにまたがって動作する仮想マシンの障害対策
オペレーティングシステムJ/K 2004年11月15日2時限目
信頼できないクラウドにおける仮想化システムの監視機構
オペレーティングシステム i386アーキテクチャ(1)
Virtualizing a Multiprocessor Machine on a Network of Computers
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
Ibaraki Univ. Dept of Electrical & Electronic Eng.
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
Cell/B.E. のSPE上で動作する 安全なOS監視システム
Mondriaan Memory Protection の調査
コンピュータアーキテクチャ 第 5 回.
コンピュータアーキテクチャ 第 5 回.
強制パススルー機構を用いた VMの安全な帯域外リモート管理
IPmigrate:複数ホストに分割されたVMの マイグレーション手法
L4-Linux のメモリ管理における問題点とその解決策
1.2 言語処理の諸観点 (1)言語処理の利用分野
強制パススルー機構を用いた VMの安全な帯域外リモート管理
管理VMへの キーボード入力情報漏洩の防止
Presentation transcript:

AMD64の仮想化技術を利用した 仮想マシンモニタの実装 金田 憲二

発表の概要 AMD64の仮想化技術を利用した (非常に単純な)仮想マシンモニタを実装した 簡単なプログラムを仮想マシン上で実行できる 3000行程ほどのCプログラムからなる ※ アカデミックな内容についての発表というよりは、ハウツーもの

このVMMの特長 実装が軽量である  使い勝手が良い(はず) c.f.) Xenのソースコードは100,000行以上 教育・学習での利用 今後の研究のための基盤 検証(定理証明器、モデル検査) メモリ安全な言語(Cyclone、TAL、Haskell)による記述 …

VMMの動作デモ VGAに文字を出力するプログラムを 仮想マシン上で実行 ※AMD64のシミュレータSimNow上で実行

残りの発表の流れ (Part 1) AMD64 Secure Virtual Machine (Part 2) VMMの作り方

(Part 1) AMD64 Secure Virtual Machine

VMMの実装に必要な処理は? プロセッサの仮想化 メモリの仮想化 … Sensitive命令の捕捉 割り込みの転送

IA-32上でVMMを実装する場合 プロセッサの仮想化 メモリの仮想化 … Sensitive命令の捕捉 割り込みの転送 カーネルの書き換え 動的バイナリ変換 Shadow page table 実装コスト大 (c.f., VMware、Xen)

AMD64上でVMMを実装する場合 プロセッサの仮想化 メモリの仮想化 … Sensitive命令の捕捉 割り込みの転送 VMRUN命令 #VMEXIT例外  Nested paging 実装コスト小 (カーネルの書き換え不要)

VMRUN命令とは? VMMからVMに制御を切り替える命令 エミュレーションが必要な命令をVMが実行したり、例外が発生したりすると、VMMに制御が戻る VMM VM …. VMRUN … …

Virtual Machine Control Block VMMからVMへの制御の切り替え 現在の実機の状態 Virtual Machine Control Block VM_HSAVE_AREA RIP RAX RSP CR0 CS CR3 DS CR4 ES IDTR RFLAGS GDTR … RIP RAX RSP CR0 CS CR3 DS CR4 ES IDTR RFLAGS GDTR … RIP RAX RSP CR0 CS CR3 DS CR4 ES IDTR RFLAGS GDTR … MSR ※ 全てのレジスタが保存・復元されないことに注意

VMからVMMへの制御の切り替え #VMEXIT例外が発生 現在の実機の状態 Virtual Machine Control Block VM_HSAVE_AREA RIP RAX RSP CR0 CS CR3 DS CR4 ES IDTR RFLAGS GDTR … RIP RAX RSP CR0 CS CR3 DS CR4 ES IDTR RFLAGS GDTR … RIP RAX RSP CR0 CS CR3 DS CR4 ES IDTR RFLAGS GDTR … RIP RAX RSP CR0 CS CR3 DS CR4 ES IDTR RFLAGS GDTR … MSR エラーコード 仮想アドレスp番へのアクセスにより ページフォルトが発生

割り込みの仮想化 VM実行中に割り込みが発生すると #VMEXITが発生し、ホストに割り込みが転送される or ※VMRUN実行時に選択可能

VMRUN命令の使用例 for (;;) { /* VMM からVMに制御を移す */ VMRUN; /* #VMEXIT が発生 */   switch (error code) {    /* sensitive命令や例外のエミュレーション */   } }

Nested Pagingとは? VMの物理アドレスを実機の物理アドレスへ 対応付ける機構 0xffffffff 0xffffffff VMの仮想アドレス 0x100 0x100 VMの物理アドレス 実機の物理アドレス 0x10000

Nested Paging有効時の アドレス変換 (1/4) 2種類のページテーブルを利用 VMの仮想アドレス  VMの物理アドレス VMの物理アドレス  実機の物理アドレス VMの仮想アドレス VMのCR3 VMの物理アドレス vPT 実機の物理アドレス pPT 実機のCR3

Nested Paging有効時の アドレス変換 (2/4) 2種類のページテーブルを利用 VMの仮想アドレス  VMの物理アドレス VMの物理アドレス  実機の物理アドレス VMの仮想アドレス VMのCR3 VMの物理アドレス vPT 実機の物理アドレス pPT vPT 実機のCR3

Nested Paging有効時の アドレス変換 (3/4) 2種類のページテーブルを利用 VMの仮想アドレス  VMの物理アドレス VMの物理アドレス  実機の物理アドレス VMの仮想アドレス VMのCR3 VMの物理アドレス vPT 実機の物理アドレス pPT vPT 実機のCR3

Nested Paging有効時の アドレス変換 (4/4) 2種類のページテーブルを利用 VMの仮想アドレス  VMの物理アドレス VMの物理アドレス  実機の物理アドレス VMの仮想アドレス VMのCR3 VMの物理アドレス vPT 実機の物理アドレス pPT vPT 実機のCR3

ページングレジスタの仮想化 CR0、CR3などの制御レジスタの複製を生成 VMRUN実行後、制御レジスタへのアクセスは、その複製へのアクセスに自動的に変換

ページフォルトの仮想化 どの段階でのフォルトかに応じて、 #VMEXITのエラーコードが異なる VMの仮想アドレス VMの物理アドレス vPT EXCP NPF 実機の物理アドレス pPT vPT

AMD64が提供するその他の命令 VMSAVE、VMLOAD VMMCALL STGI、CLGI VMRUNでは保存・復元されない状態を保存・復元 例)セグメントレジスタのキャッシュ VMMCALL 明示的にVMからVMMに切り替える STGI、CLGI Global Interrupt Flag (GIF)のセット・クリア VMRUNの前後で実行 割り込みの許可・禁止

(Part 2) VMMの作り方

VMMのアーキテクチャ VMMは、実ハードウェア上に直に存在 ゲストOS ゲストOS VM VM VMM 実ハードウェア (AMD64 SVM)

以降の発表では、 それぞれの処理を 順に説明していく VMMの動作の流れ ハードウェアの初期化 OSの起動時の処理とほぼ同様 VMの作成 Nested pagingの設定など ゲストOSの起動 VMRUN命令を実行 以降の発表では、 それぞれの処理を 順に説明していく

ハードウェアの初期化 メモリを初期化する ページテーブル、セグメントデスクリプタを初期化 ページのアロケーターを初期化 CPUを初期化する

VMMの起動 GRUBによってVMMが物理メモリ上に ロードされる Reserved VMM (text) VMM (data) 0 MB

ページテーブル、 セグメントデスクリプタの初期化 ページングを有効にする 64ビットモード 物理アドレスの0~1 GBを、2つの仮想アドレスにマップ 0xffff830000000000 0xffff830000000000 0xffffffffffffffff 仮想アドレス 2 MB 1 GB 物理アドレス Reserved VMM

ページのアロケーターの初期化 物理ページを動的に確保・解放できるようにする GRUBから、使用可能なメモリ領域を教えてもらう ページの使用・未使用を記憶するビットマップを用意 割り当て済みページ ビットマップ 0 MB 1 MB 2 MB Reserved VMM (text) VMM (data)

CPUの初期化 以下を検査する 可能であれば、仮想化機能を有効にする AMDアーキテクチャか? 仮想化機能をもつか? VMMの状態を保存するための領域を確保 前述のページアロケーターを使用して そのページの物理アドレスをMSRレジスタに格納

VMの作成 VMの物理メモリを確保 ゲストOSをロード Nested pagingを設定 レジスタを初期化

VMの物理メモリの確保 VMの物理メモリとして使用する領域を 実マシンの物理メモリ上に確保する 前述のアロケーターを使用 VMM B B + 0x400000 VMM VMの 物理メモリ

ゲストOSのロード ELF形式を解釈し、それに従って、 カーネルをVMの物理メモリ上に配置 ゲストOS (text) ゲストOS (data) B B + 0x400000 VMM

Nested Pagingの設定 ページテーブルを作成する VMの物理アドレス (x)  実機の物理アドレス (B + x) ※ 実際の実装では、VGAの関係上、少し複雑 0x400000 ページテーブル VMの 物理アドレス B B + 0x400000 VMM 実機の 物理アドレス

レジスタを初期化 ELFを解釈し、RIPを設定する …

ゲストOSの起動 VMRUN命令を実行 #VMEXITが発生したらエラーコードを表示

未実装なVMMの機能 割り込み I/Oデバイスへのアクセス 複数の仮想マシンの同時起動 … ※ VM上でWindowsやLinuxを起動するには、まだまだ多くの機能の実装が必要

関連研究 Xen virtual machine monitor Research Hypervisor 大規模すぎて、理解・改良が困難 複数アーキテクチャへ対応させるため仕方がない面も Nested pagingには未対応 Research Hypervisor http://www.research.ibm.com/hypervisor/

まとめ AMD64の仮想化技術を利用した (非常に単純な)仮想マシンモニタを実装した http://web.yl.is.s.u-tokyo.ac.jp/~tvmmにて公開 使ってみたい方は是非

その他

SimNow AMD64上で動作するAMD64のシミュレータ 豊富なデバッグ機能を提供する シミュレーション速度は非常に遅い 例)レジスタ・メモリのダンプ、実行のトラップ シミュレーション速度は非常に遅い

雑多な感想 数多くのアドレッシングモードがあり煩雑 Webから取得可能な情報がまだ少ない Long mode (64-bit mode, Compatibility mode), Legacy mode (Physical-address extension, Page-size extension), … モードを制御するフラグが、コントロールレジスタ・ セグメントデスクリプタ・ページテーブルなどに点在 Webから取得可能な情報がまだ少ない

参考文献 (1/2) X86-64 Linux AMD64 Architecture Programmer's Manual http://www.x86-64.org AMD64 Architecture Programmer's Manual http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_7044,00.html Volume 3: General-Purpose and System Instructions, Section 15: Secure Virtual Machine

参考文献 (2/2) SimNow Xen virtual machine monitor http://developer.amd.com/login.aspx?msg=simnow Xen virtual machine monitor http://www.cl.cam.ac.uk/Research/SRG/netos/xen Multiboot Specification Manual http://www.gnu.org/software/grub/manual/multiboot