On 2/24/22 21:19, Yang, Lin A wrote:
On 2/22/22, 1:19 AM, "Michal Prívozník"
<mprivozn(a)redhat.com> wrote:
> On 2/16/22 11:25, Michal Prívozník wrote:
>
> >> diff --git a/tests/qemuxml2argvdata/sgx-epc.x86_64-6.2.0.args
b/tests/qemuxml2argvdata/sgx-epc.x86_64-6.2.0.args
> >> new file mode 100644
> >> index 0000000000..e1aa274054
> >> --- /dev/null
> >> +++ b/tests/qemuxml2argvdata/sgx-epc.x86_64-6.2.0.args
> >> @@ -0,0 +1,38 @@
> >> +LC_ALL=C \
> >> +PATH=/bin \
> >> +HOME=/tmp/lib/domain--1-QEMUGuest1 \
> >> +USER=test \
> >> +LOGNAME=test \
> >> +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
> >> +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
> >> +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
> >> +/usr/bin/qemu-system-x86_64 \
> >> +-name guest=QEMUGuest1,debug-threads=on \
> >> +-S \
> >> +-object
'{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}'
\
> >> +-machine pc-q35-6.2,usb=off,dump-guest-core=off,memory-backend=pc.ram \
> >> +-accel tcg \
> >> +-cpu qemu64 \
> >> +-m 134 \
> >> +-object
'{"qom-type":"memory-backend-ram","id":"pc.ram","size":140509184}'
\
> >> +-overcommit mem-lock=off \
> >> +-smp 1,sockets=1,cores=1,threads=1 \
> >> +-object
'{"qom-type":"memory-backend-epc","id":"memepc0","prealloc":true,"size":67108864}'
\
> >> +-object
'{"qom-type":"memory-backend-epc","id":"memepc1","prealloc":true,"size":16777216}'
\
> >> +-M sgx-epc.0.memdev=memepc0,sgx-epc.1.memdev=memepc1 \
> >
> > I don't think this is correct. IIUC, this can be passed to -machine
> > directly, e.g.:
> >
> > -machine
> >
pc-q35-6.2,usb=off,dump-guest-core=off,memory-backend=pc.ram,sgx-epc.0.memdev=memepc0,sgx-epc.1.memdev=memepc1
> >
> > And when I try to do that, I get:
> >
> > qemu-system-x86_64: Parameter 'sgx-epc.0.node' is missing
> >
> > Any idea, what's going on? I would much rather avoid using -M if we can
> > help it.
> >
>
> One more thing. I've enabled SGX on my machine hoping to test this out,
> but my attempts are failing so far. Firstly, with these patches qemu is
> unhappy, because .node attribute is missing:
>
> /home/zippy/work/qemu/qemu.git/build/qemu-system-x86_64 \
>
> -machine pc-i440fx-4.0,usb=off,dump-guest-core=off \
> -accel kvm \
> -cpu host,migratable=on \
> -m size=4194304k,slots=16,maxmem=1099511627776k \
>
> -object
'{"qom-type":"memory-backend-memfd","id":"memepc0","hugetlb":true,"hugetlbsize":2097152,"prealloc":true,"size":67108864,"host-nodes":[0],"policy":"bind"}'
\
> -M sgx-epc.0.memdev=memepc0 \
>
> qemu-system-x86_64: Parameter 'sgx-epc.0.node' is missing
Did you use qemu latest master branch here for experiments? NUMA
support is added in qemu master branch, which requires 'sgx-epc.0.node'
parameter, but not in its latest 6.2.0 release.
Yes, I'm using:
qemu.git $ git describe
v6.2.0-1718-g922268067f
So here I didn’t add 'sgx-epc.0.node' parameter to align with qemu 6.2.0.
NUMA support could be separate patch after qemu new release. The other
options is we add NUMA support at this time. Any suggestions?
Since the argument is going to be required I think it makes sense to
require it for qemu 6.2.0. Otherwise we could have yet another
capability to reflect whether .node attribute is needed or not. But IMO
that's pointless because the capability would be set only for one
particular release of QEMU (not to mention it's probably impossible to
detect whether .node attribute is needed or not).
>
> But okay, I can add .node, but that doesn't get me much further:
>
> /home/zippy/work/qemu/qemu.git/build/qemu-system-x86_64 \
>
> -machine pc-i440fx-4.0,usb=off,dump-guest-core=off \
> -accel kvm \
> -cpu host,migratable=on \
> -m size=4194304k,slots=16,maxmem=1099511627776k \
>
> -object
'{"qom-type":"memory-backend-memfd","id":"memepc0","hugetlb":true,"hugetlbsize":2097152,"prealloc":true,"size":67108864,"host-nodes":[0],"policy":"bind"}'
\
> -M sgx-epc.0.memdev=memepc0,sgx-epc.0.node=0 \
>
> qemu-system-x86_64: Invalid parameter type for 'memdev', expected:
memory-backend-epc
I think I fixed this kind of issue by moving memory-backend-epc type
check before hugetlb
check. Could you pls share your domain xml, so I can reproduce it on my
side? Thanks.
Sure:
<domain type='kvm'>
<name>fedora</name>
<uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
<title>hello</title>
<description>blee</description>
<maxMemory slots='16' unit='KiB'>1099511627776</maxMemory>
<memory unit='KiB'>4210688</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<memoryBacking>
<hugepages>
<page size='2048' unit='KiB'/>
</hugepages>
<source type='memfd'/>
<allocation mode='immediate'/>
</memoryBacking>
<vcpu placement='static'>4</vcpu>
<iothreads>4</iothreads>
<cputune>
<vcpupin vcpu='0' cpuset='0-1'/>
<vcpupin vcpu='1' cpuset='2-3'/>
<vcpupin vcpu='2' cpuset='4-5'/>
<vcpupin vcpu='3' cpuset='6-7'/>
</cputune>
<numatune>
<memory mode='strict' nodeset='0'/>
</numatune>
<os>
<type arch='x86_64' machine='pc-i440fx-7.0'>hvm</type>
<bootmenu enable='yes'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<cpu mode='host-passthrough' check='none'
migratable='on'>
<topology sockets='1' dies='1' cores='2'
threads='2'/>
<numa>
<cell id='0' cpus='0,2' memory='2097152'
unit='KiB' discard='yes'/>
<cell id='1' cpus='1,3' memory='2097152'
unit='KiB' discard='yes'/>
</numa>
</cpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<pm>
<suspend-to-mem enabled='yes'/>
<suspend-to-disk enabled='yes'/>
</pm>
<devices>
<emulator>/home/zippy/work/qemu/qemu.git/build/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' discard='unmap'/>
<source file='/var/lib/libvirt/images/fedora.qcow2'/>
<target dev='sda' bus='scsi'/>
<boot order='1'/>
<address type='drive' controller='0' bus='0'
target='0' unit='0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='sdb' bus='sata'/>
<readonly/>
<address type='drive' controller='0' bus='0'
target='0' unit='1'/>
</disk>
<controller type='pci' index='0' model='pci-root'/>
<controller type='scsi' index='0' model='virtio-scsi'>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x0'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x05' function='0x0'/>
</controller>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x08' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x08' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x08' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x08' function='0x2'/>
</controller>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x09' function='0x0'/>
</controller>
<interface type='network' trustGuestRxFilters='no'>
<mac address='52:54:00:a4:6f:91'/>
<source network='default'/>
<bandwidth>
<inbound average='1024' peak='4096' floor='500'
burst='2048'/>
<outbound average='10240' burst='2048'/>
</bandwidth>
<model type='virtio'/>
<mtu size='9000'/>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0'
port='1'/>
</channel>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' autoport='yes'>
<listen type='address'/>
<gl enable='no'/>
</graphics>
<audio id='1' type='spice'/>
<video>
<model type='virtio' heads='1' primary='yes'>
<acceleration accel3d='no'/>
</model>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x0'/>
</memballoon>
<memory model='sgx-epc'>
<target>
<size unit='KiB'>16384</size>
</target>
</memory>
</devices>
</domain>
Thanks,
Lin.