DPDK imissed、ierrors、rx_nombuf

这篇具有很好参考价值的文章主要介绍了DPDK imissed、ierrors、rx_nombuf。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在采用DPDK进行网络抓包时常常会通过rte_eth_stats_get函数获取当前网卡的丢包状态,首先看一下该函数的声明:

// 函数声明(dpdk-stable-19.11.3/lib/librte_ethdev/rte_ethdev.h)
int rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats);

// rte_eth_stats 结构体(dpdk-stable-19.11.3/lib/librte_ethdev/rte_ethdev.h)
struct rte_eth_stats {
    uint64_t ipackets;  /**< Total number of successfully received packets. */
    uint64_t opackets;  /**< Total number of successfully transmitted packets.*/
    uint64_t ibytes;    /**< Total number of successfully received bytes. */
    uint64_t obytes;    /**< Total number of successfully transmitted bytes. */
    uint64_t imissed;
    /**< Total of RX packets dropped by the HW,
     * because there are no available buffer (i.e. RX queues are full).
     */
    uint64_t ierrors;   /**< Total number of erroneous received packets. */
    uint64_t oerrors;   /**< Total number of failed transmitted packets. */
    uint64_t rx_nombuf; /**< Total number of RX mbuf allocation failures. */

可以看到rte_eth_stats结构体中包含imissed、ierrors、rx_nombuf三个与抓包性能相关的统计量,以下内容将对其进行展开介绍。

DPDK 数据包处理流程

在对以上三个统计量进行展开介绍之前有必要介绍一下DPDK对数据包的处理流程,这将对理解这三个统计参数具有较好的帮助。
DPDK imissed、ierrors、rx_nombuf

  1. 物理网卡监听物理链路上的信息号,解析得到数据包,并将其存放在物理网卡上的RX FIFO中;
  2. 物理网卡上的DMA将数据包写入到内存中的rte_rx_queue;
  3. 应用程序通过PMD的形式轮询从rte_rx_queue读取数据包。

三个参数解析

imissed
imissed发生在上述DPDK抓包流程的第二步,表示rte_rx_queue已经塞满了数据包,所以该包被丢失。此时该包存在于物理网卡的RX FIFO中,但是不会存在于内存中的rte_rx_queue中。

ierrors
ierrors发生在上述第一步中,表示该数据包存在错误,被网卡丢弃。此时该包不会存在于物理网卡的RX FIFO中,更不会存在于内存中的rte_rx_queue中。

// dpdk-stable-19.11.3/drivers/net/ixgbe/ixgbe_ethdev.c:3369
stats->ierrors  = hw_stats->crcerrs +
              hw_stats->mspdc +
              hw_stats->rlec +
              hw_stats->ruc +
              hw_stats->roc +
              hw_stats->illerrc +
              hw_stats->errbc +
              hw_stats->rfc +
              hw_stats->fccrc +

rx_nombuf
rx_nombuf记录在读取数据包时分配mbuf错误的次数,一般情况下不会影响网卡的丢包(imissed、ierrors)。该变量的维护在dpdk-stable-19.11.3/drivers/net/ixgbe/ixgbe_rxtx.c:1651:rx_recv_pkts中。

解决方法

上面讲了那么多,那么如何才能降低丢包呢?

imissed

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

1. PCIe是否存在瓶颈?

因为报文从网卡到系统是经过PCIe总线来传输的,PCIe总线的吞吐将直接影响数据包从网卡拷贝到内存的速率。通过lspci -s 03:00.1 -vv | grep Lnk可以查看当前网卡的PCIe速率,其中03:00.1是网卡的PCIe地址,可通过lspci -v|grep Ethernet查到。
DPDK imissed、ierrors、rx_nombuf
由上图可以看到网口能力是传输速率5GT/s,总线宽带x8(LnkCap),实际使用的是传输速率5GT/s,总线宽带x8(LnkSta),工作正常。如果传输速率和总线带宽下降,则需要调试PCIe兼容性问题。一般是服务器与网卡兼容性问题,可以更换网卡或者更换服务器。如果有条件,可以找服务器厂商从bios等方面进行详细定位解决兼容性问题。

2. rte_rx_queue中的数据包没有及时消费掉?

1.检查CPU运行模式,cpupower frequency-info
DPDK imissed、ierrors、rx_nombuf
如果当前运行在powersave模式下,可以将其修改为performance,提升CPU频率,cpupower frequency-set -g performance

2.程序性能不佳,无法及时消耗掉rte_rx_queue中的数据包。

ierrrors
这个就没得办法了,毕竟本身数据包就有错误,接收了也没啥意思。如果实在想接收,可通过rte_eth_rxconfoffloads成员进行设置。

rx_nombuf
直接增大mempool的大小。

Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家 教程
https://ke.qq.com/course/5066203?flowToken=1043068文章来源地址https://www.toymoban.com/news/detail-469784.html

到了这里,关于DPDK imissed、ierrors、rx_nombuf的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DPDK工作原理和环境搭建

    工具准备:VMware、ubuntu16.04。 (1)VMware添加两个网卡。桥接网卡作为 DPDK 运行的网卡,NAT 网卡作为 ssh 连接的网卡。 (2)修改网卡配置信息。找到虚拟机安装目录下的.vmx文件,内容如下: 将 ethernet0.virtualDev 由 e1000 修改 vmxnet3,因为 vmware 的 vmxnet3 支持多队列网卡,同时添

    2023年04月09日
    浏览(25)
  • DPDK相关学习资料汇总

    经常有新报道的童鞋问我,学习DPDK有哪些资料或者书籍可以看,今天我先来汇总一波,后面会持续更新: 1. DPDK官方网站:https://www.dpdk.org/和http://core.dpdk.org/doc/,官方网站提供DPDK的最新版本代码、文档和实例程序下载,同时也发布DPDK的最新版本更新和重大改进。 2. DPDK Git

    2024年02月08日
    浏览(62)
  • 了解一下 Linux 中的 DPDK

    文章首发地址 DPDK(Data Plane Development Kit)是一种高性能数据包处理框架,它提供了一系列的库和驱动程序,可以在通用的x86服务器上实现高吞吐量和低延迟的网络数据包处理。DPDK可以用于加速网络功能虚拟化(NFV)、软件定义网络(SDN)、云计算等应用场景。 软件驱动程序

    2024年02月16日
    浏览(40)
  • DPDK系列之二十内存的整体架构

    前面提到了DPDK中自己对内存进行了抽象。那么既然DPDK决定自己伸手处理内存,那就得有自己的一套处理体系。肯定不能简单的一个链表就搞定。学过操作系统和计算机原理的都明白,计算机的内存管理是一个相当复杂的系统。退回来说,就在更上层中使用中OS中的内存管理,

    2024年02月09日
    浏览(39)
  • centos 编译dpdk-stable-17.02.1

    1大页设置 yum install make automake gcc gcc-c++ kernel-devel echo 128 /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages mkdir /mnt/huge mount -t hugetlbfs nodev /mnt/huge  2环境变量设置 #environment config export RTE_SDK=/home/dpdk-stable-17.02.1 export RTE_TARGET=x86_64-native-linuxapp-gcc export KERNELDIR=/lib/modules/3.10.0-514.el7.x86_64/

    2024年02月09日
    浏览(33)
  • DPDK系列之二十六缓冲Cache的管理

    其实一直不想分析这个问题,主要是这个问题太多了。即使不学DPDK,计算机的原理和操作系统,内存型框架等等中都回避不了这个问题,包括多线程的伪共享也提到了这个问题。可以说这个问题是绕不开的,老生常谈谈得都糊了。 所以这里重点不谈Cache这个原理,书和网上都

    2024年02月15日
    浏览(37)
  • DPDK系列之二十八内存分配启动和初始化

    在前面对DPDK中的内存进行了各个模块的分析,这次开始整体流程的分析说明。重点是分析一下内存从开始准备到最终应用的过程,从而把各个分别讲的模板贯穿起来,从而能够更好的了解和认识DPDK中内存的使用。 DPDK中,启动时对内存的处理如下: 1、大页内存的处理 这个在

    2024年02月10日
    浏览(52)
  • 无线AP打流-TX、RX环境部署

                     PC2打开endpoint         PC1打开ixchariot         创建流:  然后,我们编辑脚本:  我们可以看到,是endpoint 1为发送端,endpoint 2为接收端。   也就是192.168.2.44为发送端,192.168.7.6为接收端 此时我们不用做任何修改,直接关闭脚本,点击保存。 然

    2024年02月09日
    浏览(34)
  • PCIe_TX/RX测试步骤

    TX测试 一:  GEN1、2、3采用自动化测试: 1. 点击infinum软件中Analyze-Automated Test Apps-D9050PCIC PCIExpress Gen5 Test App,进入自动化测试界面;   2. Set Up窗口:PCIE5.0-CEM-End Point Tests-Device Definition-勾选5G的-3.5dB-6dB-选择8G的P0 3. Select Test界面将Device Definition设置的测试项全部勾选: 4. Run界面

    2024年02月02日
    浏览(28)
  • iZotope RX 10(音频修复和增强工具)

    iZotope RX 10是一款音频修复和增强软件,主要特点包括: 声音修复:iZotope RX 10可以去除不良噪音、杂音、吱吱声等,使音频变得更加清晰干净。 音频增强:iZotope RX 10支持对音频进行音量调节、均衡器、压缩器、限制器等处理,使音频效果更加出色。 批处理:iZotope RX 10支持批

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包