RHEL6 KVMによる仮想化

  • 28,917 views
Uploaded on

RHEL6のKVMによる仮想化の解説 …

RHEL6のKVMによる仮想化の解説

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
28,917
On Slideshare
0
From Embeds
0
Number of Embeds
7

Actions

Shares
Downloads
621
Comments
0
Likes
57

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 Red Hat Enterprise Linux 6 KVMによる仮想化 Red Hat K.K. Solution Architect: Kazuo Moriwaka <kmoriwak@redhat.com> V2.3: 29th Jul. 2013
  • 2. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。2 この資料の位置づけと宣伝  この資料はRHEL6に同梱されるKVMによる仮想化について 解説しています。KVMを活用するために必要な知識をまとめ て提供しています。 ● 基本的な利用方法 ● 設定ファイルやログファイルなどの配置 ● 設定可能な項目の紹介 ● 適切な設定項目を選択するために必要な背景知識 ● KVMの実装の簡単な紹介  レッドハットでは「KVMスタートアップ」という一社研修を開催 しています。本資料はその研修で利用する資料です。  この資料を利用した一社研修サービスを提供しています ご興味のある方はお問いあわせください ● 問い合わせ先は次ページにてご案内しております
  • 3. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。3 お客様からのお問い合わせ先 レッドハットの製品、サービスに関する ご購入前の一般的なお問い合わせ <サービス時間> 平日9:00〜18:00 セールスオペレーションセンター(SOC) Tel. 0120-266-086 (携帯電話からは03-5798-8510) e-mail: soc-jp@redhat.com
  • 4. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。4 アジェンダ  KVMって何?  RHELでのKVM利用  仮想マシンのインストール  仮想マシン構成変更  KVMのモデルとバックエンド ● CPU ● ディスク ● ネットワーク ● メモリ ● その他 ● virtio  メモリ管理の仮想化のしくみ  KVMによるCPUの仮想化のしくみ  セキュリティの改善  KVMユーザ事例
  • 5. 5 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 KVMって何?
  • 6. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。6 KVMって何?  KVM は何の略? ● Kernel-based Virtual Machine  Kernel? ● Linuxカーネル ● Linuxカーネルに仮想マシン管理機能を追加 ● Linuxのスケジューラ、メモリ管理、ドライバ、省電力対応な どを そのまま利用する  CPUの仮想化支援機構を利用する  I/Oのエミュレートにユーザランドのプログラム(QEMU)を利用 する
  • 7. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。7 QEMUQEMU KVM模式図 KVM QEMU VM ふつうの プロセス Linux kernel Hardware VM VM
  • 8. 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
  • 9. 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 仮想化支援 機能開発 qumra net red hat 2011
  • 10. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。10 KVMとXenの比較 KVM Q E M U V M 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の対応をそのまま利用 新機能への追従は遅れがち
  • 11. 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
  • 12. 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/
  • 13. 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
  • 14. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。14 ドキュメント  製品ドキュメント ● Virtualization Administration Guide ● Virtualization Getting Started Guide ● Virtualization Host Configuration and Guest Installation Guide KVMの設定やゲストのインストールを詳細に記述 http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/index.html  Red Hat Reference Architecture Series 仮想化に限らず各種設定例、ベンチマーク結果などを公開 https://access.redhat.com/knowledge/refarch ● カスタマポータル内 ●→ナレッジ ●→リファレンスアーキテクチャ
  • 15. 15 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 RHELでのKVM利用
  • 16. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。16 KVMのインストール  インストーラでVirtual Hostを選択
  • 17. 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の資源使用量表示など
  • 18. 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接続する単機能のビューア
  • 19. 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関連ソフトウェア
  • 20. 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://root@example.com/system
  • 21. 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
  • 22. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。22 libvirt の “URI” driver[+transport]://[username@][hostname][:port]/[path][?extraparameters]  例 リモートKVM: qemu+ssh://root@example.com/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
  • 23. 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 <フォーマット名> <イメージファイル名>
  • 24. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。24 virt-top(RHEL6.0〜)  top風の統計情報表示  同情報のCSV形式での出力  表示情報 ● CPU使用量 ● block I/Oのリクエスト数、転送バイト数 ● network I/Oのパケット数、転送バイト数
  • 25. 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/
  • 26. 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
  • 27. 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指定でこのファイルを指定する
  • 28. 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モードで出力されているので 詳細
  • 29. 29 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 仮想マシンのインストール
  • 30. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。30 virt-managerによる ゲストOSのインストール  複雑な構成は組めないが 典型的なケースを簡便に実行できる  仮想マシンの作成 ● システム名称を設定 ● 仮想化の方法を選択 ●KVMでは完全仮想化のみ ● インストール方法を選択 ● インストール元を選択 ●ISO,http,ftp,NFS等を選択可
  • 31. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。31 virt-managerによる ゲストOSのインストール(続き)  仮想マシンの作成(続き) ● ストレージの設定 ● ネットワークの設定 ● メモリとCPUの設定 ● 仮想マシンが起動 ● 通常のハードウェアと同様に インストール
  • 32. 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
  • 33. 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
  • 34. 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”
  • 35. 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 とコマンド入力して仮想化 環境のプロファイルを設定する
  • 36. 36 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 仮想マシン構成変更
  • 37. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。37 virt-managerによる仮想ハードウェア構成変更  各仮想マシンの「詳細」タブで設定 ● 変更内容は次の起動時から反映  CPU  メモリ  ディスク(HDD, CD/DVD)  NIC  マウス  ディスプレイ  シリアル
  • 38. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。38 virshによる仮想ハードウェア構成変更  virsh edit <仮想マシン名> ● 仮想マシン定義ファイルを読みこんだエディタが起動 ● 内容変更 ● 保存終了 ● 確認後問題がなければlibvirtdが読み込み  設定ファイルを直接変更しても自動的に反映されない点に注 意 ● 変更後に virsh define による定義読み込みで反映可能
  • 39. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。39 libvirtの設定管理  libvirtdが実際に参照する設定 はメモリ上にあるもの  /etc/libvirt以下の設定は起動 時に読み込み、変更時に書き 出される  「仮想マシンの起動」「設定の読 み込み」など一部の操作により libvirtdは設定の一部を自動生 成し、設定に反映する ● addressタグ, uuidタグ, consoleタグなど libvirtd xml /etc/libvirt/ 起動時に 読み込み メモリ中の 設定 変更時に 書き出し define dumpxml /edit 自動 書換え
  • 40. 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のデフォルトパスワード等の 設定 ストレージ設定
  • 41. 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か?
  • 42. 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 デバイス 元ファイルのパス 何デバイスに見えるか 仮想NIC MACアドレス 接続先ブリッジ 何デバイスに見えるか PCIバスのスロット番号等 VM内で割り当てられた アドレスを維持する
  • 43. 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による グラフィカル コンソール
  • 44. 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)
  • 45. 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はどれか?
  • 46. 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がデバイスの追加・削除に対応している必要がありま す
  • 47. 47 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 KVMのモデルとバックエンド
  • 48. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。48 KVMのモデルとバックエンド  CPU  ディスク  ネットワーク  メモリと応用技術  その他のデバイス  virtio
  • 49. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。49 KVM Virtual Machineと物理サーバ  仮想マシン上のゲストOSは物理サーバ のリソースをいきなり扱えません  仮想マシン上の「仮想ハードウェア」に見 せかせる必要があります  いくつか手法がありますが一長一短 ● PCIデバイスをゲストOSへ割り当て ●デバイスの全機能を高速に利用 ●デバイスが占有され、migrationもで きない ● 実際のデバイスをエミュレート ●ゲストOSの対応が期待できる ●エミュレートは高負荷 ● 仮想化専用のインタフェース ●エミュレートのオーバーヘッドが低 いようにプロトコルを設計 ●未対応OSでは利用不可 ゲストOS 仮想ハードウェア(モデル) バックエンド QEMU Linux バックエンド処理 ハードウェア
  • 50. 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モデル以外はほとんど大きな違いはない ● バグ修正による細かな動作の違いを補正
  • 51. 51 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 CPU
  • 52. 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)” のようになります。
  • 53. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。53 CPUの機能セット(CPUIDの機能フラグ)  物理的なCPUの機能がそのまま利用できるとは限らない ● QEMUでの対応が必要  仮想CPUの機能セット←QEMUで対応 and 物理CPUが機能 提供  サポート機能セットをオプションで指定可能  機能セットを再現できることがマイグレーションの必要条件 ● Intel/AMD間のマイグレーションはサポート対象外 fpu vme pse486 de tsc msr mce cx8 mmxpentium pae sep mtrr ... pentium2 fpu vme pse de tsc msr mce cx8 mmx pae sep mtrr ... 実ハードのCPUID fpu vme pse de tsc msr mce cx8 mmx VCPUのCPUIDQEMUの指定 & =
  • 54. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。54 cgroups(RHEL6.0〜)  linuxに新しく登場したリソース管理の仕組み  タスクのグループごとに資源を与える  グループに参加するタスクは任意に指定可能  サブプロセスもデフォルトで同一グループ  利用方法: ● /cgroup/* をマウント(libcgroupによる) ● blkio, cpu, cpuacct, cpuset, devices, freezer, memory, net_cls ● この下にディレクトリを作成するとグループを作成
  • 55. 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)でのみ利用
  • 56. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。56 cgroups - CPU  virsh schedinfoコマンドでCPUの比率を取得 virsh # schedinfo rhel6_64 Scheduler : posix cpu_shares : 1024  schedinfo --set で比率変更 virsh # schedinfo rhel6_64 --set cpu_shares=100 1 Scheduler : posix cpu_shares : 100 rhel6_64 100 その他 1024(デフォルト) VM-1 1024(デフォルト) : :
  • 57. 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する メモリ メモリ
  • 58. 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 数に影響されるため有用
  • 59. 59 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 ディスク
  • 60. 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 フォーマット処理
  • 61. 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 << デバイス
  • 62. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。62 バックエンドをファイルにする場合の注意 ● linuxのファイルシステムは事実上4kB単位でファイルを読 み書きします ●読み書きをする論理的なブロックと実際のアクセスをお こなうブロックがずれるとI/Oの効率が落ちます ● セクタサイズが4kBのHDDを利用する場合と同様の条件に なりますが、仮想マシン上ではセクタサイズが512バイトに 見えます ● パーティションの開始位置に注意が必要です ゲストOSのFS ← 4kB → ホストOSのFS ← 4kB →
  • 63. 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が混在するため シーク動作が多く発生し、 待ち時間が長くなる
  • 64. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。64 ブロックデバイスのcache設定  RHEL6のlibvirtではキャッシュ指定ができます  none ● ホストではキャッシュしない ● RHEL5と同等。デフォルト設定。サポート対象  writethrough ● ホスト側とゲスト側で重複してキャッシュする ●メモリが逼迫するとキャッシュしない方が速い ● サポート対象  writeback ● サポート対象外 ● ホストのキャッシュへ書きだして書き込み完了とする ● 高速だがディスク上の整合性を保証できない
  • 65. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。65
  • 66. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。66 差分イメージファイル  ベースとなるディスクイメージからの差分だけを保持する ● qcow2フォーマットの機能  読み込み: ● 差分イメージにあれば差分イメージから読み込む ● なければベースイメージから読み込む  書き込み: 差分イメージにディスク領域を確保してベースイメージ からコピーしたのち書き込み 差分イメージ ベースイメージ read read write write ? copy
  • 67. 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
  • 68. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。68 仮想ディスクの注意点  IDEモデルを利用する場合のタイムアウト ● linuxでIDEドライブにタイムアウト(10sec)が発生するとPIO モードになり、非常に遅くなります ● バックエンドのマルチパスフェイルオーバなどで発生します  I/Oスケジューラ ● どのスケジューラが適切かは負荷によりますが、ホスト側 ゲスト側ともにdeadlineとすることでベンチマーク結果が改 善することが知られています  qcow2の既知の問題 ● RHEL5.5のqcow2の実装には既知のデータ破壊問題があ ります ● RHEL5.6以降またはRHEL6.0以降を利用
  • 69. 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 guest Intel 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
  • 70. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。70
  • 71. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。71
  • 72. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。72
  • 73. 73 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 ネットワーク
  • 74. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。74 仮想ネットワーク  モデル ● 実際にあるNICのエミュレーション ●e1000 -- virtioドライバがない場合e1000が最も軽い ●ne2k_pci ●pcnet ●rtl8139 -- デフォルトのNICはRTL8139。非常に遅いの で避けるべき ● 仮想的なネットワークデバイス ●virtio -- virtio-net ドライバが必要、最も速い  モデルは実際のNICの正確な反映ではないので、帯域制御 などには利用できません ● たとえばe1000のエミュレーションを利用しても1Gbpsに帯 域が制限されるようなことはありません
  • 75. 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
  • 76. 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 vnet20 vnet10
  • 77. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。77 仮想ネットワークと物理ネットワークの接続  仮想マシンに割り当てた仮想NICはQEMUが作成する 仮想インタフェース(vnet0 のような名前)に対応づけられる  「仮想インタフェースをどの仮想ブリッジに接続するか?」 を libvirtで設定  仮想ブリッジの設定次第で様々な利用が可能 br0 vnet1 vnet0 vnet2 br0 br1 virbr0 eth1 eth0 eth2 eth0 iptables 仮想マシンホストLinux
  • 78. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。78 外から仮想NICが見える設定 - bridge  /etc/sysconfig/network-scripts/ifcfg-eth0、 /etc/sysconfig/network-scripts/ifcfg-br0による設定  使用例: ● 仮想マシンによるサーバ構築 ● 共有テスト環境 etc. br0 vnet0br0 eth0 eth0 仮想マシンホストLinux BRIDGE=br0 を ifcfg-eth0に追加 DEVICE=br0 TYPE=Bridge BOOTPROTO=dhcp ONBOOT=yes DELAY=0 を ifcfg-br0 に設定 <interface type='bridge'> <mac address='52:54:00:37:7c:16'/> <source bridge='br0'/> </interface> を VM設定ファイルに追加
  • 79. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。79 NATの中に仮想マシンを閉じこめる設定 - NAT  libvirtによる自動設定  デフォルトで提供: /etc/libvirt/qemu/networks/default.xml  iptablesのNAT+ dnsmasqのDHCP  使用例: マシンローカルの 実験環境 etc. vnet1 virbr0 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>
  • 80. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。80 仮想マシン間だけでの通信を行う設定 - local  /etc/sysconfig/network-scripts/ifcfg-br1 等で仮想ブ リッジを作成するだけ  使用例: 同一マシン上で仮想マシン同士を接続する ● 仮想サーバと仮想クライアントの接続→一台で検証環 境 ● クラスタの検証環境 ●ハートビート ●クラスタ間通信etc. vnet2 br1 eth2 仮想マシンホストLinux <source bridge='br1'> を VM設定ファイルに追加
  • 81. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。81  ホスト起動時: sysconfigの設定によりeth0, br0を作成して接続  仮想マシン作成時、libvirtがトンネルデバイスvnet0作成、接続  QEMUがlibvirtから実行されて仮想インタフェース作成 ネットワーク設定が反映されるタイミング br0 vnet0 br0 eth0 eth0 仮想マシンホストLinux br0br0eth0 vnet0 br0br0eth0
  • 82. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。82 ちょっと未来のネットワーク接続  ソフトウェアブリッジの弱点 ● ソフトウェアブリッジは帯域制御やACLなどの管理機能が 使えない ● CPU消費も無視できない ●特に接続インタフェースが多い時  ソフトウェアブリッジではなくスイッチで管理する手法 ● VN-Link(Cisco) ● VEPA(Virtual Ethernet Port Aggregator, IEEE802.1Qbg) ●どちらもスイッチに仮想的なポートを作成する技術 ●VMの仮想NICは非常に多くなりうる(実サーバ1台に100 ポートなど)のでこのような技術が必要 ●スイッチがこれらの規格に対応している必要があるため まだどこでも利用できる状態ではない
  • 83. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。83 VEPAによる論理的なポート拡張  ether frameにVLANタグとポート識別用のタグを付与  一旦全てのフレームを実NICから外部へ送り出す  スイッチはACL, QoS制御などの処理をした上で送信先ポー トを判定  スイッチは同じポートに対応している場合、そのポートへパ ケットを送り返す(ヘアピンモード) VMVM VM switch VEPA VEPAによる 論理的な ポート拡張
  • 84. 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
  • 85. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。85 macvtapのモード  VEPA(Virtual Ethernet Port Aggrigator) ● 外部スイッチのポートを論理的に増やす技術 ● VEPA対応スイッチが必要(多くのスイッチは非対応) ● 全てのフレームを一旦外部のスイッチへ転送してスイッチ に処理させる ● ネットワーク機器の管理機能利用、ホストCPU負荷削減  Private ● VEPAと同じだが同一ポートに必ず戻ってくる  Bridge ● 同一マシン上のMACであればソフトウェアで転送 ● ブリッジはVEPAに対応していなくてもよい ● 通常のソフトウェアブリッジによる実装と同等
  • 86. 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> フィルタ名 フィルタのパラメータ
  • 87. 87 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 ネットワーク構成例
  • 88. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。88 基本のシンプルな構成 ホスト 環境 eth0 eth1 iSCSI target 管理ソフトや 他の仮想化ホスト live migration サービス用 ネットワーク block devices eth2 仮想マシンA 仮想マシンD 仮想マシンB 仮想マシンC vnet0 - eth0 vnet1 - eth0 vnet2 - eth0 vnet3 - eth0 block devices block devices block devices block devices br0
  • 89. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。89 基本のシンプルな構成 w/VLAN ホスト 環境 eth0 eth1 iSCSI target 管理ソフトや 他の仮想化ホスト live migration サービス用 ネットワーク block devices eth2 仮想マシンA 仮想マシンD 仮想マシンB 仮想マシンC vnet0 - eth0 vnet1 - eth0 vnet2 - eth0 vnet3 - eth0 block devices block devices block devices block devices br0.10 br0.20 eth0.10 eth0.20 仮想マシンからVLANタグつきのパケットを送信 すると、VLANのネスト(QinQ)が起きるので注意
  • 90. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。90 web internet web app app db db 仮想化で3層サーバ net1 net2 net3  何の変哲もない 3tier構成  仮想化で1台or2台 に集約するとどうな るのか?
  • 91. 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
  • 92. 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
  • 93. 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 web 2001 2003 2002 internet
  • 94. 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 eth0eth0 2001 2003 2002
  • 95. 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
  • 96. 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により実装されています。サーバ全体の 設定との競合に注意が必要です。
  • 97. 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)で行う(同一パケットが複数流れます) ?
  • 98. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。98 ブリッジとSTPによるactive-backup  eth0とeth1の両方をブリッジに接続する  STPを無効にしているとループが発生してしまいます ● br0と関係するスイッチでSTPが有効になっていることを 確認する  STPによりどちらか片方の経路だけが有効になります ホスト環境 eth0 VMvnet0 - eth0 br0 eth1 SW SW target
  • 99. 99 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 KVMでのメモリの取り扱いと応用技術
  • 100. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。100 KVMのメモリ・イメージ  ユーザプロセスで確保したメモリを仮想マシンの物理メモリと して利用 → x86 32bitだとプロセスが最大3GBしかメモリを扱えないた め、仮想マシンにたかだか2GBくらいしか割り当てられない Linux 確保したメモリ QEMUプロセス 仮想マシンの物理アドレス空間 mapping
  • 101. 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からメモリを開放
  • 102. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。102 Kernel Samepage Merging  複数VMをまたいで同一内容のページを1物理ページに集約 asdlkajsdf asdfjflkaj asdlkjsdfa lakpsjdfla asdkjasdlf asdfkajsdf adspfadfwe asdfffasdf asdfffasdf asdfffasdf mmmmasdfee fffffggfff sdflkajsdf falksflkaj aalkjswdfa lajghbdfla asdflasdlf asdlfkjsdf agggdsfawe asdfffasdf asdfasdfdd asdfasdddf mmmmasdfee ffffffffff asdfkajsdf asdfallkaj asdfakjdfa laksjdfhla asdfjasdlf asdfkajsdf adfadfbbwe bbasdfbbcc bbasdffbbc asdfffasdf mmmmasdfee ffbbffffff aflnkajsdf asdfjflkaj akjsfffdfa laksjdfgela flakjasdlfq mmmmasdfee dsfadvbfwe asdfffasdf asdfffasdf asdfffasdf asdfeeeeee fffffaafff ハ ー ド ウ ェ ア の 物 理 メ モ リ VM1 VM4VM3VM2
  • 103. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。103 memory ballooning  RHEL5.5より対応  ホストOSが効率良く管理できるようにゲストOSからヒントを出 す  balloon driverによりゲストOS内でメモリの一部を確保  サイズの自動調整は未実装 ● 手動で明示的にサイズを指示する必要がある VM1 VM4VM3VM2 balloon balloon balloon balloon balloon
  • 104. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。104 HugePageとは?  4kBのページ512個を2MBのページ1個で代替  DB, Java VM, KVMなど多量のメモリを消費する場合に有効 なチューニング。RHEL5でも利用可能  何が起きるの? ● TLBの消費量減少 ● TLBのミスヒット率減少  何が嬉しいの? ● ミスヒットが減ることでメモリアクセスの性能が向上  何故常に使われていないの? ● 起動時にあらかじめメモリを確保する必要がある ● HugePageでない通常の4kBメモリとして利用できない
  • 105. 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を利用する保証はない
  • 106. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。106 Performance – RHEL6 B2 Linux Intel EX Specjbb Java – Huge/Transparent Huge Pages 4­cpu 8­cpu 16­cpu 0 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)
  • 107. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。107 ライブマイグレーション  仮想マシンを物理的なマシン間で移動するには? ● メモリ状態、I/O状態、VCPU状態を転送する ● メモリが一番大きいため、メモリコピー時間が支配的  サービス停止時間を短くするための工夫 1. メモリをコピー中に変更されたメモリを追跡 2. 変更された差分だけをまたコピーする 3. 1, 2 を予想転送時間が十分短くなるまで繰り返す Linux Linux QEMU VM QEMU VMコピー 移動元 移動先
  • 108. 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: 移動先で動作開始、移動元を破棄
  • 109. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。109 ライブマイグレーションの注意点  メモリ転送がいつまでも終了しない可能性があります ● メモリへの書き込みが多い作業 ●古典的なCGI(たくさんのforkにともなうコピー) ●データ更新の多いデータベース ● ワークアラウンド ●許容される転送時間を長く設定する ●キャンセルして「ライブでない」マイグレーションを行う  メモリの書き換え状況によるためライブマイグレーションの 振る舞いの予測は困難です ● 必要な時間は負荷や転送速度により変わります ● トータルの転送量がダイナミックに決まります ● いつ終了するかの予想は基本的におこなえません
  • 110. 110 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 その他のデバイス
  • 111. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。111 ディスプレイ、キーボード、マウス  モデル ● VESA BIOS ● PS/2キーボード ● PS/2マウス ● USB接続のタブレット  バックエンド ● VNCによる接続 ● SPICEによる接続 ● SPICEはVNCに比較すると以下の点がよい ●消費するネットワーク帯域が少ない ●複数ディスプレイの取扱いが可能 ●キーボードマップの事前指定が不要 ●画面表示だけでなくUSBや音声入出力を転送可能
  • 112. 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)"
  • 113. 113 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 virtio
  • 114. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。114 virtio  仮想化環境でゼロ・コピーI/Oを実装するためのフレーム ワーク ● KVMだけでなくlguest, VirtualBoxなどでも利用される ● OASISで標準化へ向けてとりくみ中  仮想化環境がVMのメモリを参照できる前提 ● オペレーションの共有 ●I/O命令によるトラップをなくすことで高速化 ● 実際のデータの共有 ●オペレーションに対応するデータも共有 ● データ本体のコピーが発生しない
  • 115. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。115 KVMのメモリ・イメージ(virtio使用時) linux I/Oリクエストバッファ DMA転送 入出力データ QEMUプロセス デバイスドライバ read/write 仮想マシンの物理アドレス空間 I/Oリクエストバッファ 入出力データ
  • 116. 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の場合は自動的に利用
  • 117. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。117
  • 118. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。118
  • 119. 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経由をホスト-ゲスト間 通信路として用いる
  • 120. 120 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 メモリ管理の仮想化のしくみ
  • 121. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。121 OSのメモリ管理 プロセスそれぞれの仮想アドレスと物理アドレスを対応づける 変換表 変換表 変換表 変換表 プロセスA プロセスB プロセスC プロセスD 物理メモリ
  • 122. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。122 メモリ管理の仮想化対応  「仮想アドレス」とは? ● プロセスごとに持つ固有のアドレス空間 ●プロセス同士が同じアドレスを使っても競合しない ●実際のハードウェアで搭載されるメモリ量に制約されな い  「OSのメモリ管理」は何をやっているか? ● プロセスに見せるアドレス(仮想アドレス)から 物理的なメモリのアドレス(物理アドレス)への変換  OSは何を管理するか? ● 「仮想アドレス→物理アドレス」の変換表を管理している ●プロセス作成・終了時の変換表作成・削除 ●メモリ割り当て・解放時の変換表書き換え ● CPUが変換表を自動的に参照してアドレス変換をおこなう  仮想化環境ではゲストOSは真の物理アドレスがわからない ● ハイパーバイザでの対応が必要
  • 123. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。123 普通のハードウェア&OSでは……  プロセス毎にOSが変換表を管理  x86ではページテーブルとよばれるデータ構造が変換表とな る  CPUが仮想アドレスを参照するたびにページテーブルを参照 して物理アドレスに変換する CR3 Page Table仮想アドレス 物理アドレス
  • 124. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。124 CR3 EPT以前(shadow page table)  ゲストOSが管理するページテーブルをそのまま利用できない ● ゲストOSは「仮想物理アドレス」しか把握していない  KVMがゲストOSのページテーブルを元にシャドウページテー ブルを作成 ● シャドウページテーブルは「仮想アドレス→物理アドレス」の 表 CR3 仮想アドレス (OSが仮想化で騙されているので) 仮想物理アドレス shadow Page Table 物理アドレス KVMがページテーブルの更新を 監視・変換・反映してメンテナンス Page Table VM hypervisor
  • 125. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。125 EPT/NPTを利用したアドレス変換  仮想物理アドレスを物理アドレスに変換するページテーブル (EPT/NPT)を導入 ● ハイパーバイザが管理 ● 仮想マシン1台に1セットあればよいのでshadow PTより省 メモリ  ゲストOSが管理するページテーブルをそのまま利用 CR3 Page Table仮想アドレス (OSが仮想化で騙されているので) 仮想物理アドレス EPT Page Table EPT base pointer 物理アドレス VM hypervisor
  • 126. 126 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 KVMによるCPUの仮想化のしくみ
  • 127. 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.
  • 128. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。128 センシティブ命令  実行したり実行前後の状況を調べると「普通のハードと違 う!」と気付けてしまう命令全般 ● 仮想マシン内でのセンシティブ命令を"うまくごまかす"こと で仮想化環境を実装する  x86系CPUではセンシティブ命令が特権命令のサブセットで はない  センシティブ命令をフックするためのCPUの拡張機能 ● Intel VT-x, AMD AMD-V 特権命令 センシティブ命令 命令全体 特権命令 センシティブ命令 命令全体 こうだと簡単なのに…… x86アーキテクチャは特権保護だけでは不足
  • 129. 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カーネル センシティブ 命令の実行
  • 130. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。130 ハードウェア KVMによるQEMUの高速化 ハードウェア QEMU 仮想マシン linux handler linux KVM 仮想マシン qemu-kvm handler 命令全般 通常命令 センシティブ命令 システムコール等
  • 131. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。131 高速なQEMUとしてのKVM環境  ゲストの制限 ● CPUが直接実行できるアーキテクチャだけに対応  実行を管理するのはLinuxカーネル  事前の命令スキャンは不要 ● 通常の命令は直接実行 ● 特殊な命令はQEMU/KVMへ  制御はQEMUから行う 仮想マシン 割り当て用 メモリ ハードウェア QEMU 仮想マシン Linux KVM
  • 132. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。132 /dev/kvm  KVMへのインタフェースになる特殊デバイス ● ioctl()で様々な機能提供 →KVMのためだけの新しいシステムコールは不要 →マージされやすい ● 新しい仮想マシンの作成 ● 仮想マシンへのメモリ割り当てのリクエスト ● 仮想CPUのレジスタの読み書き ● 仮想CPUへの割り込み挿入 ● 仮想CPU実行開始 ● I/Oハンドラの登録  QEMUがKVMを呼ぶ時にはこのファイルを利用 仮想マシン 割り当て用 メモリ ハードウェア QEMU 仮想マシン Linux KVM
  • 133. 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
  • 134. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。134 Linuxの動作モード  ユーザ・モード ● 特権命令は実行不可能 ● 特権命令を実行した場合 ●CPUがトラップしてカーネルへジャンプ ● 使用例 ●不正な命令を実行 ●システム・コール呼び出し ●割り込み処理  カーネル・モード ● あらゆる命令を実行可能 プロセス Linux kernel user kernel jump
  • 135. 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 kernel jump
  • 136. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。136 KVMの動作  qemu-kvm ● /dev/kvmを利用 ●ゲストOSを初期化 ●各種ハンドラの登録 ●ゲストOSを実行  ゲストOSの遷移 ● ユーザ・モード、カーネ ル・モード、ゲスト・モード の間で遷移 出典:『kvm: the Linux Virtual Machine Monitor』
  • 137. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。137 KVMの動作(続き) 出典:『kvm: the Linux Virtual Machine Monitor』 QEMUによる デバイス・ エミュレー ション 「何も知らない」 ゲストOSの 世界 センシティブ命令の実行や 割り込み(I/O実行終了)など I/O終了後、 ゲストに制御を 戻す  QEMUと仮想マシンの間の切り替えをKVMが行っています
  • 138. 138 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 セキュリティの改善
  • 139. 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で有効にしておくだけ
  • 140. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。140 sVirtで何を守るのか? 仮想ディスクの バックエンド 仮想ディスクの バックエンド QEMU QEMU VM VM qemu/kvmに 未知の脆弱性 qemu権限で 任意コード 実行 他のQEMU プロセスへ攻撃 他VMの 仮想ディスク 読み書き SELinuxで攻撃を予防
  • 141. 141 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 KVMユーザ事例
  • 142. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。142 InternetInternet クラウド型サービスとして、お客さまはロケーションを意識することなく、 サーバーリソースをネットワーク経由で利用可能 リソース補完 収容変更 VPNVPN 社内LAN ■オンデマンド  ・必要な時に必要な量の   サーバーリソースを利用可  ・柔軟なリソース変更も可能 ■複数ロケーションによるクラウド型サービス提供 ・NWバックボーンに直結したクラウド基盤 KVMKVM KVMKVM KVMKVM NTTコミュニケーションズ様 クラウドコンピューティングサービス Bizホスティング ベーシック
  • 143. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。143 IBMクラウドサービスのプラットフォームとしてRHEV 採用
  • 144. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。144 KVM 利用事例 パブリッククラウド基盤 ● NTTコミュニケーションズ Bizホスティングベーシック ● 大手テレコムベンダ ● IBM Smart Business Cloud プライベートクラウド基盤 ● US Defense Information System Agency(国防総省の後方 支援組織) ● DreamWorks ● 自治体クラウド実証環境 ● 大手警備保障会社 ● 大手精密機器メーカ ● 大手通信機器メーカ ● 大手ソーシャルネットワークプロバイダ ● 大手携帯コンテンツプロバイダ
  • 145. 145 Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。 関連サービスのご案内
  • 146. 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の技術を導入、管理するために必 要な知識とスキルを身につけます。
  • 147. Red Hat K.K. All rights reserved. この資料はレッドハット保有の既存資料であり、御社との契約で定義されている成果物には該当いたしません。147 Red Hat Consulting  Remote Technical Assistance ● OSSの専門家によるスピーディなQ&A対応 ● コードリーディングによる実装確認やトラブル原因解析 ● タイム&マテリアルによる時間ベース契約  カスタムトレーニング「KVMスタートアップ」 ● 本資料を用いた座学形式のKVMについてのトレーニング  カスタムトレーニング「カーネルエッセンシャル」 ● KVMのベースとなっているlinuxカーネルの概要を運用管 理者向けにトレーニング