ユーザ用ツール

サイト用ツール


linux:kvm

Linux KVM関係

参考資料

ホスト側設定

カーネル

KVMサポート

Virtualization  --->
  --- Virtualization
   <*>Kernel-based Virtual Machine (KVM) support
   <*>KVM for Intel processors support
   < >KVM for AMD processors support
   <*>Host kernel accelerator for virtio net (EXPERIMENTAL)

ネットワーク関係(ブリッジ接続用)

Device Drivers  --->
  Network device support  --->
     [*]   Network core driver support
       <*>     Universal TUN/TAP device driver support
Networking support  --->
   Networking options  --->
     <*> 802.1d Ethernet Bridging
      [*]IGMP/MLD snooping
     <*> 802.1Q VLAN Support
      [*]GVRP (GARP VLAN Registration Protocol) support

KSM (複数のVM間でメモリを共有する)

Processor type and features  --->
  [*] Enable KSM for page merging

プリエンプションの設定(Serverでも普通に動いたが、、、)

Processor type and features  --->
 Preemption Model
   (X) Preemptible Kernel (Low-Latency Desktop)

関連パッケージ

  • app-emulation/qemu – KVMの基本ユーティリティ
    • QEMU_SOFTMMU_TARGETS=“x86_64” – フルモードでエミュレートするアーキテクチャ
    • QEMU_USER_TARGETS=“” – ユーザランドモードでエミュレートするアーキテクチャ
  • net-misc/bridge-utils – ブリッジネットワーク関連のユーティリティ
  • sys-apps/usermode-utilities – tunctlコマンドをインストールするため

ネットワーク設定

物理インターフェイス(eth0)を介して、物理マシンも仮想マシンもブリッジ接続するようにする。

/etc/conf.d/net

#物理インタフェイスのIPアドレス設定を空にする
config_eth0="null"

bridge_br0="eth0 tap0"
brctl_br0="setfd 0 sethello 0 stp off"
#rc_need_br0="net.tap0" 古い書式
rc_net_br0_need="net.tap0"

# Host
config_br0="192.168.0.15/24"
routes_br0="default via 192.168.0.254"
dns_domain_br0="example.com"
dns_servers_br0="192.168.0.1"
dns_search_br0="example.com"

# Guest
config_tap0="null"
tuntap_tap0="tap"
tunctl_tap0="-u [user] -g [group]" #tapを利用できるユーザ/グループ。 -g kvmでkvmグループに属するユーザがアクセスできるようにする。

ゲストOSの起動

qemu-kvmコマンドを用いてゲストOSを起動する。qemu-kvmへのコマンドラインオプションで、cpuの種類やエミュレートするデバイスなどを指定していく。

仮想ディスクの準備

qemu-img create -f qcow2 -o preallocation=metadata [仮想ディスクイメージ名] [サイズ]
qemu-img create -f qcow2 -o preallocation=metadata gentoo-i386.img 10G

Gentoo Live CDなどを使って起動しOSをインストール

qemu-kvm -hda gentoo-i386.img \
                  -cdrom livecd-i686-installer-2007.0.iso \
                  -boot d
                  -curses
                  -net nic
                  -net tap,ifname=tap0,script=no,downscript=no

オプションについて

  • -cpu core2duo
    • 仮想CPUの種類を指定。qemu-vkm -cpu ?で利用可能なCPUリストが得られる。
  • -smp 2
    • CPUのコア数
  • -m 1024
    • 割り当てメモリ(MB)
  • -k ja
    • ホスト側のキーボードレイアウトの指定。
  • -hda [イメージファイル名]
    • 仮想ディスクイメージファイルの指定。IntelのSATAがエミュレートされる。
  • -drive file=[イメージファイル名],if=virtio
    • 仮想ディスクのアクセスにvirtio経由を用いる。
  • -cdrom
    • CD-ROMイメージファイルの指定
  • -boot
    • 起動ディスクの指定 「d」はCD-ROMから、「c」はHDDから
  • -net nic
    • 新しくネットワークインタフェースを作成しvlan(デフォルト)に接続する
  • -net nic,model=virtio
    • ネットワークデバイスとしてvirtioを利用する。指定しなければRealTek8139がエミュレートされる。
  • -net tap,ifname=tap0,script=no,downscript=no
    • ホストのtap0をvlan(デフォルト)に接続する
  • -net tap,ifname=tap0,script=no,downscript=no,vhost=on
    • 上記設定に加えて、vhost=onでvhost-netを利用する。ゲストのカーネルでMessage Signaled Interrupts (MSI and MSI-X)、ホストのカーネルでVirtio network driverが必要。
  • -curses
    • ncursesを利用してコマンドライン上にコンソールをリダイレクトする。ゲストが高解像度の出力をする場合は利用不可。
  • -monitor telnet::4444,server,nowait qemu
    • モニタに4444番ポートにtelnetでアクセスできるようにする
  • -vnc [host]:[ディスプレイno]
    • hostからvncでコンソールにアクセスできるようにする。ポートは5900+ディスプレイ番号になる。[host]を省略するとどこからでも接続可能になる。
  • -nographic
    • グラフィック出力をしない。ビデオカードをエミュレートしない。
  • -rtc clock=host,base=localtime
    • リアルタイムクロックの設定。UTC扱いになる場合に適切に設定する。
  • -daemonize
    • コンソールから切り離す。バックグラウンドで起動する。
    • 端末がおかしくなる場合があるのでresetコマンドなどでリセットする。

ゲストOSのカーネル設定

基本的には実マシンと同様に設定すればよいが、virtioを利用する場合には追加設定を行う。

準仮想化の設定。仮想マシン上のカーネルオプション。ゲスト側で設定しておくとパフォーマンスが向上する。

[*] Paravirtualized guest support--->
  --- Paravirtualized guest support
  [*] Paravirtual steal time accounting
  [  ] Xen guest support
  [*] KVM paravirtualized clock
  [*] KVM Guest support
  -*- Enable paravirtualization code
  [*] Paravirtualization layer for spinlocks

virtioを利用しない場合の各種ドライバ

Device Drivers --->
  <*> Serial ATA and Parallel ATA drivers --->
    <*> Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support

  [*] Network device support --->
    [*] Ethernet driver support --->
      [*] Realtek devices
      <*> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL)
      <*> RealTek RTL-8129/8130/8139 PCI Fast Ethernet Adapter support
      [*] Use PIO instead of MMIO

virtioを利用する場合(パフォーマンス向上)

Device Drivers --->
  [*] Block devices --->
    <*> Virtio block driver (EXPERIMENTAL)

  [*] Network device support --->
    -*- Network core driver support
      <*> Virtio network driver (EXPERIMENTAL)

  Character devices --->
    <*> Virtio console
    <*> Hardware Random Number Generator Core support
    <*> VirtIO Random Number Generator support

  Virtio drivers --->
    <*> PCI driver for virtio devices (EXPERIMENTAL)
    <*> Virtio balloon driver (EXPERIMENTAL)
    
  Bus options (PCI etc.) --->
    [*] Message Signaled Interrupts (MSI and MSI-X)

virtioを利用する場合、ディスクのデバイスファイルは以下の様になる。

  • /dev/vda?

virtioを利用する場合、ホスト側で以下のオプションを有効にする。

Device Drivers --->
  [*] Network device support --->
    -*- Network core driver support
      <*> Virtio network driver (EXPERIMENTAL)
      
  Virtio drivers --->
    <*> PCI driver for virtio devices (EXPERIMENTAL)

virtioを利用する場合の参考サイト

CONFIG_VIRTIO_BLK
CONFIG_VIRTIO_NET
CONFIG_VIRTIO_CONSOLE
CONFIG_HW_RANDOM_VIRTIO
CONFIG_VIRTIO
CONFIG_VIRTIO_RING
CONFIG_VIRTIO_PCI
CONFIG_VIRTIO_BALLOON

設定後の起動

virtioを利用する場合の通常運用時の起動オプション例。SSH等でネットワークからアクセスできる状態になっていれば、グラフィックは無効にしてバックグラウンドで起動する。qemuモニタにはtelnetでアクセスできるようにしておく。

/usr/bin/qemu-kvm -name "com2.ps.ritsumei.ac.jp" \
    -cpu core2duo \
    -smp 2 \
    -m 768 \
    -k ja \
    -drive file=/home/nishide/kvm/KVM-2012_com2.img,if=virtio \
    -boot c \
    -net nic,model=virtio \
    -net tap,ifname=tap0,script=no,downscript=no \
    -rtc clock=host,base=localtime \
    -monitor telnet::4444,server,nowait \
    -nographic \
    -daemonize

ゲストのkernelオプション

クロックソースとしてkvmを指定するためブートローダでkernelに起動オプションを指定する。

grubの場合

  • /boot/grub/grub.conf
kernel /vmlinuz-3.7.10-gentoo ro root=/dev/vda2 clocksource=kvm-clock rootfstype=ext4
linux/kvm.txt · 最終更新: 2013/08/09 10:34 by Wiki Editor