what-is-kvm
KVMとは?QEMUやlibvirtの違いって何なの?
な状態だったので、今一度調べてみたので、メモを残します
先に参考情報
- 【図解】Linux KVMの仕組みとは?
- 第2回 Linux KVMで知る仮想マシンの概要
- 第7回 プロセッサの仮想化をソースから知る[その2:qemu-kvm]
- QEMU、KVM、libvirtの基礎知識まとめ
コンピュータを構成する3台要素
要素 | 担当 |
---|---|
CPU | KVMカーネルモジュール |
システムメモリ | QEMU |
I/Oデバイス | QEMU |
KVMとは
KVM は Kernel-based Virtual Machine の略
Linuxカーネルに搭載されている、仮想化を支援する機能(モジュール)
KVMはモジュールでしかなく、単体では機能しないので、
QEMUのようなエミュレータが必要になる
KVMを使うためには、CPUが仮想化に対応している必要がある
Intel製 -> Intel VT-x(Virtualization Technology)
AMD製 -> AMD-V(AMD Virtualization)
[root@intel-server]# lsmod | grep kvm
kvm_intel 282624 0
kvm 663552 1 kvm_intel
KVMはもともと、イスラエルのQumranet社が開発したOSSで、
2006年10月にアナウンスされた後、たった2カ月後の
2006年12月に、Linux Kernelにマージされて話題になったらしい
QEMUとは
QEMU は 汎用なオープンソースのマシンエミュレータ・バーチャライザー
QEMUは単体で仮想マシンの作成・起動・管理を一通り対応できるが、
CPUの処理まで全てソフトウェア的に再現すると、性能が劇的に低下する
KVM経由で、実CPUに仮想マシン上のプログラムを直接実行させることで、
仮想マシンの実行速度を向上させるようにしている
QEMUはフランスの著名なソフトウェア開発者、
ファブリス・ベラール(Fabrice Bellard)氏が開発を創始し、
GPLに基づいてオープンソースソフトウェアとして公開されている
libvirtとは
libvirt は 仮想マシンを管理するソフトウェア群で、
APIライブラリ, libvirtd, virsh を含んでいる
libvirtは様々な仮想化プロバイダ/ハイパーバイザを管理する共通の手段を提供する
KVM/QEMU, Xen, LXC, OpenVZ, VirtualBox など、サポート範囲が広い
OpenNebula は 仮想マシンの管理に libvirt を使って
設定の一部を特定のハイパーバイザに依存しないようにしているらしい
[蛇足] libvirtdを使ってみる
前準備
# 作業用コンテナを作成
docker run -it --rm --privileged=true --name tmp centos:centos7.9.2009 /bin/sh
## NOTE: --privileged=true がなければ
## Failed to create controller cpu for group: Read-only file system となる
# KVM周りのパッケージをインストール
yum install -y qemu-kvm libvirt virt-install
# libvirtd, virtlogd を起動する
/usr/sbin/libvirtd -d
/usr/sbin/virtlogd -d
KVM/QEMUで作ったVMを動かそうとしてみるも、、
下記のやり方だとKVMが正しく動作してないようで、
コンテナでKVM動かしてみる実験はここで一旦断念した
# VMを作成
virt-install \
--network=none \
--name test-vm1 \
--vcpus 1 \
--memory 1024 \
--disk path=/var/lib/libvirt/images/test-vm1.img,size=20 \
--location 'http://ftp.iij.ad.jp/pub/linux/centos/8-stream/BaseOS/x86_64/os/' \
--os-type linux \
--os-variant rhel8.0 \
--graphics none \
--console pty,target_type=serial \
--extra-args 'console=tty0 console=ttyS0,115200n8'
## NOTE: WARNING KVM acceleration not available, using 'qemu'
## ...
## Reached target Basic System
## ここでハングした
コメント