pikesaku’s blog

個人的なプログラム勉強メモです。記載内容について一切の責任は持ちません。

KVMメモ

参考

Amazon CAPTCHA
 
 

メモ

CPU仮想化支援機能の有無確認

/proc/cpuinfo
Intel-VTの場合、vmx
AMD-Vの場合、svm
 

KVMバイス

/dev/kvm
KVM実行ユーザーはKVMグループに属する必要あり
 

virt-install対話式実行

virt-install --prompt
 

QCOWの意味

QEMUのイメージフォーマット 
QEMU Copy On Writeの略
 

virshコマンド

コマンド 動作
virsh list --all 仮想マシン一覧出力
virsh dominfo VM 仮想マシン情報出力
viersh start VM 仮想マシン起動
virsh suspend VM 仮想マシン一時停止
virsh resume VM 仮想マシン再開
virsh shutdown VM 仮想マシン停止(シャットダウン)
virsh reboot VM 仮想マシン再起動
virsh destroy VM 仮想マシン停止(パワーオフ)
virsh undefine VM 仮想マシン削除
virsh pool-list ストレージプール一覧出力
virsh vol-list POOL ボリューム一覧出力
virsh vol-delete IMAGE_FILE ボリューム削除
virsh edit VM 仮想マシン設定変更
virsh vcpuinfo VM 仮想マシンCPU詳細
virsh iface-list IF一覧
virsh iface-mac IF MACアドレス確認

※undefineでは仮想マシンディスクイメージファイル(上記のボリューム)は削除されない。
 
実行例

# virsh dominfo  VM
Id:             7
Name:           VM
UUID:           d08824fb-37ad-4ac5-b091-b07df7918a14
OS Type:        hvm
State:          running
CPU(s):         2
CPU time:       7255.5s
Max memory:     6291456 KiB
Used memory:    6291456 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: none
Security DOI:   0

 

# virsh vol-list default
 Name                 Path                                    
------------------------------------------------------------------------------
 CentOS-7-x86_64-Minimal-1611.iso /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1611.iso
 CentOS-7-x86_64-Minimal-1708.iso /var/lib/libvirt/images/CentOS-7-x86_64-Minimal-1708.iso
 centos7-minimal-tmplt.qcow2 /var/lib/libvirt/images/centos7-minimal-tmplt.qcow2

 

設定ファイル

 

設定ファイル 内容
/etc/livbirt/libvirtd.conf libvirtdへの外部からの接続について等
/etc/livbirt/qemu/networks配下ファイル 仮想ネットワーク
/etc/livbirt/qemu,conf VNC設定
/etc/livbirt/storage配下ファイル 仮想ネットワーク

VCPUはqemu-kvmプロセスのスレッドに対応

ps -Le | egrep qemu-kvm
 2558  2558 ?        00:38:39 qemu-kvm
 2558  2563 ?        00:08:06 qemu-kvm
 2558  2564 ?        00:20:25 qemu-kvm
 2558  2565 ?        00:00:02 qemu-kvm
19114 19114 ?        01:11:24 qemu-kvm
19114 19122 ?        00:13:30 qemu-kvm
19114 19123 ?        00:36:12 qemu-kvm
19114 19124 ?        00:00:01 qemu-kvm

 

VCPU実行は各スレッドが呼び出すioctlシステムコール中で実行され、CPU時間はsystemでカウントされる

 

Hugmeメモリ利用設定

基本ページサイズは4KB。
メモリを多く使うプロセスの場合、ページサイズを大きくした方がメモリページ管理コストが減り性能よくなる。
DBなどで実施される。KVMも利用される。
ただ、スワップアウトできない点に注意
使う場合、ホストでhugeetlbfsマウントし、その領域をqemu-kvmコマンドの-mem-pathオプションで指定する必要あり。(詳細は書籍124P参照)
 

ストレージの考え方

ホストOS側のブロックデバイスやファイルを仮想マシンにストレージデバイスとして見せる。
ゲストOS IO要求→KVMがフック→QEMUエミュレータ処理→ファイルorブロックデバイスへのIO処理
ゲストOSはIDE/SCSI/virtioなどのデバイスとして認識
virtioはゼロコピーIOを実現するIFでもっとも最適化されてもの
 

ストレージバックエンド

バックエンドはおおきく3種類あり
ファイルシステム上のファイル(ext4 or NFS) or ブロックデバイス(Local or FS-SAN or ISCSI) or LVM
ファイルとLVMの場合、libvirtで作成・削除可能。
ファイルの場合、フラグメントをケアする必要あり。
ファイルの場合、形式が多くあり。代表的なものは、RawとQcow2
サポートされる形式は"qemu-img | grep Supported"を実行すればわかる。

形式 説明
raw 変換・メタ情報なし。ディスクイメージをddで書き出したものと同じ
qcow2 ファイル中にメタデータ保有。仮想ディスクをクラスタと呼ぶ固定長ブロックで管理し、各クラスタがqcow2ファイルのどこに格納されているかが、メタ情報に記録されてる。

※QCOW2のファイルサイズは実利用サイズに応じて変わる。
クラスタサイズは大きいほど性能向上する。デフォルト64KB?著者は2MB推奨

# qemu-img info /var/lib/libvirt/images/cnt1.qcow2
image: /var/lib/libvirt/images/cnt1.qcow2
file format: qcow2
virtual size: 100G (107374182400 bytes)
disk size: 3.8G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true

 

QCOW2スナップショット

QCOW2はスナップショットが可能。作成時の処理フローは以下。
・スナップショットを作成、その時点のクラスタの対応表のコピーを保存
・スナップショットに含まれるクラスタへの参照数を+1し、「copied」フラグを外す
・スナップショット後、スナップショットに含まれるクラスタへの変更は、新たにクラスタを確保して行う。新たに確保するクラスタでは、「copied」フラグを有効にする。
QCOW2スナップショット特性
・スナップショット間に親子・前後関係なし。そのため、削除・作成に制限はなし
・QCOW2は単調にファイルサイズが増加する。最適化は仮想マシンを停止し、以下コマンドを実行されば可能

# qemu-img convert -f qcow2 -O qcow2 old.img new.img

 

Base Image機能

元になるディスクイメージからの差分イメージだけを持ったディスクイメージを作成・利用する機能。
スナップショットとは異なる。別のファイルで差分を持ち、差分イメージを複数作成し、複数仮想マシンで利用が可能。
 
QCOW2だけでなく、rawでも利用可能
QEMUでサポートされるファイル形式であればOK
Base Image設定方法

qemu-img create -F qcow2 -b BASE.img -f qcow2 NEW.img

 
Boot Image設定確認方法

qemu-img info NEW.img
〜出力〜
backing file: ★ベースディスク情報が表示される★