一、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
驱动下载地址: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附属在本地机器上的一个指定的IB口上,并且仅仅连接到它的fabric。如果本地机器有另外一个IB口,opensm将要忽略连接到另一个口的fabric。如果端口没有指定,opensm将要选择第一个可用的端口。opensm可以显示所有可用的端口并且选择一个端口去附属。默认,opensm有两个日志文件:/var/log/messages和/var/log/opensm.log。
# 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多端口配置
- 在一台机器上启动多个进程,每个进程负责一个网口,优点是简单,并且能够为每个端口的策略详细定制
- 在一个配置文件上指定多个网卡端口,一个进程负责管理这些端口,优点够简单
方案一
[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