mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: Modify the structure _virDomainBlockIoTuneInfo.
Modify the structure _virDomainBlockIoTuneInfo to support these the new options. Change the initialization of the variable expectedInfo in qemumonitorjsontest.c to avoid compiling problem. Add documentation about the new xml options Signed-off-by: Matthias Gatto <matthias.gatto@outscale.com>
This commit is contained in:
parent
c040e14bff
commit
e34ffa96fb
@ -2119,6 +2119,31 @@
|
||||
<dt><code>write_iops_sec</code></dt>
|
||||
<dd>The optional <code>write_iops_sec</code> element is the
|
||||
write I/O operations per second.</dd>
|
||||
<dt><code>total_bytes_sec_max</code></dt>
|
||||
<dd>The optional <code>total_bytes_sec_max</code> element is the
|
||||
maximum total throughput limit in bytes per second. This cannot
|
||||
appear with <code>read_bytes_sec_max</code>
|
||||
or <code>write_bytes_sec_max</code>.</dd>
|
||||
<dt><code>read_bytes_sec_max</code></dt>
|
||||
<dd>The optional <code>read_bytes_sec_max</code> element is the
|
||||
maximum read throughput limit in bytes per second.</dd>
|
||||
<dt><code>write_bytes_sec_max</code></dt>
|
||||
<dd>The optional <code>write_bytes_sec_max</code> element is the
|
||||
maximum write throughput limit in bytes per second.</dd>
|
||||
<dt><code>total_iops_sec_max</code></dt>
|
||||
<dd>The optional <code>total_iops_sec_max</code> element is the
|
||||
maximum total I/O operations per second. This cannot
|
||||
appear with <code>read_iops_sec_max</code>
|
||||
or <code>write_iops_sec_max</code>.</dd>
|
||||
<dt><code>read_iops_sec_max</code></dt>
|
||||
<dd>The optional <code>read_iops_sec_max</code> element is the
|
||||
maximum read I/O operations per second.</dd>
|
||||
<dt><code>write_iops_sec_max</code></dt>
|
||||
<dd>The optional <code>write_iops_sec_max</code> element is the
|
||||
maximum write I/O operations per second.</dd>
|
||||
<dt><code>size_iops_sec</code></dt>
|
||||
<dd>The optional <code>size_iops_sec</code> element is the
|
||||
size of I/O operations per second.</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>driver</code></dt>
|
||||
|
@ -4548,6 +4548,49 @@
|
||||
</interleave>
|
||||
</group>
|
||||
</choice>
|
||||
<choice>
|
||||
<element name="total_bytes_sec_max">
|
||||
<data type="unsignedLong"/>
|
||||
</element>
|
||||
<group>
|
||||
<interleave>
|
||||
<optional>
|
||||
<element name="read_bytes_sec_max">
|
||||
<data type="unsignedLong"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="write_bytes_sec_max">
|
||||
<data type="unsignedLong"/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</group>
|
||||
</choice>
|
||||
<choice>
|
||||
<element name="total_iops_sec_max">
|
||||
<data type="unsignedLong"/>
|
||||
</element>
|
||||
<group>
|
||||
<interleave>
|
||||
<optional>
|
||||
<element name="read_iops_sec_max">
|
||||
<data type="unsignedLong"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="write_iops_sec_max">
|
||||
<data type="unsignedLong"/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</group>
|
||||
</choice>
|
||||
<optional>
|
||||
<element name="size_iops_sec">
|
||||
<data type="unsignedLong"/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
@ -5820,6 +5820,49 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
def->blkdeviotune.write_iops_sec = 0;
|
||||
}
|
||||
|
||||
if (virXPathULongLong("string(./iotune/total_bytes_sec_max)",
|
||||
ctxt,
|
||||
&def->blkdeviotune.total_bytes_sec_max) < 0) {
|
||||
def->blkdeviotune.total_bytes_sec_max = 0;
|
||||
}
|
||||
|
||||
if (virXPathULongLong("string(./iotune/read_bytes_sec_max)",
|
||||
ctxt,
|
||||
&def->blkdeviotune.read_bytes_sec_max) < 0) {
|
||||
def->blkdeviotune.read_bytes_sec_max = 0;
|
||||
}
|
||||
|
||||
if (virXPathULongLong("string(./iotune/write_bytes_sec_max)",
|
||||
ctxt,
|
||||
&def->blkdeviotune.write_bytes_sec_max) < 0) {
|
||||
def->blkdeviotune.write_bytes_sec_max = 0;
|
||||
}
|
||||
|
||||
if (virXPathULongLong("string(./iotune/total_iops_sec_max)",
|
||||
ctxt,
|
||||
&def->blkdeviotune.total_iops_sec_max) < 0) {
|
||||
def->blkdeviotune.total_iops_sec_max = 0;
|
||||
}
|
||||
|
||||
if (virXPathULongLong("string(./iotune/read_iops_sec_max)",
|
||||
ctxt,
|
||||
&def->blkdeviotune.read_iops_sec_max) < 0) {
|
||||
def->blkdeviotune.read_iops_sec_max = 0;
|
||||
}
|
||||
|
||||
if (virXPathULongLong("string(./iotune/write_iops_sec_max)",
|
||||
ctxt,
|
||||
&def->blkdeviotune.write_iops_sec_max) < 0) {
|
||||
def->blkdeviotune.write_iops_sec_max = 0;
|
||||
}
|
||||
|
||||
if (virXPathULongLong("string(./iotune/size_iops_sec)",
|
||||
ctxt,
|
||||
&def->blkdeviotune.size_iops_sec) < 0) {
|
||||
def->blkdeviotune.size_iops_sec = 0;
|
||||
}
|
||||
|
||||
|
||||
if ((def->blkdeviotune.total_bytes_sec &&
|
||||
def->blkdeviotune.read_bytes_sec) ||
|
||||
(def->blkdeviotune.total_bytes_sec &&
|
||||
@ -5839,6 +5882,27 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
"cannot be set at the same time"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((def->blkdeviotune.total_bytes_sec_max &&
|
||||
def->blkdeviotune.read_bytes_sec_max) ||
|
||||
(def->blkdeviotune.total_bytes_sec_max &&
|
||||
def->blkdeviotune.write_bytes_sec_max)) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("total and read/write bytes_sec_max "
|
||||
"cannot be set at the same time"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((def->blkdeviotune.total_iops_sec_max &&
|
||||
def->blkdeviotune.read_iops_sec_max) ||
|
||||
(def->blkdeviotune.total_iops_sec_max &&
|
||||
def->blkdeviotune.write_iops_sec_max)) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("total and read/write iops_sec_max "
|
||||
"cannot be set at the same time"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
} else if (xmlStrEqual(cur->name, BAD_CAST "readonly")) {
|
||||
def->src->readonly = true;
|
||||
} else if (xmlStrEqual(cur->name, BAD_CAST "shareable")) {
|
||||
@ -16378,7 +16442,14 @@ virDomainDiskDefFormat(virBufferPtr buf,
|
||||
def->blkdeviotune.write_bytes_sec ||
|
||||
def->blkdeviotune.total_iops_sec ||
|
||||
def->blkdeviotune.read_iops_sec ||
|
||||
def->blkdeviotune.write_iops_sec) {
|
||||
def->blkdeviotune.write_iops_sec ||
|
||||
def->blkdeviotune.total_bytes_sec_max ||
|
||||
def->blkdeviotune.read_bytes_sec_max ||
|
||||
def->blkdeviotune.write_bytes_sec_max ||
|
||||
def->blkdeviotune.total_iops_sec_max ||
|
||||
def->blkdeviotune.read_iops_sec_max ||
|
||||
def->blkdeviotune.write_iops_sec_max ||
|
||||
def->blkdeviotune.size_iops_sec) {
|
||||
virBufferAddLit(buf, "<iotune>\n");
|
||||
virBufferAdjustIndent(buf, 2);
|
||||
if (def->blkdeviotune.total_bytes_sec) {
|
||||
@ -16411,6 +16482,42 @@ virDomainDiskDefFormat(virBufferPtr buf,
|
||||
virBufferAsprintf(buf, "<write_iops_sec>%llu</write_iops_sec>\n",
|
||||
def->blkdeviotune.write_iops_sec);
|
||||
}
|
||||
|
||||
if (def->blkdeviotune.total_bytes_sec_max) {
|
||||
virBufferAsprintf(buf, "<total_bytes_sec_max>%llu</total_bytes_sec_max>\n",
|
||||
def->blkdeviotune.total_bytes_sec_max);
|
||||
}
|
||||
|
||||
if (def->blkdeviotune.read_bytes_sec_max) {
|
||||
virBufferAsprintf(buf, "<read_bytes_sec_max>%llu</read_bytes_sec_max>\n",
|
||||
def->blkdeviotune.read_bytes_sec_max);
|
||||
}
|
||||
|
||||
if (def->blkdeviotune.write_bytes_sec_max) {
|
||||
virBufferAsprintf(buf, "<write_bytes_sec_max>%llu</write_bytes_sec_max>\n",
|
||||
def->blkdeviotune.write_bytes_sec_max);
|
||||
}
|
||||
|
||||
if (def->blkdeviotune.total_iops_sec_max) {
|
||||
virBufferAsprintf(buf, "<total_iops_sec_max>%llu</total_iops_sec_max>\n",
|
||||
def->blkdeviotune.total_iops_sec_max);
|
||||
}
|
||||
|
||||
if (def->blkdeviotune.read_iops_sec_max) {
|
||||
virBufferAsprintf(buf, "<read_iops_sec_max>%llu</read_iops_sec_max>\n",
|
||||
def->blkdeviotune.read_iops_sec_max);
|
||||
}
|
||||
|
||||
if (def->blkdeviotune.write_iops_sec_max) {
|
||||
virBufferAsprintf(buf, "<write_iops_sec_max>%llu</write_iops_sec_max>\n",
|
||||
def->blkdeviotune.write_iops_sec_max);
|
||||
}
|
||||
|
||||
if (def->blkdeviotune.size_iops_sec) {
|
||||
virBufferAsprintf(buf, "<size_iops_sec>%llu</size_iops_sec>\n",
|
||||
def->blkdeviotune.size_iops_sec);
|
||||
}
|
||||
|
||||
virBufferAdjustIndent(buf, -2);
|
||||
virBufferAddLit(buf, "</iotune>\n");
|
||||
}
|
||||
|
@ -612,6 +612,13 @@ struct _virDomainBlockIoTuneInfo {
|
||||
unsigned long long total_iops_sec;
|
||||
unsigned long long read_iops_sec;
|
||||
unsigned long long write_iops_sec;
|
||||
unsigned long long total_bytes_sec_max;
|
||||
unsigned long long read_bytes_sec_max;
|
||||
unsigned long long write_bytes_sec_max;
|
||||
unsigned long long total_iops_sec_max;
|
||||
unsigned long long read_iops_sec_max;
|
||||
unsigned long long write_iops_sec_max;
|
||||
unsigned long long size_iops_sec;
|
||||
};
|
||||
typedef virDomainBlockIoTuneInfo *virDomainBlockIoTuneInfoPtr;
|
||||
|
||||
|
@ -1835,7 +1835,7 @@ testQemuMonitorJSONqemuMonitorJSONSetBlockIoThrottle(const void *data)
|
||||
if (!test)
|
||||
return -1;
|
||||
|
||||
expectedInfo = (virDomainBlockIoTuneInfo) {1, 2, 3, 4, 5, 6};
|
||||
expectedInfo = (virDomainBlockIoTuneInfo) {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
|
||||
|
||||
if (qemuMonitorTestAddItem(test, "query-block", queryBlockReply) < 0 ||
|
||||
qemuMonitorTestAddItemParams(test, "block_set_io_throttle",
|
||||
|
Loading…
x
Reference in New Issue
Block a user