鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

约束与限制

内存插法约束

机器的内存插法要求NUMA间对称:

  1. 支持4/8/12/16/20/24/32根。
  2. 支持32G/64G两种内存规格,不支持混插。
  3. 基于计算产品内存配置助手插入内存。

BIOS菜单约束

  1. 关闭3路交织。
  2. 支持DIE交织disable、enable两种模式。

操作系统约束

主机Host、机密虚拟机Guest配套openEuler 24.03 LTS SP2操作系统。

SWIOTLB Buffer特性限制

机密虚拟机通过SWIOTLB Buffer共享内存与外设通信,该区域大小默认值为64MB,高负载IO通信场景下,可能出现SWIOTLB Buffer空间不足问题,在Guest OS中执行如下命令,若收到“swiotlb buffer is full”的错误日志回显,可确认出现此问题。
dmesg | grep "swiotlb buffer is full"
如果确认上述问题存在,建议通过修改Guest OS swiotlb启动参数来调大SWIOTLB Buffer空间,方法如下:
  • QEMU命令行启动方式,swiotlb启动参数配置方法如下所示。
    -append "swiotlb=x,force"
  • Libvirt xml启动方式,swiotlb启动参数配置方法如下所示。
    <cmdline>swiotlb=x,force</cmdline>
    • “x”为SWIOTLB Buffer的分片数,每个分片大小为2KB,对应的SWIOTLB Buffer大小为x*2KB。SWIOTLB Buffer默认64MB大小,对应分片数量为32768,调大x的数值即可调大SWIOTLB Buffer(需保证Buffer大小64MB对齐)。例如“x”为262144时对应SWIOTLB Buffer为512MB。
    • SWIOTLB Buffer占用非安全内存,若Host OS收到“Out of memory: Killed process xxx (qemu-kvm)”错误日志,可确认当前系统非安全内存不足,导致机密虚拟机退出。
    • SWIOTLB Buffer特性会占用机密虚拟机安全内存,当前机密虚拟机安全内存最小规格为1GB大小。

安全内存粒度约束

机密虚拟机的安全内存要求2M对齐。

机密虚拟机性能约束

  • 机密虚拟机CPU所绑定的NUMA需要和安全内存所分配的NUMA相同。
  • 机密虚拟机CPU绑定的NUMA需要与网卡亲和NUMA相同。执行如下命令查询网卡亲和NUMA。
    cat /sys/class/net/$net_name/device/numa_node

    net_name为网卡设备名称,可在Guest OS中通过ip addr查看。

    预期示例如下:

    1. 查询到网卡亲和NUMA为1。

    2. 机密虚拟机的libvirt xml文件配置CPU绑定到NUMA 1。

sysctl_overcommit_memory限制

BIOS提供安全内存配置auto模式,BIOS将分配尽可能大的安全内存,此时安全内存将大于非安全内存。当启动机密虚拟机的ram size大于非安全内存时,需要允许mmap的虚拟地址空间大于物理地址空间,否则机密虚拟机将启动失败,即启动机密虚拟机前需要保证sysctl_overcommit_memory=1。需执行以下命令:

echo 1 > /proc/sys/vm/overcommit_memory

不支持超线程(SMT)

  1. 当用户使能CPU超线程能力后,可能存在针对机密计算的侧信道攻击等行为。
  2. 业界机密计算(如:SEV-SNP等)建议限制在禁用SMT的系统上运行。
  3. 关闭SMT指导:
  1. 在BIOS配置选项,进入“Advanced”>“Power And Performance Configuration”配置菜单。

  2. 进入“CPU PM Control”配置菜单。

  3. 将“SMT2”选项配置为“Disabled”。

不支持超分

CPU&内存超分当前不支持。