QEMU tcg 模式使用直通设备
我第一次接触直通的时候,我当时正在做二进制翻译相关的东西, 我当时对于 VFIO 的原理不了解,只是感觉 tcg 很慢,VFIO 很快,两个东西放在一次有点不协调, 不过也想不到为什么他们会不兼容,今天花费了 8 分钟测试了一下,他们两个互相不冲突的。
2025-12-30 最新的 qemu + kernel
启动参数:
qemu-system-x86_64 \
-device virtio-scsi,id=scsi1 \
-device scsi-hd,drive=virtio-scsi_1,bus=scsi1.0,channel=0,scsi-id=1,lun=0 \
-drive file=/home/martins3/data/hack/vm/yyds/img/virtio-scsi_1,if=none,id=virtio-scsi_1 \
-device megasas-gen2,id=scsi2 \
-device scsi-hd,drive=megasas-gen2_1,bus=scsi2.0,channel=0,scsi-id=1,lun=0 \
-drive file=/home/martins3/data/hack/vm/yyds/img/megasas-gen2_1,if=none,id=megasas-gen2_1 \
-smp 32,maxcpus=32 \
-m 3G,slots=8,maxmem=256G \
-object memory-backend-memfd,id=mem0,size=3G,prealloc=off,share=on \
-numa node,nodeid=0,memdev=mem0 \
-drive file=/home/martins3/data/hack/vm/yyds/img/boot1,format=qcow2,id=boot1,if=none,discard=on,aio=native,cache.direct=on,media=disk \
-device virtio-blk-pci,drive=boot1,bootindex=1 \
-kernel /home/martins3/data/kernel/linux-build/arch/x86/boot/bzImage \
-append ' oops=panic panic=0 nokaslr apparmor=0 selinux=0 preempt=full systemd.unified_cgroup_hierarchy=1 mitigations=off rcutree.sysrq_rcu=1 crashkernel=512M loglevel=8 zswap.enabled=0 BOOT_IMAGE=(hd0,gpt2)/vmlinuz-6.14.0-63.fc42.x86_64 root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root console=tty0 nokaslr console=ttyS0,9600 earlyprink=serial mitigations=off audit=0 ' \
-device virtio-net,netdev=vif_s_29_0,mac=52:54:00:00:1d:00,iommu_platform=on,disable-legacy=on \
-netdev tap,ifname=vif_s_29_0,id=vif_s_29_0,script=no,downscript=no,vhost=on \
-device virtio-net,netdev=net1 \
-netdev user,id=net1,hostfwd=tcp::50584-:22 \
-machine q35,hpet=off,smm=off,cxl=on \
-chardev socket,id=mon4,path=/home/martins3/data/hack/vm/yyds/s/qmp-no-pretty,server=on,wait=off \
-mon chardev=mon4,mode=control \
-chardev socket,id=mon3,path=/home/martins3/data/hack/vm/yyds/s/qmp-shell,server=on,wait=off \
-mon chardev=mon3,mode=control \
-chardev socket,id=mon2,path=/home/martins3/data/hack/vm/yyds/s/hmp,server=on,wait=off \
-mon chardev=mon2 \
-chardev socket,id=mon1,path=/home/martins3/data/hack/vm/yyds/s/qmp,server=on,wait=off \
-mon chardev=mon1,mode=control,pretty=on \
-initrd /home/martins3/data/kernel/initramfs-6.14.0-63.fc42.x86_64.img.linux-build.raw.zst \
-device virtio-balloon,id=balloon0,deflate-on-oom=true \
-device ipmi-bmc-sim,id=virt-bmc \
-device pci-ipmi-kcs,bmc=virt-bmc,id=virt-bmc-pci \
--accel tcg \
-device edu \
-pidfile /home/martins3/data/hack/vm/yyds/s/pid \
-vga qxl \
-vnc :44680,password=off \
-device virtio-serial \
-chardev stdio,id=main_char,server=on,wait=off,id=main_char,mux=on \
-serial chardev:main_char \
-device virtconsole,chardev=main_char \
-mon chardev=main_char,mode=readline \
-chardev pty,mux=on,id=char_pty \
-device virtconsole,chardev=char_pty \
-serial chardev:char_pty \
-chardev socket,path=/home/martins3/data/hack/vm/yyds/s/qga.sock,server=on,wait=off,id=qga0 \
-device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 \
-chardev socket,path=/home/martins3/data/hack/vm/yyds/s/vport.sock,server=on,wait=off,id=vport \
-device virtserialport,chardev=vport,name=org.qemu.vport.0 \
-device pcie-root-port,id=root_port_1 \
-no-user-config \
-nodefaults \
-name guest=martins3,debug-threads=on \
-uuid 6f5ea67d-7934-4351-83f4-b1ce6cb35867 \
-device virtio-keyboard \
-usb \
-device qemu-xhci,p2=8,p3=8,id=usb \
-device usb-kbd,id=input0,bus=usb.0,port=2 \
-device usb-tablet,id=input1,bus=usb.0,port=3
🧀 fastfetch
.',;::::;,'. martins3@localhost
.';:cccccccccccc:;,. ------------------
.;cccccccccccccccccccccc;. OS: Fedora Linux 42 (Server Edition) x84
.:cccccccccccccccccccccccccc:. Host: KVM/QEMU Standard PC (Q35 + ICH9,)
.;ccccccccccccc;.:dddl:.;ccccccc;. Kernel: Linux 6.18.1-martins3-00001-g34a
.:ccccccccccccc;OWMKOOXMWd;ccccccc:. Uptime: 2 mins
q:ccccccccccccc;KMMc;cc;xMMc;ccccccc:. Packages: 1319 (nix-user)
,cccccccccccccc;MMM.;cc;;WW:;cccccccc, Shell: zsh 5.9
:cccccccccccccc;MMM.;cccccccccccccccc: Terminal: /dev/pts/0
:ccccccc;oxOOOo;MMM000k.;cccccccccccc: CPU: QEMU Virtual version 2.5+ (32) @ 3.00 GHz
cccccc;0MMKxdd:;MMMkddc.;cccccccccccc; GPU: Red Hat, Inc. QXL paravirtual graphic card
ccccc;XMO';cccc;MMM.;cccccccccccccccc' Memory: 429.95 MiB / 2.33 GiB (18%)
ccccc;MMo;ccccc;MMW.;ccccccccccccccc; Swap: 0 B / 2.33 GiB (0%)
ccccc;0MNc.ccc.xMMd;ccccccccccccccc; Disk (/): 44.49 GiB / 348.93 GiB (13%) - xfs
cccccc;dNMWXXXWM0:;cccccccccccccc:, Local IP (enp0s6): 10.0.2.15/24
cccccccc;.:odl:.;cccccccccccccc:,. Locale: en_US.UTF-8
ccccccccccccccccccccccccccccc:'.
:ccccccccccccccccccccccc:;,..
':cccccccccccccccc::;,.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 8M 0 disk
sdb 8:16 0 10G 0 disk
vda 251:0 0 350G 0 disk
├─vda1 251:1 0 1M 0 part
├─vda2 251:2 0 1G 0 part /boot
└─vda3 251:3 0 349G 0 part
└─fedora-root 253:0 0 349G 0 lvm /
zram0 252:0 0 2.3G 0 disk [SWAP]
nullb0 254:0 0 250G 0 disk
nvme0n1 259:0 0 953.9G 0 disk
发现存在这个问题,但是没关系,不用直通也有
qemu-system-x86_64: VFIO_MAP_DMA failed: Invalid argument
qemu-system-x86_64: vfio_container_dma_map(0x555d4815ef40, 0xc000054000, 0x2000, 0x7f4580644000) = -22 (Invalid argument)
qemu-system-x86_64: VFIO_MAP_DMA failed: Invalid argument
qemu-system-x86_64: vfio_container_dma_map(0x555d4815ef40, 0xc000057000, 0x1000, 0x7f4580647000) = -22 (Invalid argument)
qemu-system-x86_64: VFIO_MAP_DMA failed: Invalid argument
qemu-system-x86_64: vfio_container_dma_map(0x555d4815ef40, 0xc000040000, 0x10000 , 0x7f4580520000) = -22 (Invalid argument)
qemu-system-x86_64: vfio-pci: Cannot read device rom at 0000:02:00.0
结束,睡觉!
本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。