1 / 48

全体ミーティング

全体ミーティング. 金田憲二. Agenda. Progress Report Survey 1 paper from USENIX Virtual Machine Research and Technology (VM’04) 5 papers from USENIX Operating Systems and Design and Implementation (OSDI’04) ※ OSDI ではセキュリティ関係の話が多かった. Progress Report. 何を作っているか.

fatima-byrd
Download Presentation

全体ミーティング

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 全体ミーティング 金田憲二

  2. Agenda • Progress Report • Survey • 1 paper from USENIX Virtual Machine Research and Technology (VM’04) • 5 papers from USENIX Operating Systems and Design and Implementation (OSDI’04) ※ OSDIではセキュリティ関係の話が多かった

  3. Progress Report

  4. 何を作っているか • 分散した複数の計算機上に 並列計算機を仮想的に構築するシステム Processor Processor Memory virtual physical Processor Processor Memory Memory Network

  5. プロセス プロセス プロセス プロセス 何がうれしいか • 分散資源を簡便に利用することができる 例)ゲストOS のスケジューラーが、個々の計算機に プロセスを割り振ってくれる

  6. 現在の実装状況 • 2種類の方式で実装している • Full-virtualization (いわゆるCPU emulator) • Bochs [http://bochs.sourceforge.net]を改造 • Para-virtualization (いわゆるVMWare型) • スクラッチから実装 • ※ IA-32上でIA-32を仮想化 • ホストOS、ゲストOS共にLinux

  7. Full-virtualizationによる実装 • 一応ブートするところまでいった • ところどころ動作がおかしい(遅い) • 原因は? • Tickなどのエミュレーションが不十分なため? • 各仮想CPUにおいて、tickの経過速度が異なる • HLT命令を発行しても少しの間しか止まらない

  8. Para-virtualizationによる実装 • ブートの途中でおかしくなる start_kernel() { printk(linux_banner); setup_arch(); parse_options(); trap_init(); init_IRQ(); sched_init(); softrq_init(); time_init(); console_init(); kmem_cache_init(); … … console_init(); kmem_cache_init(); mem_init(); kmem_cache_size_init(); pgtable_cache_init(); fork_init(); proc_cache_init(); vfs_cache_init(); buffer_init(); signals_init(); smp_init(); rest_init(); } ここまで

  9. 残りの発表の流れ • Para-virtualizationによるVMの実装 • シングルプロセッサマシンの場合 • マルチプロセッサマシンの場合

  10. シングルプロセッサの場合のVMの実装 • 実装の概要 • 特権命令のエミュレーション • アドレス空間のエミュレーション

  11. シングルプロセッサの場合のVMの実装 • 実装の概要 • 特権命令のエミュレーション • アドレス空間のエミュレーション

  12. VMの実装の概要 • 基本的にはゲストOSのコードをNativeに実行 • 必要に応じてハードウェアをエミュレーション • 特権命令 • アドレス空間 • デバイス • …

  13. シングルプロセッサの場合のVMの実装 • 実装の概要 • 特権命令のエミュレーション • アドレス空間のエミュレーション

  14. 特権命令とは • CPUが特権レベルでないと実行できない命令 例)in命令、out命令 • I/Oポートとの入出力 例)mov cr3命令 • ページディレクトリの物理アドレスの設定 例)invtlb命令 • TLBのフラッシュ • 実ハードウェアに影響する命令なので、        ソフトウェアでエミュレーションする必要がある

  15. 特権命令のエミュレーションの概要 • 特権命令の実行直前にシグナルが発生する  ようにする • カーネルのソースコードをコンパイル時に変換 • そのシグナルを捕捉することにより、           Native実行とエミュレーション実行を切り替える

  16. 特権命令のエミュレーションの詳細 (1/5) • 以下の2つのプロセスを用意する • VMプロセス • ゲストOSのコードをNativeに実行する • モニタプロセス • VMプロセスを監視する VMプロセス 監視 モニタプロセス

  17. 特権命令のエミュレーションの詳細 (1/5) • カーネルのコードをコンパイル時に変換 • 特権命令の直前にundefined instructionを挿入 ※アセンブリからアセンブリへの簡単な変換器を作成 変換前 変換後 … mov %eax,%cr3 … … ud2a mov %eax,%cr3 …

  18. 特権命令のエミュレーションの詳細 (3/5) • VMプロセスがundefined instructionを実行 シグナルが発生する シグナル … ud2a mov %eax,%cr3 … VMプロセス 監視 モニタプロセス

  19. 特権命令のエミュレーションの詳細 (4/5) • 発生したシグナルをモニタプロセスが補足 • ptraceシステムコールを利用 シグナル … ud2a mov %eax,%cr3 … VMプロセス 監視 モニタプロセス

  20. 特権命令のエミュレーションの詳細 (5/5) • 命令をデコードし、ソフトウェアで                エミュレーション実行 0f 0b … ud2a mov %eax,%cr3 … VMプロセス 監視 0f 22 d8 モニタプロセス

  21. シングルプロセッサの場合のVMの実装 • 実装の概要 • 特権命令のエミュレーション • アドレス空間のエミュレーション

  22. アドレス空間のエミュレーションにおける問題アドレス空間のエミュレーションにおける問題 • ゲストOSのカーネル領域の配置 • デフォルトだと、ホストのカーネル領域と同じ領域を確保しようとする • ホストOSのユーザ領域中に確保する必要がある Linuxの仮想アドレス空間 0 0xc000000 0xffffffff ユーザ領域 カーネル領域

  23. アドレス空間のエミュレーション (1/2) • ゲストOSのコードを改変しカーネル領域をずらす • エミュレーションのための領域も確保する ゲストOSのユーザ領域 ゲストOSのカーネル領域 エミュレーションのための領域 (ゲストOSの物理メモリの状態を保持) 0 0xc000000 0xffffffff ホストOSのユーザ領域 ホストOSのカーネル領域

  24. アドレス空間のエミュレーション (2/2) • ゲストOSのページテーブルを参照して、ゲストOSの物理メモリと、ゲストOSのユーザ・カーネル領域を対応付ける • mmapシステムコールを利用 ゲストOSのユーザ領域 ゲストOSのカーネル領域 エミュレーションのための領域 (ゲストOSの物理メモリの状態を保持) 0 0xc000000 0xffffffff

  25. マルチプロセッサの場合のVMの実装 • 実装の概要 • 共有メモリのエミュレーション • プロセッサ間割り込みのエミュレーション

  26. マルチプロセッサの場合のVMの実装 • 実装の概要 • 共有メモリのエミュレーション • プロセッサ間割り込みのエミュレーション

  27. 実装の概要 (1/2) • 個々のプロセッサを別々のマシンがエミュレーション Processor Processor Memory virtual physical Processor Processor Memory Memory Network

  28. 実装の概要 (2/2) • シングルプロセッサマシンの場合と比べ • 共有メモリ • プロセッサ間割り込み のエミュレーションがさらに必要になる

  29. マルチプロセッサの場合のVMの実装 • 実装の概要 • 共有メモリのエミュレーション • 概要 • IA-32のメモリモデル • 実装方式 • プロセッサ間割り込みのエミュレーション

  30. 共有メモリのエミュレーション • 通常のソフトウェアDSMの実装とほぼ同様 • OSの提供するページ保護機構を利用 • ただし、IA-32のメモリモデルを満たす必要がある Processor Processor write read Memory virtual physical Comm. Processor Processor write read Memory Memory

  31. マルチプロセッサの場合のVMの実装 • 実装の概要 • 共有メモリのエミュレーション • 概要 • IA-32のメモリモデル • 実装方式 • プロセッサ間割り込みのエミュレーション

  32. IA-32のメモリモデル • あるPUから見えるメモリの状態と、別のPUから見えるメモリの状態とは、必ずしも一致しない • ただし以下の制約を満たす • Processor consistency • Write atomicity アドレス0x1000の値は0 アドレス0x1000の値は1 Processor Processor Memory

  33. = = = X X ? Processor Consistency (1/2) • あるプロセッサが行った書き込みは, • 同一プロセッサには,すぐに反映される • 異なるプロセッサには,遅れて反映されうる PU1 PU2 write X to p 書き込み反映 read from p read from p read from p

  34. Processor Consistency (2/2) • あるプロセッサが行った書き込みは, 同じ順序でリモートプロセッサに反映される PU1 PU2 PU3 write X to p write Y to q write Z to r

  35. Processor Consistency (3/3) • 直列化命令 E.g.) mfence命令 • 書き込みがリモートプロセッサに反映されたことを保障 PU1 PU2 PU3 write X to p write Y to q write Z to r mfence

  36. Write Atomicity • 書き込みはリモートプロセッサにatomicに        反映される PU1 PU2 PU3 write X to p (アドレスpに対する)読み書きは,この間に          発生しない

  37. マルチプロセッサの場合のVMの実装 • 実装の概要 • 共有メモリのエミュレーション • 概要 • IA-32のメモリモデル • 実現方式 • プロセッサ間割り込みのエミュレーション

  38. Processor Consistencyの保障 (1/4) • 直列化命令実行時に,ローカルの書き込み結果を他の全てのマシンに反映させる PU1 PU2 Write X to p Write Y to q p, q, rへの書き込み結果を送信 Write Z to r 書き込み結果を反映 mfence

  39. Processor Consistencyの保障 (2/4) • 全てのページを書き込み禁止にする • mprotectシステムコールを利用 PC1 PC2 Twins Memory Memory Write X to p Write Y to q Write Z to r mfence …

  40. Processor Consistencyの保障 (3/4) • ページに対して書き込みがあると  • そのページのコピー(= twin)を作成する • そのページへの書き込みを許可する PC1 PC2 Twins Memory Memory Write X to p Write Y to q Write Z to r mfence p X q Y r Z …

  41. X Y Z Processor Consistencyの保障 (4/4) • 直列化命令を実行する時に, • twinと現在のメモリを比較してdiffを作成する • diffをリモートマシンに送信する PC1 PC2 Twins Memory Memory Write X to p Write Y to q Write Z to r mfence p q r …

  42. Write Atomicityの保障 • 省略 • 各ページにownerなどを導入することにより実現

  43. マルチプロセッサの場合のVMの実装 • 実装の概要 • 共有メモリのエミュレーション • プロセッサ間割り込みのエミュレーション

  44. プロセッサ間割り込みとは • リモートプロセッサで割り込みを発生する機構 例)TLBのフラッシュ要求、CPUの起動要求 • APICというハードウェアにより実現されている

  45. プロセッサ間割り込みのエミュレーション • APICのmapされた物理アドレス領域への  読み書きを捕捉し、エミュレーションする 例)物理アドレス0xee00020への読み込み APICのIDを返す 例)物理アドレス0xee0300への書き込み  プロセッサ間割り込みを発生

  46. まとめと今後の課題

  47. まとめ • 分散した複数の計算機上に 並列計算機を仮想的に構築するシステム

  48. 今後の課題 • 実装の完成(10月中?) • 性能評価

More Related