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

调大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大小。