提交 cb12c59d 编写于 作者: W Wim ten Have 提交者: Michal Privoznik

qemu: support for kvm-hint-dedicated performance hint

QEMU version 2.12.1 introduced a performance feature under commit
be7773268d98 ("target-i386: add KVM_HINTS_DEDICATED performance hint")

This patch adds a new KVM feature 'hint-dedicated' to set this performance
hint for KVM guests. The feature is off by default.

To enable this hint and have libvirt add "-cpu host,kvm-hint-dedicated=on"
to the QEMU command line, the following XML code needs to be added to the
guest's domain description in conjunction with CPU mode='host-passthrough'.

  <features>
    <kvm>
      <hint-dedicated state='on'/>
    </kvm>
  </features>
  ...
  <cpu mode='host-passthrough ... />
Signed-off-by: NWim ten Have <wim.ten.have@oracle.com>
Signed-off-by: NMenno Lageman <menno.lageman@oracle.com>
Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
上级 8daefcf6
...@@ -2044,6 +2044,7 @@ ...@@ -2044,6 +2044,7 @@
&lt;/hyperv&gt; &lt;/hyperv&gt;
&lt;kvm&gt; &lt;kvm&gt;
&lt;hidden state='on'/&gt; &lt;hidden state='on'/&gt;
&lt;hint-dedicated state='on'/&gt;
&lt;/kvm&gt; &lt;/kvm&gt;
&lt;pvspinlock state='on'/&gt; &lt;pvspinlock state='on'/&gt;
&lt;gic version='2'/&gt; &lt;gic version='2'/&gt;
...@@ -2217,6 +2218,12 @@ ...@@ -2217,6 +2218,12 @@
<td>on, off</td> <td>on, off</td>
<td><span class="since">1.2.8 (QEMU 2.1.0)</span></td> <td><span class="since">1.2.8 (QEMU 2.1.0)</span></td>
</tr> </tr>
<tr>
<td>hint-dedicated</td>
<td>Allows a guest to enable optimizations when running on dedicated vCPUs</td>
<td>on, off</td>
<td><span class="since">5.7.0 (QEMU 2.12.1)</span></td>
</tr>
</table> </table>
</dd> </dd>
<dt><code>pmu</code></dt> <dt><code>pmu</code></dt>
......
...@@ -5965,6 +5965,11 @@ ...@@ -5965,6 +5965,11 @@
<ref name="featurestate"/> <ref name="featurestate"/>
</element> </element>
</optional> </optional>
<optional>
<element name="hint-dedicated">
<ref name="featurestate"/>
</element>
</optional>
</interleave> </interleave>
</element> </element>
</define> </define>
......
...@@ -202,6 +202,7 @@ VIR_ENUM_IMPL(virDomainHyperv, ...@@ -202,6 +202,7 @@ VIR_ENUM_IMPL(virDomainHyperv,
VIR_ENUM_IMPL(virDomainKVM, VIR_ENUM_IMPL(virDomainKVM,
VIR_DOMAIN_KVM_LAST, VIR_DOMAIN_KVM_LAST,
"hidden", "hidden",
"hint-dedicated",
); );
VIR_ENUM_IMPL(virDomainMsrsUnknown, VIR_ENUM_IMPL(virDomainMsrsUnknown,
...@@ -20412,6 +20413,7 @@ virDomainDefParseXML(xmlDocPtr xml, ...@@ -20412,6 +20413,7 @@ virDomainDefParseXML(xmlDocPtr xml,
switch ((virDomainKVM) feature) { switch ((virDomainKVM) feature) {
case VIR_DOMAIN_KVM_HIDDEN: case VIR_DOMAIN_KVM_HIDDEN:
case VIR_DOMAIN_KVM_DEDICATED:
if (!(tmp = virXMLPropString(nodes[i], "state"))) { if (!(tmp = virXMLPropString(nodes[i], "state"))) {
virReportError(VIR_ERR_XML_ERROR, virReportError(VIR_ERR_XML_ERROR,
_("missing 'state' attribute for " _("missing 'state' attribute for "
...@@ -22624,6 +22626,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, ...@@ -22624,6 +22626,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src,
for (i = 0; i < VIR_DOMAIN_KVM_LAST; i++) { for (i = 0; i < VIR_DOMAIN_KVM_LAST; i++) {
switch ((virDomainKVM) i) { switch ((virDomainKVM) i) {
case VIR_DOMAIN_KVM_HIDDEN: case VIR_DOMAIN_KVM_HIDDEN:
case VIR_DOMAIN_KVM_DEDICATED:
if (src->kvm_features[i] != dst->kvm_features[i]) { if (src->kvm_features[i] != dst->kvm_features[i]) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("State of KVM feature '%s' differs: " _("State of KVM feature '%s' differs: "
...@@ -28124,6 +28127,7 @@ virDomainDefFormatFeatures(virBufferPtr buf, ...@@ -28124,6 +28127,7 @@ virDomainDefFormatFeatures(virBufferPtr buf,
for (j = 0; j < VIR_DOMAIN_KVM_LAST; j++) { for (j = 0; j < VIR_DOMAIN_KVM_LAST; j++) {
switch ((virDomainKVM) j) { switch ((virDomainKVM) j) {
case VIR_DOMAIN_KVM_HIDDEN: case VIR_DOMAIN_KVM_HIDDEN:
case VIR_DOMAIN_KVM_DEDICATED:
if (def->kvm_features[j]) if (def->kvm_features[j])
virBufferAsprintf(&childBuf, "<%s state='%s'/>\n", virBufferAsprintf(&childBuf, "<%s state='%s'/>\n",
virDomainKVMTypeToString(j), virDomainKVMTypeToString(j),
......
...@@ -1765,6 +1765,7 @@ typedef enum { ...@@ -1765,6 +1765,7 @@ typedef enum {
typedef enum { typedef enum {
VIR_DOMAIN_KVM_HIDDEN = 0, VIR_DOMAIN_KVM_HIDDEN = 0,
VIR_DOMAIN_KVM_DEDICATED,
VIR_DOMAIN_KVM_LAST VIR_DOMAIN_KVM_LAST
} virDomainKVM; } virDomainKVM;
......
...@@ -7212,6 +7212,11 @@ qemuBuildCpuCommandLine(virCommandPtr cmd, ...@@ -7212,6 +7212,11 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
virBufferAddLit(&buf, ",kvm=off"); virBufferAddLit(&buf, ",kvm=off");
break; break;
case VIR_DOMAIN_KVM_DEDICATED:
if (def->kvm_features[i] == VIR_TRISTATE_SWITCH_ON)
virBufferAddLit(&buf, ",kvm-hint-dedicated=on");
break;
/* coverity[dead_error_begin] */ /* coverity[dead_error_begin] */
case VIR_DOMAIN_KVM_LAST: case VIR_DOMAIN_KVM_LAST:
break; break;
......
...@@ -4449,6 +4449,16 @@ qemuDomainDefValidateFeatures(const virDomainDef *def, ...@@ -4449,6 +4449,16 @@ qemuDomainDefValidateFeatures(const virDomainDef *def,
} }
break; break;
case VIR_DOMAIN_FEATURE_KVM:
if (def->kvm_features[VIR_DOMAIN_KVM_DEDICATED] == VIR_TRISTATE_SWITCH_ON &&
(!def->cpu || def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("kvm-hint-dedicated=on is only applicable "
"for cpu host-passthrough"));
return -1;
}
break;
case VIR_DOMAIN_FEATURE_ACPI: case VIR_DOMAIN_FEATURE_ACPI:
case VIR_DOMAIN_FEATURE_APIC: case VIR_DOMAIN_FEATURE_APIC:
case VIR_DOMAIN_FEATURE_PAE: case VIR_DOMAIN_FEATURE_PAE:
...@@ -4456,7 +4466,6 @@ qemuDomainDefValidateFeatures(const virDomainDef *def, ...@@ -4456,7 +4466,6 @@ qemuDomainDefValidateFeatures(const virDomainDef *def,
case VIR_DOMAIN_FEATURE_VIRIDIAN: case VIR_DOMAIN_FEATURE_VIRIDIAN:
case VIR_DOMAIN_FEATURE_PRIVNET: case VIR_DOMAIN_FEATURE_PRIVNET:
case VIR_DOMAIN_FEATURE_HYPERV: case VIR_DOMAIN_FEATURE_HYPERV:
case VIR_DOMAIN_FEATURE_KVM:
case VIR_DOMAIN_FEATURE_PVSPINLOCK: case VIR_DOMAIN_FEATURE_PVSPINLOCK:
case VIR_DOMAIN_FEATURE_CAPABILITIES: case VIR_DOMAIN_FEATURE_CAPABILITIES:
case VIR_DOMAIN_FEATURE_PMU: case VIR_DOMAIN_FEATURE_PMU:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册