mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-26 15:45:28 +00:00
a89bbbac86
To cite ACPI specification: Heterogeneous Memory Attribute Table describes the memory attributes, such as memory side cache attributes and bandwidth and latency details, related to the System Physical Address (SPA) Memory Ranges. The software is expected to use this information as hint for optimization. According to our upstream discussion [1] this is exposed under <numa/> as <cache/> under NUMA <cell/> and <latency> or <bandwidth/> under numa/latencies. 1: https://www.redhat.com/archives/libvir-list/2020-January/msg00422.html Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
301 lines
7.3 KiB
XML
301 lines
7.3 KiB
XML
<?xml version="1.0"?>
|
|
<!-- CPU-related definitions used in multiple grammars -->
|
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
|
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
|
|
|
<define name="cpuMode">
|
|
<attribute name="mode">
|
|
<choice>
|
|
<value>custom</value>
|
|
<value>host-model</value>
|
|
<value>host-passthrough</value>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
|
|
<define name="cpuMatch">
|
|
<attribute name="match">
|
|
<choice>
|
|
<value>minimum</value>
|
|
<value>exact</value>
|
|
<value>strict</value>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
|
|
<define name="cpuCheck">
|
|
<attribute name="check">
|
|
<choice>
|
|
<value>none</value>
|
|
<value>partial</value>
|
|
<value>full</value>
|
|
</choice>
|
|
</attribute>
|
|
</define>
|
|
|
|
<define name="cpuModel">
|
|
<element name="model">
|
|
<optional>
|
|
<attribute name="fallback">
|
|
<choice>
|
|
<value>allow</value>
|
|
<value>forbid</value>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="vendor_id">
|
|
<data type="string">
|
|
<param name='pattern'>[^,]{12}</param>
|
|
</data>
|
|
</attribute>
|
|
</optional>
|
|
<choice>
|
|
<text/>
|
|
<empty/>
|
|
</choice>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="cpuVendor">
|
|
<element name="vendor">
|
|
<text/>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="cpuFeature">
|
|
<element name="feature">
|
|
<attribute name="policy">
|
|
<choice>
|
|
<value>force</value>
|
|
<value>require</value>
|
|
<value>optional</value>
|
|
<value>disable</value>
|
|
<value>forbid</value>
|
|
</choice>
|
|
</attribute>
|
|
<attribute name="name">
|
|
<ref name="featureName"/>
|
|
</attribute>
|
|
<empty/>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="cpuTopology">
|
|
<element name="topology">
|
|
<attribute name="sockets">
|
|
<ref name="positiveInteger"/>
|
|
</attribute>
|
|
<optional>
|
|
<attribute name="dies">
|
|
<ref name="positiveInteger"/>
|
|
</attribute>
|
|
</optional>
|
|
<attribute name="cores">
|
|
<ref name="positiveInteger"/>
|
|
</attribute>
|
|
<attribute name="threads">
|
|
<ref name="positiveInteger"/>
|
|
</attribute>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="cpuNuma">
|
|
<element name="numa">
|
|
<interleave>
|
|
<oneOrMore>
|
|
<ref name="numaCell"/>
|
|
</oneOrMore>
|
|
<optional>
|
|
<ref name="numaInterconnects"/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="numaCell">
|
|
<element name="cell">
|
|
<optional>
|
|
<attribute name="id">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="cpus">
|
|
<ref name="cpuset"/>
|
|
</attribute>
|
|
</optional>
|
|
<attribute name="memory">
|
|
<ref name="memoryKB"/>
|
|
</attribute>
|
|
<optional>
|
|
<attribute name="unit">
|
|
<ref name="unit"/>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="memAccess">
|
|
<choice>
|
|
<value>shared</value>
|
|
<value>private</value>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<attribute name="discard">
|
|
<ref name="virYesNo"/>
|
|
</attribute>
|
|
</optional>
|
|
<optional>
|
|
<element name="distances">
|
|
<oneOrMore>
|
|
<ref name="numaDistance"/>
|
|
</oneOrMore>
|
|
</element>
|
|
</optional>
|
|
<zeroOrMore>
|
|
<ref name="numaCache"/>
|
|
</zeroOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="numaDistance">
|
|
<element name="sibling">
|
|
<attribute name="id">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<attribute name="value">
|
|
<ref name="numaDistanceValue"/>
|
|
</attribute>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="numaCache">
|
|
<element name="cache">
|
|
<attribute name="level">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<attribute name="associativity">
|
|
<choice>
|
|
<value>none</value>
|
|
<value>direct</value>
|
|
<value>full</value>
|
|
</choice>
|
|
</attribute>
|
|
<attribute name="policy">
|
|
<choice>
|
|
<value>none</value>
|
|
<value>writeback</value>
|
|
<value>writethrough</value>
|
|
</choice>
|
|
</attribute>
|
|
<interleave>
|
|
<element name="size">
|
|
<attribute name="value">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<attribute name="unit">
|
|
<ref name="unit"/>
|
|
</attribute>
|
|
</element>
|
|
<element name="line">
|
|
<attribute name="value">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<attribute name="unit">
|
|
<ref name="unit"/>
|
|
</attribute>
|
|
</element>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name="numaInterconnects">
|
|
<element name="interconnects">
|
|
<interleave>
|
|
<zeroOrMore>
|
|
<element name="latency">
|
|
<attribute name="initiator">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<attribute name="target">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<optional>
|
|
<attribute name="cache">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
</optional>
|
|
<attribute name="type">
|
|
<choice>
|
|
<value>access</value>
|
|
<value>read</value>
|
|
<value>write</value>
|
|
</choice>
|
|
</attribute>
|
|
<attribute name="value">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<empty/>
|
|
</element>
|
|
</zeroOrMore>
|
|
<zeroOrMore>
|
|
<element name="bandwidth">
|
|
<attribute name="initiator">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<attribute name="target">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<attribute name="type">
|
|
<choice>
|
|
<value>access</value>
|
|
<value>read</value>
|
|
<value>write</value>
|
|
</choice>
|
|
</attribute>
|
|
<attribute name="value">
|
|
<ref name="unsignedInt"/>
|
|
</attribute>
|
|
<attribute name="unit">
|
|
<ref name="unit"/>
|
|
</attribute>
|
|
</element>
|
|
</zeroOrMore>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<!-- Memory as an attribute is in KiB, no way to express a unit -->
|
|
<define name="memoryKB">
|
|
<data type="unsignedLong"/>
|
|
</define>
|
|
<define name="featureName">
|
|
<data type="string">
|
|
<param name='pattern'>[a-zA-Z0-9\-_\.]+</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name="cpuCache">
|
|
<element name="cache">
|
|
<optional>
|
|
<attribute name="level">
|
|
<choice>
|
|
<value>1</value>
|
|
<value>2</value>
|
|
<value>3</value>
|
|
</choice>
|
|
</attribute>
|
|
</optional>
|
|
<attribute name="mode">
|
|
<choice>
|
|
<value>emulate</value>
|
|
<value>passthrough</value>
|
|
<value>disable</value>
|
|
</choice>
|
|
</attribute>
|
|
</element>
|
|
</define>
|
|
|
|
</grammar>
|