Проблема с драйвером DPDK MLX5 PMD - PullRequest
0 голосов
/ 03 апреля 2019

Я не могу использовать драйвер mlx5 pmd с некоторыми сетевыми картами Mellanox, которые я установил на своем сервере. Ошибка, которую я получаю во время инициализации EAL:

et_mlx5: нет устройства Verbs, соответствующего устройству PCI 0000: 03: 00.0, загружены драйверы ядра?

Используемая в настоящее время версия DPDK: DPDK-STABLE-18.11

Я установил последнюю версию OFED:

MLNX-ан-4.5-1.0.1.0-ubuntu16.04-x86_64

Я выполнил modprobe модуля ядра ib_uverbs

Вот версия ядра, которую я использую

moragalu@server:~$ uname -r
4.4.0-143-generic

Вот модели NIC:

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]

Версия прошивки, которую используют сетевые платы:

moragalu@eridium03:~$ ethtool -i eridium25-03
driver: mlx5_core
version: 4.5-1.0.1
firmware-version: 14.24.1000 (MT_2420110034)
expansion-rom-version: 
bus-info: 0000:06:00.1
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: yes

Полный вывод инициализации:

EAL: Detected 16 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:03:00.0 on NUMA socket 0
EAL:   probe driver: 15b3:1015 net_mlx5
net_mlx5: no Verbs device matches PCI device 0000:03:00.0, are kernel drivers loaded?
EAL: Requested device 0000:03:00.0 cannot be used
EAL: PCI device 0000:03:00.1 on NUMA socket 0
EAL:   probe driver: 15b3:1015 net_mlx5
net_mlx5: no Verbs device matches PCI device 0000:03:00.1, are kernel drivers loaded?
EAL: Requested device 0000:03:00.1 cannot be used
EAL: PCI device 0000:06:00.0 on NUMA socket 0
EAL:   probe driver: 15b3:1015 net_mlx5
net_mlx5: no Verbs device matches PCI device 0000:06:00.0, are kernel drivers loaded?
EAL: Requested device 0000:06:00.0 cannot be used
EAL: PCI device 0000:06:00.1 on NUMA socket 0
EAL:   probe driver: 15b3:1015 net_mlx5
net_mlx5: no Verbs device matches PCI device 0000:06:00.1, are kernel drivers loaded?
EAL: Requested device 0000:06:00.1 cannot be used
EAL: PCI device 0000:03:00.1 on NUMA socket 0
EAL:   probe driver: 15b3:1015 net_mlx5
net_mlx5: no Verbs device matches PCI device 0000:03:00.1, are kernel drivers loaded?
EAL: Driver cannot attach the device (03:00.1)
EAL: Failed to attach device on primary process

Текущие модули, загруженные в ядро:

moragalu@eridium03:~$ lsmod | grep ib
mlx5_ib                16384  0
mlx_compat             24576  4 mlx4_en,mlx5_ib,mlx4_core,mlx5_core
ib_uverbs              61440  0
ib_iser                49152  0
rdma_cm                49152  1 ib_iser
ib_cm                  49152  1 rdma_cm
ib_sa                  36864  2 rdma_cm,ib_cm
ib_mad                 49152  2 ib_cm,ib_sa
ib_core               106496  7 rdma_cm,ib_cm,ib_sa,iw_cm,ib_mad,ib_iser,ib_uverbs
ib_addr                20480  2 rdma_cm,ib_core

1 Ответ

0 голосов
/ 03 апреля 2019

У меня были такие же проблемы при использовании библиотек RDMA-core для зависимости ibverbs.В прошлом мне удавалось найти ошибку в mlx5_core.c (жестко закодировал число очередей до 8 в функции probe, и это волшебным образом работало), но я не уверен, что это та же проблема для вас.

В любом случае, проблема исчезла, когда я установил последние драйверы Mellanox OFED , поэтому стоит попробовать.Просто не забудьте установить его с помощью команды:

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сам по себе.

...