启动虚拟机,虚拟机网络不通
问题现象描述
在为机密虚拟机配置网桥后,虚拟机成功启动,并可通过virsh console进入Guest,网卡初始化正常。但Guest与Host之间未能建立有效的网络连通性,表现为双方无法通过IP地址进行通信。
关键过程、根本原因
QEMU默认为virtio-net设备启用event_idx功能,其主要目的是减少虚拟机频繁退出并通知后端处理数据的次数,从而提升virtio-net的性能。然而,virtCCA 方案引入了SWIOTLB机制,并引入与cvm退出相关的过程,这些操作涉及到安全世界与非安全世界之间的切换,增加前后端之间vring状态同步的时延。在极端情况下,后端可能未能及时将vring状态更新到前端,导致前端基于event_idx机制的判断无需发送Kick;而此时,后端的Host正处于睡眠状态,等待Kick操作,从而导致网络死锁。
结论、解决方案及效果
- 进入机密虚拟机。
virsh console cvm_uefi
- 卸载驱动。
rmmod virtio_net
- 重新加载驱动。
modprobe virtio_net
对于频繁启动销毁机密虚拟机等压力测试场景,推荐关闭virtio-net的event_idx机制以提升virtio网络稳定性,网卡配置参考libvirt方式启动 中的默认虚拟机配置。
父主题: 故障排除