Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
Red Hat Enterprise Linux 6KVMによる仮想化
Red Hat K.K. Solution Architect: Kazuo Moriwaka <[email protected]>V2.3: 29th Jul. 2013
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。2
この資料の位置づけと宣伝
この資料はRHEL6に同梱されるKVMによる仮想化について解説しています。KVMを活用するために必要な知識をまとめて提供しています。● 基本的な利用方法● 設定ファイルやログファイルなどの配置● 設定可能な項目の紹介● 適切な設定項目を選択するために必要な背景知識● KVMの実装の簡単な紹介
レッドハットでは「KVMスタートアップ」という一社研修を開催しています。本資料はその研修で利用する資料です。
この資料を利用した一社研修サービスを提供していますご興味のある方はお問いあわせください● 問い合わせ先は次ページにてご案内しております
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。3
お客様からのお問い合わせ先
レッドハットの製品、サービスに関するご購入前の一般的なお問い合わせ
<サービス時間> 平日9:00〜18:00
セールスオペレーションセンター(SOC)
Tel. 0120-266-086 (携帯電話からは03-5798-8510)
e-mail: [email protected]
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。4
アジェンダ
KVMって何? RHELでのKVM利用 仮想マシンのインストール 仮想マシン構成変更 KVMのモデルとバックエンド
● CPU● ディスク● ネットワーク● メモリ● その他● virtio
メモリ管理の仮想化のしくみ KVMによるCPUの仮想化のしくみ セキュリティの改善 KVMユーザ事例
5Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
KVMって何?
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。6
KVMって何?
KVM は何の略?● Kernel-based Virtual Machine
Kernel?● Linuxカーネル● Linuxカーネルに仮想マシン管理機能を追加● Linuxのスケジューラ、メモリ管理、ドライバ、省電力対応な
どをそのまま利用する
CPUの仮想化支援機構を利用する I/Oのエミュレートにユーザランドのプログラム(QEMU)を利用
する
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。7
QEMUQEMU
KVM模式図
KVM
QEMU
VMふつうのプロセス
Linux kernel
Hardware
VMVM
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。8
Xen 模式図
Hardware
Hypervisor
dom0
Device Driver
Backend driver
domU
Frontend driver
domU
Frontend driver
Virtual CPU & Memory
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。9
Xen/KVM historical chart
2003
Xen
2004 2005 2006 2007 2008 2009 2010
citrixxensourceケンブリッジ
Xen登場Xen開発活発化
FedoraへXen取り込み
linuxへのXenマージ活動
KVM登場&マージ
FedoraへのKVM取り込み
linuxマージまで統合見送り
RHEL5.4 w/ KVM & Xen
RHEL5.0 w/ Xen
KVM
intel, AMD仮想化支援機能開発
qumranet red hat
2011
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。10
KVMとXenの比較
KVM
QEMU
VM
Hypervisor
dom0
Driver
Back
domU
Front
KVM Xen
スケジューラ linuxを転用 Xen hypervisor独自実装
資源管理 linuxのcgroupsで対応 CPUはXenスケジューラで対応
pvSCSI あり(6.4から) あり
dump あり あり
live migration あり あり
実装の特徴 HWの仮想化対応を活用 HWが対応しない時にSWで工夫
旧CPU活用 仮想化対応機能が必須 PVであれば古いCPUでも対応
新ハード対応 linuxの対応をそのまま利用 新機能への追従は遅れがち
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。11
RHEL KVM動作環境
RHEL 5.4以降 x86_64アーキテクチャでハードウェア仮想化技術が有効な
CPU (AMD-V/Intel VT-x)● BIOSで仮想化支援技術が有効になっていること
●BIOSでdisableされるとOSで再度有効にすることができません
メモリ量●最低 2GB●推奨 2GB+VMに割り当てるメモリ総計
サーバ上のトータルVCPU数●推奨 実CPUのスレッド数-1●最大 実CPUのスレット数*10
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。12
RHEL KVM VMリソース上限
VCPU● 最大 64(〜6.2), 160(6.3〜)● 実際に同時実行できるスレッド数以上の割りあては無駄
メモリ● 最大 256GB(〜6.1), 512GB(6.2), 2TB(6.3〜)
仮想IDEデバイス● 最大 4
仮想NIC● 無制限(ただし下記のPCIデバイス数の制限あり)
virtio ブロックデバイス, 仮想NICなど、仮想PCIバス経由で接続するデバイス● 合計して最大28● 仮想マシン上で利用できるPCIデバイス数の上限が32、ただし4つは
利用済みで利用できないため28 virtio-scsi経由のブロックデバイス
● 数百(明確な上限は設定されていない)最新状況は http://jp.redhat.com/rhel/compare/
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。13
RHEL6.4でサポートされるゲストOS
Operating system virtioドライバ
Red Hat Enterprise Linux 3 x86 あり
Red Hat Enterprise Linux 4 x86, x86_64 あり
Red Hat Enterprise Linux 5 x86, x86_64 あり
Red Hat Enterprise Linux 6 x86, x86_64 あり
Windows Server 2003 R2 32-Bit, 64-Bit あり
Windows Server 2003 Service Pack 2 32-Bit, 64-Bit あり
Windows XP SP3 32-Bit あり
Windows Vista 32-Bit, 64-Bit なし
Windows Server 2008 32-Bit あり
Windows Server 2008 (and R2) 64-Bit あり
Windows 7 32-Bit, 64-Bit あり
最新状況はhttp://www.redhat.com/resourcelibrary/articles/enterprise-linux-virtualization-support
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。14
ドキュメント
製品ドキュメント● Virtualization Administration Guide● Virtualization Getting Started Guide● Virtualization Host Configuration and Guest Installation GuideKVMの設定やゲストのインストールを詳細に記述http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/index.html
Red Hat Reference Architecture Series仮想化に限らず各種設定例、ベンチマーク結果などを公開https://access.redhat.com/knowledge/refarch
● カスタマポータル内●→ナレッジ●→リファレンスアーキテクチャ
15Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
RHELでのKVM利用
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。16
KVMのインストール
インストーラでVirtual Hostを選択
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。17
関連パッケージ(1/2)
qemu-kvm● qemu-kvmを提供
●KVMのユーザスペース(QEMU)●管理インタフェース 兼 I/Oエミュレーション
kernel● kvm.ko、kvm-intel.ko、kvm-amd.koを含む
●KVMの中心●kvm.koはハードウェア非依存部分●kvm-intel.ko、kvm-amd.koはCPU特有の部分
qemu-img● ディスクイメージ作成・変換ツール
libvirt●抽象化ライブラリ、他のハイパーバイザーもサポート
qemu-kvm-tools● KVMの資源使用量表示など
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。18
関連コマンド
virsh● CUIでのインタフェース●起動/終了/構成変更/VNCコンソール接続先確認
virt-install● CUIでのインストール● PXE boot + kickstart を併用して自動インストール
qemu-img● ディスクイメージの作成/変換/スナップショット管理
virt-manager●GUIによる管理ツール● インストール/起動/構成変更/VNC接続 etc.
virt-viewer● 仮想マシンのコンソールにVNC接続する単機能のビューア
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。19
関連パッケージ(2/2)
python-virtinst● インストール用ツールvirt-install
virt-v2v● VM変換ツール
virt-top● 仮想化ホストの状態表示
libguestfs libguestfs-tools guestfish
● 仮想ディスクイメージの操作 spice-*
● リモートデスクトッププロトコル SPICE関連ソフトウェア
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。20
virsh コマンド
コマンド一覧● virsh help
動作していないものも含めた仮想マシン一覧● virsh list --all
仮想マシンの起動● virsh start rhel6
仮想マシンの情報● virsh dominfo rhel6
仮想マシン定義の出力● virsh dumpxml rhel6
仮想マシンのシリアルコンソールへ接続● virsh console rhel6
仮想マシンのダンプを取得● virsh dump rhel6
リモートホスト上のlibvirtdへssh経由で接続● virsh --connect qemu+ssh://[email protected]/system
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。21
libvirt
複数の仮想化環境に対応した管理用ライブラリ RHELの仮想化環境ではこのライブラリを利用してXenとKVM
の両方に対応しています libvirtを利用するソフト
● virsh● virt-manager● virt-install● virt-viewer● libguestfs
詳しくは● http://www.libvirt.org/● http://wiki.libvirt.org/page/FAQ
KVM
QEMU VM
virt-managervirsh
libvirt
Linux kernel
virt-install
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。22
libvirt の “URI”
driver[+transport]://[username@][hostname][:port]/[path][?extraparameters] 例
リモートKVM: qemu+ssh://[email protected]/systemローカルKVM: qemu:///systemローカルXen: xen:///
driver● KVMであれば qemu ●Xenであれば xen
transport ● ローカルホスト: なし● libvirtdに直接接続: tcpまたはtls● ssh経由で接続: ssh
path● qemuであればsystem, xenであればなし
参考情報:●http://libvirt.org/uri.html●Virtualization Guide: Chapter 19. Remote management of virtualized guests
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。23
qemu-imgによるディスクイメージ管理
仮想ディスクイメージ作成● qemu-img create -f <フォーマット> <ファイル名> <サイズ>● qemu-img create -f qcow2 myimagefile.img 10G
差分イメージ作成(qcow2のみ)● qemu-img create -F <ベースイメージのフォーマット> -b <ベー
スイメージファイル名> -f qcow2 <ファイル名>● qemu-img create -F raw -b mybase.img -f qcow2 mydiff.img
フォーマットの変換(または再作成)● qemu-img convert -f <元フォーマット> -O <出力フォーマット>
<元ファイル名> <出力ファイル名>● qemu-img convert -f raw -O qcow2 orig.img out.img● qemu-img convert -f qcow2 -O qcow2 orig.img out.img
イメージファイルの情報取得● qemu-img info -f <フォーマット名> <イメージファイル名>
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。24
virt-top(RHEL6.0〜)
top風の統計情報表示 同情報のCSV形式での出力 表示情報
● CPU使用量● block I/Oのリクエスト数、転送バイト数● network I/Oのパケット数、転送バイト数
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。25
仮想ディスクイメージ操作ツール(RHEL6.0〜)
guestfish● シェル風のインタフェースで仮想ディスクイメージを操作● --ro, --rw のオプションにより書き込みの有無を指定● /usr/share/doc/guestfish-1.2.7/recipes に利用例
virt-v2v● RHEL5のXen, KVMやVMware ESXの仮想マシンをKVM環境へ移行
● 対象ゲストOSはRHEL4/5/6, Windows XP/Vista/7, Windows Server 2003/2008
● ドキュメント 「V2V Guide」 を参照 !操作対象の仮想マシンは停止しておく!
● 同時に書き換えをおこなうとファイルシステムが壊れます http://virt-tools.org/ http://libguestfs.org/
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。26
libguestfs-tools(RHEL6.0〜)
libguestfsによるファイルシステム等の操作の内、典型的なものをコマンドとして提供
読み込みのみ(対象VM動作中でも利用可能)● virt-cat, virt-df, virt-inspector,
virt-list-filesystems, virt-list-partitions, virt-ls オプションにより書き込みあり
● virt-tar, virt-win-reg 書き込みあり
● virt-edit, virt-rescue, virt-resize
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。27
ファイル・ディレクトリ
libvirt関連ディレクトリ● /var/lib/libvirt/
●ゲストのイメージなどが格納される● /etc/libvirt/
●設定ファイルなどが格納される● /var/log/libvirt/
●VMごとのログが格納される kvm関連ファイル
● /usr/libexec/qemu-kvm● bin、sbinの下ではなくlibexecなのは、直接実行せずに
libvirt経由で操作することを意図しています(直接実行はサポート対象外)
● Fedoraなど他のKVM+libvirt環境から移行する場合には設定ファイル中のemulator指定でこのファイルを指定する
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。28
ログファイル
/var/log/messages● libvirtdのログが格納される
/var/log/libvirt/● 仮想マシン毎のログが格納される● qemu/KVMであれば、/var/log/libvirt/qemu/<VM名>.log● qemu-kvmの標準出力、標準エラー出力が記録される
/var/log/dmesg● カーネルのログが格納される● kvmのカーネルモジュールはほとんどログを出さないが、初期化時にCPUの仮想化支援機能が利用できない場合などはここに記録される
(ユーザのhomeディレクトリ)/.virt-manager/virt-manager.log● virt-managerのログが出力される● libvirtdと対応するがDEBUGモードで出力されているので詳細
29Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
仮想マシンのインストール
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。30
virt-managerによるゲストOSのインストール
複雑な構成は組めないが典型的なケースを簡便に実行できる
仮想マシンの作成● システム名称を設定● 仮想化の方法を選択
●KVMでは完全仮想化のみ● インストール方法を選択● インストール元を選択
●ISO,http,ftp,NFS等を選択可
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。31
virt-managerによるゲストOSのインストール(続き)
仮想マシンの作成(続き)● ストレージの設定● ネットワークの設定● メモリとCPUの設定● 仮想マシンが起動●通常のハードウェアと同様に
インストール
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。32
virt-install によるゲストOSインストール
virt-installは仮想マシンの作成とゲストOSのインストールを行うコマンドラインツール●典型的なケースについてはコマンドラインが短くなるよう工夫されている
●複雑な構成もオプションで指定可能
ウィンドウで仮想画面を表示してGUIインストールする場合virt-install -n <仮想マシン名> -r <メモリ量(MB)> --file=<ファイル名> --file-size=<ディスク量(GB)> -c <ISOイメージ名>
例virt-install -n newvm -r 1024 --file=/var/lib/libvirt/images/newvm.img --file-size=10-c /path/to/rhel-server-5.5-x86_64-dvd.iso
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。33
対話的なテキストベースのインストール
virt-installで仮想マシンのシリアルコンソールを利用したインストール● virt-install -n <仮想マシン名> -r <メモリ量(MB)>
--disk=path=<ファイル名>,size=<ディスク量(GB)>--location <インストール元> --nographics --extra-args=<カーネルに追加する引数>--disk=path=<isoファイル名>,device=cdrom
● --extra-args利用には--locationによるインストール元指定が必要●シリアルコンソールを利用するので console=ttyS0 を指定●--cdromは使えないので--diskを利用
● --nographicsでVNCを設定せずシリアルコンソールへ接続する 例
● あらかじめ /mnt/RHEL5DVD にRHEL5のDVDをマウント● virt-install -n hoge -r 1024 --disk=path=/path/to/hoge.img,size=10
--location /mnt/RHEL5DVD --nographics --extra-args=”console=tty0 console=ttyS0,115200n8”--disk=path=/path/to/rhel-dvd.iso,device=cdrom
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。34
kickstartによる非対話的インストール
非対話的なインストール● 利用するvirt-installのコマンドラインオプションはテキスト
の対話的インストールと同じ● --extra-argsで
●ks= を指定してkickstart設定を行う●kickstartの詳細についてはInstallation Guideを参照●ネットワーク経由の場合「ゲストOSから見たIPアドレス」
を入力することに注意 例
● あらかじめ /mnt/RHEL5DVD にRHEL5のDVDをマウント● virt-install -n newvm -r 1024 --file=newvm.img --file-
size=10 --location /mnt/RHEL5DVD --nographics --extra-args=”ks=http://192.168.122.1/anaconda-ks.cfg ip=dhcp console=tty0 console=ttyS0,115200n8”
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。35
インストール後の設定
ゲスト側: qemu-guest-agentのインストール(6.3〜)● ホストとやりとりしてファイルシステムのsyncなどをおこな
うqemu-guest-agentをインストールする● RHELであればqemu-guest-agentパッケージの導入● Windowsであればqemu-ga.exeの導入
ゲスト側: tuned-admでのチューニング(6.3〜)● tuned-adm profile virtual-guest とコマンド入力して仮想マ
シン用のプロファイルを設定する ホスト側: tuned-admでのチューニング(6.3〜)
● tuned-adm profile virtual-host とコマンド入力して仮想化環境のプロファイルを設定する
36Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
仮想マシン構成変更
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。37
virt-managerによる仮想ハードウェア構成変更
各仮想マシンの「詳細」タブで設定● 変更内容は次の起動時から反映
CPU メモリ ディスク(HDD, CD/DVD) NIC マウス ディスプレイ シリアル
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。38
virshによる仮想ハードウェア構成変更
virsh edit <仮想マシン名>● 仮想マシン定義ファイルを読みこんだエディタが起動● 内容変更●保存終了●確認後問題がなければlibvirtdが読み込み
設定ファイルを直接変更しても自動的に反映されない点に注意● 変更後に virsh define による定義読み込みで反映可能
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。39
libvirtの設定管理
libvirtdが実際に参照する設定はメモリ上にあるもの
/etc/libvirt以下の設定は起動時に読み込み、変更時に書き出される
「仮想マシンの起動」「設定の読み込み」など一部の操作によりlibvirtdは設定の一部を自動生成し、設定に反映する● addressタグ, uuidタグ,
consoleタグなど
libvirtd
xml
/etc/libvirt/
起動時に読み込み
メモリ中の設定
変更時に書き出し
define
dumpxml/edit
自動書換え
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。40
設定ファイル群
/etc/libvirt/以下にまとまっている autostart にあるものは起動時に実行
/etc/libvirt/|-- libvirtd.conf|-- qemu| |-- networks| | |-- autostart| | | `-- default.xml -> ../default.xml| | `-- default.xml| |-- newvm.xml| |-- redhat52.xml| |-- rhel3.xml| |-- rhel4.xml| `-- rhel5.xml|-- qemu.conf`-- storage |-- autostart | `-- default.xml -> /etc/libvirt/storage/default.xml `-- default.xml
libvirtdへの外部からの接続設定
仮想ネットワーク設定
仮想マシン設定 1台1ファイル
VNCのデフォルトパスワード等の設定
ストレージ設定
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。41
ドメイン全体<domain type='kvm'> <name>newvm</name> <uuid>a040090d-79fe-3bca-7e2f-65c32a6f0318</uuid> <memory>1048576</memory> <currentMemory>1048576</currentMemory> <vcpu>2</vcpu> <os> <type arch='x86_64' machine='rhel6.1.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash>
仮想マシン定義ファイル例
仮想マシン名
uuid
VMで扱えるメモリ(kB)
balloonをひいたメモリ
VCPUアーキテクチャとマシンタイプ
KVMを使う
完全仮想化
RTCはUTCかlocalか?
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。42
<devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='threads'/> <source file='/var/lib/libvirt/images/newvm.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk> <disk type='block' device='cdrom'> <driver name='qemu' type='raw'/> <target dev='hdc' bus='ide'/> <readonly/> <address type='drive' controller='0' bus='1' unit='0'/> </disk> <controller type='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <interface type='network'> <mac address='52:54:00:92:d9:4f'/> <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
周辺装置(1/2)
ディスクデバイスファイル or デバイス元ファイルのパス
何デバイスに見えるか
仮想NICMACアドレス接続先ブリッジ
何デバイスに見えるか
PCIバスのスロット番号等VM内で割り当てられたアドレスを維持する
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。43
周辺装置(2/2)
<serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes'/> <video> <model type='cirrus' vram='9216' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </memballoon> </devices></domain>
シリアルポート
VNCによるグラフィカルコンソール
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。44
qemu-kvmのコマンドラインオプション例(1/2)
/usr/libexec/qemu-kvm -S -M rhel6.1.0 → マシンタイプ-enable-kvm → KVMを利用したハードウェアアクセラレーションを有効にする-m 1024 → メモリ 1024MB-smp 2,sockets=2,cores=1,threads=1 → 2VCPU、2ソケット1コア1 スレッド-name newvm → VMの名前-uuid a040090d-79fe-3bca-7e2f-65c32a6f0318 → VMのuuid-nodefconfig -nodefaults → QEMUのデフォルトは使わない
管理用モニタの設定。libvirtがQEMUと通信するためのソケットを定義している。-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/newvm.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control
-rtc base=utc → 時計はUTCベース。-no-reboot → 再起動禁止、-boot dc → 起動デバイス順 フロッピー(a), HDD(c), CD-ROM(d), network(n)
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。45
qemu-kvmのコマンドラインオプション例(2/2)
HDDの設定。-driveではホスト側でのデバイス定義、-deviceではVM側でのデバイス定義をおこない、driveのidを指定して対応関係を定義する。-drive file=/var/lib/libvirt/images/newvm.img,if=none,id=drive-virtio-disk0,format=raw,cache=none,aio=threads -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0
CD-ROMドライブの設定。HDDとほぼ同じ。
-drive file=/var/lib/libvirt/images/rhel-server-6.0-x86_64-dvd.iso,if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw,aio=threads -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0
NICの設定。ホスト側が-driveではなく-netdevになっている。
-netdev tap,fd=30,id=hostnet0,vhost=on,vhostfd=31 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:92:d9:4f,bus=pci.0,addr=0x3
シリアルデバイスの設定-chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0
-usb -device usb-tablet,id=input0 → USBタブレットの設定
-vnc 127.0.0.1:2 → VNCによるグラフィカルコンソール、listenするIPとディスプレイ番号
-vga cirrus → ビデオカードの設定
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 → バルーンデバイスの設定
このデバイスは何か?
どう接続するか 元になるdriveはどれか?
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。46
デバイスのhot add/remove(RHEL6〜)
VM実行中にPCIバスへのデバイスの追加・削除が可能です virshのコマンド
● ディスク: attach-disk, detach-disk● NIC: attach-interface, detach-interface● その他: attach-device, detach-device
コマンド例: virsh attach-disk <VM名> <ファイル名> <ターゲット名>virsh attach-disk rhel6_64 /var/lib/libvirt/images/foo.img vdb
注意: ● IDEデバイスは追加・削除できません●ゲストOSがデバイスの追加・削除に対応している必要がありま
す
47Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
KVMのモデルとバックエンド
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。48
KVMのモデルとバックエンド
CPU ディスク ネットワーク メモリと応用技術 その他のデバイス virtio
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。49
KVM
Virtual Machineと物理サーバ
仮想マシン上のゲストOSは物理サーバのリソースをいきなり扱えません
仮想マシン上の「仮想ハードウェア」に見せかせる必要があります
いくつか手法がありますが一長一短● PCIデバイスをゲストOSへ割り当て
●デバイスの全機能を高速に利用●デバイスが占有され、migrationもできない
● 実際のデバイスをエミュレート●ゲストOSの対応が期待できる●エミュレートは高負荷
● 仮想化専用のインタフェース●エミュレートのオーバーヘッドが低
いようにプロトコルを設計●未対応OSでは利用不可
ゲストOS
仮想ハードウェア(モデル)
バックエンド
QEMU
Linux
バックエンド処理
ハードウェア
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。50
マシンタイプ
互換性維持のためにマシンタイプの指定が可能● 現在提供されているマシンタイプ例
● rhel6.1.0 RHEL 6.1.0 PC● rhel6.0.0 RHEL 6.0.0 PC ● rhel5.5.0 RHEL 5.5.0 PC● rhel5.4.4 RHEL 5.4.4 PC● rhel5.4.0 RHEL 5.4.0 PC
● 通常手動で設定することはなく、最初に起動した環境のマシンタイプがlibvirtdにより自動的に記述される
設定ファイル中の domain/os/type/@machine に自動保存●ホストをアップデートしてもVMのマシンタイプは維持される
マシンタイプによる動作の違い●現状ではCPUモデル以外はほとんど大きな違いはない● バグ修正による細かな動作の違いを補正
51Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
CPU
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。52
CPUのモデル
CPUモデルの選択(RHEL6.1から)● 486, Conroe, Nehalem, Opteron_G1,Opteron_G2,
Opteron_G3, Penryn, Westmere, athlon, core2duo, coreduo, n270, pentium, pentium2, pentium3, pentiumpro, phenom, qemu32, qemu64
● 実際のCPUの機能フラグに対応させている
実際のCPUでない"qemu32", "qemu64"モデル● qemu32, qemu64は特に指定しない場合のデフォルト
●qemu32は32bit、qemu64は64bit● 実際のCPUに一対一で対応していない● “QEMU Virtual CPU version (cpu64-rhel6)” のような名前
になります● マシンタイプがrhel5.* の場合は“QEMU Virtual CPU
version (cpu64-rhel5)” のようになります。
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。53
CPUの機能セット(CPUIDの機能フラグ)
物理的なCPUの機能がそのまま利用できるとは限らない● QEMUでの対応が必要
仮想CPUの機能セット←QEMUで対応 and 物理CPUが機能提供
サポート機能セットをオプションで指定可能 機能セットを再現できることがマイグレーションの必要条件
● Intel/AMD間のマイグレーションはサポート対象外
fpuvmepse486detscmsrmcecx8
mmxpentiumpaesepmtrr...
pentium2
fpuvmepsedetscmsrmcecx8
mmxpaesepmtrr...
実ハードのCPUIDfpuvmepsedetscmsrmcecx8
mmx
VCPUのCPUIDQEMUの指定
& =
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。54
cgroups(RHEL6.0〜)
linuxに新しく登場したリソース管理の仕組み タスクのグループごとに資源を与える グループに参加するタスクは任意に指定可能 サブプロセスもデフォルトで同一グループ 利用方法:
● /cgroup/* をマウント(libcgroupによる)● blkio, cpu, cpuacct, cpuset, devices, freezer, memory,
net_cls● この下にディレクトリを作成するとグループを作成
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。55
libvirtとcgroups
libvirtが仮想マシン毎にタスクグループを作成● /cgroup/*/libvirt/qemu/<domain名>/* ● cpu, cpuacct, cpuset, devices, freezer, memory● blkioとnet_cls以下への作成は未実装
libvirtと統合済みなのはcpuとdevice● CPUは使用量の割合を指定可● deviceは指定されたデバイスの利用を許可
memoryはLXC(Tech Preview)でのみ利用
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。56
cgroups - CPU
virsh schedinfoコマンドでCPUの比率を取得virsh # schedinfo rhel6_64Scheduler : posixcpu_shares : 1024
schedinfo --set で比率変更virsh # schedinfo rhel6_64 --set cpu_shares=100 1Scheduler : posixcpu_shares : 100
rhel6_64100
その他1024(デフォルト)
VM-11024(デフォルト) : :
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。57
VCPUのpinning
VCPUがどの実CPU上で動作できるかを固定する 実サーバの規模が大きく、NUMA構成である場合には同一ノードで動作するようにpinningすると性能に好影響●最近の2ソケット以上のサーバはNUMA構成●NUMAノードとcpuの番号の対応を確認するにはnumactl
--hardware コマンドが便利 自動的にnumaノードにプロセスを寄せるnumadを提供(6.4〜)
cpu8 cpu10
cpu4 cpu6
cpu0 cpu2
cpu9 cpu11
cpu5 cpu7
cpu1 cpu3同じノード内だけで動作するようにpinningする
メモリ メモリ
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。58
VCPUのトポロジ(RHEL6.0〜)
VCPUを、どのような構成としてVMに見せるかを設定する● Sockets: ソケット数● Cores: ソケットあたりのコア数● Threads: コアあたりのスレッド数
通常は Sockets * Cores * Threads == VCPU数 デフォルトではソケットあたり1コア、1コアあたり1スレッドの
CPUがVCPU数分ならんでいるように見える 一部アプリケーションソフトウェアのライセンス費用はSocket数に影響されるため有用
59Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
ディスク
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。60
仮想ディスクのモデル
ゲストからどう見えるかを選択可能 ide
● IDE接続のディスク 最大4台まで(CD/DVDが有効だと3台まで)
● I/O速度は遅くないがCPU消費が多い virtio
● virtioで通信する。● ゼロコピー実装のためCPU消費が少ない
virtio-scsi● virtioで通信する。● SCSI命令を送受信できる● multipath, テープ, DVDドライブ等を
利用可
ゲストOS
IDE or virtio
バックエンド
QEMU
Linux
フォーマット処理
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。61
仮想ディスクのバックエンド
ホスト側で対応するバックエンドを選択可能 デバイス(LUN、パーティション、LVMのLV)を割り当てる raw形式のファイル
● ファイルをデバイスとして見せる● sparceファイルにするとフラグメントが多発する●最初に全部確保するとフラグメント発生率が減る
qcow2形式のファイル● スナップショット機能、差分機能を提供
●差分ファイルの作成はvirt-mangerで未対応●qemu-imgで作成する
● ディスクサイズ<ファイルサイズになりうる●qemu-imgによる作り直しで無駄な領域を捨てる
速度の目安● sparceなraw < qcow2 < sparceでないraw << デバイス
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。62
バックエンドをファイルにする場合の注意
● linuxのファイルシステムは事実上4kB単位でファイルを読み書きします●読み書きをする論理的なブロックと実際のアクセスをお
こなうブロックがずれるとI/Oの効率が落ちます● セクタサイズが4kBのHDDを利用する場合と同様の条件に
なりますが、仮想マシン上ではセクタサイズが512バイトに見えます
●パーティションの開始位置に注意が必要です
ゲストOSのFS ← 4kB →
ホストOSのFS ← 4kB →
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。63
1ディスクへの並列した負荷の問題
1ディスク上に複数の仮想ディスクを作成する場合に発生するパフォーマンス問題の例
VM1とVM2を同一ディスク上にパーティションで切り分けて利用
以下のケースを考える VM1だけでシーケンシャルread → ほぼnativeと同じ速度
VM2だけでシーケンシャルread → VM1の1/2〜1/3の速度
VM1とVM2で同時にシーケンシャルread → 非常に遅い
VM1
VM2
ディスクの内周と外周のI/Oスループットの違いによる
ディスク上で離れた2系統のreadが混在するためシーク動作が多く発生し、待ち時間が長くなる
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。64
ブロックデバイスのcache設定
RHEL6のlibvirtではキャッシュ指定ができます none
●ホストではキャッシュしない● RHEL5と同等。デフォルト設定。サポート対象
writethrough●ホスト側とゲスト側で重複してキャッシュする
●メモリが逼迫するとキャッシュしない方が速い● サポート対象
writeback● サポート対象外●ホストのキャッシュへ書きだして書き込み完了とする●高速だがディスク上の整合性を保証できない
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。65
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。66
差分イメージファイル
ベースとなるディスクイメージからの差分だけを保持する● qcow2フォーマットの機能
読み込み:●差分イメージにあれば差分イメージから読み込む● なければベースイメージから読み込む
書き込み: 差分イメージにディスク領域を確保してベースイメージからコピーしたのち書き込み
差分イメージベースイメージ
read
read
write
write
?
copy
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。67
qcow2パフォーマンス改善
RHEL5からRHEL6で以下のような改善が行われています 最大クラスタサイズ拡大
● 64kB→ 2MBに● オプション cluster_size=2M
メタデータの事前確保● オプション preallocation=metadata
作成コマンド例: qemu-img create -f qcow2 -o cluster_size=2M,preallocation=metadata foobar.img 10G
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。68
仮想ディスクの注意点
IDEモデルを利用する場合のタイムアウト● linuxでIDEドライブにタイムアウト(10sec)が発生するとPIO
モードになり、非常に遅くなります● バックエンドのマルチパスフェイルオーバなどで発生します
I/Oスケジューラ● どのスケジューラが適切かは負荷によりますが、ホスト側ゲスト側ともにdeadlineとすることでベンチマーク結果が改善することが知られています
qcow2の既知の問題● RHEL5.5のqcow2の実装には既知のデータ破壊問題があ
ります● RHEL5.6以降またはRHEL6.0以降を利用
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。69
パフォーマンス:仮想化ストレージ
RHEL5 VM on RHEL5
RHEL5 VM on RHEL6
RHEL6 VM on RHEL6
RHEL5 VM on RHEL5
RHEL5 VM on RHEL6
RHEL6 VM on RHEL6
0 5000 10000 15000 20000 25000 30000 35000 40000
SAS multi-stream workload in KVM guestIntel Nahelem 8core, 48GB, 2FC
Guest (8x44GB virtio, nocache) SAS-systime
TOTAL-SAStime (HOSTS: red=R5 blue=R6)
time in seconds (lower is better)
EXT3 File System
XFS File System
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。70
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。71
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。72
73Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
ネットワーク
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。74
仮想ネットワーク
モデル● 実際にあるNICのエミュレーション
●e1000 -- virtioドライバがない場合e1000が最も軽い●ne2k_pci●pcnet●rtl8139 -- デフォルトのNICはRTL8139。非常に遅いの
で避けるべき● 仮想的なネットワークデバイス
●virtio -- virtio-net ドライバが必要、最も速い
モデルは実際のNICの正確な反映ではないので、帯域制御などには利用できません● たとえばe1000のエミュレーションを利用しても1Gbpsに帯域が制限されるようなことはありません
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。75
仮想ネットワークのバックエンド
TAPデバイス● VLANやbondingデバイスのような論理的なNIC● 対応するファイルへのwrite/readをEthernet frameの送受信に変換
libvirtが仮想マシン設定に従って作成し、qemu-kvmに接続する
vnet0 /dev/net/tap0
Network←→Filesystem
linux kernel
QEMU
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。76
前提知識: linuxのソフトウェアブリッジ
linuxカーネルにはブリッジ(802.1d)実装が含まれています●ポート学習、STPといった基本的な機能を実装
ブリッジの直接的な管理はbrctl コマンドで行います● brctl show● brctl showmacs● brctl delif <bridge> <interface>; brcrl addif <bridge>
<interface>● brctl addbr <bridge> ; brctl delbr <bridge>
http://www.linuxfoundation.org/collaborate/workgroups/networking/bridge
br0 vnet0br0eth0
vnet20vnet10
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。77
仮想ネットワークと物理ネットワークの接続
仮想マシンに割り当てた仮想NICはQEMUが作成する仮想インタフェース(vnet0 のような名前)に対応づけられる
「仮想インタフェースをどの仮想ブリッジに接続するか?」 をlibvirtで設定
仮想ブリッジの設定次第で様々な利用が可能
br0
vnet1
vnet0
vnet2
br0
br1
virbr0eth1
eth0
eth2
eth0
iptables
仮想マシンホストLinux
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。78
外から仮想NICが見える設定 - bridge
/etc/sysconfig/network-scripts/ifcfg-eth0、/etc/sysconfig/network-scripts/ifcfg-br0による設定
使用例: ● 仮想マシンによるサーバ構築●共有テスト環境 etc.
br0 vnet0br0eth0
eth0
仮想マシンホストLinux
BRIDGE=br0 を ifcfg-eth0に追加
DEVICE=br0TYPE=BridgeBOOTPROTO=dhcp ONBOOT=yesDELAY=0
を ifcfg-br0 に設定
<interface type='bridge'> <mac address='52:54:00:37:7c:16'/> <source bridge='br0'/></interface>
を VM設定ファイルに追加
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。79
NATの中に仮想マシンを閉じこめる設定 - NAT
libvirtによる自動設定 デフォルトで提供: /etc/libvirt/qemu/networks/default.xml iptablesのNAT+
dnsmasqのDHCP 使用例:
マシンローカルの実験環境 etc.
vnet1virbr0
eth1
eth0
iptables仮想マシンホストLinux
<network> <name>default</name> <uuid>48d17f30-1d19-4957-8a3b-0af70d3cd5a3</uuid> <forward mode='nat'/> <bridge name='virbr0' stp='on' forwardDelay='0' /> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.128' /> </dhcp> </ip></network>
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。80
仮想マシン間だけでの通信を行う設定 - local
/etc/sysconfig/network-scripts/ifcfg-br1 等で仮想ブリッジを作成するだけ
使用例: 同一マシン上で仮想マシン同士を接続する● 仮想サーバと仮想クライアントの接続→一台で検証環境
● クラスタの検証環境●ハートビート●クラスタ間通信etc.
vnet2
br1
eth2
仮想マシンホストLinux
<source bridge='br1'>
を VM設定ファイルに追加
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。81
ホスト起動時: sysconfigの設定によりeth0, br0を作成して接続
仮想マシン作成時、libvirtがトンネルデバイスvnet0作成、接続
QEMUがlibvirtから実行されて仮想インタフェース作成
ネットワーク設定が反映されるタイミング
br0
vnet0
br0
eth0
eth0
仮想マシンホストLinux
br0br0eth0
vnet0
br0br0eth0
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。82
ちょっと未来のネットワーク接続
ソフトウェアブリッジの弱点●ソフトウェアブリッジは帯域制御やACLなどの管理機能が使えない
● CPU消費も無視できない●特に接続インタフェースが多い時
ソフトウェアブリッジではなくスイッチで管理する手法● VN-Link(Cisco)● VEPA(Virtual Ethernet Port Aggregator, IEEE802.1Qbg)
●どちらもスイッチに仮想的なポートを作成する技術●VMの仮想NICは非常に多くなりうる(実サーバ1台に100ポートなど)のでこのような技術が必要
●スイッチがこれらの規格に対応している必要があるためまだどこでも利用できる状態ではない
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。83
VEPAによる論理的なポート拡張
ether frameにVLANタグとポート識別用のタグを付与 一旦全てのフレームを実NICから外部へ送り出す スイッチはACL, QoS制御などの処理をした上で送信先ポー
トを判定 スイッチは同じポートに対応している場合、そのポートへパ
ケットを送り返す(ヘアピンモード)
VMVM VM
switch
VEPAVEPAによる論理的なポート拡張
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。84
macvtapによる接続
実NICに対応づけられたtapデバイス● macvtapの動作モードにVEPAモードを選択することで
VEPAを実装する 作成例:# ip link add link eth0 name macvtap0 type macvtap
libvirtでの設定例:
<devices> ... <interface type='direct'> <source dev='eth0' mode='vepa'/> </interface> ... </devices>
macvtap
実NIC
macvtap macvtapmacvtap
VMVM VM
switch
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。85
macvtapのモード
VEPA(Virtual Ethernet Port Aggrigator)●外部スイッチのポートを論理的に増やす技術● VEPA対応スイッチが必要(多くのスイッチは非対応)●全てのフレームを一旦外部のスイッチへ転送してスイッチ
に処理させる● ネットワーク機器の管理機能利用、ホストCPU負荷削減
Private● VEPAと同じだが同一ポートに必ず戻ってくる
Bridge● 同一マシン上のMACであればソフトウェアで転送●ブリッジはVEPAに対応していなくてもよい●通常のソフトウェアブリッジによる実装と同等
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。86
nwfilter
仮想マシンのネットワーク送受信について、L2, L3でのフィルタを行うlibvirtの機能
汎用のフィルタ定義とパラメータの組み合わせで利用●パラメータ「IP」と「MAC」が予約されている
MAC, ARP, IPv4, IPv6, TCP, ICMPなどのプロトコルに対応 典型的なフィルタについてはデフォルトで定義あり
● 例: 仮想NICに割り当てたMACアドレス以外をsrcとする外向きのフレームをdropする
詳しい仕様は http://libvirt.org/formatnwfilter.html <devices> <interface type='bridge'> <mac address='00:16:3e:5d:c7:9e'/> <filterref filter='clean-traffic'> <parameter name='IP' value='10.0.0.1'/> </filterref> </interface> </devices>
フィルタ名
フィルタのパラメータ
87Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
ネットワーク構成例
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。88
基本のシンプルな構成
ホスト 環境
eth0
eth1
iSCSI target
管理ソフトや他の仮想化ホスト
live migration
サービス用ネットワーク
blockdevices
eth2
仮想マシンA
仮想マシンD
仮想マシンB
仮想マシンC
vnet0 - eth0
vnet1 - eth0
vnet2 - eth0
vnet3 - eth0
blockdevicesblock
devicesblock
devicesblock
devices
br0
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。89
基本のシンプルな構成 w/VLAN
ホスト 環境
eth0
eth1
iSCSI target
管理ソフトや他の仮想化ホスト
live migration
サービス用ネットワーク
blockdevices
eth2
仮想マシンA
仮想マシンD
仮想マシンB
仮想マシンC
vnet0 - eth0
vnet1 - eth0
vnet2 - eth0
vnet3 - eth0blockdevicesblock
devicesblock
devicesblock
devices
br0.10
br0.20
eth0.10
eth0.20
仮想マシンからVLANタグつきのパケットを送信すると、VLANのネスト(QinQ)が起きるので注意
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。90
web
internet
web
app app
db db
仮想化で3層サーバ
net1
net2
net3
何の変哲もない3tier構成
仮想化で1台or2台に集約するとどうなるのか?
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。91
web
internet
web
app app
db db
1台で3層(web, app, db)サーバ
実ハードウェア1台の場合 ブリッジをネットワークに1対1
対応させる 各層のVMを2つに分ける意
味があまりないような……??● 可用性?→△
●アプリケーションの不具合には対応可
● パフォーマンス?→×●アプリがあまり並列度
を活かせない場合には速くなる可能性あり
br1
br2
br3
web
eth0
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。92
web
internet
web
app app
db db
2台で3層(web, app, db)サーバ
実ハードウェア2台の場合 各ホスト中でネットワークをブリッジに一対一対応させる
同一ネットワークを実NICで接続
サーバが全ノードで動作していなくても、ネットワーク的に対称に構築しておく● live migrationなどでVMを移動するときに便利なのでお勧めです
br1
br2
br3
web
br1
br2
br3
eth0 eth1eth1
eth2eth2
eth0eth0
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。93
2台で3層(web, app, db)サーバ w/VLAN
VLANを使いネットワークを分割 実NICのVLANエイリアスを作成してブリッジを接続
SW
eth0
eth0.2001
eth0.2003
eth0.2002
br0
br1
br2
app
db
web
eth0
eth0.2001
eth0.2003
eth0.2002
br0
br1
br2
app
db
web2001
2003
2002
internet
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。94
web
internet
web
app app
db db
2台で3層(web, app, db)サーバ w/普通のスイッチ
ブリッジを利用せずネットワークをスイッチで管理したい場合
VLAN設定はスイッチ内のみ
仮想マシンそれぞれからネットワークへの接続分だけポートが必要
web
SW
eth1
eth2
eth3
eth4
eth1
eth2
eth3
eth4
eth0eth02001
2003
2002
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。95
internet
web
app app
db db
2台で3層(web, app, db)サーバ w/VEPAスイッチ
スイッチでVLANを使いネットワークを分割
VEPAを利用し、NICを経由してスイッチのポートを拡張●物理的なポート数を削減
web
SW
vnic
vnic
vnic
vnic
vnic
vnic
vnic
vnic
vnicvnic
eth0 eth0
2001
2003
2002
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。96
その他仮想ネットワークの注意点
ブリッジを共有している仮想マシンにはパケットが到達します● tcpdumpすると他VMの通信が見えます
1つのブリッジに多数のインタフェースを接続するとCPU使用量が増えます
ブリッジにIPアドレスを設定するとIPを使ったホスト-ゲスト間通信が可能です
仮想インタフェースのMACアドレスは任意に設定できますが 01 ではじまるMACアドレスについてはbridgeが転送しません● マルチキャストアドレスと見做されます● デフォルトでは 52:54:00:(以下ランダム) というMACアドレ
スが生成されます NAT構成のネットワークと、nwfilterの設定はiptables,
ip6tables, ebtablesにより実装されています。サーバ全体の設定との競合に注意が必要です。
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。97
bondingの利用と注意点
ホスト環境
eth0 VMvnet0 - eth0
br0
eth1
bond0
SW
SW
target
bondingを利用する場合 bonding deviceをBridgeへ接続します● Active-backup(mode=1)のbonding時、Standby側のスイッチがゲスト
OSのMACへの経路が変更されたことを学習するチャンスがないためにフェイルオーバ時に通信が途切れることがあります
対策● ゲストOSからゲートウェイへ継続的にpingを投げて学習させる● br0に直接eth0, eth1を接続してSTPを利用する● bondingをbroadcast(mode=3)で行う(同一パケットが複数流れます)
?
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。98
ブリッジとSTPによるactive-backup
eth0とeth1の両方をブリッジに接続する STPを無効にしているとループが発生してしまいます
● br0と関係するスイッチでSTPが有効になっていることを確認する
STPによりどちらか片方の経路だけが有効になります
ホスト環境
eth0 VMvnet0 - eth0
br0eth1
SW
SW
target
99Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
KVMでのメモリの取り扱いと応用技術
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。100
KVMのメモリ・イメージ
ユーザプロセスで確保したメモリを仮想マシンの物理メモリとして利用→ x86 32bitだとプロセスが最大3GBしかメモリを扱えないため、仮想マシンにたかだか2GBくらいしか割り当てられない
Linux
確保したメモリ
QEMUプロセス仮想マシンの物理アドレス空間
mapping
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。101
メモリの有効活用
通常のlinuxプロセスと同じ技術● over commit
●実際に割りあてるメモリをあらかじめ確定していなくても割り当てる仕組み
●実際にページが逼迫するとキャッシュの破棄や暇なページのswap outにより対応
●過剰なover commitはOOM-Killerが発生するため危険● swap
●KVMに割り当てたページであってもswap outできる KVMに特有または仮想化にマッチする技術
● Kernel Samepage Merging (KSM)●同一内容のページを1つの物理ページに集約
● memory ballooning●balloon driverによりゲストOSからメモリを開放
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。102
Kernel Samepage Merging
複数VMをまたいで同一内容のページを1物理ページに集約
asdlkajsdfasdfjflkajasdlkjsdfalakpsjdflaasdkjasdlfasdfkajsdfadspfadfweasdfffasdfasdfffasdfasdfffasdfmmmmasdfeefffffggfff
sdflkajsdffalksflkajaalkjswdfalajghbdflaasdflasdlfasdlfkjsdfagggdsfaweasdfffasdfasdfasdfddasdfasdddfmmmmasdfeeffffffffff
asdfkajsdfasdfallkajasdfakjdfalaksjdfhlaasdfjasdlfasdfkajsdfadfadfbbwebbasdfbbccbbasdffbbcasdfffasdfmmmmasdfeeffbbffffff
aflnkajsdfasdfjflkajakjsfffdfalaksjdfgelaflakjasdlfqmmmmasdfeedsfadvbfweasdfffasdfasdfffasdfasdfffasdfasdfeeeeeefffffaafff
ハードウェアの物理メモリ
VM1 VM4VM3VM2
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。103
memory ballooning
RHEL5.5より対応 ホストOSが効率良く管理できるようにゲストOSからヒントを出
す balloon driverによりゲストOS内でメモリの一部を確保 サイズの自動調整は未実装
●手動で明示的にサイズを指示する必要がある
VM1 VM4VM3VM2
balloonballoon
balloon
balloon
balloon
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。104
HugePageとは?
4kBのページ512個を2MBのページ1個で代替 DB, Java VM, KVMなど多量のメモリを消費する場合に有効
なチューニング。RHEL5でも利用可能 何が起きるの?
● TLBの消費量減少● TLBのミスヒット率減少
何が嬉しいの?● ミスヒットが減ることでメモリアクセスの性能が向上
何故常に使われていないの?●起動時にあらかじめメモリを確保する必要がある● HugePageでない通常の4kBメモリとして利用できない
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。105
Transparent Huge Page
利点: 事前の準備や設定なしにHugePage を利用できる● カーネルが自動的に普通のページをHugePageにまとめる
VMごとの個別設定は不要● デフォルトで有効● /sys/kernel/mm/redhat_transparent_hugepage以下で設定
可能● /proc/meminfo 内の AnonHugePages の欄で現在の利用量を確認可
# grep AnonHugePages /proc/meminfo AnonHugePages: 632832 kB
欠点● 2MB連続のページを確保するためにページ移動が行われる
●CPU時間のオーバヘッド●全てHugePageを利用する保証はない
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。106
Performance – RHEL6 B2 Linux Intel EXSpecjbb Java – Huge/Transparent Huge Pages
4cpu 8cpu 16cpu0
50
100
150
200
250
300
350
100.0%
105.0%
110.0%
115.0%
120.0%
RHEL5.5 /6 SPECjbb Scaling Intel EX
RHEL5.4
RHEL6 B2
RHEL5 Huge
RHEL6 Huge
R6 vs R5
bops
(k)
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。107
ライブマイグレーション
仮想マシンを物理的なマシン間で移動するには?● メモリ状態、I/O状態、VCPU状態を転送する● メモリが一番大きいため、メモリコピー時間が支配的
サービス停止時間を短くするための工夫1. メモリをコピー中に変更されたメモリを追跡2. 変更された差分だけをまたコピーする3. 1, 2 を予想転送時間が十分短くなるまで繰り返す
Linux Linux
QEMU
VM
QEMU
VMコピー
移動元 移動先
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。108
ライブマイグレーションのしくみ
Linux Linux
QEMU
VM
QEMU
VM
1: 移動先でQEMU起動、メモリ確保
Linux Linux
QEMU
VM
QEMU
VM
2: メモリをコピー(予想転送時間≦30msまで)
Linux Linux
QEMU
VM
QEMU
VM
3: 移動元を止めてメモリとI/O状態をコピー
Linux Linux
QEMU
VM
QEMU
VM
4: 移動先で動作開始、移動元を破棄
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。109
ライブマイグレーションの注意点
メモリ転送がいつまでも終了しない可能性があります● メモリへの書き込みが多い作業
●古典的なCGI(たくさんのforkにともなうコピー)●データ更新の多いデータベース
● ワークアラウンド●許容される転送時間を長く設定する●キャンセルして「ライブでない」マイグレーションを行う
メモリの書き換え状況によるためライブマイグレーションの振る舞いの予測は困難です● 必要な時間は負荷や転送速度により変わります● トータルの転送量がダイナミックに決まります● いつ終了するかの予想は基本的におこなえません
110Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
その他のデバイス
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。111
ディスプレイ、キーボード、マウス
モデル● VESA BIOS● PS/2キーボード● PS/2マウス● USB接続のタブレット
バックエンド● VNCによる接続● SPICEによる接続● SPICEはVNCに比較すると以下の点がよい
●消費するネットワーク帯域が少ない●複数ディスプレイの取扱いが可能●キーボードマップの事前指定が不要●画面表示だけでなくUSBや音声入出力を転送可能
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。112
時計
ゲストOSとしてRHEL5.4以降を使うとpvclockを利用できる● 設定は不要(TSCを利用しているように見える)●ホスト側のTSCとオフセットを利用して安定した時計を提供
pvclockの制限●ホストのTSCが安定していることに依存している
ホストTSC安定の確認● /proc/cpuinfo内で constant_tsc フラグを確認
pvclock使用不可時のワークアラウンド● ”notsc” のようなカーネルオプションをつける
●Virtualization Guide内にバージョン毎のオプションあり● “lpj=n” というオプションはnにホストのdmesg中に出力され
る値を設定する● 例: "Calibrating delay loop (skipped), value calculated using timer frequency.. 3191.60 BogoMIPS (lpj=1595803)"
113Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
virtio
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。114
virtio
仮想化環境でゼロ・コピーI/Oを実装するためのフレームワーク● KVMだけでなくlguest, VirtualBoxなどでも利用される● OASISで標準化へ向けてとりくみ中
仮想化環境がVMのメモリを参照できる前提● オペレーションの共有
●I/O命令によるトラップをなくすことで高速化● 実際のデータの共有
●オペレーションに対応するデータも共有● データ本体のコピーが発生しない
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。115
KVMのメモリ・イメージ(virtio使用時)
linux
I/Oリクエストバッファ
DMA転送
入出力データ
QEMUプロセス
デバイスドライバ
read/write
仮想マシンの物理アドレス空間
I/Oリクエストバッファ入出力データ
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。116
vhost-net
virtio-netをホストLinuxカーネル内で実装● qemu-kvmのスレッドではなくカーネルスレッドが処理● I/O毎にシステムコール呼出を削減
●レイテンシの低下●CPU消費の低下
RHEL6.1から有効 /etc/sysconfig/modules/kvm.modules で起動時にvhost_net
カーネルモジュール読み込み●→/dev/vhost-net デバイス作成
libvirtdが起動時に/dev/vhost-net の存在を検出●ゲストのNICモデルがvirtioの場合は自動的に利用
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。117
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。118
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。119
virtio-serial
シリアルデバイスもvirtio対応になっています 最悪でバイト毎にio命令が発行されるので仮想化環境では高負荷になりうる● 例: 115200bpsのシリアルポート→14400バイト/s→1バイト〜16バイト毎に割り込みが入るので→毎秒900+回の割り込み処理
virtio-serialでは共有メモリ上のリングバッファを利用
qemu guest agentはこのvirtio-serial経由をホスト-ゲスト間通信路として用いる
120Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
メモリ管理の仮想化のしくみ
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。121
OSのメモリ管理
プロセスそれぞれの仮想アドレスと物理アドレスを対応づける
変換表
変換表
変換表
変換表
プロセスA プロセスB プロセスC プロセスD
物理メモリ
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。122
メモリ管理の仮想化対応
「仮想アドレス」とは?● プロセスごとに持つ固有のアドレス空間
●プロセス同士が同じアドレスを使っても競合しない●実際のハードウェアで搭載されるメモリ量に制約されな
い 「OSのメモリ管理」は何をやっているか?
● プロセスに見せるアドレス(仮想アドレス)から物理的なメモリのアドレス(物理アドレス)への変換
OSは何を管理するか?● 「仮想アドレス→物理アドレス」の変換表を管理している
●プロセス作成・終了時の変換表作成・削除●メモリ割り当て・解放時の変換表書き換え
● CPUが変換表を自動的に参照してアドレス変換をおこなう 仮想化環境ではゲストOSは真の物理アドレスがわからない
● ハイパーバイザでの対応が必要
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。123
普通のハードウェア&OSでは……
プロセス毎にOSが変換表を管理 x86ではページテーブルとよばれるデータ構造が変換表とな
る CPUが仮想アドレスを参照するたびにページテーブルを参照
して物理アドレスに変換する
CR3
Page Table仮想アドレス 物理アドレス
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。124
CR3
EPT以前(shadow page table)
ゲストOSが管理するページテーブルをそのまま利用できない●ゲストOSは「仮想物理アドレス」しか把握していない
KVMがゲストOSのページテーブルを元にシャドウページテーブルを作成● シャドウページテーブルは「仮想アドレス→物理アドレス」の表
CR3
仮想アドレス(OSが仮想化で騙されているので)仮想物理アドレス
shadowPage Table
物理アドレス
KVMがページテーブルの更新を監視・変換・反映してメンテナンス
Page TableVM
hypervisor
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。125
EPT/NPTを利用したアドレス変換
仮想物理アドレスを物理アドレスに変換するページテーブル(EPT/NPT)を導入● ハイパーバイザが管理● 仮想マシン1台に1セットあればよいのでshadow PTより省
メモリ ゲストOSが管理するページテーブルをそのまま利用
CR3
Page Table仮想アドレス (OSが仮想化で騙されているので)仮想物理アドレス
EPTPage Table
EPT base pointer
物理アドレス
VM
hypervisor
126Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
KVMによるCPUの仮想化のしくみ
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。127
QEMU
PCをはじめとした各種ハードウェアのエミュレータ 2003年から開発 多種のOS、ハードウェアで動作 各種H/Wのエミュレーションを実行
●命令を動的に変換することで他CPUの動作をエミュレーション
● x86、x86_64、IA64、ARM、SPARC、PPC、MIPS
● CPU, PCIコントローラ, NIC, IDEコントローラ, シリアル, USB, ビデオカード etc.
通常のユーザプロセスとして動作 仮想マシンは基本的に1命令ごとに処理
ハードウェア
QEMU
仮想マシン
Linux / *BSD / Mac / Win etc.
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。128
センシティブ命令
実行したり実行前後の状況を調べると「普通のハードと違う!」と気付けてしまう命令全般● 仮想マシン内でのセンシティブ命令を"うまくごまかす"こと
で仮想化環境を実装する x86系CPUではセンシティブ命令が特権命令のサブセットで
はない
センシティブ命令をフックするためのCPUの拡張機能● Intel VT-x, AMD AMD-V
特権命令 センシティブ命令
命令全体
特権命令
センシティブ命令
命令全体
こうだと簡単なのに…… x86アーキテクチャは特権保護だけでは不足
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。129
VMX non-rootオペレーションモードVMX rootオペレーションモード
VT-x / AMD-Vとリングプロテクション
従来のリングプロテクションとVMXによる保護は直交する
リング3リング3
リング2リング2
リング1リング1
リング0リング0
プロセスプロセス プロセスプロセスプロセスプロセス プロセスプロセス プロセスプロセスプロセスプロセス
ゲストOSゲストOS
システム・コール システム・コール
LinuxカーネルLinuxカーネル
センシティブ命令の実行
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。130
ハードウェア
KVMによるQEMUの高速化
ハードウェア
QEMU
仮想マシン
linux
handler
linux
KVM
仮想マシンqemu-kvm
handler
命令全般 通常命令 センシティブ命令
システムコール等
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。131
高速なQEMUとしてのKVM環境
ゲストの制限● CPUが直接実行できるアーキテクチャだけに対応
実行を管理するのはLinuxカーネル 事前の命令スキャンは不要
●通常の命令は直接実行●特殊な命令はQEMU/KVMへ
制御はQEMUから行う
仮想マシン割り当て用メモリ
ハードウェア
QEMU
仮想マシン
Linux
KVM
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。132
/dev/kvm
KVMへのインタフェースになる特殊デバイス● ioctl()で様々な機能提供→KVMのためだけの新しいシステムコールは不要→マージされやすい
●新しい仮想マシンの作成● 仮想マシンへのメモリ割り当てのリクエスト● 仮想CPUのレジスタの読み書き● 仮想CPUへの割り込み挿入● 仮想CPU実行開始● I/Oハンドラの登録
QEMUがKVMを呼ぶ時にはこのファイルを利用
仮想マシン割り当て用メモリ
ハードウェア
QEMU
仮想マシン
LinuxKVM
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。133
kvmのVM実行はuser時間として計算される
仮想マシンで計算負荷を発生させる●yes > /dev/null 等
ホスト上のtopで実行時間を見ると → user時間が大きい VM実行時間はホスト側ではどう見えるか?
● RHEL5ではsystem時間としてカウント● RHEL6ではuser時間としてカウント
QEMU
kernel
VM
user時間 user時間
ioctlでvcpu実行を依頼
KVMがVMのコンテキストに切り替え
時間VM実行中
user時間(RHEL6) / sys時間(RHEL5)
sys sys
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。134
Linuxの動作モード
ユーザ・モード●特権命令は実行不可能●特権命令を実行した場合
●CPUがトラップしてカーネルへジャンプ●使用例
●不正な命令を実行●システム・コール呼び出し●割り込み処理
カーネル・モード● あらゆる命令を実行可能
プロセス
Linux kernel
user
kernel
jump
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。135
KVMが追加する動作モード
ゲスト・モード● センシティブ命令は実行不可能● センシティブ命令を実行した場合
●CPUがトラップしてカーネルへジャンプ
●CPUのIntel VT-x、AMD AMD-V機能を利用してトラップ
●使用例●ゲストOSがセンシティブ命令を
実行しようとした場合●I/O、特権命令等
●割り込み処理●VM実行中に他のVMやプロ
セスへの割り込みがくるかもしれない
VM
Linux kernel
guest
kerneljump
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。136
KVMの動作
qemu-kvm● /dev/kvmを利用
●ゲストOSを初期化●各種ハンドラの登録●ゲストOSを実行
ゲストOSの遷移● ユーザ・モード、カーネ
ル・モード、ゲスト・モードの間で遷移
出典:『kvm: the Linux Virtual Machine Monitor』
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。137
KVMの動作(続き)
出典:『kvm: the Linux Virtual Machine Monitor』
QEMUによるデバイス・エミュレーション
「何も知らない」ゲストOSの
世界
センシティブ命令の実行や割り込み(I/O実行終了)など
I/O終了後、ゲストに制御を
戻す
QEMUと仮想マシンの間の切り替えをKVMが行っています
138Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
セキュリティの改善
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。139
sVirt
qemu-kvmはqemuユーザで実行されている●全てのVMで同じユーザ● QEMU/KVMに脆弱性がある場合VM間の分離がない
sVirt: VM同士をSELinuxで分離● qemu-kvm(qemuユーザ)の権限で任意コマンド実行可能に
なっても他VMへの影響を防ぐ● libvirtが自動設定するので追加設定は最小限
実装: libvirtがVM起動時にSELinuxのラベルを自動設定● qemu-kvm プロセス● 仮想ディスクイメージのバックエンド
設定方法: SELinuxをenforcingで有効にしておくだけ
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。140
sVirtで何を守るのか?
仮想ディスクのバックエンド
仮想ディスクのバックエンド
QEMU QEMU
VM VM
qemu/kvmに未知の脆弱性
qemu権限で任意コード
実行
他のQEMUプロセスへ攻撃
他VMの仮想ディスク読み書き
SELinuxで攻撃を予防
141Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
KVMユーザ事例
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。142
InternetInternet
クラウド型サービスとして、お客さまはロケーションを意識することなく、サーバーリソースをネットワーク経由で利用可能
リソース補完収容変更
VPNVPN
社内LAN
■オンデマンド ・必要な時に必要な量の サーバーリソースを利用可 ・柔軟なリソース変更も可能
■複数ロケーションによるクラウド型サービス提供・NWバックボーンに直結したクラウド基盤
KVMKVM KVMKVM
KVMKVM
NTTコミュニケーションズ様 クラウドコンピューティングサービス
Bizホスティング ベーシック
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。143
IBMクラウドサービスのプラットフォームとしてRHEV採用
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。144
KVM 利用事例
パブリッククラウド基盤●NTTコミュニケーションズ Bizホスティングベーシック●大手テレコムベンダ● IBM Smart Business Cloud
プライベートクラウド基盤● US Defense Information System Agency(国防総省の後方
支援組織)● DreamWorks●自治体クラウド実証環境●大手警備保障会社●大手精密機器メーカ●大手通信機器メーカ●大手ソーシャルネットワークプロバイダ●大手携帯コンテンツプロバイダ
145Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。
関連サービスのご案内
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。146
Red Hat Training
KVM Workshop ● Red Hat Enterprise Linux上での基本的な仮想化に対する
理解を深めます。● Red Hat Enterprise Linux上で各種ツールを使用して仮想
マシンの作成・管理・マイグレーションの方法を学習します。
RH318 RedHat Enterprise Virtualization● KVMを利用した統合仮想化管理ソフトであるRedHat
Enterprise Virtualizationの技術を導入、管理するために必要な知識とスキルを身につけます。
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。147
Red Hat Consulting
Remote Technical Assistance● OSSの専門家によるスピーディなQ&A対応●コードリーディングによる実装確認やトラブル原因解析● タイム&マテリアルによる時間ベース契約
カスタムトレーニング「KVMスタートアップ」● 本資料を用いた座学形式のKVMについてのトレーニング
カスタムトレーニング「カーネルエッセンシャル」● KVMのベースとなっているlinuxカーネルの概要を運用管
理者向けにトレーニング