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

启动虚拟机,虚拟机网络不通

问题现象描述

在为机密虚拟机配置网桥后,虚拟机成功启动,并可通过virsh console进入Guest,网卡初始化正常。但Guest与Host之间未能建立有效的网络连通性,表现为双方无法通过IP地址进行通信。

关键过程、根本原因

QEMU默认为virtio-net设备启用event_idx功能,其主要目的是减少虚拟机频繁退出并通知后端处理数据的次数,从而提升virtio-net的性能。然而,virtCCA 方案引入了SWIOTLB机制,并引入与cvm退出相关的过程,这些操作涉及到安全世界与非安全世界之间的切换,增加前后端之间vring状态同步的时延。在极端情况下,后端可能未能及时将vring状态更新到前端,导致前端基于event_idx机制的判断无需发送Kick;而此时,后端的Host正处于睡眠状态,等待Kick操作,从而导致网络死锁。

结论、解决方案及效果

  1. 进入机密虚拟机。
    virsh console cvm_uefi
  2. 卸载驱动。
    rmmod virtio_net
  3. 重新加载驱动。
    modprobe virtio_net

    对于频繁启动销毁机密虚拟机等压力测试场景,推荐关闭virtio-net的event_idx机制以提升virtio网络稳定性,网卡配置参考libvirt方式启动 中的默认虚拟机配置。