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

DPDK应用调用rte_eth_dev_count_avail返回0的问题排查求助

DPDK自研应用网卡识别问题排查求助

我基于DPDK 19.11.12源码编译库并开发了扩展应用,已通过dpdk-devbind将Intel X550网卡绑定至igb_uio驱动,testpmd能正常识别该设备,但自研应用调用rte_eth_dev_count_avail始终返回0。怀疑问题出在DPDK库或应用的编译方式上,以下是相关信息,请求协助排查:

应用Makefile片段

RTE_SDK ?= /usr/local/share/dpdk
RTE_TARGET ?= x86_64-default-linuxapp-gcc

include $(RTE_SDK)/mk/rte.vars.mk

# binary name
APP = myapp

# all source are stored in SRCS-y
SRCS-y := main.c 
WERROR_FLAGS += -Werror

CFLAGS += -O3 -g
CFLAGS += $(WERROR_FLAGS) -Wno-address-of-packed-member
CFLAGS += -Wall

CFLAGS += -pie -fPIE -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -fstack-protector-strong
CFLAGS += -DSTATSD


LDFLAGS += -z relro -z now
LDFLAGS += -ljansson -lrte_pmd_ixgbe
LDLIBS += -lrte_pmd_ixgbe

# disable since libxenstore.so isn't linked properly
#CONFIG_RTE_LIBRTE_PMD_XENVIRT = n
CONFIG_RTE_LIBRTE_PMD_IXGBE = y
include $(RTE_SDK)/mk/rte.extapp.mk

DPDK库编译脚本

RUN make -C /dpdk/dpdk-stable-${DPDK_VERSION}/ config T=x86_64-native-linuxapp-gcc 
RUN cd /dpdk/dpdk-stable-${DPDK_VERSION}/ && cat build/.config | sed -e s/CONFIG_RTE_BUILD_SHARED_LIB=n/CONFIG_RTE_BUILD_SHARED_LIB=y/g > /tmp/out && mv /tmp/out build/.config
RUN cd /dpdk/dpdk-stable-${DPDK_VERSION}/ && cat build/.config | sed -e s/CONFIG_RTE_LIBRTE_ETHDEV_DEBUG=n/CONFIG_RTE_LIBRTE_ETHDEV_DEBUG=y/g > /tmp/out && mv /tmp/out build/.config
RUN cd /dpdk/dpdk-stable-${DPDK_VERSION}/ && cat build/.config | sed -e s/CONFIG_RTE_LIBRTE_E1000_DEBUG_RX=n/CONFIG_RTE_LIBRTE_E1000_DEBUG_RX=y/g > /tmp/out && mv /tmp/out build/.config
RUN cd /dpdk/dpdk-stable-${DPDK_VERSION}/ && cat build/.config | sed -e s/CONFIG_RTE_LIBRTE_E1000_DEBUG_TX=n/CONFIG_RTE_LIBRTE_E1000_DEBUG_TX=y/g > /tmp/out && mv /tmp/out build/.config
RUN cd /dpdk/dpdk-stable-${DPDK_VERSION}/ && cat build/.config | sed -e s/CONFIG_RTE_LIBRTE_IXGBE_DEBUG_RX=n/CONFIG_RTE_LIBRTE_IXGBE_DEBUG_RX=y/g > /tmp/out && mv /tmp/out build/.config
RUN cd /dpdk/dpdk-stable-${DPDK_VERSION}/ && cat build/.config | sed -e s/CONFIG_RTE_LIBRTE_IXGBE_DEBUG_TX=n/CONFIG_RTE_LIBRTE_IXGBE_DEBUG_TX=y/g > /tmp/out && mv /tmp/out build/.config
RUN cd /dpdk/dpdk-stable-${DPDK_VERSION}/ && cat build/.config | sed -e s/CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_INFO/CONFIG_RTE_LOG_DP_LEVEL=RTE_LOG_DEBUG/g > /tmp/out && mv /tmp/out build/.config
RUN cd /dpdk/dpdk-stable-${DPDK_VERSION}/ && cat build/.config | sed -e s/CONFIG_RTE_LOG_HISTORY=256/CONFIG_RTE_LOG_HISTORY=2048/g > /tmp/out && mv /tmp/out build/.config

EAL初始化日志(--log-level=8)

Sep 09 04:56:50  {"timestamp": 1662717410.8821511, "level": "info", "message": "Initialising EAL ..."}
Sep 09 04:56:50  EAL: Detected 64 lcore(s)
Sep 09 04:56:50  EAL: Detected 2 NUMA nodes
Sep 09 04:56:50  EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
Sep 09 04:56:50  EAL: Selected IOVA mode 'PA'
Sep 09 04:56:50  EAL: No available hugepages reported in hugepages-1048576kB
Sep 09 04:56:50  EAL: Debug dataplane logs available - lower performance
Sep 09 04:56:50  EAL: Debug dataplane logs available - lower performance
Sep 09 04:56:50  EAL: Probing VFIO support...
Sep 09 04:56:50  EAL: VFIO support initialized
Sep 09 04:56:50  EAL: Probing VFIO support...
Sep 09 04:56:50  EAL: VFIO support initialized

插件加载异常信息

添加启动参数--master-lcore 4 -l 4,5,6,7 --log-level 8 -d /usr/local/lib/后出现以下错误:

Sep 09 04:47:29 EAL: Detected 64 lcore(s)
Sep 09 04:47:29 EAL: Detected 2 NUMA nodes
Sep 09 04:47:29 EAL: librte_compressdev.so.0.200: cannot open shared object file: No such file or directory
Sep 09 04:47:29 EAL: FATAL: Cannot init plugins
Sep 09 04:47:29 EAL: Cannot init plugins

注:librte_compressdev.so.0.200确实存在于/usr/local/lib/路径下:

ls -l /usr/local/lib/librte_compressdev.so.0.200
-rwxr-xr-x 1 root root 38024 Sep  8 23:51 /usr/local/lib/librte_compressdev.so.0.200

排查方向建议

  1. 编译目标不一致问题

    • 应用Makefile中RTE_TARGET设为x86_64-default-linuxapp-gcc,但DPDK库编译用的是x86_64-native-linuxapp-gcc,两者不匹配。default和native的区别在于native会启用CPU特定优化,且库路径不同。需统一两者的编译目标,要么都用default,要么都用native。
  2. 动态库加载路径问题

    • 虽然指定了-d /usr/local/lib/,但系统可能无法正确解析该路径下的依赖库。可以尝试:
      • 执行export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH后再启动应用;
      • 在启动参数中明确指定单个库文件路径,而非目录,比如-d /usr/local/lib/librte_pmd_ixgbe.so;
      • 检查librte_compressdev.so.0.200的依赖是否完整,用ldd /usr/local/lib/librte_compressdev.so.0.200查看是否有缺失的依赖库。
  3. 网卡驱动与PMD匹配问题

    • 确认DPDK编译时是否启用了igb_uio驱动支持,检查.config中CONFIG_RTE_LIBRTE_IGB_UIO是否设为y;
    • 应用中是否正确初始化了EAL并传入必要参数,比如是否误加--no-pci参数(会导致不扫描PCI设备)。
  4. 权限与环境问题

    • 确保应用以root权限运行,DPDK需要root权限访问PCI设备和大页内存;
    • 检查/var/run/dpdk/目录的权限,确保应用有读写权限;
    • 确认大页内存已正确配置,虽然日志显示1GB大页无可用,但testpmd能正常运行,可检查2MB大页的配置情况。

内容的提问来源于stack exchange,提问作者Amit Limaye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:57:38