Skip to content

Instantly share code, notes, and snippets.

@mcastelino
Last active February 16, 2023 23:25
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save mcastelino/c6b773f0523d781361a55215b5bb2576 to your computer and use it in GitHub Desktop.
Save mcastelino/c6b773f0523d781361a55215b5bb2576 to your computer and use it in GitHub Desktop.
Testing a all virtio QEMU platform with all possible virtio devices

Test Target

Devices needed

name "vhost-scsi", bus virtio-bus
name "vhost-user-blk", bus virtio-bus
name "vhost-user-scsi", bus virtio-bus
name "virtio-blk-device", bus virtio-bus
name "virtio-blk-pci", bus PCI, alias "virtio-blk"
name "virtio-scsi-device", bus virtio-bus
name "virtio-scsi-pci", bus PCI, alias "virtio-scsi"
name "virtio-net-device", bus virtio-bus
name "virtio-net-pci", bus PCI, alias "virtio-net"
name "virtconsole", bus virtio-serial-bus
name "virtio-serial-device", bus virtio-bus
name "virtio-serial-pci", bus PCI, alias "virtio-serial"
name "virtserialport", bus virtio-serial-bus
name "virtio-gpu-device", bus virtio-bus
name "virtio-gpu-pci", bus PCI, alias "virtio-gpu"
name "vhost-vsock-device", bus virtio-bus
name "virtio-balloon-device", bus virtio-bus
name "virtio-balloon-pci", bus PCI, alias "virtio-balloon"
name "virtio-crypto-device", bus virtio-bus
name "virtio-crypto-pci", bus PCI
name "virtio-rng-device", bus virtio-bus
name "virtio-rng-pci", bus PCI, alias "virtio-rng"
name "virtio-9p-device", bus virtio-bus
name "virtio-9p-pci", bus PCI, alias "virtio-9p"

Device optional

name "virtio-vga", bus PCI
name "virtio-input-host-device", bus virtio-bus
name "virtio-input-host-pci", bus PCI, alias "virtio-input-host"
name "virtio-keyboard-device", bus virtio-bus
name "virtio-keyboard-pci", bus PCI, alias "virtio-keyboard"
name "virtio-mouse-device", bus virtio-bus
name "virtio-mouse-pci", bus PCI, alias "virtio-mouse"
name "virtio-tablet-device", bus virtio-bus
name "virtio-tablet-pci", bus PCI, alias "virtio-tablet"

Test command line

if [ -z "$1" ]; then
    IMAGE=clear.img
else
    IMAGE="$1"
    shift
fi

if [[ "$IMAGE" =~ .xz$ ]]; then
    >&2 echo "File \"$IMAGE\" is still xz compressed. Uncompress it first with \"unxz\""
    exit 1
fi

if [ ! -f "$IMAGE" ]; then
    >&2 echo "Can't find image file \"$IMAGE\""
    exit 1
fi
rm -f debug.log

VMN=${VMN:=1}

ip link del testbr
ip link del testvlan
ip link del testtap

ip link add name testbr type bridge
ip link add link testbr name testvlan type macvlan mode bridge
ip addr add 172.20.0.1/16 dev testvlan
ip link set dev testvlan up
ip link set dev testbr up
ip link add link testbr name testtap type macvtap mode bridge
ip link set testtap up

tapindex=$(< /sys/class/net/testtap/ifindex)
tapdev=/dev/tap"$tapindex"

echo "Tap Index :=" $tapindex
echo "Tap Dev :=" $tapdev
echo "Mac Address :="
cat /sys/class/net/testtap/address

# -bios OVMF.fd \
/home/mrcastel/qemu/build/x86_64-softmmu/qemu-system-x86_64 \
    -machine pc,accel=kvm,kernel_irqchip,nvdimm \
    -smp 4,cores=4,threads=1,sockets=1,maxcpus=32 \
    -m 1024M,slots=4,maxmem=16384M \
    -cpu host \
    -nographic \
    -no-user-config \
    -nodefaults \
    -drive file="$IMAGE",if=none,id=drive-virtio-disk0,format=raw \
    -device virtio-blk-pci,scsi=off,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2 \
    -drive file=seed.img,if=virtio,media=cdrom \
    -drive file=clear_scsi.img,if=none,id=drive-virtio-disk1,format=raw \
    -device virtio-scsi-pci,id=virtio-disk1 \
    -netdev user,id=mynet0,hostfwd=tcp::${VMN}0022-:22,hostfwd=tcp::${VMN}2375-:2375 \
    -device virtio-net-pci,netdev=mynet0 \
    -object memory-backend-file,id=mem0,share,mem-path=/home/mrcastel/clear_dimm.img,size=9161408512 \
    -device nvdimm,memdev=mem0,id=nv0 \
    -device virtio-serial-pci,id=virtio-serial0 \
    -chardev stdio,id=charconsole0 \
    -device virtconsole,chardev=charconsole0,id=console0 \
    -netdev tap,fd=3,id=hostnet0,vhost=on,vhostfd=4 3<>$"$tapdev" 4<>/dev/vhost-net \
    -device virtio-net-pci,netdev=hostnet0,id=net0,mac=$(< /sys/class/net/testtap/address) \
    -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=3 \
    -device virtio-rng-pci,rng=rng0 \
    -object rng-random,filename=/dev/random,id=rng0 \
    -device virtio-balloon-pci \
    -device vhost-scsi-pci,id=vhost1,wwpn=naa.50014053386c1931,event_idx=off \
    -object cryptodev-backend-builtin,id=cryptodev0 \
    -device virtio-crypto-pci,id=crypto0,cryptodev=cryptodev0 \

@gentle-love-bear
Copy link

Hey there - I noted the pure virtio-bus devices weren't included in the test command (e.g. virtio-net-device or virtio-blk-device).

Is virtio-bus support working?

Thank you,
Tyson

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment