大数跨境
0
0

vpp遇到接口丢包如何解决?

vpp遇到接口丢包如何解决? 通信行业搬砖工
2023-03-26
0
导读:本文章主要介绍了vpp相关的基础概念,如什么是vpp,他的软件架构是什么,如何查看统计丢包字段,dpdk的对应逻辑和如何排查丢包问题的方法。

一、什么是VPP

VPP 是美国思科网络开源的一个可扩展的框架,可提供开箱即用的生产质量交换机 / 路由器功能。它是思科矢量数据包处理(Vector Packet Processing,VPP)技术的开源版本:一种高性能的数据包处理堆栈,可以在商用 CPU 上运行。

其软件架构描述如下所示:(图片来着网络:大佬公众号Flowlet

vpp源码的数据平面分为四个不同的层:

  • 基础架构层:包括vppinfra,vlib,svm和二进制api库。源码:/src/{vppinfra, vlib, svm, vlibapi, vlibmemory}

  • 通用网络协议栈层:vnet。源码:/src/vnet

  • 应用程序shell:vpp。源码:/src/vpp

  • 日益丰富的数据平面插件。源码:/src/plugins

二、VPP丢包统计分析

下面我们言归正传,介绍VPP的丢包统计分析。

在show interface 统计接口流量的时候,应该关注哪些统计字段呢?在dpdk插件中统计字段的描述如下所示:vpp/src/plugins/dpdk/device/format.c

其中 tx 方向的丢包:tx errors ;rx 方向的丢包 rx missed 分别对应了intel DPDK中的 oerrors 和  imissed。

VPP中DPDK以插件的方式集成,在dpdk插件中完成对dpdk的初始化和操作,那么我们继续分析DPDK 代码:以DPDK 19.11.14 LTS 版本为例

在dpdk中,通过 rte_eth_stats_get 获取统计信息

函数:

int rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats);

参数:

1、port id :网卡的逻辑id

2、stats:统计信息的结构体

结构体描述:

从上述我们可以看到:imissed、oerrors、rx_nombuf三个成员,对应vpp中的 rx missed(收包侧丢包)、tx error(发送侧丢包)丢包;

在对以上三个统计量进行展开介绍之前有必要介绍一下DPDK对数据包的处理流程。

DPDK 数据包处理流程


  1. 物理网卡监听物理链路上的信息号,解析得到数据包,并将其存放在物理网卡上的RX FIFO中;

  2. 物理网卡上的DMA将数据包写入到内存中的rte_rx_queue;

  3. 应用程序通过PMD的形式轮询从rte_rx_queue读取数据包。


    参数解析

1、imissed 参数

在dpdk处理rx 方向队列的处理函数逻辑如下所示:

void eth_rx_queue_stats_get(void *vqueue, struct rte_eth_stats *stats)

{

此处略去处理逻辑;

stats->imissed += idropped;

}

从该函数中可以看到,每次统计imissed的时候,都将imissed参数加上idropped,可见imissed参数统计的为rx 的丢包逻辑;

ierrors

ierrors发生在上述第一步中,表示该数据包存在错误,被网卡丢弃。

此时该包不会存在于物理网卡的RX FIFO中,更不会存在于内存中的rte_rx_queue中。

rx_nombuf

rx_nombuf记录在读取数据包时分配mbuf错误的次数,一般情况下不会影响网卡的丢包(imissed、ierrors)。该变量的维护在rx_recv_pkts中。

如何解决丢包问题:

imissed 收包侧丢包

如上所述imissed表示从网卡到内存写入数据包时的丢包个数,因此需要从以下2个方面进行调试:

1、判读PCIe是否存在瓶颈

因为报文从网卡到系统是经过PCIe总线来传输的,PCIe总线的吞吐将直接影响数据包从网卡拷贝到内存的速率。

通过lspci |grep Eth 可以查询网卡的PCIe地址;

通过 lspci -s 02:01.0 -vv 可以查看 当前网卡的PCIe速率。

通过查询LnKSta: Speed 5GT/s, 表示网卡的传输速率是5GT/s,总线带宽x8 (LnKCap)际使用的是传输速率5GT/s,总线宽带x8(LnkSta),工作正常。如果传输速率和总线带宽下降,则需要调试PCIe兼容性问题。

2、定位软件处理效率低的问题,即队列的包没有及时处理掉导致了拥塞

首先、检查CPU运行模式,cpupower frequency-info

如果当前运行在powersave模式下,可以将其修改为performance,提升CPU频率,cpupower frequency-set -g performance。

虚拟机中不支持查询

实际物理机中查询情况

其次:分析程序处理代码瓶颈处,优化算法实现

该部分具体问题具体分析!

最后:检查配置是否正确


写在最后:

如果您觉得这篇文章对您有帮助,欢迎点赞关注一下吧,谢谢!


【声明】内容源于网络
0
0
通信行业搬砖工
14年通信研发经验,大厂搬砖,分享通信工程技术、经验、行业趋势等内容。
内容 503
粉丝 0
通信行业搬砖工 14年通信研发经验,大厂搬砖,分享通信工程技术、经验、行业趋势等内容。
总阅读19
粉丝0
内容503