You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

绑定DPDK的端口无法通过dpdk-dumpcap捕获入站数据包问题

DPDK抓包无数据问题排查与解决

核心问题场景

两块物理网卡各含2个QSFP28端口,内部拆分后每块拥有8个端口,且两块网卡通过线缆直连:

  • 发包端:网卡绑定内核驱动,通过tcpreplay从ens5f3端口发送pcap数据包
  • 抓包端:网卡绑定DPDK驱动,使用dpdk-testpmd和dpdk-dumpcap均无法捕获数据包,但解绑DPDK驱动并重新绑定内核驱动后,tcpdump可正常抓包

排查与解决步骤

1. 确认DPDK端口匹配与启用状态

DPDK应用默认可能仅初始化部分端口,或抓包端口与实际收包物理端口不匹配:

  • 执行命令查看绑定DPDK驱动的所有端口PCI地址:
    dpdk-devbind.py --status
    
  • 启动dpdk-testpmd时明确指定启用所有8个端口(根据实际端口数调整掩码):
    build/app/dpdk-testpmd -c 0xf0 -n 4 -- -i --port-topology=chained --portmask=0xff
    
  • 在testpmd交互模式下启动收包并查看统计:
    testpmd> start
    # 此时执行tcpreplay发包
    testpmd> show port stats all
    
    若testpmd能统计到RX数据包,说明DPDK端口本身可接收,问题出在dpdk-dumpcap配置。

2. 调整DPDK抓包工具的核心与队列配置

默认配置下,dpdk-dumpcap的RX队列或核心绑定可能存在问题:

  • 指定核心与端口启动dpdk-dumpcap(核心掩码0x10对应核心4,-i 0对应监听端口0,按需调整):
    build/app/dpdk-dumpcap -c 0x10 -n 4 -- -i 0 -w /tmp/capture.pcapng
    
  • 确保指定的核心未被其他进程占用,可通过htop查看核心负载。

3. 配置DPDK端口为混杂/多播接收模式

若端口未启用混杂模式,可能过滤掉非自身MAC的数据包:

  • 在testpmd交互模式下配置端口参数:
    testpmd> port config 0 promisc on
    testpmd> port config 0 allmulticast on
    testpmd> port config 0 mtu 1500  # 与发包端网卡MTU保持一致
    
    配置完成后重新启动收包测试。

4. 验证驱动兼容性与加载状态

从日志看使用ice驱动,可能存在版本兼容或驱动未正确加载的问题:

  • 确认DPDK版本与ice驱动版本匹配(推荐使用DPDK稳定版如22.11/23.11)
  • 重新加载DPDK驱动模块(以igb_uio为例):
    rmmod igb_uio
    insmod build/kmod/igb_uio.ko
    
  • 若使用vfio-pci驱动,需确保已启用IOMMU并正确加载模块。

5. 确认直连端口对应关系

可能存在抓包端口与发包端直连端口不匹配的情况:

  • 执行命令点亮发包端网卡端口指示灯:
    ethtool -p ens5f3
    
  • 对照dpdk-devbind.py --status的PCI地址,找到对应亮灯的DPDK端口,确保dpdk-dumpcap监听该端口。

内容的提问来源于stack exchange,提问作者Anoop C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:40:17