147
Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 Red Hat Enterprise Linux 6 KVMによる仮想化 Red Hat K.K. Solution Architect: Kazuo Moriwaka <[email protected]> V2.3: 29th Jul. 2013

RHEL6 KVMによる仮想化

Embed Size (px)

DESCRIPTION

RHEL6のKVMによる仮想化の解説 この資料は以前RHEL5ベースでおこなっていた「KVMスタートアップ」の資料をRHEL6.1対応にしたものです。

Citation preview

Page 1: RHEL6 KVMによる仮想化

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

Page 2: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。2

この資料の位置づけと宣伝

この資料はRHEL6に同梱されるKVMによる仮想化について解説しています。KVMを活用するために必要な知識をまとめて提供しています。● 基本的な利用方法● 設定ファイルやログファイルなどの配置● 設定可能な項目の紹介● 適切な設定項目を選択するために必要な背景知識● KVMの実装の簡単な紹介

レッドハットでは「KVMスタートアップ」という一社研修を開催しています。本資料はその研修で利用する資料です。

この資料を利用した一社研修サービスを提供していますご興味のある方はお問いあわせください● 問い合わせ先は次ページにてご案内しております

Page 3: RHEL6 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]

Page 4: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。4

アジェンダ

KVMって何? RHELでのKVM利用 仮想マシンのインストール 仮想マシン構成変更 KVMのモデルとバックエンド

● CPU● ディスク● ネットワーク● メモリ● その他● virtio

メモリ管理の仮想化のしくみ KVMによるCPUの仮想化のしくみ セキュリティの改善 KVMユーザ事例

Page 5: RHEL6 KVMによる仮想化

5Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

KVMって何?

Page 6: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。6

KVMって何?

KVM は何の略?● Kernel-based Virtual Machine

Kernel?● Linuxカーネル● Linuxカーネルに仮想マシン管理機能を追加● Linuxのスケジューラ、メモリ管理、ドライバ、省電力対応な

どをそのまま利用する

CPUの仮想化支援機構を利用する I/Oのエミュレートにユーザランドのプログラム(QEMU)を利用

する

Page 7: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。7

QEMUQEMU

KVM模式図

KVM

QEMU

VMふつうのプロセス

Linux kernel

Hardware

VMVM

Page 8: RHEL6 KVMによる仮想化

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

Page 9: RHEL6 KVMによる仮想化

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

Page 10: RHEL6 KVMによる仮想化

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の対応をそのまま利用 新機能への追従は遅れがち

Page 11: RHEL6 KVMによる仮想化

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

Page 12: RHEL6 KVMによる仮想化

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/

Page 13: RHEL6 KVMによる仮想化

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

Page 14: RHEL6 KVMによる仮想化

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

● カスタマポータル内●→ナレッジ●→リファレンスアーキテクチャ

Page 15: RHEL6 KVMによる仮想化

15Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

RHELでのKVM利用

Page 16: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。16

KVMのインストール

インストーラでVirtual Hostを選択

Page 17: RHEL6 KVMによる仮想化

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の資源使用量表示など

Page 18: RHEL6 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接続する単機能のビューア

Page 19: RHEL6 KVMによる仮想化

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関連ソフトウェア

Page 20: RHEL6 KVMによる仮想化

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

Page 21: RHEL6 KVMによる仮想化

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

Page 22: RHEL6 KVMによる仮想化

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

Page 23: RHEL6 KVMによる仮想化

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 <フォーマット名> <イメージファイル名>

Page 24: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。24

virt-top(RHEL6.0〜)

top風の統計情報表示 同情報のCSV形式での出力 表示情報

● CPU使用量● block I/Oのリクエスト数、転送バイト数● network I/Oのパケット数、転送バイト数

Page 25: RHEL6 KVMによる仮想化

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/

Page 26: RHEL6 KVMによる仮想化

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

Page 27: RHEL6 KVMによる仮想化

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指定でこのファイルを指定する

Page 28: RHEL6 KVMによる仮想化

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モードで出力されているので詳細

Page 29: RHEL6 KVMによる仮想化

29Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

仮想マシンのインストール

Page 30: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。30

virt-managerによるゲストOSのインストール

複雑な構成は組めないが典型的なケースを簡便に実行できる

仮想マシンの作成● システム名称を設定● 仮想化の方法を選択

●KVMでは完全仮想化のみ● インストール方法を選択● インストール元を選択

●ISO,http,ftp,NFS等を選択可

Page 31: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。31

virt-managerによるゲストOSのインストール(続き)

仮想マシンの作成(続き)● ストレージの設定● ネットワークの設定● メモリとCPUの設定● 仮想マシンが起動●通常のハードウェアと同様に

インストール

Page 32: RHEL6 KVMによる仮想化

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

Page 33: RHEL6 KVMによる仮想化

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

Page 34: RHEL6 KVMによる仮想化

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”

Page 35: RHEL6 KVMによる仮想化

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 とコマンド入力して仮想化環境のプロファイルを設定する

Page 36: RHEL6 KVMによる仮想化

36Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

仮想マシン構成変更

Page 37: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。37

virt-managerによる仮想ハードウェア構成変更

各仮想マシンの「詳細」タブで設定● 変更内容は次の起動時から反映

CPU メモリ ディスク(HDD, CD/DVD) NIC マウス ディスプレイ シリアル

Page 38: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。38

virshによる仮想ハードウェア構成変更

virsh edit <仮想マシン名>● 仮想マシン定義ファイルを読みこんだエディタが起動● 内容変更●保存終了●確認後問題がなければlibvirtdが読み込み

設定ファイルを直接変更しても自動的に反映されない点に注意● 変更後に virsh define による定義読み込みで反映可能

Page 39: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。39

libvirtの設定管理

libvirtdが実際に参照する設定はメモリ上にあるもの

/etc/libvirt以下の設定は起動時に読み込み、変更時に書き出される

「仮想マシンの起動」「設定の読み込み」など一部の操作によりlibvirtdは設定の一部を自動生成し、設定に反映する● addressタグ, uuidタグ,

consoleタグなど

libvirtd

xml

/etc/libvirt/

起動時に読み込み

メモリ中の設定

変更時に書き出し

define

dumpxml/edit

自動書換え

Page 40: RHEL6 KVMによる仮想化

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のデフォルトパスワード等の設定

ストレージ設定

Page 41: RHEL6 KVMによる仮想化

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か?

Page 42: RHEL6 KVMによる仮想化

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内で割り当てられたアドレスを維持する

Page 43: RHEL6 KVMによる仮想化

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によるグラフィカルコンソール

Page 44: RHEL6 KVMによる仮想化

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)

Page 45: RHEL6 KVMによる仮想化

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はどれか?

Page 46: RHEL6 KVMによる仮想化

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がデバイスの追加・削除に対応している必要がありま

Page 47: RHEL6 KVMによる仮想化

47Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

KVMのモデルとバックエンド

Page 48: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。48

KVMのモデルとバックエンド

CPU ディスク ネットワーク メモリと応用技術 その他のデバイス virtio

Page 49: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。49

KVM

Virtual Machineと物理サーバ

仮想マシン上のゲストOSは物理サーバのリソースをいきなり扱えません

仮想マシン上の「仮想ハードウェア」に見せかせる必要があります

いくつか手法がありますが一長一短● PCIデバイスをゲストOSへ割り当て

●デバイスの全機能を高速に利用●デバイスが占有され、migrationもできない

● 実際のデバイスをエミュレート●ゲストOSの対応が期待できる●エミュレートは高負荷

● 仮想化専用のインタフェース●エミュレートのオーバーヘッドが低

いようにプロトコルを設計●未対応OSでは利用不可

ゲストOS

仮想ハードウェア(モデル)

バックエンド

QEMU

Linux

バックエンド処理

ハードウェア

Page 50: RHEL6 KVMによる仮想化

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モデル以外はほとんど大きな違いはない● バグ修正による細かな動作の違いを補正

Page 51: RHEL6 KVMによる仮想化

51Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

CPU

Page 52: RHEL6 KVMによる仮想化

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)” のようになります。

Page 53: RHEL6 KVMによる仮想化

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の指定

& =

Page 54: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。54

cgroups(RHEL6.0〜)

linuxに新しく登場したリソース管理の仕組み タスクのグループごとに資源を与える グループに参加するタスクは任意に指定可能 サブプロセスもデフォルトで同一グループ 利用方法:

● /cgroup/* をマウント(libcgroupによる)● blkio, cpu, cpuacct, cpuset, devices, freezer, memory,

net_cls● この下にディレクトリを作成するとグループを作成

Page 55: RHEL6 KVMによる仮想化

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)でのみ利用

Page 56: RHEL6 KVMによる仮想化

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(デフォルト) : :

Page 57: RHEL6 KVMによる仮想化

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する

メモリ メモリ

Page 58: RHEL6 KVMによる仮想化

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数に影響されるため有用

Page 59: RHEL6 KVMによる仮想化

59Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

ディスク

Page 60: RHEL6 KVMによる仮想化

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

フォーマット処理

Page 61: RHEL6 KVMによる仮想化

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 << デバイス

Page 62: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。62

バックエンドをファイルにする場合の注意

● linuxのファイルシステムは事実上4kB単位でファイルを読み書きします●読み書きをする論理的なブロックと実際のアクセスをお

こなうブロックがずれるとI/Oの効率が落ちます● セクタサイズが4kBのHDDを利用する場合と同様の条件に

なりますが、仮想マシン上ではセクタサイズが512バイトに見えます

●パーティションの開始位置に注意が必要です

ゲストOSのFS ← 4kB →

ホストOSのFS ← 4kB →

Page 63: RHEL6 KVMによる仮想化

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が混在するためシーク動作が多く発生し、待ち時間が長くなる

Page 64: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。64

ブロックデバイスのcache設定

RHEL6のlibvirtではキャッシュ指定ができます none

●ホストではキャッシュしない● RHEL5と同等。デフォルト設定。サポート対象

writethrough●ホスト側とゲスト側で重複してキャッシュする

●メモリが逼迫するとキャッシュしない方が速い● サポート対象

writeback● サポート対象外●ホストのキャッシュへ書きだして書き込み完了とする●高速だがディスク上の整合性を保証できない

Page 65: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。65

Page 66: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。66

差分イメージファイル

ベースとなるディスクイメージからの差分だけを保持する● qcow2フォーマットの機能

読み込み:●差分イメージにあれば差分イメージから読み込む● なければベースイメージから読み込む

書き込み: 差分イメージにディスク領域を確保してベースイメージからコピーしたのち書き込み

差分イメージベースイメージ

read

read

write

write

?

copy

Page 67: RHEL6 KVMによる仮想化

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

Page 68: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。68

仮想ディスクの注意点

IDEモデルを利用する場合のタイムアウト● linuxでIDEドライブにタイムアウト(10sec)が発生するとPIO

モードになり、非常に遅くなります● バックエンドのマルチパスフェイルオーバなどで発生します

I/Oスケジューラ● どのスケジューラが適切かは負荷によりますが、ホスト側ゲスト側ともにdeadlineとすることでベンチマーク結果が改善することが知られています

qcow2の既知の問題● RHEL5.5のqcow2の実装には既知のデータ破壊問題があ

ります● RHEL5.6以降またはRHEL6.0以降を利用

Page 69: RHEL6 KVMによる仮想化

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

Page 70: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。70

Page 71: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。71

Page 72: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。72

Page 73: RHEL6 KVMによる仮想化

73Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

ネットワーク

Page 74: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。74

仮想ネットワーク

モデル● 実際にあるNICのエミュレーション

●e1000 -- virtioドライバがない場合e1000が最も軽い●ne2k_pci●pcnet●rtl8139 -- デフォルトのNICはRTL8139。非常に遅いの

で避けるべき● 仮想的なネットワークデバイス

●virtio -- virtio-net ドライバが必要、最も速い

モデルは実際のNICの正確な反映ではないので、帯域制御などには利用できません● たとえばe1000のエミュレーションを利用しても1Gbpsに帯域が制限されるようなことはありません

Page 75: RHEL6 KVMによる仮想化

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

Page 76: RHEL6 KVMによる仮想化

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

Page 77: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。77

仮想ネットワークと物理ネットワークの接続

仮想マシンに割り当てた仮想NICはQEMUが作成する仮想インタフェース(vnet0 のような名前)に対応づけられる

「仮想インタフェースをどの仮想ブリッジに接続するか?」 をlibvirtで設定

仮想ブリッジの設定次第で様々な利用が可能

br0

vnet1

vnet0

vnet2

br0

br1

virbr0eth1

eth0

eth2

eth0

iptables

仮想マシンホストLinux

Page 78: RHEL6 KVMによる仮想化

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設定ファイルに追加

Page 79: RHEL6 KVMによる仮想化

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>

Page 80: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。80

仮想マシン間だけでの通信を行う設定 - local

/etc/sysconfig/network-scripts/ifcfg-br1 等で仮想ブリッジを作成するだけ

使用例: 同一マシン上で仮想マシン同士を接続する● 仮想サーバと仮想クライアントの接続→一台で検証環境

● クラスタの検証環境●ハートビート●クラスタ間通信etc.

vnet2

br1

eth2

仮想マシンホストLinux

<source bridge='br1'>

を VM設定ファイルに追加

Page 81: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。81

ホスト起動時: sysconfigの設定によりeth0, br0を作成して接続

仮想マシン作成時、libvirtがトンネルデバイスvnet0作成、接続

QEMUがlibvirtから実行されて仮想インタフェース作成

ネットワーク設定が反映されるタイミング

br0

vnet0

br0

eth0

eth0

仮想マシンホストLinux

br0br0eth0

vnet0

br0br0eth0

Page 82: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。82

ちょっと未来のネットワーク接続

ソフトウェアブリッジの弱点●ソフトウェアブリッジは帯域制御やACLなどの管理機能が使えない

● CPU消費も無視できない●特に接続インタフェースが多い時

ソフトウェアブリッジではなくスイッチで管理する手法● VN-Link(Cisco)● VEPA(Virtual Ethernet Port Aggregator, IEEE802.1Qbg)

●どちらもスイッチに仮想的なポートを作成する技術●VMの仮想NICは非常に多くなりうる(実サーバ1台に100ポートなど)のでこのような技術が必要

●スイッチがこれらの規格に対応している必要があるためまだどこでも利用できる状態ではない

Page 83: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。83

VEPAによる論理的なポート拡張

ether frameにVLANタグとポート識別用のタグを付与 一旦全てのフレームを実NICから外部へ送り出す スイッチはACL, QoS制御などの処理をした上で送信先ポー

トを判定 スイッチは同じポートに対応している場合、そのポートへパ

ケットを送り返す(ヘアピンモード)

VMVM VM

switch

VEPAVEPAによる論理的なポート拡張

Page 84: RHEL6 KVMによる仮想化

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

Page 85: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。85

macvtapのモード

VEPA(Virtual Ethernet Port Aggrigator)●外部スイッチのポートを論理的に増やす技術● VEPA対応スイッチが必要(多くのスイッチは非対応)●全てのフレームを一旦外部のスイッチへ転送してスイッチ

に処理させる● ネットワーク機器の管理機能利用、ホストCPU負荷削減

Private● VEPAと同じだが同一ポートに必ず戻ってくる

Bridge● 同一マシン上のMACであればソフトウェアで転送●ブリッジはVEPAに対応していなくてもよい●通常のソフトウェアブリッジによる実装と同等

Page 86: RHEL6 KVMによる仮想化

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>

フィルタ名

フィルタのパラメータ

Page 87: RHEL6 KVMによる仮想化

87Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

ネットワーク構成例

Page 88: RHEL6 KVMによる仮想化

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

Page 89: RHEL6 KVMによる仮想化

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)が起きるので注意

Page 90: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。90

web

internet

web

app app

db db

仮想化で3層サーバ

net1

net2

net3

何の変哲もない3tier構成

仮想化で1台or2台に集約するとどうなるのか?

Page 91: RHEL6 KVMによる仮想化

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

Page 92: RHEL6 KVMによる仮想化

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

Page 93: RHEL6 KVMによる仮想化

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

Page 94: RHEL6 KVMによる仮想化

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

Page 95: RHEL6 KVMによる仮想化

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

Page 96: RHEL6 KVMによる仮想化

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により実装されています。サーバ全体の設定との競合に注意が必要です。

Page 97: RHEL6 KVMによる仮想化

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)で行う(同一パケットが複数流れます)

Page 98: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。98

ブリッジとSTPによるactive-backup

eth0とeth1の両方をブリッジに接続する STPを無効にしているとループが発生してしまいます

● br0と関係するスイッチでSTPが有効になっていることを確認する

STPによりどちらか片方の経路だけが有効になります

ホスト環境

eth0 VMvnet0 - eth0

br0eth1

SW

SW

target

Page 99: RHEL6 KVMによる仮想化

99Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

KVMでのメモリの取り扱いと応用技術

Page 100: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。100

KVMのメモリ・イメージ

ユーザプロセスで確保したメモリを仮想マシンの物理メモリとして利用→ x86 32bitだとプロセスが最大3GBしかメモリを扱えないため、仮想マシンにたかだか2GBくらいしか割り当てられない

Linux

確保したメモリ

QEMUプロセス仮想マシンの物理アドレス空間

mapping

Page 101: RHEL6 KVMによる仮想化

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からメモリを開放

Page 102: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。102

Kernel Samepage Merging

複数VMをまたいで同一内容のページを1物理ページに集約

asdlkajsdfasdfjflkajasdlkjsdfalakpsjdflaasdkjasdlfasdfkajsdfadspfadfweasdfffasdfasdfffasdfasdfffasdfmmmmasdfeefffffggfff

sdflkajsdffalksflkajaalkjswdfalajghbdflaasdflasdlfasdlfkjsdfagggdsfaweasdfffasdfasdfasdfddasdfasdddfmmmmasdfeeffffffffff

asdfkajsdfasdfallkajasdfakjdfalaksjdfhlaasdfjasdlfasdfkajsdfadfadfbbwebbasdfbbccbbasdffbbcasdfffasdfmmmmasdfeeffbbffffff

aflnkajsdfasdfjflkajakjsfffdfalaksjdfgelaflakjasdlfqmmmmasdfeedsfadvbfweasdfffasdfasdfffasdfasdfffasdfasdfeeeeeefffffaafff

ハードウェアの物理メモリ

VM1 VM4VM3VM2

Page 103: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。103

memory ballooning

RHEL5.5より対応 ホストOSが効率良く管理できるようにゲストOSからヒントを出

す balloon driverによりゲストOS内でメモリの一部を確保 サイズの自動調整は未実装

●手動で明示的にサイズを指示する必要がある

VM1 VM4VM3VM2

balloonballoon

balloon

balloon

balloon

Page 104: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。104

HugePageとは?

4kBのページ512個を2MBのページ1個で代替 DB, Java VM, KVMなど多量のメモリを消費する場合に有効

なチューニング。RHEL5でも利用可能 何が起きるの?

● TLBの消費量減少● TLBのミスヒット率減少

何が嬉しいの?● ミスヒットが減ることでメモリアクセスの性能が向上

何故常に使われていないの?●起動時にあらかじめメモリを確保する必要がある● HugePageでない通常の4kBメモリとして利用できない

Page 105: RHEL6 KVMによる仮想化

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を利用する保証はない

Page 106: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。106

Performance – RHEL6 B2 Linux Intel EXSpecjbb Java – Huge/Transparent Huge Pages

4­cpu 8­cpu 16­cpu0

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)

Page 107: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。107

ライブマイグレーション

仮想マシンを物理的なマシン間で移動するには?● メモリ状態、I/O状態、VCPU状態を転送する● メモリが一番大きいため、メモリコピー時間が支配的

サービス停止時間を短くするための工夫1. メモリをコピー中に変更されたメモリを追跡2. 変更された差分だけをまたコピーする3. 1, 2 を予想転送時間が十分短くなるまで繰り返す

Linux Linux

QEMU

VM

QEMU

VMコピー

移動元 移動先

Page 108: RHEL6 KVMによる仮想化

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: 移動先で動作開始、移動元を破棄

Page 109: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。109

ライブマイグレーションの注意点

メモリ転送がいつまでも終了しない可能性があります● メモリへの書き込みが多い作業

●古典的なCGI(たくさんのforkにともなうコピー)●データ更新の多いデータベース

● ワークアラウンド●許容される転送時間を長く設定する●キャンセルして「ライブでない」マイグレーションを行う

メモリの書き換え状況によるためライブマイグレーションの振る舞いの予測は困難です● 必要な時間は負荷や転送速度により変わります● トータルの転送量がダイナミックに決まります● いつ終了するかの予想は基本的におこなえません

Page 110: RHEL6 KVMによる仮想化

110Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

その他のデバイス

Page 111: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。111

ディスプレイ、キーボード、マウス

モデル● VESA BIOS● PS/2キーボード● PS/2マウス● USB接続のタブレット

バックエンド● VNCによる接続● SPICEによる接続● SPICEはVNCに比較すると以下の点がよい

●消費するネットワーク帯域が少ない●複数ディスプレイの取扱いが可能●キーボードマップの事前指定が不要●画面表示だけでなくUSBや音声入出力を転送可能

Page 112: RHEL6 KVMによる仮想化

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)"

Page 113: RHEL6 KVMによる仮想化

113Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

virtio

Page 114: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。114

virtio

仮想化環境でゼロ・コピーI/Oを実装するためのフレームワーク● KVMだけでなくlguest, VirtualBoxなどでも利用される● OASISで標準化へ向けてとりくみ中

仮想化環境がVMのメモリを参照できる前提● オペレーションの共有

●I/O命令によるトラップをなくすことで高速化● 実際のデータの共有

●オペレーションに対応するデータも共有● データ本体のコピーが発生しない

Page 115: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。115

KVMのメモリ・イメージ(virtio使用時)

linux

I/Oリクエストバッファ

DMA転送

入出力データ

QEMUプロセス

デバイスドライバ

read/write

仮想マシンの物理アドレス空間

I/Oリクエストバッファ入出力データ

Page 116: RHEL6 KVMによる仮想化

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の場合は自動的に利用

Page 117: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。117

Page 118: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。118

Page 119: RHEL6 KVMによる仮想化

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経由をホスト-ゲスト間通信路として用いる

Page 120: RHEL6 KVMによる仮想化

120Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

メモリ管理の仮想化のしくみ

Page 121: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。121

OSのメモリ管理

プロセスそれぞれの仮想アドレスと物理アドレスを対応づける

変換表

変換表

変換表

変換表

プロセスA プロセスB プロセスC プロセスD

物理メモリ

Page 122: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。122

メモリ管理の仮想化対応

「仮想アドレス」とは?● プロセスごとに持つ固有のアドレス空間

●プロセス同士が同じアドレスを使っても競合しない●実際のハードウェアで搭載されるメモリ量に制約されな

い 「OSのメモリ管理」は何をやっているか?

● プロセスに見せるアドレス(仮想アドレス)から物理的なメモリのアドレス(物理アドレス)への変換

OSは何を管理するか?● 「仮想アドレス→物理アドレス」の変換表を管理している

●プロセス作成・終了時の変換表作成・削除●メモリ割り当て・解放時の変換表書き換え

● CPUが変換表を自動的に参照してアドレス変換をおこなう 仮想化環境ではゲストOSは真の物理アドレスがわからない

● ハイパーバイザでの対応が必要

Page 123: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。123

普通のハードウェア&OSでは……

プロセス毎にOSが変換表を管理 x86ではページテーブルとよばれるデータ構造が変換表とな

る CPUが仮想アドレスを参照するたびにページテーブルを参照

して物理アドレスに変換する

CR3

Page Table仮想アドレス 物理アドレス

Page 124: RHEL6 KVMによる仮想化

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

Page 125: RHEL6 KVMによる仮想化

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

Page 126: RHEL6 KVMによる仮想化

126Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

KVMによるCPUの仮想化のしくみ

Page 127: RHEL6 KVMによる仮想化

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.

Page 128: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。128

センシティブ命令

実行したり実行前後の状況を調べると「普通のハードと違う!」と気付けてしまう命令全般● 仮想マシン内でのセンシティブ命令を"うまくごまかす"こと

で仮想化環境を実装する x86系CPUではセンシティブ命令が特権命令のサブセットで

はない

センシティブ命令をフックするためのCPUの拡張機能● Intel VT-x, AMD AMD-V

特権命令 センシティブ命令

命令全体

特権命令

センシティブ命令

命令全体

こうだと簡単なのに…… x86アーキテクチャは特権保護だけでは不足

Page 129: RHEL6 KVMによる仮想化

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カーネル

センシティブ命令の実行

Page 130: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。130

ハードウェア

KVMによるQEMUの高速化

ハードウェア

QEMU

仮想マシン

linux

handler

linux

KVM

仮想マシンqemu-kvm

handler

命令全般 通常命令 センシティブ命令

システムコール等

Page 131: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。131

高速なQEMUとしてのKVM環境

ゲストの制限● CPUが直接実行できるアーキテクチャだけに対応

実行を管理するのはLinuxカーネル 事前の命令スキャンは不要

●通常の命令は直接実行●特殊な命令はQEMU/KVMへ

制御はQEMUから行う

仮想マシン割り当て用メモリ

ハードウェア

QEMU

仮想マシン

Linux

KVM

Page 132: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。132

/dev/kvm

KVMへのインタフェースになる特殊デバイス● ioctl()で様々な機能提供→KVMのためだけの新しいシステムコールは不要→マージされやすい

●新しい仮想マシンの作成● 仮想マシンへのメモリ割り当てのリクエスト● 仮想CPUのレジスタの読み書き● 仮想CPUへの割り込み挿入● 仮想CPU実行開始● I/Oハンドラの登録

QEMUがKVMを呼ぶ時にはこのファイルを利用

仮想マシン割り当て用メモリ

ハードウェア

QEMU

仮想マシン

LinuxKVM

Page 133: RHEL6 KVMによる仮想化

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

Page 134: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。134

Linuxの動作モード

ユーザ・モード●特権命令は実行不可能●特権命令を実行した場合

●CPUがトラップしてカーネルへジャンプ●使用例

●不正な命令を実行●システム・コール呼び出し●割り込み処理

カーネル・モード● あらゆる命令を実行可能

プロセス

Linux kernel

user

kernel

jump

Page 135: RHEL6 KVMによる仮想化

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

Page 136: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。136

KVMの動作

qemu-kvm● /dev/kvmを利用

●ゲストOSを初期化●各種ハンドラの登録●ゲストOSを実行

ゲストOSの遷移● ユーザ・モード、カーネ

ル・モード、ゲスト・モードの間で遷移

出典:『kvm: the Linux Virtual Machine Monitor』

Page 137: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。137

KVMの動作(続き)

出典:『kvm: the Linux Virtual Machine Monitor』

QEMUによるデバイス・エミュレーション

「何も知らない」ゲストOSの

世界

センシティブ命令の実行や割り込み(I/O実行終了)など

I/O終了後、ゲストに制御を

戻す

QEMUと仮想マシンの間の切り替えをKVMが行っています

Page 138: RHEL6 KVMによる仮想化

138Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

セキュリティの改善

Page 139: RHEL6 KVMによる仮想化

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で有効にしておくだけ

Page 140: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。140

sVirtで何を守るのか?

仮想ディスクのバックエンド

仮想ディスクのバックエンド

QEMU QEMU

VM VM

qemu/kvmに未知の脆弱性

qemu権限で任意コード

実行

他のQEMUプロセスへ攻撃

他VMの仮想ディスク読み書き

SELinuxで攻撃を予防

Page 141: RHEL6 KVMによる仮想化

141Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

KVMユーザ事例

Page 142: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。142

InternetInternet

クラウド型サービスとして、お客さまはロケーションを意識することなく、サーバーリソースをネットワーク経由で利用可能

リソース補完収容変更

VPNVPN

社内LAN

■オンデマンド ・必要な時に必要な量の  サーバーリソースを利用可 ・柔軟なリソース変更も可能

■複数ロケーションによるクラウド型サービス提供・NWバックボーンに直結したクラウド基盤

KVMKVM KVMKVM

KVMKVM

NTTコミュニケーションズ様 クラウドコンピューティングサービス

Bizホスティング ベーシック

Page 143: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。143

IBMクラウドサービスのプラットフォームとしてRHEV採用

Page 144: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。144

KVM 利用事例

パブリッククラウド基盤●NTTコミュニケーションズ Bizホスティングベーシック●大手テレコムベンダ● IBM Smart Business Cloud

プライベートクラウド基盤● US Defense Information System Agency(国防総省の後方

支援組織)● DreamWorks●自治体クラウド実証環境●大手警備保障会社●大手精密機器メーカ●大手通信機器メーカ●大手ソーシャルネットワークプロバイダ●大手携帯コンテンツプロバイダ

Page 145: RHEL6 KVMによる仮想化

145Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。

関連サービスのご案内

Page 146: RHEL6 KVMによる仮想化

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の技術を導入、管理するために必要な知識とスキルを身につけます。

Page 147: RHEL6 KVMによる仮想化

Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。147

Red Hat Consulting

Remote Technical Assistance● OSSの専門家によるスピーディなQ&A対応●コードリーディングによる実装確認やトラブル原因解析● タイム&マテリアルによる時間ベース契約

カスタムトレーニング「KVMスタートアップ」● 本資料を用いた座学形式のKVMについてのトレーニング

カスタムトレーニング「カーネルエッセンシャル」● KVMのベースとなっているlinuxカーネルの概要を運用管

理者向けにトレーニング