libvirt/docs/schemas/cputypes.rng
Michal Privoznik a89bbbac86 conf: Parse and format HMAT
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>
2020-07-08 12:05:24 +02:00

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>