Infiniband/RDMA技术梳理

Infiniband是一种网络通讯协议,提供点对点双向串行链路,支持RDMA技术,允许无操作系统干预的远程内存访问,提高吞吐量和降低延迟。Mellanox硬件在Infiniband中扮演重要角色,其驱动安装涉及MLNX_OFED_LINUX软件包。OpenSM是Infiniband的子网管理器,确保网络的有效运行。文章还介绍了如何配置和管理OpenSM以及查询IB设备信息的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Infiniband/RDMA

        Infiniband是一种网络通讯协议,提供一种基于交换的架构,由处理器节点之间、处理器节点和输入/输出节点之间的点对点双向串行链路。Infiniband代表两层含义:

  • Infiniband网络的物理链路协议
  • Infiniband Verbs API是RDMA(remote direct memeory access)的技术实现

        RDMA可以在不涉及计算机操作系统的情况下,从一个计算机访问;另一台计算机的内存,此技术提高了吞吐量和低延迟联网。典型的IP数据传输,当机器中的某个应用程序向另一台机器上应用程序发送数据时,接收层时会出现以下情况:

  • 内核必须接受数据
  • 内核必须确定数据是否属于该应用程序
  • 内核唤醒应用程序
  • 内核会等待应用程序执行系统调用
  • 应用程序将内核本身的内存空间数据复制到应用程序的缓存中

        这个过程意味如果主机适配器使用直接内存访问(DMA)大多数网络流量会在系统主内存间复制,此外,计算机执行很多在内核和应用程序上下文之间的切换,可能造成高流量的CPU负载,并可能造成其他任务性能下降。

        对于Infiniband,主机适配器不将数据包发送到内核中,然后将其复制到用户应用程序的内存中,而是,主机适配器将数据包的内容直接放置在应用程序的缓存中。此过程需要单独的API、Infiniband Verbs API,应用程序必须支持这个API才能使用RDMA。所有linux必须安装软件包有:

  • rdma - 负责RDMA栈的内核初始化
  • libibverbs - 提供Infiniband Verbs API
  • opensm - 子网管理器(只在一台机器中安装,且只能在没有激活子网管理器的构造中安装)

        Infiniband通过在交换机在节点之间直接创建一个私有的、受保护的通道,进行数据和消息的传输,无需CPU参与远程直接内存访问(RDMA)和发送/接收由infiniband适配器管理和执行的负载。

        适配器通过PCI Express接口一端;连接到CPU,另一端通过Infiniband网络端口连接到Infiniband子网。优势包括更高的带宽、更低的延迟和增强可伸缩性。

  • Infiniband带宽

SDR:10Gb/s  DDR:20Gb/s  QDR:40Gb/s  FDR:56Gb/s

EDR:100Gb/s  HDR:200Gbs/s  NDR:400Gb/s

二、查询Mellanox硬件

# lspci -v | grep Mellanox

# ibdev2netdev -v

三、Mellanox驱动安装

驱动下载地址:NVIDIA InfiniBand Software | NVIDIA

驱动的栈架构

安装驱动:

# mount -o MLNX_OFED_LINUX-<ver>-<OS label>-<CPU arch>.iso /mnt

# /mnt/mlnxofedinstall --force

卸载驱动

# /usr/sbin/ofed_uninstall.sh

四、OpenSM子网管理器

        OpenSM是子网管理器(Subnet Manager),提供名叫“opensm”的可执行程序。 opensm是Infiniband的子网管理器和子网管理者,运行在Mellanox驱动栈的顶端。每个Infiniband子网中必须运行一个opensm。在默认模式下,opensm将要扫描IB fabric,初始化和时而扫描变化。

        opensm附属在本地机器上的一个指定的IB口上,并且仅仅连接到它的fabric。如果本地机器有另外一个IB口,opensm将要忽略连接到另一个口的fabric。如果端口没有指定,opensm将要选择第一个可用的端口。opensm可以显示所有可用的端口并且选择一个端口去附属。默认,opensm有两个日志文件:/var/log/messages和/var/log/opensm.log。

配置文件路径:/etc/rdma/

# opensm --help

运行opensm在默认模式下,简单输入:

# opensm

在后台模式运行/重启/停止/查看opensm,输入:

# /etc/init.d/opensmd start

# /etc/init.d/opensmd restart

# /etc/init.d/opensmd stop

# /etc/init.d/opensmd status

 五、opensm多端口配置

opensm多端口两种配置方案:
  • 在一台机器上启动多个进程,每个进程负责一个网口,优点是简单,并且能够为每个端口的策略详细定制
  • 在一个配置文件上指定多个网卡端口,一个进程负责管理这些端口,优点够简单

    方案一

    [root@admin ~]# cp -a /etc/rdma/opensm.conf  /etc/rdma/opensm.conf.0

    [root@admin ~]# cp -a /etc/rdma/opensm.conf  /etc/rdma/opensm.conf.1

    [root@admin ~]# ibstat |grep Port

    Port 1:

    Port GUID: 0x248a070300001234

    Port 1:

    Port GUID: 0x248a070300bc5678

    [root@admin ~]# opensm --guid 0x248a070300001234 &

    [root@admin ~]# opensm --guid 0x248a070300bc5678 &

    方案二

    [root@admin ~]# ibstat |grep Port

    Port 1:

    Port GUID: 0x248a070300001234

    Port 1:

    Port GUID: 0x248a070300bc5678

    [root@admin ~]# cat /etc/rdma/opensm.conf |grep guid

    guid  0x248a070300001234

    guid  0x248a070300bc5678

    [root@admin ~]# systemctl restart opensm

  六、查询IB设备信息

# ibstat

# ibstatus 

# ibswitches 查询IB交换机信息

ib交换机设置split模式(对于一分二的ib线缆需要设置split模式)

设置split模式

#mlxconfig -d lid-2 s SPLIT_MODE=1

查询split模式是否设置成功

#mlxconfig -d lid-2 q SPLIT_MODE

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LonelyLinguist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值