mirror of https://gitee.com/openkylin/libvirt.git
Introduce /domain/devices/interface/driver/@queues attribute
This attribute is going to represent number of queues for multique vhost network interface. This commit implements XML extension part of the feature and add one test as well. For now, we can only do xml2xml test as qemu command line generation code is not adapted yet.
This commit is contained in:
parent
3c53984412
commit
7e744f8199
|
@ -3265,7 +3265,7 @@ qemu-kvm -net nic,model=? /dev/null
|
|||
<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>
|
||||
|
@ -3359,6 +3359,16 @@ qemu-kvm -net nic,model=? /dev/null
|
|||
<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>
|
||||
|
|
|
@ -2012,6 +2012,11 @@
|
|||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name='queues'>
|
||||
<ref name="positiveInteger"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="txmode">
|
||||
<choice>
|
||||
|
|
|
@ -6001,6 +6001,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
|||
char *txmode = NULL;
|
||||
char *ioeventfd = NULL;
|
||||
char *event_idx = NULL;
|
||||
char *queues = NULL;
|
||||
char *filter = NULL;
|
||||
char *internal = NULL;
|
||||
char *devaddr = NULL;
|
||||
|
@ -6112,6 +6113,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
|||
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",
|
||||
|
@ -6402,6 +6404,16 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
|
|||
}
|
||||
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;
|
||||
|
@ -6455,6 +6467,7 @@ cleanup:
|
|||
VIR_FREE(txmode);
|
||||
VIR_FREE(ioeventfd);
|
||||
VIR_FREE(event_idx);
|
||||
VIR_FREE(queues);
|
||||
VIR_FREE(filter);
|
||||
VIR_FREE(type);
|
||||
VIR_FREE(internal);
|
||||
|
@ -14497,6 +14510,8 @@ virDomainNetDefFormat(virBufferPtr buf,
|
|||
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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -934,6 +934,7 @@ struct _virDomainNetDef {
|
|||
enum virDomainNetVirtioTxModeType txmode;
|
||||
enum virDomainIoEventFd ioeventfd;
|
||||
enum virDomainVirtioEventIdx event_idx;
|
||||
unsigned int queues; /* Multiqueue virtio-net */
|
||||
} virtio;
|
||||
} driver;
|
||||
union {
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
<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>
|
|
@ -246,6 +246,7 @@ mymain(void)
|
|||
DO_TEST("smp");
|
||||
DO_TEST("lease");
|
||||
DO_TEST("event_idx");
|
||||
DO_TEST("vhost_queues");
|
||||
DO_TEST("virtio-lun");
|
||||
|
||||
DO_TEST("usb-redir");
|
||||
|
|
Loading…
Reference in New Issue