結論: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の役割を分けて見る必要があります。

要点:KVMはカーネル側の仮想化基盤、QEMUは仮想マシンとデバイス、libvirtは管理インターフェースを担当します。「KVMだけでVMのすべてを実装している」と考えると混乱します。

ハイパーバイザーとは

ハイパーバイザーは、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とツール群です。 virshvirt-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、監視など、同時起動する役割から積算する

必要量は「KVMを使うか」だけでは決まりません。各VMに割り当てるvCPU、メモリ、ストレージと、同時起動する台数を書き出して判断します。

KVMとデスクトップ向け仮想化をどう選ぶか

KVMが向く例

デスクトップ向け製品も比較したい例

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が適しています。両方を組み合わせる開発環境もあります。

参考資料と関連記事

Amazon.co.jpで32GB・1TB搭載PCの候補を確認する

著者について

intrajp。Linux、クラウドインフラ、Kubernetesなどの技術情報を発信しています。 この記事はLinuxカーネル、KVM、libvirtなどの公式資料を基に、仮想化スタックの役割を整理したものです。

運営者情報と記事の方針を見る