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@xxxxxxxxxx > 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; -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list