我无法将mlx5 pmd驱动程序与服务器上已安装的某些Mellanox NIC一起使用。我在EAL初始化期间收到的错误是:
et_mlx5:没有Verbs设备与PCI设备0000:03:00.0相匹配,是否已加载内核驱动程序?
我当前使用的DPDK版本是:DPDK-STABLE-18.11
我已经安装了OFED最新版本:
mlnx-zh-4.5-1.0.1.0-ubuntu16.04-x86_64
我已经执行了ib_uverbs内核模块的modprobe
这是我正在使用的内核版本
src/hello
以下是NIC型号:
build/hello
NIC使用的固件版本:
Mobile.startApplication('C:/user/...', true)
完整的初始化输出为:
moragalu@server:~$ uname -r
4.4.0-143-generic
内核中加载的当前模块:
moragalu@server:~$ lspci | grep Mell
03:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
03:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
06:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
06:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
答案 0 :(得分:0)
在将RDMA核心库用于ibverbs依赖项时,我遇到了同样的问题。过去,我设法在mlx5_core.c中找到一个错误(将探测函数中的队列数硬编码为8,这很神奇),但是我不确定这对您来说是否是一个问题。
无论哪种方式,当我安装最新的Mellanox OFED Drivers时问题都消失了,因此尝试这样做是个好主意。只需记住使用以下命令进行安装即可:
mlnxofedinstall --dpdk --upstream-libs
edit:刚注意到您已经安装了驱动程序-确保已按照上面的步骤进行安装。您还可以做一件事:检查其输出(与-libverbs
一起编译):
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
struct ibv_device ** devices;
int num;
struct ibv_context * ctx;
devices = ibv_get_device_list(&num);
int i;
if(devices[0] == NULL)
printf("devices is null\n");
printf("got %d devices\n", num);
for (i=0;i<num;i++) {
printf(ibv_get_device_name(devices[i]));
printf("\n");
ctx = ibv_open_device(devices[i]);
if (ctx == NULL)
printf("ctx is null \n");
else
printf("device opened\n");
}
if (errno)
printf("ERROR: %s\n", strerror(errno));
ibv_free_device_list(devices);
return 0;
}
如果它没有列出任何设备,至少您会知道这是动词驱动程序的问题,而不是DPDK本身。