KVM (Kernel-based Virtual Machine) 是 Linux 核心內建的開源虛擬化方案,自 2.6.20 版併入主線。僅支援具備硬體虛擬化擴充 (Intel VT-x / AMD-V) 的 x86 平台,後擴展至 s390、IA64、PowerPC。KVM 本身僅提供 CPU 與記憶體虛擬化,完整平台虛擬化 (I/O、裝置模擬) 由經修改的 QEMU (qemu-kvm) 完成。
整體架構

- VMM (KVM 核心模組) 運行於 Root Mode Ring 0。
- 宿主機使用者空間進程 (如 QEMU) 運行於 Root Mode Ring 3。
- 客體機核心 運行於 Non-Root Mode Ring 0。
- 客體機使用者進程 運行於 Non-Root Mode Ring 3。
- 每個 VM 即一個標準 Linux 進程,運行於 QEMU 進程位址空間。
- KVM 向上提供
/dev/kvm 字元裝置介面,透過 ioctl 控制 (建立 VM、vCPU、執行 VM 等)。
- 為提升 I/O 效能,KVM 提供 Virtio 半虛擬化驅動 (類比 Xen PV 驅動)。
KVM 運作流程圖

- QEMU-KVM (用戶態) 透過
ioctl(/dev/kvm) 建立 VM 與 vCPU。
- KVM 核心模組初始化相關資料結構,返回用戶態。
- QEMU-KVM 呼叫
ioctl(KVM_RUN) 排程 vCPU 執行。
- 核心執行
VMLAUNCH,透過 VM-Entry 進入客體模式 (Non-Root Mode)。
- 客體非敏感指令直接在實體 CPU 執行。
- 遇敏感指令、外部中斷、內部異常觸發 VM-Exit,CPU 切回 Root Mode,相關資訊記錄於 VMCS。
- VMM 讀取 VMCS 判斷 VM-Exit 原因。
- 若為 I/O 或裝置指令,返回用戶態 QEMU-KVM (Root Mode Ring 3) 模擬處理。
- 其他由 VMM 自行處理。
- 處理完成後再次 VM-Entry 進入客體繼續執行。
核心模組組成
kvm.ko:核心通用模組 (IOMMU、中斷控制、KVM arch、裝置管理等)。
kvm-intel.ko / kvm-amd.ko:針對 Intel/AMD 平台的硬體特定模組。
可見 KVM 僅實作核心 CPU/記憶體/I/O 虛擬化,其餘平台模擬交由 QEMU-KVM 負責。