achine
irtual
ernel
based
Virt-Manager
Fedora12
対応
仮想化
仮想化なう 2010年夏号
あなたがふだんつかっているPCで、いろんなOSが動いたら 素敵だと思いませんか?わざわざPCを買い足さなくても、巷で 噂のOS、Plan9を起動してみることができたら、素敵だと 思いませんか? 思いませんか、そうですか…
冗談はさておき、本書は夢あふれる技術、仮想計算機技術を、 分かりやすそうで分かりやすくない少し分かりやすい感じに解説 します。仮想化技術の中でも、特に最近Linux界隈でアツい、 KVMを取り上げます。
本書での説明は、厳密な正確さよりも「あー、なんとなくわかっ た」と思ってもらえることを優先しています。そのため、OSを ガチで研究されている方から見たら片腹大激痛かもしれません が、そこはご了承下さい。嘘は書かないよう注意しています。
仮想化に興味を持っているあなた、「なんか聞いたことある」 といったあなたに、本書が少しでもお役に立てれば幸いです。
terror / @syonbori 拝
仮想化いいよね!
※やわらか研の方言で「こんにちは」の意
Linux デスクトップ環境において、無料で利用できる仮想計算 機環境といえば、VMware Player や VirtualBox、QEMU などがあ ります。VMware 社といえば仮想化の老舗で、最近では無料版の VMware Player でも仮想マシン構築が可能となり、有料版である VMware Workstation に近い機能が提供されています。
オープンソースの世界では、( 故 ) サン・マイクロシステムズ が Sun xVM VirtualBox として展開したマルチプラットフォーム・ マルチライセンスの VirtualBox(ばーちゃるぼっくす)があり ます。また、QEMU(きゅーえみゅ)は、古くから CPU エミュレー タとして広く親しまれています。
最近では、仮想化する上で都合が良いように OS を変更する、 準仮想化を用いた Xen(ぜん)が人気を博しています。ハードウェ アの性能を引き出せることから、主にサーバ用途で広く使われて いますが、デスクトップ用途でも用いられています。
そんな仮想化の世界に現れたのが、この
KVM
(Kernel-based Virtual Machine. けーぶいえむ)です。KVM は Qumranet 社によ り開発・保守が行われています。同社は、現在 Red Hat 社の子会 社となっています。これからもわかるとおり、Red Hat は今後、 仮想計算機技術として従来の Xen ではなく、KVM に力を入れてい くようです。最新バージョンである RHEL(Red Hat Enterprise Linux) 6 からは、Xen はサポートされず、KVM のみのサポートと なることが明らかになっています。無料
有料
サ
ー
バ
向
け
デ
ス
ク
ト
ップ
向
け
V
Mware ESXi
V
Mware
Player
Workstation
V
Mware
Parallels
Desktop
V
irtual
Box
Citrix
X
enServer
X
en
K
V
M
近年の仮想計算機技術では、
ハイパーバイザ
と呼ばれる方法 が用いられています。ハイパーバイザとは、ハードウェアとOS
の間で動作し、仮想計算機の管理を行うソフトウェア
のことです。このようなハイパーバイザ方式を取る仮想化ソフトウェアとし ては、Citrix 社の XenServer(ぜんさーば)や VMware 社の ESXi (いーえすえっくすあい)、Microsoft 社の Hyper-V(はいぱーぶい)
などがあります。これらの方式では、このハイパーバイザが仮想 計算機の面倒を見ます。
「仮想」「計算機」ですので、文字通り仮想的な計算機の環境 を提供してやります。つまり、CPU やメモリ、ハードディスクや LAN カードと言った、いわゆるパソコンが備えているハードウェ アを仮想的に作り出し、OS に提供します。
ハードウェア
Xen
Domain0(Linux) ゲスト
アプリケーション QEMU
ハードウェア
Linux
KVM
ゲスト アプリケーション QEMU
ハードウェアを エミュレーション
ハードウェアを エミュレーション
カーネル モジュール として動作
Xen
KVM
KVM もこのハイパーバイザ方式を用いています。KVM が他の 方式とちょっと違うのは、図のように、このハイパーバイザが
Linux カーネルに組み込まれる
形で動作しているという点です。 同じく Xen も Linux がハイパーバイザを兼ねますが、Xen では あくまでハイパーバイザとして Xen が動作し、エミュレーション や管理などの機能を Domain0 と呼ばれる Linux 環境から実行する 形を取ります。一方 KVM では、LAN カードなどのドライバのように、 Linux カーネルにモジュールとして KVM ハイパーバイザを組み込 みます。ハイパーバイザでは、仮想計算機に提供するハードウェア、特 に HDD や LAN カードなどのデバイスを CPU で仮想的に作り出し ます。これを
エミュレーション
と呼びます。仮想計算機上で動作 する OS(ゲスト OS
)から見て、本物のハードウェアが繋がって いるように振る舞うのです。これにより、ゲスト OS はあたかも 「自分は実機上で動作している」と思い込み、動作することができるのです。
KVM や Xen では、これらのエミュレーションの一部に QEMU を 利用しています。これは、オープンソースで開発されていること や、PC に必要なハードウェアの大半をエミュレーションできる という点が大きな理由です。ハイパーバイザの開発者にとっても 非常にめんどくさい処理であるエミュレーション処理を、外部の QEMU に丸投げできるため、ハイパーバイザ自身をシンプルに作 ることができるからです。
仮想計算機技術の歴史は長く、古くはメインフレーム時代に遡 ります。…といってもそのあたりから解説するわけではなく、もっ と身近な話にしましょう。いわゆる普通の CPU(x86 と呼ばれる CPU シリーズ ) で仮想計算機を実現する方法と言えば、仮想化の 老舗、VMware 社の VMware workstation が代表的でした。
実は、「普通の CPU」は、仮想化を実現するにはやっかいな仕 組みがあります。リングプロテクションと特権命令という OS を 守るための仕組みなのですが、詳しい説明は省略します。「リン グプロテクション VT」で検索するか、既刊をご覧下さい。
つまり、Intel や AMD といった「普通の CPU」では、仮想化を 行う際に
ちょっとした工夫が必要
となるのです。単純に仮想化を行うことを考える場合、「仮想計算機で必要と なるもの」を CPU 上でエミュレートして作り出してやれば OK です。
しかし、同じ構造を持つ CPU を CPU 上で作り出す場合、非常に 無駄が多いと思いませんか?違う種類の CPU をエミュレートする ならともかく、同じ種類の場合には、素直に実行してやればよい と考えられます。つまり、ゲスト OS がある処理を実行してその 結果を得たい場合、
実機の CPU で実行して、その結果を返して
やればよい
のです。これが素直で、効率の良い仮想化の方法です。☆ ZaWorld の既刊は Circle.ms で公開中 http://c10007678.circle.ms/cr/wr/WorkDetail.aspx?CWID=10001100
●
はやくするためのしくみ
~ Intel VT と virtio ~
通常の CPU には、大きく分けて 2 種類の命令があります。もの すごく簡単に言うと、
危ない命令
と危なくない命令
です。危ない 命令とは、使い方によってはシステムの状態(内部の値など)を こわしてしまったり、外部の装置とやりとりをしたりするような 命令です。専門的には、センシティブ命令
と呼ばれます。危なく ない命令とは、それ以外の命令です。プログラムが何らかの処理を要求すると、その命令が OS によ り解釈され、実行されます。その際、プログラムが「危ない命令」 を実行しようとした場合、
OS がそれを検知
します。OS はこれら の危ない命令を、危なくないように、慎重に実行します。理想的には、このような構成により、安全にプログラムや OS が実行できるはずです。しかし、「普通の CPU」では、「
OS が検
知できないけど危ない命令
」というものが存在します。専門的に は、「センシティブな非特権命令
」と呼ばれるものです。これが 存在するせいで、仮想化が非常にやっかいになっています。理想
現実
全ての命令
全ての命令
特権命令
(検知可能 )
特権命令
(検知可能 )センシティブ命令
(危ない命令 )
センシティブ命令
(危ない命令 ) はみ出した 部分が問題!もし、全ての「危ない命令」が「検知可能」であれば、仮想計 算機上で危ない命令が実行されそうになったときに、ハイパーバ イザがこれを検知して、うまいこと処理してやればよいことにな ります。しかし、
「危ない命令」だけど「検知不可能」
となると、 仮想計算機上で危ない命令が実行された場合に、システム全体が おかしなことになってしまう可能性があります。そこで、VMware workstation では、
動的書き換え
という方法 を用いました。ゲスト OS が命令を実行する際、実行しようとし ている命令がこれらの「問題を起こす命令」だった場合には、そ の処理を「命令を起こさないように変更した命令」に、メモリ上 で書き換えていくという方法です。これにより、ゲスト OS の処 理が他に影響を与えることを回避することができるようになりま す。VMware workstation では、このほか様々な方法を用いて仮 想化・高速化を実現しています。Xen では、この書き換えを OS のソースコードレベルで予め 行っておくという方法を用いました。つまり、仮想化に都合の良 いように、
ゲストOS に手を加えておく
という方法です。これをこの問題を、ハードウェアの改善によって解決したのが、 Intel VT-x(ぶいてぃーえっくす)や AMD-V と呼ばれる、
仮想
化支援機構
です。簡単に言うと、「ハイパーバイザを動かす世界
」 と「ゲストOSを動かす世界
」が用意されました。ゲスト OS を「ゲスト OS を動かす世界」で動作させ、ハイパー バイザが何らかの処理を行う場合には「ハイパーバイザを動かす 世界」で実行する、という方法です。
仮想化する上で問題となる、「センシティブな非特権命令」が ゲスト OS を動かす世界で実行される場合には、ハイパーバイザ が実行される世界に切り替わり、そこでハイパーバイザが危ない 命令を慎重に処理することができます。
最近の CPU には、この切り替えを行う命令が用意されているた め、ソフトウェアでいろいろと便宜を図る場合に比べ、非常に効 率よく動作させることができるようになりました。また、この仕 組みにより、Windows のようなソースコードが手に入らない OS でも、簡単に仮想化できるようになりました。
ハイパーバイザを
動かす世界
世界の
切替
ゲストOSを
動かす世界
センシティブ
命令を実行
VMX root mode
VMX non-root mode
①センシティブ命令 ②④ ③
ハードウェアをエミュレートするのが大変、という問題は、 CPU だけではありません。HDD や LAN カードのような、いわゆる
入出力を行うデバイス
でしばしば問題とされます。このような入出力デバイスでも、仮想化する上で都合が良いよ うに手を加える手法である、
準仮想化
が用いられます。つまり、 ゲスト OS に「都合が良いように手を加えたデバイスドライバ (準仮想化ドライバ
)」をインストールし、エミュレーション処理 を軽減するというものです。準仮想化ドライバを用いることにより、エミュレーションにより生じていた
無駄な処理などを省く
ことが可能となり、大幅な高速化が期待されます。
virtio(ばーとあいおー)や paravirt_ops(ぱらばーとおぷす) といった技術は、これらの準仮想化ドライバを作る苦労を軽減す るためのものです。これらの技術を利用したデバイスドライバを 用いることで、比較的重たいとされる入出力デバイスへのアクセ スを高速化することができます。KVM でも、
ゲスト OS が対応し
ホストOS
デバイスドライバ
仮想化 ソフトウェア ゲストOS アプリ ケーション
デバイスドライバ
仮想 デバイス ファイルアクセス
デバイスドライバ 準仮想化ドライバ
ファイルアクセス
入出力デバイス
☆エミュレーション ☆準仮想化ドライバ
百聞は一見にしかず、早速 KVM を使ってみましょう! KVM を使 うので、Intel VT が使える環境が必要です。詳しくはぐぐれ!
今回は、ホスト OS として Fedora 12 を使います。この上に、 仮想的な Fedora 13 環境を構築してみましょう。
まずは、Fedora 12 環境を構築します。といっても、特に何も 考えずにインストールして構いません。パッケージとして仮想化 を選択しておきましょう。virt-manager というパッケージもいっ しょにどうぞ。
インストールできましたか?では、早速 KVM を導入してみま しょう。root 権限で、次のようにコマンドを入力します。
# modprobe kvm
# modprobe kvm_intel または kvm_amd # lsmod | grep kvm
kvm と kvm_intel / kvm_amd モジュールが表示されましたか? 表示されない場合には…いろいろ検索してみましょう!
ぷら
す!
●
つかってみよう! Fedora+KVM
☆
まずはホストOSをいんすとーる!
続いて仮想マシンマネージャー (virt-manager) を起動します。 アプリケーション>システムツール>仮想マシンマネージャー あたりにあるはずです。今回は英語環境で作業しているので画像 も英語表記ですが、日本語環境であれば日本語で表示されるので ご安心を。
ゲスト OS を作るために、localhost(QEMU) という部分をダブ ルクリックして、KVM/QEMU に接続します。そして、右クリック して New( 新規作成 ) を選択します。
すると、インストールウィザードが起動します。さあ、指示に 従ってゲスト OS を作っていきましょう!
まずは OS に付ける名前から。わかりやすい、好きな名前を付 けて OK です。インストールに使用するメディアも聞かれますが、 ISO イメージをあらかじめダウンロードしておいて、そのファイ ルを指定するのが楽でしょう。
メモリ容量や CPU・HDD の設定を行えば、ゴールはすぐです。 ウィザードを完了すると、自動的にその設定でゲスト OS が起動 します。
途中でゲスト OS の画面解像度が変わった場合、表示が狭くな る場合があります。そういうときには、落ち着いてメニューから 表示> Resize to VM を選びましょう。ウインドウサイズがゲス ト OS の解像度に合わせて変化するはずです。
あとはもう実機と同じですね。インストールを完了し、必要に 応じてもう一度ゲスト OS を起動してみて下さい。
というわけで、いかがでしたでしょうか。
書き始めるまでは、Xen4.0 の新機能特集!みたいなものを予定していたの ですが、その…ね。クラウドプラットフォームの技術を盛り込んだり、良い 感じだと思いますよ。Xen ェ…!(群馬の方言で「研究で使おうと思ったらイ ンストールできねーでやんのばーかばーか! Xen なんかきらいだー!」の意)
今回は、今までのような専門用語のオンパレードではなく、平易な表現を 心掛けてみました。いかがでしょう?ガチの人たちはきっとこんな拙著に興 味を持つことはないでしょうし、アリかなぁと思っています。ミスのご指摘 や感想などは @syonbori までおねがいします。
それでは、また機会がありましたら。
2010年8月 研究室が快適すぎて帰るのが面倒だなぁ… terror / @syonbori 拝 ●フォント
本書では、以下のフォントを使用しています。ありがとうございます。
☆本文ほか:ふい字(作者:ふい様) http://hp.vector.co.jp/authors/VA039499/ ☆セクションほか:あんずもじ(作者 : 京風子様) http://www8.plala.or.jp/p_dolce/ ☆記号ほか:アームドバナナ(作者:ミリメートル様) http://calligra-tei.oops.jp/
●謝辞
本書を書くにあたり、@syuu1228 氏、@nakj 氏、@kdmn 氏、@oza_x86 氏に査読を頂きました。 ありがとうございました。
●奥付
仮想化なう 2010年夏号 「できるかも KVM」 発行日:2010年08月14日(於:コミックマーケット78) 著者 :terror
発行 :ZaWorld
複製・複写・再頒布等ご自由にどうぞ。ただし、著者はその責任を負(え|い)ません。
ハードウェア
ハードウェア
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Xen
Domain0(Linux) ゲスト
アプリケーション アプリケーション QEMU
ハードウェア
ハードウェア
Linux
Linux
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
KVM
ゲスト アプリケーション アプリケーション
QEMU
ハードウェアを エミュレーション
エミュレーション
ハードウェアを エミュレーション
カーネル
カーネル
モジュール として動作
Xen
Xen
KVM
KVM
理想
理想
現実
現実
全ての命令
全ての命令 全ての命令全ての命令
特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 (検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 ) (検知可能 ) (検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 ) (検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 ) 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令
特権命令 特権命令特権命令特権命令特権命令特権命令特権命令特権命令特権命令特権命令特権命令特権命令特権命令 (検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 ) (検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 )
(検知可能 ) 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令 特権命令
センシティブ命令
センシティブ命令
(危ない命令 ) センシティブ命令センシティブ命令(危ない命令 ) はみ出した 部分が問題!
部分が問題!
参考 : @go_vm. “軽快な Plan9” pp.16-17
*zaworld*
*100814 *
Z A W O R L D 1 0 0 8 1 4
ISDN 64-64-128-16154302 C78 DAY2 KataA-32b \100
発行:ZaWorld
定価:本体100円+コミケ期間中 の貴重な時間