前两天在一个技术群里,解答了几个关于Mellanox CX4L/CX5网卡DPDK PMD适配方面的问题,说明还是有同学有这方面需求的,遂简单写下这方面的东西
Mellanox网卡驱动版本的选择
1.正常来说,网卡驱动版本的选择应该在网卡固件许可的范围内,选择尽可能高的版本(因为高版本的驱动往往是解决了一些驱动bug)。
2.但对于Mellanox网卡,并且是有使用DPDK Mellanox PMD的场景,就不可盲目选择高版本,因为其DPDK PMD,使用的是差分驱动模型,无需卸载内核驱动,而是利用ib uverbs API实现的用户态PMD驱动,所以其依赖了mlx的ib动态链接库,而ib的版本又与Mellanox网卡的内核驱动版本强相关,所以在DPDK Mellanox PMD需求的场景下,Mellanox DPDK PMD、ib动态链接库(RDMA)、Mellanox内核驱动以及Mellanox网卡固件版本,这四者就产生了一定的关联性。一般来说DPDK版本不会随意更换,所以将其作为锚定,Mellanox内核驱动和DPDK驱动大致的对应关系,可见Mellanox各个版本的发行说明:https://docs.mellanox.com/display/OFEDv512580/Release+Notes
Mellanox官方URL地址(驱动、固件、驱动固件兼容性表格)
驱动(相同的驱动版本,对于不同的OS,其源码均相同):
https://www.mellanox.com/products/infiniband-drivers/linux/mlnx_ofed
注意需要下ofed包,ofed包中才有包含ib相关的东西
固件:
https://www.mellanox.com/support/firmware/connectx4lxen
驱动&&固件兼容性表格:
https://docs.mellanox.com/display/OFEDv512580/General+Support+in+MLNX_OFED
Mellanox网卡驱动的编译
Mellanox网卡驱动,目前只使用其DPDK PMD,需要的内容,可以分为三块:
1.网卡操作工具
2.RDMA动态链接库(ib库)
3.内核驱动KO文件
对应驱动源码包中的以下rpm文件,且这三部分的编译无依赖性,无编译顺序要求。
网卡操作工具
mstflint
若需在容器中执行,则需要在容器环境下编译
./configure --disable-inband --prefix=/usr/local CPPFLAGS=
make
RDMA动态链接库(ib库)
rmda-core
若DPDK应用位于容器中运行,则需要在容器环境下编译
按其目录下的README,安装cmake和ninja,并且将buid.sh里的D_INPLACE修改为0(表示支持ninja安装)
buid.sh结束后,进build目录下再执行ninja install,安装所编译出的动态库
内核驱动ko文件
无论何种使用场景,都是在宿主机的环境下编译
kernel-mft
make
mlnx-ofa_kernel
# 配置一些需要编译的模块
./configure -j8 --with-core-mod --with-user_mad-mod --with-user_access-mod --with-addr_trans-mod --with-mlx4-mod --with-mlx4_en-mod --without-mlx4_debug-mod --with-mlx5-mod --without-mlx5_debug-mod --with-ipoib-mod --with-srp-mod --with-iser-mod --with-isert-mod --with-nfsrdma-mod
make
Mellanox网卡驱动的安装
mlnx-ofa_kernel、kernel-mft(内核KO文件)可在编译环境虚拟机中,执行make install,通过观察输出日志,获取到对应的安装位置,再从对应的位置,获取相关文件,平行替换到宿主机上,此种方法替换文件后还需要执行depmod -a和dracut –force以及还需要内核编译选项CONFIG_MODULE_SIG_FORCE处于关闭状态(更新modules.dep、initramfs镜像,以及避免加载内核模块需要签名),否则系统启动无法正常加载驱动。
rmda-core需在编译环境容器中install后,利用脚本获取相关文件,再平行替换到设备上(从安装路径打包一份,再放到设备对应的路径上)。
mstflint与rmda-core类似,容器中执行make install,通过观察输出日志,获取到对应的安装位置,再从对应的位置,获取相关文件,再放到设备对应的路径上。