[libvirt PATCH] qemu: support multiqueue for vdpa net device
Martin Kletzander
mkletzan at redhat.com
Wed Mar 2 09:30:42 UTC 2022
On Tue, Mar 01, 2022 at 05:21:37PM -0600, Jonathon Jongsma wrote:
>Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2024406
>
>Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
>---
> src/conf/domain_conf.c | 11 ++++++
> src/qemu/qemu_domain.c | 3 +-
> .../net-vdpa-multiqueue.x86_64-latest.args | 36 +++++++++++++++++++
> .../qemuxml2argvdata/net-vdpa-multiqueue.xml | 29 +++++++++++++++
> tests/qemuxml2argvtest.c | 1 +
> .../net-vdpa-multiqueue.xml | 36 +++++++++++++++++++
> tests/qemuxml2xmltest.c | 1 +
> 7 files changed, 116 insertions(+), 1 deletion(-)
> create mode 100644 tests/qemuxml2argvdata/net-vdpa-multiqueue.x86_64-latest.args
> create mode 100644 tests/qemuxml2argvdata/net-vdpa-multiqueue.xml
> create mode 100644 tests/qemuxml2xmloutdata/net-vdpa-multiqueue.xml
>
>diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>index 34fec887a3..87117a2ddb 100644
>--- a/src/conf/domain_conf.c
>+++ b/src/conf/domain_conf.c
>@@ -10552,6 +10552,17 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
> goto error;
> }
> def->data.vdpa.devicepath = g_steal_pointer(&dev);
>+
>+ if (!def->model)
>+ def->model = VIR_DOMAIN_NET_MODEL_VIRTIO;
>+
>+ if (!virDomainNetIsVirtioModel(def)) {
>+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>+ _("Wrong <model> 'type' attribute specified "
>+ "with <interface type='vdpa'/>. "
>+ "vdpa requires the virtio-net* frontend"));
>+ goto error;
>+ }
This looks like it belongs to the verification phase as well so that it
does not reject already-existing domain XMLs.
> break;
>
> case VIR_DOMAIN_NET_TYPE_BRIDGE:
>diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
>index acc76c1cd6..6b61fefb8f 100644
>--- a/src/qemu/qemu_domain.c
>+++ b/src/qemu/qemu_domain.c
>@@ -4523,7 +4523,8 @@ qemuDomainValidateActualNetDef(const virDomainNetDef *net,
> actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
> actualType == VIR_DOMAIN_NET_TYPE_DIRECT ||
> actualType == VIR_DOMAIN_NET_TYPE_ETHERNET ||
>- actualType == VIR_DOMAIN_NET_TYPE_VHOSTUSER)) {
>+ actualType == VIR_DOMAIN_NET_TYPE_VHOSTUSER ||
>+ actualType == VIR_DOMAIN_NET_TYPE_VDPA)) {
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> _("interface %s - multiqueue is not supported for network interfaces of type %s"),
> macstr, virDomainNetTypeToString(actualType));
Do I get that we cannot support it for <network/> but we do for
<interface/>? Just asking if I understand it correctly, no need to
change that.
>diff --git a/tests/qemuxml2argvdata/net-vdpa-multiqueue.x86_64-latest.args b/tests/qemuxml2argvdata/net-vdpa-multiqueue.x86_64-latest.args
>new file mode 100644
>index 0000000000..26ef666036
>--- /dev/null
>+++ b/tests/qemuxml2argvdata/net-vdpa-multiqueue.x86_64-latest.args
>@@ -0,0 +1,36 @@
>+LC_ALL=C \
>+PATH=/bin \
>+HOME=/tmp/lib/domain--1-QEMUGuest1 \
>+USER=test \
>+LOGNAME=test \
>+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
>+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
>+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
>+/usr/bin/qemu-system-x86_64 \
>+-name guest=QEMUGuest1,debug-threads=on \
>+-S \
>+-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \
>+-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram \
>+-accel tcg \
>+-cpu qemu64 \
>+-m 214 \
>+-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
>+-overcommit mem-lock=off \
>+-smp 1,sockets=1,cores=1,threads=1 \
>+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
>+-display none \
>+-no-user-config \
>+-nodefaults \
>+-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
>+-mon chardev=charmonitor,id=monitor,mode=control \
>+-rtc base=utc \
>+-no-shutdown \
>+-no-acpi \
>+-boot strict=on \
>+-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \
>+-add-fd set=0,fd=1732,opaque=net0-vdpa \
>+-netdev vhost-vdpa,vhostdev=/dev/fdset/0,id=hostnet0 \
>+-device '{"driver":"virtio-net-pci","mq":true,"vectors":6,"netdev":"hostnet0","id":"net0","mac":"52:54:00:95:db:c0","bus":"pci.0","addr":"0x2"}' \
>+-audiodev '{"id":"audio1","driver":"none"}' \
>+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
>+-msg timestamp=on
>diff --git a/tests/qemuxml2argvdata/net-vdpa-multiqueue.xml b/tests/qemuxml2argvdata/net-vdpa-multiqueue.xml
>new file mode 100644
>index 0000000000..2e38c6f976
>--- /dev/null
>+++ b/tests/qemuxml2argvdata/net-vdpa-multiqueue.xml
>@@ -0,0 +1,29 @@
>+<domain type='qemu'>
>+ <name>QEMUGuest1</name>
>+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>+ <memory unit='KiB'>219136</memory>
>+ <currentMemory unit='KiB'>219136</currentMemory>
>+ <vcpu placement='static'>1</vcpu>
>+ <os>
>+ <type arch='x86_64' machine='pc'>hvm</type>
>+ <boot dev='hd'/>
>+ </os>
>+ <clock offset='utc'/>
>+ <on_poweroff>destroy</on_poweroff>
>+ <on_reboot>restart</on_reboot>
>+ <on_crash>destroy</on_crash>
>+ <devices>
>+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
>+ <controller type='usb' index='0'/>
>+ <controller type='ide' index='0'/>
>+ <controller type='pci' index='0' model='pci-root'/>
>+ <interface type='vdpa'>
>+ <mac address='52:54:00:95:db:c0'/>
>+ <source dev='/dev/vhost-vdpa-0'/>
>+ <driver queues='2'/>
>+ </interface>
>+ <input type='mouse' bus='ps2'/>
>+ <input type='keyboard' bus='ps2'/>
>+ <memballoon model='none'/>
>+ </devices>
>+</domain>
>diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
>index ce475df466..7e1167e60e 100644
>--- a/tests/qemuxml2argvtest.c
>+++ b/tests/qemuxml2argvtest.c
>@@ -1609,6 +1609,7 @@ mymain(void)
> DO_TEST_FAILURE("net-hostdev-fail",
> QEMU_CAPS_DEVICE_VFIO_PCI);
> DO_TEST_CAPS_LATEST("net-vdpa");
>+ DO_TEST_CAPS_LATEST("net-vdpa-multiqueue");
>
> DO_TEST("hostdev-pci-multifunction",
> QEMU_CAPS_KVM,
>diff --git a/tests/qemuxml2xmloutdata/net-vdpa-multiqueue.xml b/tests/qemuxml2xmloutdata/net-vdpa-multiqueue.xml
>new file mode 100644
>index 0000000000..0876d5df62
>--- /dev/null
>+++ b/tests/qemuxml2xmloutdata/net-vdpa-multiqueue.xml
>@@ -0,0 +1,36 @@
>+<domain type='qemu'>
>+ <name>QEMUGuest1</name>
>+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>+ <memory unit='KiB'>219136</memory>
>+ <currentMemory unit='KiB'>219136</currentMemory>
>+ <vcpu placement='static'>1</vcpu>
>+ <os>
>+ <type arch='x86_64' machine='pc'>hvm</type>
>+ <boot dev='hd'/>
>+ </os>
>+ <clock offset='utc'/>
>+ <on_poweroff>destroy</on_poweroff>
>+ <on_reboot>restart</on_reboot>
>+ <on_crash>destroy</on_crash>
>+ <devices>
>+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
>+ <controller type='usb' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>+ </controller>
>+ <controller type='ide' index='0'>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>+ </controller>
>+ <controller type='pci' index='0' model='pci-root'/>
>+ <interface type='vdpa'>
>+ <mac address='52:54:00:95:db:c0'/>
>+ <source dev='/dev/vhost-vdpa-0'/>
>+ <model type='virtio'/>
>+ <driver queues='2'/>
>+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
>+ </interface>
>+ <input type='mouse' bus='ps2'/>
>+ <input type='keyboard' bus='ps2'/>
>+ <audio id='1' type='none'/>
>+ <memballoon model='none'/>
>+ </devices>
>+</domain>
>diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
>index 052950b86f..2174965784 100644
>--- a/tests/qemuxml2xmltest.c
>+++ b/tests/qemuxml2xmltest.c
>@@ -485,6 +485,7 @@ mymain(void)
> DO_TEST_NOCAPS("net-coalesce");
> DO_TEST_NOCAPS("net-many-models");
> DO_TEST("net-vdpa", QEMU_CAPS_NETDEV_VHOST_VDPA);
>+ DO_TEST("net-vdpa-multiqueue", QEMU_CAPS_NETDEV_VHOST_VDPA);
>
> DO_TEST_NOCAPS("serial-tcp-tlsx509-chardev");
> DO_TEST_NOCAPS("serial-tcp-tlsx509-chardev-notls");
>--
>2.35.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20220302/e4e2a88e/attachment-0001.sig>
More information about the libvir-list
mailing list