virt-manager/virtinst/domain/features.py
Menno Lageman 0254558e6e cli: add --features kvm.hint-dedicated.state=
QEMU version 2.12.1 introduced a performance feature under commit
be7773268d98 ("target-i386: add KVM_HINTS_DEDICATED performance hint").
Support for this performance hint was added in libvirt 5.7.0 by commit
cb12c59dac04 ("qemu: support for kvm-hint-dedicated performance hint").

This patch extends virt-install's existing --features option to insert the
appropriate XML into the guest definition if this feature is specified
on the command line.

    E.g. --features='kvm.hint-dedicated.state=on' would result
    in the following XML:

      <features>
        ...
        <kvm>
          <hint-dedicated state='on'/>
        </kvm>
        ...
      </features>

Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Menno Lageman <menno.lageman@oracle.com>
2019-09-03 14:04:18 -04:00

85 lines
3.0 KiB
Python

#
# Copyright 2010, 2013 Red Hat, Inc.
#
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
from ..xmlbuilder import XMLBuilder, XMLProperty
class DomainFeatures(XMLBuilder):
"""
Class for generating <features> XML
"""
XML_NAME = "features"
_XML_PROP_ORDER = ["acpi", "apic", "pae", "gic_version"]
acpi = XMLProperty("./acpi", is_bool=True)
apic = XMLProperty("./apic", is_bool=True)
pae = XMLProperty("./pae", is_bool=True)
gic_version = XMLProperty("./gic/@version")
hap = XMLProperty("./hap", is_bool=True)
viridian = XMLProperty("./viridian", is_bool=True)
privnet = XMLProperty("./privnet", is_bool=True)
pmu = XMLProperty("./pmu/@state", is_onoff=True)
eoi = XMLProperty("./apic/@eoi", is_onoff=True)
hyperv_reset = XMLProperty("./hyperv/reset/@state", is_onoff=True)
hyperv_vapic = XMLProperty("./hyperv/vapic/@state", is_onoff=True)
hyperv_relaxed = XMLProperty("./hyperv/relaxed/@state", is_onoff=True)
hyperv_spinlocks = XMLProperty("./hyperv/spinlocks/@state", is_onoff=True)
hyperv_spinlocks_retries = XMLProperty("./hyperv/spinlocks/@retries",
is_int=True)
hyperv_synic = XMLProperty("./hyperv/synic/@state", is_onoff=True)
vmport = XMLProperty("./vmport/@state", is_onoff=True)
kvm_hidden = XMLProperty("./kvm/hidden/@state", is_onoff=True)
kvm_hint_dedicated = XMLProperty("./kvm/hint-dedicated/@state", is_onoff=True)
pvspinlock = XMLProperty("./pvspinlock/@state", is_onoff=True)
smm = XMLProperty("./smm/@state", is_onoff=True)
vmcoreinfo = XMLProperty("./vmcoreinfo/@state", is_onoff=True)
##################
# Default config #
##################
def set_defaults(self, guest):
if guest.os.is_container():
self.acpi = None
self.apic = None
self.pae = None
if guest.is_full_os_container() and guest.type != "vz":
self.privnet = True
return
if not guest.os.is_hvm():
return
capsinfo = guest.lookup_capsinfo()
if self._prop_is_unset("acpi"):
self.acpi = capsinfo.guest.supports_acpi()
if self._prop_is_unset("apic"):
self.apic = capsinfo.guest.supports_apic()
if self._prop_is_unset("pae"):
if (guest.os.is_hvm() and
guest.type == "xen" and
guest.os.arch == "x86_64"):
self.pae = True
else:
self.pae = capsinfo.guest.supports_pae()
if (guest.hyperv_supported() and
self.conn.support.conn_hyperv_vapic()):
if self.hyperv_relaxed is None:
self.hyperv_relaxed = True
if self.hyperv_vapic is None:
self.hyperv_vapic = True
if self.hyperv_spinlocks is None:
self.hyperv_spinlocks = True
if self.hyperv_spinlocks_retries is None:
self.hyperv_spinlocks_retries = 8191