mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-18 10:35:20 +00:00
conf: Introduce TCG domain features
It may come handy to be able to tweak TCG options, in this specific case the size of translation block cache size (tb-size). Since we can expect more knobs to tweak let's put them under common element, like this: <domain> <features> <tcg> <tb-cache unit='MiB'>128</tb-cache> </tcg> </features> </domain> Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Tested-by: Kashyap Chamarthy <kchamart@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
c1b06f5cf0
commit
f106788069
@ -1864,6 +1864,9 @@ Hypervisors may allow certain CPU / machine features to be toggled on/off.
|
|||||||
<cfpc value='workaround'/>
|
<cfpc value='workaround'/>
|
||||||
<sbbc value='workaround'/>
|
<sbbc value='workaround'/>
|
||||||
<ibs value='fixed-na'/>
|
<ibs value='fixed-na'/>
|
||||||
|
<tcg>
|
||||||
|
<tb-cache unit='MiB'>128</tb-cache>
|
||||||
|
</tcg>
|
||||||
</features>
|
</features>
|
||||||
...
|
...
|
||||||
|
|
||||||
@ -2065,6 +2068,14 @@ are:
|
|||||||
``fixed-na (fixed in hardware - no longer applicable)``. If the
|
``fixed-na (fixed in hardware - no longer applicable)``. If the
|
||||||
attribute is not defined, the hypervisor default will be used. :since:`Since
|
attribute is not defined, the hypervisor default will be used. :since:`Since
|
||||||
6.3.0` (QEMU/KVM only)
|
6.3.0` (QEMU/KVM only)
|
||||||
|
``tcg``
|
||||||
|
Various features to change the behavior of the TCG accelerator.
|
||||||
|
|
||||||
|
=========== ============================================== =================================================== ==============
|
||||||
|
Feature Description Value Since
|
||||||
|
=========== ============================================== =================================================== ==============
|
||||||
|
tb-cache The size of translation block cache size an integer :since:`8.0.0`
|
||||||
|
=========== ============================================== =================================================== ==============
|
||||||
|
|
||||||
:anchor:`<a id="elementsTime"/>`
|
:anchor:`<a id="elementsTime"/>`
|
||||||
|
|
||||||
|
@ -6092,7 +6092,7 @@
|
|||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
<!--
|
<!--
|
||||||
A set of optional features: PAE, APIC, ACPI, GIC,
|
A set of optional features: PAE, APIC, ACPI, GIC, TCG,
|
||||||
HyperV Enlightenment, KVM features, paravirtual spinlocks and HAP support
|
HyperV Enlightenment, KVM features, paravirtual spinlocks and HAP support
|
||||||
-->
|
-->
|
||||||
<define name="features">
|
<define name="features">
|
||||||
@ -6232,6 +6232,9 @@
|
|||||||
<optional>
|
<optional>
|
||||||
<ref name="ibs"/>
|
<ref name="ibs"/>
|
||||||
</optional>
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<ref name="tcgfeatures"/>
|
||||||
|
</optional>
|
||||||
</interleave>
|
</interleave>
|
||||||
</element>
|
</element>
|
||||||
</optional>
|
</optional>
|
||||||
@ -6520,6 +6523,16 @@
|
|||||||
</element>
|
</element>
|
||||||
</define>
|
</define>
|
||||||
|
|
||||||
|
<define name="tcgfeatures">
|
||||||
|
<element name="tcg">
|
||||||
|
<optional>
|
||||||
|
<element name="tb-cache">
|
||||||
|
<ref name="scaledInteger"/>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
|
</element>
|
||||||
|
</define>
|
||||||
|
|
||||||
<define name="address">
|
<define name="address">
|
||||||
<element name="address">
|
<element name="address">
|
||||||
<choice>
|
<choice>
|
||||||
|
@ -172,6 +172,7 @@ VIR_ENUM_IMPL(virDomainFeature,
|
|||||||
"cfpc",
|
"cfpc",
|
||||||
"sbbc",
|
"sbbc",
|
||||||
"ibs",
|
"ibs",
|
||||||
|
"tcg",
|
||||||
);
|
);
|
||||||
|
|
||||||
VIR_ENUM_IMPL(virDomainCapabilitiesPolicy,
|
VIR_ENUM_IMPL(virDomainCapabilitiesPolicy,
|
||||||
@ -3713,6 +3714,7 @@ void virDomainDefFree(virDomainDef *def)
|
|||||||
g_free(def->description);
|
g_free(def->description);
|
||||||
g_free(def->title);
|
g_free(def->title);
|
||||||
g_free(def->hyperv_vendor_id);
|
g_free(def->hyperv_vendor_id);
|
||||||
|
g_free(def->tcg_features);
|
||||||
|
|
||||||
virBlkioDeviceArrayClear(def->blkio.devices,
|
virBlkioDeviceArrayClear(def->blkio.devices,
|
||||||
def->blkio.ndevices);
|
def->blkio.ndevices);
|
||||||
@ -17648,6 +17650,30 @@ virDomainFeaturesCapabilitiesDefParse(virDomainDef *def,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
virDomainFeaturesTCGDefParse(virDomainDef *def,
|
||||||
|
xmlXPathContextPtr ctxt,
|
||||||
|
xmlNodePtr node)
|
||||||
|
{
|
||||||
|
g_autofree virDomainFeatureTCG *tcg = NULL;
|
||||||
|
VIR_XPATH_NODE_AUTORESTORE(ctxt);
|
||||||
|
|
||||||
|
tcg = g_new0(virDomainFeatureTCG, 1);
|
||||||
|
ctxt->node = node;
|
||||||
|
|
||||||
|
if (virDomainParseMemory("./tb-cache", "./tb-cache/@unit",
|
||||||
|
ctxt, &tcg->tb_cache, false, false) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (tcg->tb_cache == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
def->features[VIR_DOMAIN_FEATURE_TCG] = VIR_TRISTATE_SWITCH_ON;
|
||||||
|
def->tcg_features = g_steal_pointer(&tcg);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virDomainFeaturesDefParse(virDomainDef *def,
|
virDomainFeaturesDefParse(virDomainDef *def,
|
||||||
xmlXPathContextPtr ctxt)
|
xmlXPathContextPtr ctxt)
|
||||||
@ -17856,6 +17882,11 @@ virDomainFeaturesDefParse(virDomainDef *def,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case VIR_DOMAIN_FEATURE_TCG:
|
||||||
|
if (virDomainFeaturesTCGDefParse(def, ctxt, nodes[i]) < 0)
|
||||||
|
return -1;
|
||||||
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_FEATURE_LAST:
|
case VIR_DOMAIN_FEATURE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -21656,8 +21687,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_FEATURE_MSRS:
|
case VIR_DOMAIN_FEATURE_MSRS:
|
||||||
break;
|
case VIR_DOMAIN_FEATURE_TCG:
|
||||||
|
|
||||||
case VIR_DOMAIN_FEATURE_LAST:
|
case VIR_DOMAIN_FEATURE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -27644,6 +27674,26 @@ virDomainDefFormatBlkiotune(virBuffer *buf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
virDomainFeatureTCGFormat(virBuffer *buf,
|
||||||
|
const virDomainDef *def)
|
||||||
|
{
|
||||||
|
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
|
||||||
|
|
||||||
|
if (!def->tcg_features ||
|
||||||
|
def->features[VIR_DOMAIN_FEATURE_TCG] != VIR_TRISTATE_SWITCH_ON)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (def->tcg_features->tb_cache > 0) {
|
||||||
|
virBufferAsprintf(&childBuf,
|
||||||
|
"<tb-cache unit='KiB'>%lld</tb-cache>\n",
|
||||||
|
def->tcg_features->tb_cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
virXMLFormatElement(buf, "tcg", NULL, &childBuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virDomainDefFormatFeatures(virBuffer *buf,
|
virDomainDefFormatFeatures(virBuffer *buf,
|
||||||
virDomainDef *def)
|
virDomainDef *def)
|
||||||
@ -27964,6 +28014,10 @@ virDomainDefFormatFeatures(virBuffer *buf,
|
|||||||
virDomainIBSTypeToString(def->features[i]));
|
virDomainIBSTypeToString(def->features[i]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_FEATURE_TCG:
|
||||||
|
virDomainFeatureTCGFormat(&childBuf, def);
|
||||||
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_FEATURE_LAST:
|
case VIR_DOMAIN_FEATURE_LAST:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2054,6 +2054,7 @@ typedef enum {
|
|||||||
VIR_DOMAIN_FEATURE_CFPC,
|
VIR_DOMAIN_FEATURE_CFPC,
|
||||||
VIR_DOMAIN_FEATURE_SBBC,
|
VIR_DOMAIN_FEATURE_SBBC,
|
||||||
VIR_DOMAIN_FEATURE_IBS,
|
VIR_DOMAIN_FEATURE_IBS,
|
||||||
|
VIR_DOMAIN_FEATURE_TCG,
|
||||||
|
|
||||||
VIR_DOMAIN_FEATURE_LAST
|
VIR_DOMAIN_FEATURE_LAST
|
||||||
} virDomainFeature;
|
} virDomainFeature;
|
||||||
@ -2262,6 +2263,11 @@ typedef enum {
|
|||||||
|
|
||||||
VIR_ENUM_DECL(virDomainIBS);
|
VIR_ENUM_DECL(virDomainIBS);
|
||||||
|
|
||||||
|
typedef struct _virDomainFeatureTCG virDomainFeatureTCG;
|
||||||
|
struct _virDomainFeatureTCG {
|
||||||
|
unsigned long long tb_cache; /* Stored in KiB */
|
||||||
|
};
|
||||||
|
|
||||||
/* Operating system configuration data & machine / arch */
|
/* Operating system configuration data & machine / arch */
|
||||||
struct _virDomainOSEnv {
|
struct _virDomainOSEnv {
|
||||||
char *name;
|
char *name;
|
||||||
@ -2824,6 +2830,7 @@ struct _virDomainDef {
|
|||||||
unsigned long long hpt_maxpagesize; /* Stored in KiB */
|
unsigned long long hpt_maxpagesize; /* Stored in KiB */
|
||||||
char *hyperv_vendor_id;
|
char *hyperv_vendor_id;
|
||||||
virTristateSwitch apic_eoi;
|
virTristateSwitch apic_eoi;
|
||||||
|
virDomainFeatureTCG *tcg_features;
|
||||||
|
|
||||||
bool tseg_specified;
|
bool tseg_specified;
|
||||||
unsigned long long tseg_size;
|
unsigned long long tseg_size;
|
||||||
|
@ -294,6 +294,7 @@ qemuValidateDomainDefFeatures(const virDomainDef *def,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_FEATURE_TCG:
|
||||||
case VIR_DOMAIN_FEATURE_SMM:
|
case VIR_DOMAIN_FEATURE_SMM:
|
||||||
case VIR_DOMAIN_FEATURE_KVM:
|
case VIR_DOMAIN_FEATURE_KVM:
|
||||||
case VIR_DOMAIN_FEATURE_XEN:
|
case VIR_DOMAIN_FEATURE_XEN:
|
||||||
|
56
tests/qemuxml2argvdata/x86_64-default-cpu-tcg-features.xml
Normal file
56
tests/qemuxml2argvdata/x86_64-default-cpu-tcg-features.xml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>guest</name>
|
||||||
|
<uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
|
||||||
|
<memory unit='KiB'>4194304</memory>
|
||||||
|
<currentMemory unit='KiB'>4194304</currentMemory>
|
||||||
|
<vcpu placement='static'>4</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='x86_64' machine='pc-q35-6.2'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/>
|
||||||
|
<apic/>
|
||||||
|
<tcg>
|
||||||
|
<tb-cache unit='KiB'>102400</tb-cache>
|
||||||
|
</tcg>
|
||||||
|
</features>
|
||||||
|
<cpu mode='custom' match='exact' check='none'>
|
||||||
|
<model fallback='forbid'>qemu64</model>
|
||||||
|
</cpu>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||||
|
<controller type='usb' index='0' model='qemu-xhci'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='sata' index='0'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='pci' index='0' model='pcie-root'/>
|
||||||
|
<controller type='pci' index='1' model='pcie-root-port'>
|
||||||
|
<model name='pcie-root-port'/>
|
||||||
|
<target chassis='1' port='0x8'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='pci' index='2' model='pcie-root-port'>
|
||||||
|
<model name='pcie-root-port'/>
|
||||||
|
<target chassis='2' port='0x9'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='pci' index='3' model='pcie-root-port'>
|
||||||
|
<model name='pcie-root-port'/>
|
||||||
|
<target chassis='3' port='0xa'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||||
|
</controller>
|
||||||
|
<input type='mouse' bus='ps2'/>
|
||||||
|
<input type='keyboard' bus='ps2'/>
|
||||||
|
<audio id='1' type='none'/>
|
||||||
|
<memballoon model='virtio'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
|
||||||
|
</memballoon>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
@ -0,0 +1 @@
|
|||||||
|
../qemuxml2argvdata/x86_64-default-cpu-tcg-features.xml
|
@ -1387,6 +1387,7 @@ mymain(void)
|
|||||||
DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-pc-4.2", "x86_64");
|
DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-pc-4.2", "x86_64");
|
||||||
DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-q35-4.2", "x86_64");
|
DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-q35-4.2", "x86_64");
|
||||||
DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-q35-4.2", "x86_64");
|
DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-q35-4.2", "x86_64");
|
||||||
|
DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-features", "x86_64");
|
||||||
|
|
||||||
DO_TEST_CAPS_LATEST("virtio-9p-multidevs");
|
DO_TEST_CAPS_LATEST("virtio-9p-multidevs");
|
||||||
DO_TEST_CAPS_LATEST("virtio-9p-createmode");
|
DO_TEST_CAPS_LATEST("virtio-9p-createmode");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user