機能・要件 
    ハイパーバイザ
    KVM 
    QEMU 
    KVMとXen 
    CPU仮想化 
    メモリー仮想化 
    ディスク仮想化 
    NWの仮想化 
    仮想NW方式 
    共有物理装置方式 
    リソース監視 
    マイグレーション 
    virtioデバイス 
 構成・方式 
 動作 
 タスク 
 導入 

 仮想化 
 ハイパーバイザとなるLinuxマシン
 ・Linux Kernel自体をハイパーバイザとする仕組み
・Linuxカーネル上にKVM関連のモジュールをロードすることにより仮想化機能を提供。
・Linuxカーネルの優れたプロセス管理、I/O管理の機能がそのまま活用できる。
 ・従来のLinux用のアプリケーションをそのまま実行することも可能。
 ・ゲストOSは単一のユーザプロセス
 ・デバイスドライバはLinuxカーネルに含まれているものをそのまま使用する。
・KVM対応の特別なデバイスドライバは不要、デバイスの選択肢も広くなる。

 KVM(Kernel-based Virtual Machine)
 ・仮想化ソリューションの一部
 ・CPUの仮想化支援機構を利用するデバイスドライバ。
 ・QEMU(キューエミュ、Quick Emulator)というプログラムと一緒に動作する。
QEMU は、各種デバイスのエミュレーションやCPU命令の動的な変換を担う。
 ・CPUの仮想化支援機構を利用した完全仮想化を実現
ハードウェアのエミュレーションを使用(CPUの仮想化支援機構)
Intel VTやAMD-Vなどのプロセッサが提供する仮想化支援機能を利用することで、
一般ユーザ権限のプロセスとして仮想マシンを効率的に実行することが可能。
既存のOSを無修正でゲストOSとして実行(完全仮想化)
ゲストOSの選択肢が広がる。
Linuxディストリビューションにより、稼動サポートするゲストOSの制限あり。

 QEMU
 ・QEMU はさまざまな設定で使用できるアプリケーションで、ゲストOSを仮想化するために
  使用することも、マシンのCPUやその他のCPUアーキテクチャーを対象に、
  OSで動作する完全なマシン・エミュレーターとして使用することもできる。
 ・QEMUは、ユーザー空間にある、ソフトウェアによるエミュレータとして誕生
初めは、cpuエミュレータとして誕生
あるアーキテクチャ用のLinuxバイナリを別のアーキテクチャで実行し、
ネイティブシステムコールもそのまま使用できるようにした。
その後、様々な仮想周辺機器を追加。
 ・QEMU は、PC 環境全体の仮想化を実現するプラットフォーム仮想化ソリューション
・PCシステム全体を対象としたオープンソースのエミュレーター
・QEMUの提供するデバイス(比較的古いデバイスのエミュレーションが多い)
・ディスク
・ブロックデバイスのIF
・ide (IDEコントローラに対応)
・scsi (SCSIコントローラに対応)
・virtio (virtioインターフェースに対応)
インターフェースの指定は、qemu-kvmコマンドの「-drive」にifパラメータで指定
ブロックデバイスのバックエンドとなるファイルやフォーマット
・raw形式 (ディスクイメージをそのままコピー(アドレス変換不要:高速))
・qcow2形式 (QEMU独自形式(サイズを重要視する場合))
・vmdk形式 (Vmware)
・仮想NIC
・USB
・仮想グラフィックコントローラ
・サウンドカード
・シリアルポート
・パラレルポート
・キーボード
 ・参考(Wiki)

 KVMとXen
 ・オープンソースの「ベアメタル仮想化技術」(ホストOSが無くても大丈夫な仮想化技術)
  として最もよく使用されているのはKVMとXen
 ・Linux自体をハイパーバイザにしてしまうことを考慮すると、ハイパーバイザ型といえる。
 ・KVMは単純で使いやすい
Xen は変わらず KVM よりもハイパフォーマンスのベアメタル仮想化技術
 ・Xen以上に優れたスケーラビリティを持ち、商用ハイパーバイザを遙かに下回る低コスト
 ・KVMは、仮想化支援機能を有するCPUが必要で、完全仮想化のみ
 ・Xenは、CPUの仮想化支援機能を必要としない、準仮想化から発展
実際のハードウエアをエミュレートする代わりに、
Xenの仮想環境に合わせてゲストOSのカーネルをXen専用に最適化する。

 CPUの仮想化
 ・CPUが仮想化を直接サポートする。
複数のオペレーティング・システム用にCPUを仮想化することが可能

 メモリーの仮想化
 ・KVM は、/dev/kvm デバイスによってメモリーを仮想化する。
メモリーはkvm(ユーテリティ)によって仮想化される

 ディスクの仮想化
 ・入出力の仮想化
入出力は多少変更された QEMU プロセスによって仮想化される。
(この QEMU プロセスのコピーはそれぞれのゲストOSのプロセスを使って実行する。)
 ・KVMではQEMUを利用
もともとQEMUはソフトウェア的なエミュレーションで仮想マシンを実行するソフトウェア
QEMUがソフトウェア的なエミュレーションで仮想マシンを実行する中で、CPUの仮想化や
メモリの仮想化などについて、CPUの仮想化支援機能を利用するように置き換えたものがKVM
 ・そのため、KVMでも仮想ディスクなどのデバイスは、QEMUのエミュレーションによって提供される。

 NWの仮想化
 ・ディスクと同じく、QEMUを使用
 ・「仮想マシンの仮想ネットワーク」を外部ネットワークに接続
ホストLinuxの「仮想ブリッジ機能」を利用して仮想ネットワークを構成する。
仮想ブリッジは、ホストLinux上に仮想的なL2スイッチを構成する機能
複数の仮想ブリッジの構成も可能
仮想マシンの仮想NIC⇔ホストLinuxのTAPデバイス(仮想NIC)⇔仮想ブリッジ⇔物理NIC
TAPデバイス:Linuxがユーザプロセスと通信するための仮想的なNICを提供する。
ゲストOSが仮想NICで送受信するパケットは、
ホストLinux側のTAPデバイスから送受信される。
 ・同じ仮想ブリッジに接続された仮想マシンどうしは、
  仮想ブリッジを経由して通信することが可能
 ・「virt-manager」で新規の仮想マシンを作成する時
virt-managerで新規の仮想マシンを作成する時は、
仮想マシンに対して、仮想NICが1つだけアサインされる。
これを接続する仮想ネットワークをウィザード画面で選択する。
複数の仮想NICが必要な場合は、仮想マシンの作成が完了した後に、
virt-managerから新規の仮想NICの追加を行う。
仮想NICを接続する仮想ネットワークを選択するウィザード画面で、
「仮想ネットワーク」と「共有物理装置」のどちらかを選択する。
「仮想ネットワーク」は、「iptablesのNAT機能を利用する方法」に対応
「共有物理装置」は、「ホストLinuxの物理NICを仮想ブリッジに接続する方法」に対応

 「仮想ネットワーク」方式
 ・仮想ブリッジから、IPマスカレード機能を使用して、物理NICに接続する。
 ・libvirtdサービスによる仮想ネットワーク構成
この方法で作成した仮想NWは、ホストLinux上で稼働するdnsmasqプロセスにより、
DHCPサーバとDNSサーバの機能が提供される。
ゲストOSのIPアドレスをDHCPで自動設定することが可能。
外部ネットワークとの接続に必要なiptablesの設定は、
libvirtdサービスが起動したタイミングで自動的に行われる。

 「共有物理装置」方式
 ・仮想ブリッジから、物理NICに接続する。
 ・L2スイッチを経由して仮想マシンを外部ネットワークに接続することと同じ。
 ・仮想マシンへは、外部NWと同じサブネットのIPアドレスをアサインする。

 KVM環境のリソース監視
 ・virt-manager、virsh
ホストLinux
cpu使用率
メモリ使用率
ディスク使用量
仮想マシン
死活監視
cpu使用率
メモリ使用率

 KVMライブマイグレーション
 ・仮想ディスクイメージを複数の物理サーバで共有する必要あり。
・NFSサーバを利用して、同一のNFS領域を共有マウントする。
・SAN接続の共有ディスク装置を利用する。

 virtioデバイス
 ・qemu-kvmに実装された仮想デバイス
 ・ゲストOSへの準仮想化インターフェースを実装
ゲストOSには専用のドライバが必要(高速)
I/O要求のキューイングによるCPUの状態切り替え回数の削減
ゲストOSに割り当てられたメモリをホストOSから直接参照
(メモリコピー削減)
 ・ディスク
「-drive」オプションで指定
 ・NIC
「-net」オプションで指定