【干货分享】Linux虚拟机网卡只能收包不能发包?. K2 H$ i! v. |. d
3 h) {: |: B! W' X& j在ovs场景主机与同主机上的虚拟机通信时,由于主机侧服务有问题,可能导致虚拟机网卡只能收包,不能发包,那么为什么会出现这样的问题以及应该如何解决呢?! E1 C1 e1 \7 p* Y8 f
注适用操作系统:Linux 适 用 版 本 :适用UVP&EVS V200R002C00 PublicCloud版本 适用产品线 :FusionSphere
1 n1 O$ t- p, ]* t% f, G4 t# c& j8 E背景及现象描述 在ovs场景主机与同主机上的虚拟机通信时,由于主机侧服务有问题(目前发现iperf-2.0.2有此问题),可能导致虚拟机网卡只能收包,不能发包,使用ifconfig查看网卡状态,网卡收包总数RX packets项一直有增加,网卡发包总数TX packets项保持不变,ping虚拟机ip不通。如下图所示:
【干货分享】Linux虚拟机网卡只能收包不能发包?
原因分析 定位发现虚拟机网卡不通是因为在主机与虚拟机之间存在iperf通信。在dom0上部署iperf-2.0.2服务端,在同主机的domU上部署客户端(iperf-c domip -d -t 3600),打流过一会就会发现domU上的网卡对外不能发包,收包正常。 定位发现虚拟机对外不能发包是因为前端环满,domU虚拟网卡对外发包使用的是零拷贝机制,报文在转发时不做数据拷贝,使用domU中的内存,在报文通过协议栈发给iperf服务端处理时,iperf未对报文处理,导致vring环上的buffer无法释放,vring环一直处于满的状态,后续的报文无法发出。 问题出现有2个条件。 1、主机与同主机上虚拟机之间通信。虚拟机与虚拟机之间没有问题,跨主机之间通信也不存在问题。 2、必须是主机上服务端存在问题的软件才会导致问题,如:netperf工具就没有这个问题,目前UVP主机与虚拟机之间有通信的服务(dhcpserver/metadata),不存在有此问题的服务。 解决方法 将对应Linux版本的内核参数添加到Linux系统的“/boot/grub/menu.lst”文件的内核启动参数后面即可。 1、应急解决方法:重启dom0上的与虚拟机有通信的服务端程序,网络可以恢复。 2、排查出问题的服务,解决服务端BUG。
【干货分享】Linux虚拟机网卡只能收包不能发包?
[. v$ ?4 p0 \4 \
M9 O+ ~. g1 V9 E! \
, \+ @( l @( k/ o" B, z2 F
|