mcpField
Q
qemu-kvm

qemu-kvm

github.com/mohitmishra786クラウド・DevOps269316 回インストール18 週間前に更新
リポジトリ

qemu-kvm について

QEMU のシステムエミュレーションと KVM アクセラレーションを扱うエージェント向けガイドです。仮想マシンの設定と管理、デバイスパススルー、QMP、ディスクイメージ、カーネルデバッグを説明します。

主な機能

  1. 01KVM 対応仮想マシンの設定
  2. 02virtio デバイスと VFIO パススルー
  3. 03QMP モニターコマンド
  4. 04libvirt と virsh による管理
  5. 05カーネル起動と GDB デバッグ

活用シーン

  1. 01KVM での Linux 仮想マシン実行
  2. 02QEMU でのカスタムカーネル検証
  3. 03GPU や NIC の仮想マシンへの割り当て
  4. 04仮想マシンのスナップショットとディスクイメージ管理

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/qemu-kvmを入力して読み込まれたか確認します。

詳細

QEMU / KVM

目的

QEMU システムエミュレーションと KVM アクセラレーションについてエージェントをガイドします。主な qemu-system-x86_64 フラグ、virtio デバイス、VFIO デバイスパススルー、QMP モニタープロトコル、libvirt/virsh による管理、および -kernel -initrd -append を使ったカーネル開発向け QEMU を扱います。

使用する場面

  • ハードウェアアクセラレーションを使って Linux VM を実行する
  • ベアメタルを使わずにカスタムカーネルをテストする
  • VFIO で GPU または NIC を VM にパススルーする
  • libvirt と virsh で VM を管理する
  • 再現可能なテストのために VM のスナップショットを作成する
  • カーネルを直接起動してカーネルまたはブートローダーを開発する

ワークフロー

1. 基本的な KVM VM
# 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-kvmKVM アクセラレーションを使用します
-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 を確認します
VM の動作が非常に遅いKVM が有効になっていない-enable-kvm を追加し、kvm モジュールをインストールします
VFIO グループエラーデバイスが IOMMU グループに属していないfind /sys/kernel/iommu_groups/ を使用します
VM でネットワークを利用できないnetdev バックエンドが正しくないuser networking と 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

コメント