conf: numa: Allow formatting 'none' values for 'associativity' and 'policy' of cache

The parser makes the values mandatory and also the qemu code implements
actions for those values. The formatter skips them though. Since
format+parse is used to copy the XML at startup a definition with those
values can't be started.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2203709
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Peter Krempa 2023-05-16 10:22:39 +02:00
parent 0d5fc7219a
commit af621caa6b
6 changed files with 164 additions and 9 deletions

View File

@ -1708,15 +1708,10 @@ virNumaCacheFormat(virBuffer *buf,
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
virBufferAsprintf(&attrBuf, " level='%u'", cache->level);
if (cache->associativity) {
virBufferAsprintf(&attrBuf, " associativity='%s'",
virNumaCacheAssociativityTypeToString(cache->associativity));
}
if (cache->policy) {
virBufferAsprintf(&attrBuf, " policy='%s'",
virNumaCachePolicyTypeToString(cache->policy));
}
virBufferAsprintf(&attrBuf, " associativity='%s'",
virNumaCacheAssociativityTypeToString(cache->associativity));
virBufferAsprintf(&attrBuf, " policy='%s'",
virNumaCachePolicyTypeToString(cache->policy));
virBufferAsprintf(&childBuf,
"<size value='%llu' unit='KiB'/>\n",

View File

@ -0,0 +1,49 @@
LC_ALL=C \
PATH=/bin \
HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest \
USER=test \
LOGNAME=test \
XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest/.local/share \
XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest/.cache \
XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest/.config \
/usr/bin/qemu-system-x86_64 \
-name guest=QEMUGuest,debug-threads=on \
-S \
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest/master-key.aes"}' \
-machine pc,usb=off,dump-guest-core=off,hmat=on,acpi=on \
-accel tcg \
-cpu qemu64 \
-m 12288 \
-overcommit mem-lock=off \
-smp 12,sockets=12,cores=1,threads=1 \
-object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":2147483648}' \
-numa node,nodeid=0,cpus=0-3,initiator=0,memdev=ram-node0 \
-object '{"qom-type":"memory-backend-ram","id":"ram-node1","size":2147483648}' \
-numa node,nodeid=1,cpus=4-7,initiator=1,memdev=ram-node1 \
-object '{"qom-type":"memory-backend-ram","id":"ram-node2","size":2147483648}' \
-numa node,nodeid=2,cpus=8-11,initiator=2,memdev=ram-node2 \
-object '{"qom-type":"memory-backend-ram","id":"ram-node3","size":2147483648}' \
-numa node,nodeid=3,initiator=0,memdev=ram-node3 \
-object '{"qom-type":"memory-backend-ram","id":"ram-node4","size":2147483648}' \
-numa node,nodeid=4,initiator=0,memdev=ram-node4 \
-object '{"qom-type":"memory-backend-ram","id":"ram-node5","size":2147483648}' \
-numa node,nodeid=5,initiator=0,memdev=ram-node5 \
-numa hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-latency,latency=5 \
-numa hmat-lb,initiator=0,target=0,hierarchy=first-level,data-type=access-latency,latency=10 \
-numa hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-bandwidth,bandwidth=204800K \
-numa hmat-lb,initiator=0,target=0,hierarchy=first-level,data-type=access-bandwidth,bandwidth=208896K \
-numa hmat-cache,node-id=0,size=10K,level=1,associativity=none,policy=none,line=8 \
-uuid c7a5fdb2-cdaf-9455-926a-d65c16db1809 \
-display none \
-no-user-config \
-nodefaults \
-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
-mon chardev=charmonitor,id=monitor,mode=control \
-rtc base=utc \
-no-shutdown \
-boot strict=on \
-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \
-audiodev '{"id":"audio1","driver":"none"}' \
-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x3"}' \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
-msg timestamp=on

View File

@ -0,0 +1,54 @@
<domain type='qemu'>
<name>QEMUGuest</name>
<uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid>
<memory unit='KiB'>8388608</memory>
<currentMemory unit='KiB'>8388608</currentMemory>
<vcpu placement='static'>12</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<cpu>
<numa>
<cell id='0' cpus='0-3' memory='2097152' unit='KiB'>
<cache level='1' associativity='none' policy='none'>
<size value='10' unit='KiB'/>
<line value='8' unit='B'/>
</cache>
</cell>
<cell id='1' cpus='4-7' memory='2097152' unit='KiB'/>
<cell id='2' cpus='8-11' memory='2097152' unit='KiB'/>
<cell id='3' memory='2097152' unit='KiB'/>
<cell id='4' memory='2097152' unit='KiB'/>
<cell id='5' memory='2097152' unit='KiB'/>
<interconnects>
<latency initiator='0' target='0' type='access' value='5'/>
<latency initiator='0' target='0' cache='1' type='access' value='10'/>
<bandwidth initiator='0' target='0' type='access' value='204800' unit='KiB'/>
<bandwidth initiator='0' target='0' cache='1' type='access' value='208896' unit='KiB'/>
</interconnects>
</numa>
</cpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<audio id='1' type='none'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</memballoon>
</devices>
</domain>

View File

@ -1875,6 +1875,7 @@ mymain(void)
DO_TEST_NOCAPS("numatune-distances");
DO_TEST_NOCAPS("numatune-no-vcpu");
DO_TEST_CAPS_LATEST("numatune-hmat");
DO_TEST_CAPS_LATEST("numatune-hmat-none");
DO_TEST_NOCAPS("numatune-auto-nodeset-invalid");
DO_TEST_NOCAPS("numatune-auto-prefer");

View File

@ -0,0 +1,55 @@
<domain type='qemu'>
<name>QEMUGuest</name>
<uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid>
<memory unit='KiB'>8388608</memory>
<currentMemory unit='KiB'>8388608</currentMemory>
<vcpu placement='static'>12</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<cpu mode='custom' match='exact' check='none'>
<model fallback='forbid'>qemu64</model>
<numa>
<cell id='0' cpus='0-3' memory='2097152' unit='KiB'>
<cache level='1' associativity='none' policy='none'>
<size value='10' unit='KiB'/>
<line value='8' unit='B'/>
</cache>
</cell>
<cell id='1' cpus='4-7' memory='2097152' unit='KiB'/>
<cell id='2' cpus='8-11' memory='2097152' unit='KiB'/>
<cell id='3' memory='2097152' unit='KiB'/>
<cell id='4' memory='2097152' unit='KiB'/>
<cell id='5' memory='2097152' unit='KiB'/>
<interconnects>
<latency initiator='0' target='0' type='access' value='5'/>
<latency initiator='0' target='0' cache='1' type='access' value='10'/>
<bandwidth initiator='0' target='0' type='access' value='204800' unit='KiB'/>
<bandwidth initiator='0' target='0' cache='1' type='access' value='208896' unit='KiB'/>
</interconnects>
</numa>
</cpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<controller type='usb' index='0' model='piix3-uhci'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<audio id='1' type='none'/>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</memballoon>
</devices>
</domain>

View File

@ -855,6 +855,7 @@ mymain(void)
DO_TEST_NOCAPS("numatune-distances");
DO_TEST_NOCAPS("numatune-no-vcpu");
DO_TEST("numatune-hmat", QEMU_CAPS_NUMA_HMAT);
DO_TEST_CAPS_LATEST("numatune-hmat-none");
DO_TEST_CAPS_LATEST("numatune-memnode-restrictive-mode");
DO_TEST_CAPS_LATEST("firmware-manual-bios");