mcpField
Q
qemu-kvm

qemu-kvm

github.com/mohitmishra786云与 DevOps269316 次安装18 周前更新
代码仓库

关于 qemu-kvm

为 Agent 提供 QEMU 系统模拟和 KVM 加速指南,涵盖虚拟机设置与管理、设备直通、QMP、磁盘映像及内核调试流程。

主要功能

  1. 01配置 KVM 加速虚拟机
  2. 02virtio 设备与 VFIO 直通
  3. 03QMP 监控器命令
  4. 04使用 libvirt 和 virsh 管理
  5. 05内核启动与 GDB 调试

适用场景

  1. 01使用 KVM 运行 Linux 虚拟机
  2. 02在 QEMU 中测试自定义内核
  3. 03将 GPU 或 NIC 直通到虚拟机
  4. 04管理虚拟机快照和磁盘映像

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill qemu-kvm

安装后在 Claude Code 中输入/qemu-kvm确认已加载。

详细介绍

QEMU / KVM

用途

指导 Agent 使用 QEMU 系统仿真和 KVM 加速:qemu-system-x86_64 的关键标志、virtio 设备、VFIO 设备直通、QMP 监控协议、libvirt/virsh 管理,以及使用 -kernel -initrd -append 进行内核开发。

适用场景

  • 使用硬件加速运行 Linux 虚拟机
  • 无需裸机即可测试自定义内核
  • 通过 VFIO 将 GPU 或 NIC 直通给虚拟机
  • 使用 libvirt 和 virsh 管理虚拟机
  • 创建虚拟机快照,以便进行可复现测试
  • 通过直接启动内核来开发内核或引导加载程序

工作流

1. 基本 KVM 虚拟机
# Check KVM support
egrep -c '(vmx|svm)' /proc/cpuinfo
ls -l /dev/kvm

# Minimal Ubuntu VM
qemu-system-x86_64 \
  -enable-kvm \
  -cpu host \
  -m 4096 \
  -smp 4 \
  -drive file=ubuntu.img,format=qcow2 \
  -netdev user,id=net0 \
  -device virtio-net-pci,netdev=net0 \
  -display none \
  -serial mon:stdio
标志用途
-enable-kvm使用 KVM 加速
-cpu host透传主机 CPU 特性
-mRAM 大小,单位为 MB
-smpvCPU 数量
-drive磁盘映像
-netdev / -device网络后端
2. virtio 设备
# virtio-blk (paravirtual disk — faster)
-device virtio-blk-pci,drive=hd0 \
-drive if=none,id=hd0,file=disk.qcow2,format=qcow2

# virtio-net
-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
-device virtio-net-pci,netdev=net0

# virtio-balloon (dynamic memory)
-device virtio-balloon-pci

# virtio-scsi
-device virtio-scsi-pci,id=scsi0 \
-device scsi-hd,drive=hd0,bus=scsi0.0

为获得更好的性能,始终优先使用 virtio,而不是仿真设备。

3. VFIO 设备直通
# Bind device to vfio-pci
echo 10de 1c03 | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id
sudo virsh nodedev-detach pci_0000_01_00_0

# QEMU with passthrough
qemu-system-x86_64 \
  -enable-kvm -m 8192 -smp 8 \
  -device vfio-pci,host=01:00.0 \
  ...

需要启用 IOMMU(在内核命令行中设置 intel_iommu=on 或 amd_iommu=on)。

4. QMP 监控器
# Start with QMP socket
qemu-system-x86_64 ... \
  -qmp unix:/tmp/qmp.sock,server,nowait

# Send QMP commands
socat - UNIX-CONNECT:/tmp/qmp.sock
{"execute":"qmp_capabilities"}
{"execute":"query-status"}
{"execute":"system_powerdown"}
{"execute":"savevm", "arguments":{"name":"checkpoint1"}}
5. libvirt 和 virsh
# Define VM from XML
virsh define myvm.xml

# Start/stop
virsh start myvm
virsh shutdown myvm
virsh destroy myvm   # force power off

# Console
virsh console myvm

# Snapshot
virsh snapshot-create-as myvm snap1 "before upgrade"

# List
virsh list --all
# Create VM interactively
virt-install \
  --name ubuntu-vm \
  --ram 4096 \
  --vcpus 4 \
  --disk path=/var/lib/libvirt/images/ubuntu.qcow2,size=20 \
  --os-variant ubuntu22.04 \
  --network bridge=virbr0 \
  --graphics none \
  --console pty,target_type=serial \
  --location http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/ \
  --extra-args 'console=ttyS0,115200n8'
6. 内核开发启动
# Direct kernel boot (no disk install needed)
qemu-system-x86_64 \
  -enable-kvm \
  -m 512 \
  -kernel arch/x86/boot/bzImage \
  -initrd /path/to/initramfs.cpio.gz \
  -append "console=ttyS0 root=/dev/sda rw nokaslr" \
  -serial stdio \
  -display none \
  -no-reboot
# With custom rootfs on virtio disk
-drive file=rootfs.ext4,format=raw,if=virtio \
-append "console=ttyS0 root=/dev/vda rw"
7. 在 QEMU 中调试内核
# GDB stub for kernel
qemu-system-x86_64 \
  -kernel bzImage -append "console=ttyS0 nokaslr" \
  -s -S \   # -s = gdb port 1234, -S = wait for gdb
  -serial stdio -display none

# Host GDB
gdb vmlinux
(gdb) target remote :1234
(gdb) break start_kernel
(gdb) continue
8. qcow2 磁盘管理
qemu-img create -f qcow2 disk.qcow2 20G
qemu-img snapshot -c clean disk.qcow2
qemu-img convert -O raw disk.qcow2 disk.raw
qemu-img info disk.qcow2

常见问题

症状原因解决方法
KVM 已禁用警告BIOS 中的 VT-x 已关闭或存在嵌套问题启用 VT-x/AMD-V;检查 /dev/kvm
虚拟机运行很慢KVM 未启用添加 -enable-kvm;安装 kvm 模块
VFIO 组错误设备不在 IOMMU 组中使用 find /sys/kernel/iommu_groups/
虚拟机中没有网络netdev 后端错误使用用户网络或 tap/bridge
启动时内核崩溃root= 设置错误或缺少驱动将 virtio 驱动添加到 initrd
QMP 连接被拒绝套接字尚未就绪等待 QEMU 启动;检查路径

相关技能

  • skills/virtualization/hypervisor-internals — KVM 下的 VT-x/SVM 理论
  • skills/kernel/kernel-testing — 在 QEMU 中启动测试内核
  • skills/kernel/os-dev-scratch — 在 QEMU 中进行最小化 OS 开发
  • skills/kernel/kernel-debugging — 使用 QEMU -s -S 进行 kgdb 调试
  • skills/async-io/dpdk — 使用 QEMU virtio 运行 DPDK
  • skills/platform/riscv-privileged — qemu-system-riscv64

评论

支持 Markdown