安装网卡驱动前我们需要先来了解下RDMA技术
RDMA是一种概念,在两个或者多个计算机进行通讯的时候使用DMA, 从一个主机的内存直接访问另一个主机的内存。
RDMA是一种host-offload, host-bypass技术,允许应用程序(包括存储)在它们的内存空间之间直接做数据传输。具有RDMA引擎的以太网卡(RNIC)--而不是host--负责管理源和目标之间的可靠连接。
RDMA是一种新的直接内存访问技术,RDMA让计算机可以直接存取其他计算机的内存,而不需要经过处理器的处理。RDMA将数据从一个系统快速移动到远程系统的内存中,而不对操作系统造成任何影响。
在实现上,RDMA实际上是一种智能网卡与软件架构充分优化的远端内存直接高速访问技术,通过将RDMA协议固化于硬件(即网卡)上,以及支持Zero-copy和Kernel bypass这两种途径来达到其高性能的远程直接数据存取的目标。
使用RDMA的优势如下:
1.零拷贝(Zero-copy) - 应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。 2.内核旁路(Kernel bypass) - 应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。 3.不需要CPU干预(No CPU involvement) - 应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU。远程主机内存能够被读取而不需要远程主机上的进程(或CPU)参与。远程主机的CPU的缓存(cache)不会被访问的内存内容所填充。 4.消息基于事务(Message based transactions) - 数据被处理为离散消息而不是流,消除了应用程序将流切割为不同消息/事务的需求。 5.支持分散/聚合条目(Scatter/gather entries support) - RDMA原生态支持分散/聚合。也就是说,读取多个内存缓冲区然后作为一个流发出去或者接收一个流然后写入到多个内存缓冲区里去。
目前支持RDMA的网络协议有
1.InfiniBand(IB): 从一开始就支持RDMA的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的网卡和交换机。 2.RDMA过融合以太网(RoCE): 即RDMA over Ethernet, 允许通过以太网执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡必须是支持RoCE的特殊的NIC。 3.互联网广域RDMA协议(iWARP): 即RDMA over TCP, 允许通过TCP执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡要求是支持iWARP(如果使用CPU offload的话)的NIC。否则,所有iWARP栈都可以在软件中实现,但是失去了大部分的RDMA性能优势。
上面介绍完技术和原理我们接下来进行迈络思网卡的驱动安装
我们先看下Mellanox网卡是否安装和版本
lspci | grep mellanox
首先我们需要去官网下载对应的驱动包:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/
选择对应的版本、OS和架构,我这里以我本需要安装的5.3-1.0.0.1这个版本为例
wget https://content.mellanox.com/ofed/MLNX_OFED-5.3-1.0.0.1/MLNX_OFED_LINUX-5.3-1.0.0.1-ubuntu20.10-x86_64.tgz
然后解压到进入目录就可以直接进行安装,注意安装的时候会自动联网安装依赖包
tar MLNX_OFED_LINUX-5.3-1.0.0.1-ubuntu20.10-x86_64.tgz cd MLNX_OFED_LINUX-5.3-1.0.0.1-ubuntu20.10-x86_64 ./mlnxofedinstall --skip-distro-check --without-fw-update #安装过程中会有提示,选择y
安装的一些常见参数解释
--skip-distro-check 让执行脚本不去检查当前OS的发布版本号(如redhat7.5) --without-fw-update 参数是不更新FW --add-kernel-support 如果本机内核版本不在支持的内核列表里面就需要添加,让它重新根据当前的内核编译出包并安装 更多参数可以使用mlnxofedinstall -h命令查看
安装结束提示需要执行 以下命令加载新驱动服务
/etc/init.d/openibd restart /etc/init.d/opensmd restart
openibd 是网卡需要的 daemon 程序, 并且会给内核加载需要的mod, 我们开启并设置为开机启动
安装完成以后可以使用ofed_info -s查看当前驱动版本,接着就可以使用以下这些命令。
ibv_devinfo显示device信息 ibv_devinfo -v 显示device信息(详细) ibv_devinfo -d mlx5_0 输出指定设备的主要信息 ibv_devinfo -d mlx5_0 -v 输出指定设备的详细信息 ibv_devices 列出device ibvdev2netdev 显示device和网口的对应关系 iblinkinfo 命令可以查看IB网络的拓扑结构 ibstatus 查看核更改网卡工作模式:Ethernet或infiniband模式 ibstat 或 ibsysstat 查询 InfiniBand 设备状态或 IB 地址上的系统状态 ibv_asyncwatch 监视 InfiniBand 异步事件 show_gids 显示GID show_drop 查看端口包丢弃情况 ofed_info 显示当前设备安装的OFED包的信息:驱动、工具等 cat /etc/infiniband/info Mellanox OFED 安装的信息 cat /etc/infiniband/openib.conf看自动加载的模块列表 ethtool -i ens21f0 查询ice和固件版本,ens21f0是网卡名 modinfo irdma 查看irdma版本 modinfo ice 查看ice版本 /sbin/connectx_port_config 切换工作模式,可以在Ethernet和infiniband模式之间进行切换 /sbin/connectx_port_config -s 查看当前工作模式 /etc/init.d/openibd status 验证RDMA内核模块是否已加载
上面就是迈络思网卡驱动的安装和一些常用命令。