1. 查看业务影响时段是否存在高时延
可以通过 ping 测试查看是否存在高时延(一般 > 1ms 就要注意),如果没有现象,可以看黑盒日志 ping 探测,如下:
2. 也可以查看网口丢包统计(必须查看 dp 接管的网口,如业务口/vxlan口),是否存在 rx_missed_error 的丢包增长
3. 再查看网络转发核的 CPU 占用率
(方法只适用于 680及之后的版本)
# 进入 vn-agent 容器
container_exec -n vn-a
dpdebug 4
像这样接近 100%,就表示 4 个转发核都跑满了。
4. 再到前端查看下接管网口的流量统计(如业务口/vxlan口)
看到流量并不大,可能所有接管网口的流量加起来都不过才几百M
5. 后台查看 dp 的性能热点
(6.8.0 及之后的版本需要进入 vn-agent 容器)
perf top -p `pidof dataplane`
# 注意,一定要记得退出,退出按 q
如果看到这个热点有 sf_mbuf_copy 的函数,大概率说明是组播/广播包导致的性能瓶颈。
6. 再通过网口统计信息进一步确认
查看黑盒网口统计日志(/sf/log/vn-blackbox/today/LOG_ethtool_statistic.txt),找到 multicast(组播)、broadcast(广播)这样的字眼;
找到问题时间点,对前后两次的统计结果求一个每秒的差值,比如下图:
前后时间是28s(这里是22s,标错了,可忽略),然后两组数据相减除以28就是每秒的差值,如果组播广播的数据远远大于单播,就说明是这个问题。
临时解决方案:
如果是单核,那么可以调整成 4核做一些缓解;
如果已经是 4核,那么可以对问题主机上的虚拟机迁移一部分到别的主机,平衡一下负载来解决。
永久解决方案:
内部已提性能优化的需求,针对该场景进行优化,以满足大量组播/广播的业务场景要求。