前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vpp遇到接口丢包如何解决?

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

作者头像
通信行业搬砖工
发布2023-03-30 21:11:37
3.2K0
发布2023-03-30 21:11:37
举报
文章被收录于专栏:网络虚拟化网络虚拟化

一、什么是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。

虚拟机中不支持查询

实际物理机中查询情况

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

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

最后:检查配置是否正确

写在最后:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 通信行业搬砖工 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是VPP
    • DPDK 数据包处理流程
      • 1、imissed 参数
      • ierrors
    • 如何解决丢包问题:
      • imissed 收包侧丢包
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档