********************************************************************** セッションS3-a チュートリアル テーマ:仮想化な,まああてにすな ひどすぎる乱立 講師:竹岡 尚三(アックス) 日時:2009/08/28 10:30 〜 11:50 参加人数:約50名 ********************************************************************** ■講師説明 有名な仮想化ソフトウェア ・Vmware ・HyperV ・Virtual PC ・Parallels ・Xen ・KVM ・VirtualBox  VMwareがメジャー 組込みに適用できる最低要件  マルチプラとフォームである   OSやCPUはたくさん種類がある  ソースコードが提供される   信頼性,品質の向上を独自に行えるというのがあるのではないか  エンタープライズ・サーバと事情は近い   仮想化においては組込みと近い 仮想化とは  VMという言葉には定義がたくさんあり,仮想マシン・仮想機械と言ってしまう.  英語でもVirtual Machineである.   仮想化技術(VM)とJava仮想マシン(JavaVM)は無関係 (寄り道して)仮想マシン・インタープリタとは  仮想マシンの機械語命令を実行時に解釈して実行する実行系  有名な仮想マシン(インタープリタ)  JavaVM  UCSD-Pシステム  Smalltalk80  Warren Abstract Machine(WAM)  (豆知識:WAMの実行速度が速かったので流行した) VMの歴史  VMwareは2000年くらいから  仮想化技術は最近注目されているが,かなり昔から存在していた  System/360 ではCP-40(ハイパバイザ)でCMS(ゲストOS)を切換えてマルチユーザ を実現した  1966: System/360  1972: System/370-VS(仮想記憶システム)  1982: 68010発表     仮想機械と仮想記憶をサポートしたアーキテクチャ  2003: Xen VMとは  機械が複数あるように見える  VMでは仮想機械は実際の機械をしらない  完全なメモリの分離 VMとマルチタスクはどう違うか  OSの数が違う,OSは仮想機械ごとに動く  VMでは仮想機械ごと動く(OSがない場合もある)  IOが独立している   マルチタスクOSではIOはシステム全体で共用する   VMでは仮想化された独立IOが与えられる   別の仮想機械のIOを知っていることはない  仮想機械ごとに完全に独立,不干渉   片方の仮想機械のOSが落ちても別の仮想機械はうごくので安全である VMの簡単な構造 ・ハイパバイザ  実計算機の資源管理を行う ・仮想機械  (豆知識:仮想機械をゲスト機械(マシン)と呼ぶことはない       ユニバーサル・ホストという計算機アーキテクチャで実現されている       ハードウェア計算機をゲストマシンと呼ぶ) ・仮想機械内のOS -> ゲストOS ・実計算機上のOS -> ホストOS ハイパバイザ用のレジスタが実機械に合ったとしても,仮想機械は気がつかない  仮想機械から見えてはいけない  仮想機械と実機械で差がないのが理想である  実機械にハイババイザを含むかどうか違うので定義が重要  歴史的にはハイパパイザ用の特殊機能なしに仮想化を行っていた  実機械と仮想機械は完全に同じレジスタセットを持っていた  IBM S/360, S/370では   ハイパバイザだけがスーパバイザモードで動作   仮想機械のスーパバイザはだまされて動作   CPUステータスレジスタを読み書き仕様とすると特権例外が発生し,スーパバイザ に制御が移る ハイパバイザのお仕事  資源管理   メモリ   CPU時間   IO    HDD    プリンタ    端末    ネットワーク    その他(組込みではこれがおおい)  VM間通信  IOシミュレート (豆知識:昔流行ったμカーネルMachは仮想空間を資源として管理していた) メモリ管理  仮想機械が動きますといったら実メモリマップを使う  メモリアクセスには多くの場合特権命令が必要.  それをハイパバイザはtrapして実メモリとの対応をとる役割をしている (だましている)  仮想機械同士が干渉しないようにする  仮想機械間で情報が漏れないようにする   他の仮想機械のメモリを読み書きできてはいけない  仮想計算機の肝はページテーブル管理 CPU時間の管理  CPU時間が適切に割り当たるようにする  公平に割り当てるのがいいとは限らない   そもそも公平とは   組込みでは実時間性が重要  実時間性について   割込みルーチンは仮想機械内で動くのか,ハイパバイザ内で動くのか   ハイパバイザが消費する時間はどう管理するか IO管理  大型機(System370等)のIOとはIOチャンネルというのが普通   DMAと同様に専用プロセッサがいる  なんでもIOチャンネルなので仮想化が容易   直接IOポートをたたいていないから   割込みはシミュレートしやすい   例:HDDのセクタ読みだし,プリンタ,ネットワーク  IOチャンネルにセットするDMAアドレスを   仮想機械内の空間のアドレス -> 実アドレス  と変換すればよい  割り込みはハイパバイザが受け,ソフトウェア割込み等で仮想機械に渡す   直接仮想機械に割込みことも,ハードウェア支援があれば難しくない  組込み世界にありがちなこと   IOポートは仮想化できるのか?割り込み番号はどうする?   直接IOポートをたたいているデバイスドライバはどうなるか?  ソフトウェアに気付かれずにIOポートを見せるにはアドレス変換が必須  割込み   遅めであればハイパバイザ介在でできる   高速割込みなら,割込み番号の食い違いを割込みルーティングという技術を   使って解決する ハイパバイザは対話できない  仮想機械のゲストOSからハイパバイザサービスを起動するしかない  ハイパバイザと直接やりとりする方法はない  *XENはハイパバイザとホストOSが一体なので例外的 Xen  ホストOSは仮想機械(Dom0)の1つが担当する  一度ホストOSががんばって別の仮想機械にわりあてる KVM  ホストOS兼ハイパバイザのLinuxが全てやる  仮想機械のIO処理にQEMUを使う  Linuxカーネルを拡張し,ハイパバイザ機能を付加  ハイパバイザが複雑   セキュリティホールがあったら・・・ 仮想化用ハードウェア  Vt-x  AMD-V  68010 Intel Vt-x  Extended Page Tables(EPT)   ページテーブルに属性を増やす  Intel's Virtualization Technology for Directed I/O (VT-d)   いわゆるIOMMU 68010  MOVE from SRを特権命令とした(68000ではユーザモードでも読み出せた)  CPUのシステムステータスレジスタ読み出しでがなにかしようとしたら,Hypervisor  を起動 エンタープライズ/デスクトップPCの仮想化の方向  Windows でも組込みではLinuxが必要  Macを使っていてもWindowsが欲しかったりする  エンタープライズ系はネットワーク性能が重要でCPU性能があまりがちなので仮想化  しやすい  エンタープライズでは,ホストOSは各社ネイティブかLinux   Xen, VirtualBox, KVMがいい感じ 組込みでの仮想化  情報系をLinux/Windows,実時間系をRTOS(μITRON)で  複数の仮想機械で,複数のRTOSを動作させる 組込みの要件  実時間性   CPUパワーの配分   Linux,WindowsがとりすぎてRTOSが動かないのはナンセンス    デバイスドライバは仮想機械内で動作しているのでそのサービスはさせなければ    ならない   情報系ゲストOSのユーザがデバドラをどこで動かしたいかが重要  こけてもこけない   ハイリアリアビリティ(高信頼性)   ロバストネス(堅牢性)   ディペンだビリティ(高可用性)  マイグレーション   仮想機械を他の実機械にまるごと引越し   フォールトしたら,少し前の仮想機械イメージで再会   ディペンダブルな組込みでは,仮想機械によるマイグレーションをすべき 参考文献など  VM(OSシリーズ11)   岡崎世雄/全先実著,1981/AUG,共立出版   ISBN 4-320-02405-2  Xen   http://www.xen.org/  KVM   http://www.linux-kvm.org/page/Main_Page  Kernel-based Virtual Machine (KVM) for Itanium Architecture   http://www.ice.gelato.org/apr07/pres_pdf/gelato_ICE07apr_kvm_yu_intel.pdf ■質疑応答  IOの仮想化とかも共通するので,ISSも仮想化技術にいれてよいのではないかと  思えるのだが   仮想化は命令セットの変換はしないのでオーバヘッドがない  仮想化のどれだけ資源を使っているかの差でしかないのかと思うが   仮想機械というなかにどこまで含めるかということであると思う  理想的にはハイパバイザはシンプルでOSを切換えるだけだが,実際は共有メモリが  あったりするので現実は複雑  マルチコアCPUだったりするとCPUパワーの配分はどうあるべきなのか   ハイパバイザは結構適当にやっている  ハイパバイザを作ると割り込み処理が変わるのでこの部分のすりあわせをどうすべきか   直接アドレスを書いているところはなんらかの変換をするしかない   しかし,そうでなければどう書くのかというのは今後も議論が続くことだと思う   Xenとかの仮想化技術はこれから組込みに適用していく項目なので皆さんで情報交換   していきたいと思っている ■まとめ 仮想化は乱立が激しい. エンタープライズ系では実時間に関する要請が低いため, 仮想機械の実時間性についてはあまり考慮されていない. 組込み分野への仮想化技術の適用はまだ始まったばかりである. 割込みやハイパバイザなどの問題は今後も議論していくべきことである. 以上