mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
domain_conf: Add support for iothreads in disk definition
Add a new disk "driver" attribute "iothread" to be parsed as the thread number for the disk to use. In order to more easily facilitate the usage and configuration of the iothread, a "zero" for the attribute indicates iothreads are not supported for the device and a positive value indicates the specific thread to try and use.
This commit is contained in:
parent
72edaae78f
commit
e2523de554
@ -2160,6 +2160,14 @@
|
||||
(ignore the discard request).
|
||||
<span class='since'>Since 1.0.6 (QEMU and KVM only)</span>
|
||||
</li>
|
||||
<li>
|
||||
The optional <code>iothread</code> attribute assigns the
|
||||
disk to an IOThread as defined by the range for the domain
|
||||
<a href="#elementsIOThreadsAllocation"><code>iothreads</code></a>
|
||||
value. Multiple devices may be assigned to the same IOThread and
|
||||
are numbered from 1 to the domain iothreads value.
|
||||
<span class='since'>Since 1.2.8 (QEMU only)</span>
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt><code>boot</code></dt>
|
||||
|
@ -1572,6 +1572,9 @@
|
||||
<optional>
|
||||
<ref name="discard"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="driverIOThread"/>
|
||||
</optional>
|
||||
<empty/>
|
||||
</element>
|
||||
</define>
|
||||
@ -1659,6 +1662,11 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
</define>
|
||||
<define name="driverIOThread">
|
||||
<attribute name='iothread'>
|
||||
<ref name="unsignedInt"/>
|
||||
</attribute>
|
||||
</define>
|
||||
<define name="controller">
|
||||
<element name="controller">
|
||||
<attribute name="index">
|
||||
|
@ -5422,6 +5422,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
char *ioeventfd = NULL;
|
||||
char *event_idx = NULL;
|
||||
char *copy_on_read = NULL;
|
||||
char *driverIOThread = NULL;
|
||||
char *devaddr = NULL;
|
||||
virStorageEncryptionPtr encryption = NULL;
|
||||
char *serial = NULL;
|
||||
@ -5570,6 +5571,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
event_idx = virXMLPropString(cur, "event_idx");
|
||||
copy_on_read = virXMLPropString(cur, "copy_on_read");
|
||||
discard = virXMLPropString(cur, "discard");
|
||||
driverIOThread = virXMLPropString(cur, "iothread");
|
||||
} else if (!def->mirror &&
|
||||
xmlStrEqual(cur->name, BAD_CAST "mirror") &&
|
||||
!(flags & VIR_DOMAIN_XML_INACTIVE)) {
|
||||
@ -6104,6 +6106,15 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
}
|
||||
}
|
||||
|
||||
if (driverIOThread) {
|
||||
if (virStrToLong_uip(driverIOThread, NULL, 10, &def->iothread) < 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("Invalid iothread attribute in disk driver "
|
||||
"element: %s"), driverIOThread);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
if (devaddr) {
|
||||
if (virDomainParseLegacyDeviceAddress(devaddr,
|
||||
&def->info.addr.pci) < 0) {
|
||||
@ -6204,6 +6215,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
VIR_FREE(event_idx);
|
||||
VIR_FREE(copy_on_read);
|
||||
VIR_FREE(discard);
|
||||
VIR_FREE(driverIOThread);
|
||||
VIR_FREE(devaddr);
|
||||
VIR_FREE(serial);
|
||||
virStorageEncryptionFree(encryption);
|
||||
@ -15637,7 +15649,7 @@ virDomainDiskDefFormat(virBufferPtr buf,
|
||||
if (def->src->driverName || def->src->format > 0 || def->cachemode ||
|
||||
def->error_policy || def->rerror_policy || def->iomode ||
|
||||
def->ioeventfd || def->event_idx || def->copy_on_read ||
|
||||
def->discard) {
|
||||
def->discard || def->iothread) {
|
||||
virBufferAddLit(buf, "<driver");
|
||||
if (def->src->driverName)
|
||||
virBufferAsprintf(buf, " name='%s'", def->src->driverName);
|
||||
@ -15660,6 +15672,8 @@ virDomainDiskDefFormat(virBufferPtr buf,
|
||||
virBufferAsprintf(buf, " copy_on_read='%s'", copy_on_read);
|
||||
if (def->discard)
|
||||
virBufferAsprintf(buf, " discard='%s'", discard);
|
||||
if (def->iothread)
|
||||
virBufferAsprintf(buf, " iothread='%u'", def->iothread);
|
||||
virBufferAddLit(buf, "/>\n");
|
||||
}
|
||||
|
||||
|
@ -667,6 +667,7 @@ struct _virDomainDiskDef {
|
||||
int rawio; /* no = 0, yes = 1 */
|
||||
int sgio; /* enum virDomainDeviceSGIO */
|
||||
int discard; /* enum virDomainDiskDiscard */
|
||||
unsigned int iothread; /* unused = 0, > 0 specific thread # */
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user