<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>
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 &&
"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")) {
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) {
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");
}