From 6d5673c3b64325d09390821ca8c296d5ca54433f Mon Sep 17 00:00:00 2001 From: Stefan Reiter Date: Mon, 21 Jun 2021 17:33:18 +0200 Subject: [PATCH] cfg2cmd: make io_uring default The 'aio' setting is not visible to the guest, and so can be changed during migrations or snapshots without issue. It is thus only dependendent on the actual QEMU version being >= 6.0, not machine version. Signed-off-by: Stefan Reiter --- PVE/QemuServer.pm | 22 +++++++++++++------- test/cfg2cmd/pinned-version-pxe-pve.conf.cmd | 4 ++-- test/cfg2cmd/pinned-version-pxe.conf.cmd | 4 ++-- test/cfg2cmd/pinned-version.conf.cmd | 4 ++-- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index fe31741e..07dd14a1 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -1523,7 +1523,7 @@ sub get_initiator_name { } sub print_drive_commandline_full { - my ($storecfg, $vmid, $drive, $pbs_name) = @_; + my ($storecfg, $vmid, $drive, $pbs_name, $io_uring) = @_; my $path; my $volid = $drive->{file}; @@ -1599,12 +1599,17 @@ sub print_drive_commandline_full { $cache_direct = 1; } - # aio native works only with O_DIRECT if (!$drive->{aio}) { - if($cache_direct) { - $opts .= ",aio=native"; + if ($io_uring) { + # io_uring supports all cache modes + $opts .= ",aio=io_uring"; } else { - $opts .= ",aio=threads"; + # aio native works only with O_DIRECT + if($cache_direct) { + $opts .= ",aio=native"; + } else { + $opts .= ",aio=threads"; + } } } @@ -3667,7 +3672,8 @@ sub config_to_command { push @$devices, '-blockdev', print_pbs_blockdev($pbs_conf, $pbs_name); } - my $drive_cmd = print_drive_commandline_full($storecfg, $vmid, $drive, $pbs_name); + my $drive_cmd = print_drive_commandline_full( + $storecfg, $vmid, $drive, $pbs_name, min_version($kvmver, 6, 0)); # extra protection for templates, but SATA and IDE don't support it.. my $read_only = PVE::QemuConfig->is_template($conf) @@ -4081,7 +4087,9 @@ sub qemu_objectdel { sub qemu_driveadd { my ($storecfg, $vmid, $device) = @_; - my $drive = print_drive_commandline_full($storecfg, $vmid, $device); + my $kvmver = get_running_qemu_version($vmid); + my $io_uring = min_version($kvmver, 6, 0); + my $drive = print_drive_commandline_full($storecfg, $vmid, $device, undef, $io_uring); $drive =~ s/\\/\\\\/g; my $ret = PVE::QemuServer::Monitor::hmp_cmd($vmid, "drive_add auto \"$drive\""); diff --git a/test/cfg2cmd/pinned-version-pxe-pve.conf.cmd b/test/cfg2cmd/pinned-version-pxe-pve.conf.cmd index fd87f802..095b72e6 100644 --- a/test/cfg2cmd/pinned-version-pxe-pve.conf.cmd +++ b/test/cfg2cmd/pinned-version-pxe-pve.conf.cmd @@ -23,10 +23,10 @@ -device 'virtio-rng-pci,rng=rng0,max-bytes=1024,period=1000,bus=pci.1,addr=0x1d' \ -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \ -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \ - -drive 'if=none,id=drive-ide2,media=cdrom,aio=threads' \ + -drive 'if=none,id=drive-ide2,media=cdrom,aio=io_uring' \ -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' \ -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \ - -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.raw,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=native,detect-zeroes=unmap' \ + -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.raw,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=io_uring,detect-zeroes=unmap' \ -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \ -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \ -device 'virtio-net-pci,mac=A2:C0:43:77:08:A1,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300,romfile=pxe-virtio.rom' \ diff --git a/test/cfg2cmd/pinned-version-pxe.conf.cmd b/test/cfg2cmd/pinned-version-pxe.conf.cmd index 215df3af..5f738f38 100644 --- a/test/cfg2cmd/pinned-version-pxe.conf.cmd +++ b/test/cfg2cmd/pinned-version-pxe.conf.cmd @@ -21,10 +21,10 @@ -device 'VGA,id=vga,bus=pcie.0,addr=0x1' \ -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \ -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \ - -drive 'if=none,id=drive-ide2,media=cdrom,aio=threads' \ + -drive 'if=none,id=drive-ide2,media=cdrom,aio=io_uring' \ -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' \ -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \ - -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.raw,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=native,detect-zeroes=unmap' \ + -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.raw,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=io_uring,detect-zeroes=unmap' \ -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \ -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \ -device 'virtio-net-pci,mac=A2:C0:43:77:08:A1,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300,romfile=pxe-virtio.rom' \ diff --git a/test/cfg2cmd/pinned-version.conf.cmd b/test/cfg2cmd/pinned-version.conf.cmd index 6b01dcf8..e072491e 100644 --- a/test/cfg2cmd/pinned-version.conf.cmd +++ b/test/cfg2cmd/pinned-version.conf.cmd @@ -21,10 +21,10 @@ -device 'VGA,id=vga,bus=pcie.0,addr=0x1' \ -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \ -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \ - -drive 'if=none,id=drive-ide2,media=cdrom,aio=threads' \ + -drive 'if=none,id=drive-ide2,media=cdrom,aio=io_uring' \ -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200' \ -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \ - -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.raw,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=native,detect-zeroes=unmap' \ + -drive 'file=/var/lib/vz/images/8006/vm-8006-disk-0.raw,if=none,id=drive-scsi0,discard=on,format=raw,cache=none,aio=io_uring,detect-zeroes=unmap' \ -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \ -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \ -device 'virtio-net-pci,mac=A2:C0:43:77:08:A1,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' \ -- 2.39.5