On 21.05.2013 18:37, Laine Stump wrote:
On 05/21/2013 10:18 AM, Michal Privoznik wrote:
> In order to learn libvirt multiqueue several things must be done:
>
> 1) The '/dev/net/tun' device needs to be opened multiple times with
> IFF_MULTI_QUEUE flag passed to ioctl(fd, TUNSETIFF, &ifr);
>
> 2) Similar, the '/dev/vhost-net' must be opened as many times as in 1)
s/Similar, the/Similarly,/
> in order to keep 1:1 ratio recommended by qemu and kernel folks.
>
> 3) The command line construction code needs to switch from 'fd=X' to
> 'fds=X:Y:...:Z' and from 'vhostfd=X' to
'vhostfds=X:Y:...:Z'.
>
> 4) The monitor handling code needs to learn to pass multiple FDs.
> ---
> src/network/bridge_driver.c | 2 +-
> src/qemu/qemu_command.c | 260 ++++++++++++++++++++++++++++++--------------
> src/qemu/qemu_command.h | 13 ++-
> src/qemu/qemu_hotplug.c | 98 ++++++++++++-----
> src/qemu/qemu_monitor.c | 78 +++++++------
> src/qemu/qemu_monitor.h | 8 +-
> src/uml/uml_conf.c | 5 +-
> src/util/virnetdevtap.c | 113 ++++++++++---------
> src/util/virnetdevtap.h | 2 +
> 9 files changed, 378 insertions(+), 201 deletions(-)
ACK. (I'm undecided if we should error out if multi-queue is
requested
when running non-privileged, and I don't care enough about the extra
braces to require you to add them (and it's not in the official coding
style))
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Okay, I squashed this in:
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 6011882..6203eec 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -371,7 +371,10 @@ qemuNetworkIfaceConnect(virDomainDefPtr def,
goto cleanup;
}
/* qemuCreateInBridgePortWithHelper can only create a single FD */
- *tapfdSize = 1;
+ if (*tapfdSize > 1) {
+ VIR_WARN("Ignoring multiqueue network request");
+ *tapfdSize = 1;
+ }
}
virDomainAuditNetDevice(def, net, "/dev/net/tun", true);
@@ -394,9 +397,9 @@ qemuNetworkIfaceConnect(virDomainDefPtr def,
}
if (net->filter && net->ifname &&
- virDomainConfNWFilterInstantiate(conn, def->uuid, net) < 0)
+ virDomainConfNWFilterInstantiate(conn, def->uuid, net) < 0) {
goto cleanup;
-
+ }
ret = 0;