OpenIndiana+KVMによる仮想マシン

5,614 views

Published on

OSC Tokyo2012/Fall
OpenSolarisユーザーグループプレゼンテーション資料

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,614
On SlideShare
0
From Embeds
0
Number of Embeds
69
Actions
Shares
0
Downloads
53
Comments
0
Likes
8
Embeds 0
No embeds

No notes for slide

OpenIndiana+KVMによる仮想マシン

  1. 1. OpenIndiana+KVMによる仮想マシン OSC 2012 Tokyo/Fall みやざきさとる 日本 OpenSolaris ユーザグループ
  2. 2. 自己紹介とあるIT企業の Solaris 使いTwitter: s_miyazaストレージとかも触ってますSolaris なのは趣味です最近 Solaris のお仕事がありません… (´ ・ ω ・` ) OpenIndiana+KVMによる仮想マシン pg 2
  3. 3. OpenIndiana ってなんですか? OpenSolaris ベースの ディストリビューション コミュニティーベースで開発 Illumos を採用 Illumos は OpenSolaris 内のクローズドバイナ リを置き換えるプロジェクト http://openindiana.org/ OpenIndiana+KVMによる仮想マシン pg 3
  4. 4. OpenIndiana で KVM って? Joyent 社が OpenSolaris をベースに SmartOS を作成 SmartOS で KVM を移植 oi_151a へ成果を反映 OpenIndiana+KVMによる仮想マシン pg 4
  5. 5. OpenIndiana をインストールしてみよう デスクトップ版とサーバ版の2種類 メディアも2種類 ISO イメージ USB イメージ USB の作成方法 OpenSolaris なら usbcopy Linux なら dd Windows なら LiveUSBCreater http://wiki.openindiana.org/oi/Installing+OpenIn diana OpenIndiana+KVMによる仮想マシン pg 5
  6. 6. OI+KVM のサポート CPU Nehalem 以降の IntelCPU Intel-VTi Intel-VTd EPT AMD はノーサポート OpenIndiana+KVMによる仮想マシン pg 6
  7. 7. OI への KVM インストール方法 用意するモノ OpenIndiana がインストールされたマシン ネットワーク環境 KVM の pkg インストール # pkg install driver/i86pc/kvm system/qemu/kvm qemu-kvm と kvm ドライバの確認 # qemu-kvm --version QEMU emulator version 0.14.1 (qemu-kvm-devel), Copyright (c) 2003-2008 Fabrice Bellard # ls -ld /dev/kvm lrwxrwxrwx 1 root root 27 2012-07-11 00:48 /dev/kvm -> ../devices/pseudo/kvm@0:kvm OpenIndiana+KVMによる仮想マシン pg 7
  8. 8. OI+KVM の制限事項 libvirt/virsh などは使えません pkg 自体はありますが、Xen 用です GUI も用意されてません SPICE は使えません VNC は使えます virtio を使えます ただし、OS がサポートしていれば ide や e1000/rtl8139 などのハードウェアエ ミュレートも使えます OpenIndiana+KVMによる仮想マシン pg 8
  9. 9. 仮想ディスクイメージの作成OpenSolaris と言えば ZFSZFS でサイズ指定でボリュームを作成# zfs create -p -s -G 10G rpool/kvm/guest/centos6/m01-p は親のデータセットも作成mkdir -p 的なオプション-s を付けると疎ボリュームになる OpenIndiana+KVMによる仮想マシン pg 9
  10. 10. ZFS のおさらい データセット ファイルシステムとボリュームの2種類 ファイルシステムは、UFS などの既存のファ イルシステムのようなインタフェース Path を指定して作成 ボリュームは HDD のデバイスと同様に扱える Path とサイズを指定して作成 疎ボリューム (Sparse Volume) は、 サイズの予約をするだけで、実際に領域を使っ た分だけサイズを確保する → Thin Provisioning として知られる方法 OpenIndiana+KVMによる仮想マシン pg 10
  11. 11. KVM 仮想ディスクイメージの補足 qemu-img も使用可能 raw/qcow2 でフォーマット可能 でもあまり使う意味ないでしょ? virtio を使用可能 ゲスト OS に virtio ドライバが用意されて いる必要がある ide 接続エミュレート OS に virtio ドライバが用意されてないときは ide エミュレートを使用できる OpenIndiana+KVMによる仮想マシン pg 11
  12. 12. NIC の用意 Project clossbow( =ネットワークの仮想化 ) を活用する dladm で仮想 NIC を用意する # dladm create-vnic -l rge0 m01 m01 が仮想 NIC 名 -l で仮想 NIC を接続する物理 NIC を指定 物理 NIC 以外に以下のデバイスを指定出来る link-aggrigation(IEEE802.3ad) etherstub(= 仮想スイッチ ) VLAN 指定デバイス OpenIndiana+KVMによる仮想マシン pg 12
  13. 13. NIC の仮想化おさらい 仮想 NIC(VNIC) 物理 NIC もしくは仮想 switch と接続 仮想 switch(etherstub) 仮想 NIC 同士を接続する、仮想的なswitch Global-Zone InternetZone VNIC etherstub VNIC NIC VNICZone VNIC VNIC Zone/ KVM OpenIndiana+KVMによる仮想マシン pg 13
  14. 14. KVM ゲストの実行 以下のコマンドを root で実行 /usr/bin/qemu-kvm -daemonaize -pidfile /var/run/m01.pid -boot cd -enable-kvm -vnc 0.0.0.0:1 -vga std -k en-us -smp 1 -m 1024 -localtime -usbdevice tablet -drive file=/dev/zvol/rdsk/rpool/kvm/guest/centos6/m01,if=virtio,index=0 -drive file=/rpool/kvm/image/CentOS-6.3-x86_64-bin- DVD1.iso,media=cdrom,if=ide,index=2 -net nic,vlan=0,name=net0,model=virtio -net vnic,vlan=0,name=net0,ifname=m01,macaddr=$MAC OpenIndiana+KVMによる仮想マシン pg 14
  15. 15. qemu-kvm オプション (1) -daemonize qemu-kvm を daemon モードで起動 -pidfile /var/run/m01.pid pid ファイル名を指定 -boot cd boot するデバイスを指定 複数指定で、ブート順を指定出来る a,b: 1,2 番目のフロッピーデバイス c: 1 番目の IDE d: 1 番目の CD ドライブ n-p: ネットワークデバイス OpenIndiana+KVMによる仮想マシン pg 15
  16. 16. qemu-kvm オプション (2) -enable-kvm KVM の仮想化サポートを使用する -vnc 0.0.0.0:1 VNC で bind するアドレスとポートを指定 指定したアドレスの 5900+ 指定ポート数 /tcp が使用される -vga=std -k en-us キーボードを指定 日本語の場合は jp を指定する OpenIndiana+KVMによる仮想マシン pg 16
  17. 17. qemu-kvm オプション (3) -smp 1 使用する CPU 数を指定 -m 1024 使用メモリ量を MB 単位で指定 -localtime 時刻を localtime にする 指定しない場合は UTC -usbdevice tablet USB デバイスとしてタブレットを指定 X を使用するとき、マウスカーソルがずれる 問題を解消する TIPS OpenIndiana+KVMによる仮想マシン pg 17
  18. 18. qemu-kvm オプション (4) -drive file=/dev/zvol/rdsk/ ボリューム名 , if=virtio,index=0 ハードディスクの指定 デバイスとして ZFS volume を指定 /dev/zvol/rdsk/rpool/kvm/guest/centos6/m01 if=virtio インターフェース (virtio/ide) を指定 index=0 何番目のデバイスかを指定 OpenIndiana+KVMによる仮想マシン pg 18
  19. 19. qemu-kvm オプション (5) -drive file=ISO ファイル名 , media=cdrom,if=ide,index=2 CDROM を指定 file=ISO ファイル名 指定した ISO ファイルを CD として使用 if=ide インタフェース (virtio/ide) を指定 index=2 何番目のデバイスかを指定 OpenIndiana+KVMによる仮想マシン pg 19
  20. 20. qemu-kvm オプション (6) -net nic,vlan=0,name=net0,model=virtio ネットワークデバイスの指定 vlan=0 VLANID の指定 name=0 NIC 名 model=virtio NIC の種類 virtio e1000 rtl8139( デフォルト ) OpenIndiana+KVMによる仮想マシン pg 20
  21. 21. qemu-kvm オプション (7) -net vnic,vlan=0,name=net0,ifname=m01,macaddr=$MAC VNIC の指定 vlan=0 VLANID の指定 name=0 NIC 名 ifname=m01 KVM サーバ側の NIC を指定 macaddr=$MAC MAC アドレスを指定 OpenIndiana+KVMによる仮想マシン pg 21
  22. 22. 仮想 NIC と MAC アドレスの取得 指定した仮想 NIC の MAC アドレスは 作成時に自動的に振られる MAC アドレスを取得するときは dladm コマンドを使用する # dladm show-vnic -po macaddress VNIC 名 bash だと、以下のように指定出来る -net vnic,macaddr=$(dladm show-vnic -po macaddress m01) OpenIndiana+KVMによる仮想マシン pg 22
  23. 23. KVM ゲストを簡単デプロイ KVM ゲストは OS インストールの必要がある 一度インストールしてしまえば ZFS volume をクローンして、簡単デプロイ # zfs snapshot /dev/zvol/rdsk/rpool/kvm/guest/centos6/m01@snap # zfs snapshot /dev/zvol/rdsk/rpool/kvm/guest/centos6/m01@snap /dev/zvol/rdsk/rpool/kvm/guest/centos6/m02 # qemu-kvm ( 中略 ) -drive=/dev/zvol/rdsk//dev/zvol/rdsk/rpool/kvm/guest/c entos6/m02,if=virtio,index=0 ( 後略 ) OpenIndiana+KVMによる仮想マシン pg 23
  24. 24. ZFS clone でデプロイするときの注意 IP アドレスの重複に注意 同じディスクイメージを使用するため 回避策 OS によって異なる 起動してから書き換える DHCP を使用する 別 KVM ゲストに接続して書き換え ネットブートして書き換え template ホストを用意して、template は起動し ない →起動してから書き換え OpenIndiana+KVMによる仮想マシン pg 24
  25. 25. パフォーマンスを測ってみよう CPU 、 disk 、network のパフォーマンスをみる 本体、KVM ゲスト (virtio とエミュレート ) 、 zone のパフォーマンスの違いを見る このベンチマークは、きちんと検証していない ので、ご参考程度にしてください OpenIndiana+KVMによる仮想マシン pg 25
  26. 26. CPU のパフォーマンスは? sysbench で CPU 測定 実行時間を比較 (10000event 実行 ) スレッド数 1, 2, 4, 8 で測定 KVM サーバ、ゲスト(CPU1, 2, 4) 、 Zone で計測 ホストの CPU は Intel Core i5-2400S 4core/4threads ゲスト OS は CentOS6.3(1CPU) OpenIndiana+KVMによる仮想マシン pg 26
  27. 27. CPU 測定結果 CPU performance guest(1CPU) guest(2CPU) guest(4CPU) host zone 16 14 12 10.17 10.14 10.11 10.18 10.17 9.97 10 *10ms 8 6 5.27 5.25 5.24 5.2 4 3.2 3.18 2 0 0 1 2 3 4 5 6 7 8 9 threads OpenIndiana+KVMによる仮想マシン pg 27
  28. 28. CPU パフォーマンスの考察 本体と zone は、パフォーマンスに差異がない thread 数が CPU 数と同じになったときに制限 に達する パフォーマンスは落ちていない それどころか、良くなっているように見える OpenIndiana+KVMによる仮想マシン pg 28
  29. 29. disk のパフォーマンスは? fio で測定 シーケンシャル R/W fio --bs=1m --size=1G --numjobs=2 --runtime=10 --group_reporting -rw=rw --name=file1 ランダム R/W fio --bs=1m --size=1G --numjobs=2 --runtime=10 --group_reporting -rw=randrw --name=file1 KVM サーバ、ゲスト (virtio/ide) 、Zone で計測 SSD(Crucial m4 CT256M4SSD2) を使用 OpenIndiana+KVMによる仮想マシン pg 29
  30. 30. disk io 測定結果 disk io(KB/s) randw(KB/s) randw(KB/s) seqr(KB/s) seqw(KB/s) 350000 330587 332992 324010 316681 300000 288025 274413 270159 273761 250000 200000 KB/s 150000 109036 105681 100000 53458 48822 50000 30565 28548 28781 24870 0 guest+ide guest+virtio server zone disk io(IOPS) randr(IOPS) randr(IOPS) seqr(IOPS) seqw(IOPS) 350 309 322 316 325 300 264 267 281 267 250 200 IOPS 150 103 106 100 52 47 50 29 27 24 28 0 guest+ide guest+virtio server zone OpenIndiana+KVMによる仮想マシン pg 30
  31. 31. disk パフォーマンス考察 virtio と ide では、シーケンシャルR/W の場合 に性能差がある 本体に比べればシーケンシャル R/W で 1/3 程度 OpenIndiana+KVMによる仮想マシン pg 31
  32. 32. network パフォーマンスは ? iperf で測定 サーバ側 iperf -s -p 12345 -w 65536 -i 5 クライアント側 iperf -c <server> -w 65536 -p 12345 -t 60 クライアントーホスト間は、1G で MTU1500 KVM サーバ、ゲスト(virtio/e1000) 、Zone で計測 (3 回計測の平均 ) KVM ゲストは CentOS6.3 OpenIndiana+KVMによる仮想マシン pg 32
  33. 33. network 測定結果 network パフォーマンス guest(virtio) guest(e1000) server zone 1000 934.33 935 900 800 700 600 MBits/sec 500 400 353.67 300 198 200 100 0 OpenIndiana+KVMによる仮想マシン pg 33
  34. 34. network パフォーマンス考察 本体と zone の性能は差異なし virtio は、本体の4割弱の性能 e1000 は、本体の2 割弱の性能 virtio 比でも半分程度 virtio を使う方がパフォーマンスは高いが、 本体に比べるとかなり低い OpenIndiana+KVMによる仮想マシン pg 34
  35. 35. OI+KVM のメリットって? OI 上で動くサービスなら、Zone を使うべき Linux のサービスはほとんど OI でも動かせる コンパイルすれば… Linux 独自の仕組みを使うときに、 KVM を使用する Windows を動かすときは、KVM を使用する OI の別バージョン、OracleSolaris11 が KVM で使用出来る →ただし、virtio ドライバがないので遅い OpenIndiana+KVMによる仮想マシン pg 35
  36. 36. Linux+KVM と比較したメリット ZFS を使用することによる運用性 snapshot を利用したバックアップ clone を使用したデプロイ crossbow による仮想 NIC 簡単にブリッジ接続 仮想スイッチを使用したクローズネットワーク ポート、IP 、NIC を指定した帯域制御 OpenIndiana+KVMによる仮想マシン pg 36
  37. 37. Linux+KVM と比較したデメリット 低いパフォーマンス libvirt/oVirt などのサポートなし GUI による制御未サポート 他ツール (OpenStack/CloudStack など ) との 連携できない SPICE に未対応 ハードウェアを選ぶ AMD 未対応 OpenIndiana+KVMによる仮想マシン pg 37
  38. 38. 総評 SmartOS などではサービスで使用しているが、 まだまだ未成熟 性能面、機能面での不具合 ただし、 ZFS や Crossbow を利用出来るのは かなりおいしい Joyent 社などを中心にサービス使用を目指し ているので、今後に期待 →いま、サービスに使用するのはリスキー OpenIndiana+KVMによる仮想マシン pg 38
  39. 39. OpenIndiana+KVMによる仮想マシン ご静聴ありがとうございました。 OpenIndiana+KVMによる仮想マシン pg 39

×