<source network='default'/>
<target dev='vnet1'/>
<model type='virtio'/>
- <b><driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off'/></b>
+ <b><driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off' queues='5'/></b>
</interface>
</devices>
...</pre>
<b>In general you should leave this option alone, unless you
are very certain you know what you are doing.</b>
</dd>
+ <dt><code>queues</code></dt>
+ <dd>
+ The optional <code>queues</code> attribute controls the number of
+ queues to be used for the<a href="http://www.linux-kvm.org/page/Multiqueue">
+ Multiqueue virtio-net</a> feature. If the interface has <code><model
+ type='virtio'/></code>, multiple packet processing queues can be
+ created; each queue will potentially be handled by a different
+ processor, resulting in much higher throughput.
+ <span class="since">Since 1.0.6 (QEMU and KVM only)</span>
+ </dd>
</dl>
<h5><a name="elementsNICSTargetOverride">Overriding the target element</a></h5>
</choice>
</attribute>
</optional>
+ <optional>
+ <attribute name='queues'>
+ <ref name="positiveInteger"/>
+ </attribute>
+ </optional>
<optional>
<attribute name="txmode">
<choice>
char *txmode = NULL;
char *ioeventfd = NULL;
char *event_idx = NULL;
+ char *queues = NULL;
char *filter = NULL;
char *internal = NULL;
char *devaddr = NULL;
txmode = virXMLPropString(cur, "txmode");
ioeventfd = virXMLPropString(cur, "ioeventfd");
event_idx = virXMLPropString(cur, "event_idx");
+ queues = virXMLPropString(cur, "queues");
} else if (xmlStrEqual(cur->name, BAD_CAST "filterref")) {
if (filter) {
virReportError(VIR_ERR_XML_ERROR, "%s",
}
def->driver.virtio.event_idx = idx;
}
+ if (queues) {
+ unsigned int q;
+ if (virStrToLong_ui(queues, NULL, 10, &q) < 0) {
+ virReportError(VIR_ERR_XML_DETAIL,
+ _("'queues' attribute must be positive number: %s"),
+ queues);
+ goto error;
+ }
+ def->driver.virtio.queues = q;
+ }
}
def->linkstate = VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DEFAULT;
VIR_FREE(txmode);
VIR_FREE(ioeventfd);
VIR_FREE(event_idx);
+ VIR_FREE(queues);
VIR_FREE(filter);
VIR_FREE(type);
VIR_FREE(internal);
virBufferAsprintf(buf, " event_idx='%s'",
virDomainVirtioEventIdxTypeToString(def->driver.virtio.event_idx));
}
+ if (def->driver.virtio.queues)
+ virBufferAsprintf(buf, " queues='%u'", def->driver.virtio.queues);
virBufferAddLit(buf, "/>\n");
}
}
enum virDomainNetVirtioTxModeType txmode;
enum virDomainIoEventFd ioeventfd;
enum virDomainVirtioEventIdx event_idx;
+ unsigned int queues; /* Multiqueue virtio-net */
} virtio;
} driver;
union {
--- /dev/null
+<domain type='qemu'>
+ <name>test</name>
+ <uuid>bba65c0e-c049-934f-b6aa-4e2c0582acdf</uuid>
+ <memory unit='KiB'>1048576</memory>
+ <currentMemory unit='KiB'>1048576</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='x86_64' machine='pc-0.13'>hvm</type>
+ <boot dev='cdrom'/>
+ <boot dev='hd'/>
+ <bootmenu enable='yes'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2' event_idx='on'/>
+ <source file='/var/lib/libvirt/images/f14.img'/>
+ <target dev='vda' bus='virtio'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+ </disk>
+ <disk type='file' device='cdrom'>
+ <driver name='qemu' type='raw'/>
+ <source file='/var/lib/libvirt/Fedora-14-x86_64-Live-KDE.iso'/>
+ <target dev='hdc' bus='ide'/>
+ <readonly/>
+ <address type='drive' controller='0' bus='1' target='0' unit='0'/>
+ </disk>
+ <controller type='usb' index='0'/>
+ <controller type='virtio-serial' index='0'>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
+ </controller>
+ <controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
+ <interface type='user'>
+ <mac address='52:54:00:e5:48:58'/>
+ <model type='virtio'/>
+ <driver name='vhost' queues='5'/>
+ </interface>
+ <serial type='pty'>
+ <target port='0'/>
+ </serial>
+ <console type='pty'>
+ <target type='serial' port='0'/>
+ </console>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>
DO_TEST("smp");
DO_TEST("lease");
DO_TEST("event_idx");
+ DO_TEST("vhost_queues");
DO_TEST("virtio-lun");
DO_TEST("usb-redir");