結論:KVMは一般にType 1だが、二分法だけでは説明しきれない
KVM(Kernel-based Virtual Machine)は、一般にType 1ハイパーバイザーへ分類されます。 KVMが単なるデスクトップアプリケーションではなく、Linuxカーネルの一部としてCPUとメモリの仮想化を担うためです。
一方、実際の仮想マシンはQEMUを中心とするLinuxのプロセスとして動きます。 そのため「ハードウェアの上に専用ハイパーバイザーだけがある」という典型的なType 1の図とは見え方が異なります。 KVMを理解するには、Type 1かType 2かだけでなく、KVM、QEMU、libvirtの役割を分けて見る必要があります。
ハイパーバイザーとは
ハイパーバイザーは、1台の物理マシン上で複数の仮想マシンを分離して動かし、CPU、メモリ、ストレージ、ネットワークなどの資源を割り当てる仕組みです。 仮想マシン内で動くOSをゲストOS、仮想化を提供する側をホストと呼びます。
コンテナはホストのカーネルを共有しますが、仮想マシンはゲストOS自身のカーネルを動かします。 異なるOSの検証、カーネル機能のテスト、強い分離が必要な環境では仮想マシンが適しています。
Type 1とType 2の違い
| 分類 | 構造 | 主な用途 | 代表例 |
|---|---|---|---|
| Type 1 | ハードウェアに近い層で仮想化を提供 | サーバー、クラウド、常時稼働基盤 | KVM、Xen、VMware ESXi、Hyper-V |
| Type 2 | ホストOS上のアプリケーションとして動作 | デスクトップ検証、学習、互換性確認 | VirtualBox、VMware Workstationなど |
この分類は全体像をつかむには便利ですが、現代の仮想化ソフトウェアはカーネルモジュールやハードウェア支援を組み合わせます。 製品名を表へ当てはめるだけで、性能や安全性が自動的に決まるわけではありません。 実装の層、管理方法、更新、VMの設定まで確認することが重要です。
KVM・QEMU・libvirtの役割
virt-manager / virsh
│ VMの作成・起動・停止
▼
libvirt
│ 設定と管理API
▼
QEMU ── 仮想マシン、仮想デバイス、ディスクイメージ
│
▼
/dev/kvm ── vCPU実行、メモリ仮想化
│
▼
Linuxカーネル(KVMモジュール)
│
▼
Intel VT-x / AMD-V対応CPU
KVM:Linuxカーネル側の仮想化基盤
KVMはLinuxカーネルの仮想化機能です。ユーザー空間のプログラムは/dev/kvmを介してVMや仮想CPUを作成し、CPUの仮想化支援機能を利用します。
VMのスケジューリングやメモリ管理にはLinuxカーネルの既存機能も使われます。
QEMU:仮想マシンとデバイスを実装する
QEMUはユーザー空間で動き、仮想マシンの構成、ディスク、ネットワークカードなどのデバイスモデルを提供します。 KVMアクセラレーションを使える環境では、ゲストのCPU命令を対応CPU上で効率的に実行できます。 KVMを使わずTCGによるソフトウェアエミュレーションを行う構成もありますが、目的と性能特性が異なります。
libvirt:異なる仮想化基盤を共通の方法で管理する
libvirtはVMの定義、起動、停止、ネットワーク、ストレージなどを管理するAPIとツール群です。
virshやvirt-managerからの操作を受け、QEMU/KVMを制御します。
KVMとlibvirtは同義ではなく、libvirtはKVM以外の仮想化基盤も扱えます。
Linuxがあるのに、なぜKVMはType 1なのか
「LinuxというホストOS上で動くならType 2ではないか」と感じるかもしれません。 しかし、KVMでは仮想化の中核がLinuxカーネル内部にあり、CPUの仮想化支援やメモリ管理へ直接関わります。 QEMUはユーザー空間プロセスですが、ゲストコードの実行をすべて通常のアプリケーションとして処理しているわけではありません。
LinuxはKVMにとって「下にある別のホストOS」というより、スケジューラー、メモリ管理、デバイスドライバーを備えたハイパーバイザー基盤の一部になります。 この実装上の性質から、KVMは一般にType 1として扱われます。 ただし分類の呼び方にこだわるより、どの処理をカーネルとユーザー空間が担当するかを見る方が実用的です。
KVMを使えるか確認する
x86環境でKVMを利用するには、Intel VT-xまたはAMD-Vに対応したCPUと、ファームウェアで有効になった仮想化支援が必要です。 まずCPUフラグを確認します。
grep -Eoc '(vmx|svm)' /proc/cpuinfo
0より大きい値なら、Linuxからvmx(Intel)またはsvm(AMD)が見えています。
出力値は対応している論理CPU数であり、VMを同時起動できる台数ではありません。
KVMモジュールとデバイスも確認します。
lsmod | grep '^kvm'
test -e /dev/kvm && echo "KVM device is available"
libvirtの検証ツールを導入している環境では、ホスト全体を次のコマンドで確認できます。
virt-host-validate
CPUが対応していても、UEFI設定で仮想化支援が無効になっている場合があります。 また、クラウドVMや別の仮想マシン内でKVMを使うには、ホスト側でネストされた仮想化が提供されている必要があります。
KVM用PCで重視するスペック
| 構成 | メモリの目安 | 考え方 |
|---|---|---|
| Linux VMを1台、短時間使用 | ホスト16GBから検討 | ゲストへ4~8GB割り当て、ホスト側の余裕を残す |
| 複数VMとIDEを同時使用 | 32GBから検討 | VMの合計割当量だけでなく、ホストとファイルキャッシュも見込む |
| 複数ノードの検証環境 | 32~64GBを実測で判断 | Kubernetes、DB、監視など、同時起動する役割から積算する |
- CPU:仮想化支援への対応に加え、ホストと複数vCPUを同時に動かす余裕を確認する
- メモリ:ゲストへの割当量を合計し、Linuxホストと普段のアプリケーション用を残す
- SSD:qcow2イメージ、スナップショット、ISOの増加を見込み、空き容量とランダムI/Oを重視する
- 冷却:複数VMでCPU負荷が続く場合、短時間の最大性能だけでなく持続性能を見る
- 増設性:メモリとSSDを後から増やせるか、購入前に確認する
必要量は「KVMを使うか」だけでは決まりません。各VMに割り当てるvCPU、メモリ、ストレージと、同時起動する台数を書き出して判断します。
KVMとデスクトップ向け仮想化をどう選ぶか
KVMが向く例
- Linuxをホストとして、サーバーやクラウドに近い構成を検証する
- 複数VMをスクリプトやAPIで管理する
- libvirt、cloud-init、Ansibleなどと組み合わせる
- Linuxのネットワーク、ストレージ、カーネル機能を学習する
デスクトップ向け製品も比較したい例
- WindowsやmacOSを普段のホストOSとして使う
- GUIで手軽にVMを作り、短時間だけ別OSを確認したい
- ホストとゲスト間のクリップボードやフォルダー共有を優先する
Type 1だから常に適切、Type 2だから常に遅い、という選び方はできません。 ホストOS、ゲストOS、必要なデバイス、運用方法に合う製品を選びます。
よくある質問
KVMはType 1とType 2のどちらですか?
一般にはType 1です。KVMがLinuxカーネルの一部としてCPUとメモリの仮想化を担うためです。 ただしQEMUなどのユーザー空間プロセスも組み合わせるため、古典的な二分法だけで構造のすべてを説明することはできません。
KVMとQEMUは同じものですか?
同じものではありません。KVMはカーネル側の仮想化機能、QEMUは仮想マシンと仮想デバイスを実装するプログラムです。 LinuxではQEMUとKVMを組み合わせる構成が広く使われます。
Dockerを使っていればKVMは不要ですか?
用途が異なります。同じLinuxカーネルを共有してアプリケーションを分離するならコンテナが軽量です。 別のカーネル、異なるOS、仮想ネットワークを含むマシン単位の検証にはVMが適しています。両方を組み合わせる開発環境もあります。