OpenFabrics Enterprise Distribution (OFED)是一组开源软件驱动、核心内核代码、中间件和支持InfiniBand Fabric的用户级接口程序。
2005年由OpenFabrics Alliance (OFA)发布第一个版本。Mellanox OFED用于Linux,Windows (WinOF),包括各种诊断和性能工具,用于监视InfiniBand网络的运行情况,包括监视传输带宽和监视Fabric内部的拥塞情况。
OpenFabrics Alliance (OFA)是一个基于开源的组织,它开发、测试、支持OpenFabrics企业发行版。该联盟的任务是开发并推广软件,通过将高效消息、低延迟和最大带宽技术架构直接应用到最小CPU开销的应用程序中,从而实现最大应用效率。
该联盟成立于2004年6月,最初是OpenIB联盟,致力于开发独立于供应商、基于Linux的InfiniBand软件栈。2005,联盟致力于支持Windows,此举将使软件栈真正跨平台。
2006年,该组织再次扩展其章程,包括对iWARP的支持,在2010年增加了对RoCE (RDMA over Converged)支持通过以太网交付高性能RDMA和内核旁路解决方案。2014年,随着OpenFabrics Interfaces工作组的建立,联盟再次扩大,实现对其他高性能网络的支持。
Mellanox OFED是一个单一的软件堆栈,包括驱动、中间件、用户接口,以及一系列的标准协议IPoIB、SDP、SRP、iSER、RDS、DAPL(Direct Access Programming Library),支持MPI、Lustre/NFS over RDMA等协议,并提供Verbs编程接口;Mellanox OFED由开源OpenFabrics组织维护。
如果前面的软件堆栈逻辑图过于复杂,可以参考上面的简明介绍图。MLNX_OFED_LINUX (Mellanox OFED for Linux) 作为ISO映像提供,每个Linux发行版,包括源代码和二进制RPM包、固件、实用程序、安装脚本和文档。
InfiniBand串行链路可以在不同的信令速率下运行,然后可以捆绑在一起实现更高的吞吐量。原始信令速率与编码方案耦合,产生有效的传输速率。编码将通过铜线或光纤发送的数据的错误率降至最低,但也增加了一些开销(例如,每8位数据传输10位)。
典型的实现是聚合四个链接单元(4X)。目前,InfiniBand系统提供以下吞吐量速率:
下面我们站在应用开发架构师或开发者的角度,分析、解读下 InfiniBand的架构和服务能力(简化的InfiniBand架构)。
InfiniBand的软件架构
InfiniBand软件栈的设计是为了简化应用部署。IP和TCP套接字应用程序可以利用InfiniBand性能,而无需对运行在以太网上的现有应用程序进行任何更改。这同样适用于SCSI、iSCSI和文件系统应用程序。位于低层InfiniBand适配器设备驱动程序和设备独立API(也称为verbs)之上的上层协议提供了行业标准接口,可以无缝部署现成的应用程序。
LinuxInfiniBand软件架构。该软件由一组内核模块和协议组成。还有一些关联的用户模式共享库,这些库在图中没有显示。在用户级操作的应用程序对底层互连技术保持透明。本文的重点是讨论应用程序开发人员需要知道什么,才能使他们的IP、SCSI、iSCSI、套接字或基于文件系统的应用程序在InfiniBand上运行。
对协议的操作、底层核心和HCA驱动程序的详细讨论超出了本文的范围。但是,为了完整起见,下面是内核级别的简要概述,下面将介绍InfiniBand特定模块和协议。
内核代码逻辑上分为三层: HCA驱动程序、核心InfiniBand模块和上层协议。用户级访问模块实现了必要的机制,允许从用户模式应用程序访问InfiniBand硬件。核心InfiniBand模块包括InfiniBand设备的内核级中间层,中间层允许访问多个HCA NICs并提供一组公共共享服务,包括:
中间层主要功能
- 通信经理(CM) –CM提供了允许客户建立连接所需的服务。
- SA客户端——SA(子网管理员)客户端提供了允许客户端与子网管理员通信的功能。SA包含建立连接所需的重要信息,如路径记录。
- SMA-子网管理器代理响应子网管理包,允许子网管理器在每个主机上查询和配置设备。
- PMA -性能管理代理响应允许检索硬件性能计数器的管理包。
- MAD服务——管理数据报(MAD)服务提供一组接口,允许客户端访问特殊的InfiniBand队列对(QP), 0和1。
- GSI -通用服务接口(GSI)允许客户端在特殊QP1上发送和接收管理包。
- 队列对(QP)——重定向高层管理协议,通常将共享对特殊QP1的访问重定向到专用QP。这是为带宽密集型的高级管理协议所需要的。
- SMI -子网管理接口(SMI)允许客户端在特殊QP0上发送和接收数据包。这通常由子网管理器使用。
- Verbs-对中间层提供由HCA驱动程序提供的Verbs访问。InfiniBand体系结构规范定义了Vbers。Vbers是必须提供的函数的语义描述。中间层将这些语义描述转换为一组Linux内核应用程序编程接口(API)。
- 中间层还负责在异常程序终止或客户端关闭后,对没有释放的已分配资源的资源跟踪、引用计数和资源清理。
InfiniBand堆栈的最低层由HCA驱动程序组成。每个HCA设备都需要一个特定于HCA的驱动程序,该驱动程序注册在中间层,并提供InfiniBand Verbs。
如IPoIB,SRP,SDP,iSER等高级协议,采用标准数据网络,存储和文件系统应用在InfiniBand上操作。除了IPoIB提供了InfiniBand上TCP/IP数据流的简单封装外,其他更高级别的协议透明地支持更高的带宽、更低的延迟、更低的CPU利用率和端到端服务,使用经过现场验证的RDMA(远程DMA)和InfiniBand硬件的传输技术。下面将讨论这些高级协议,以及如何快速启用现有的应用程序对InfiniBand进行操作。
IB对基于IP的应用支持
在InfiniBand上评估任何基于IP的应用程序的最简单方法是使用上层协议IP over IB (IPoIB)。在高带宽的InfiniBand适配器上运行的IPoIB可以为任何基于ip的应用程序提供即时的性能提升。IPoIB支持在InfiniBand硬件上的(IP)隧道数据包。
如下图,在Linux中,协议是作为标准的Linux网络驱动程序实现的,这允许任何使用标准Linux网络服务的应用程序或内核驱动程序在不修改的情况下使用InfiniBand传输。Linux内核2.6.11及以上版本支持IPoIB协议,并对InfiniBand核心层和基于Mellanox技术公司HCA的HCA驱动程序的支持。
这种在InfiniBand上启用IP应用程序的方法对于带宽和延迟不重要的管理、配置、设置或控制平面相关数据是有效的。由于应用程序继续在标准TCP/IP网络栈上运行,应用程序完全不知道底层I/O硬件。然而,为了获得充分的性能并利用InfiniBand体系结构的一些高级特性,应用程序开发人员也可以使用套接字直接协议(SDP)和相关的基于套接字的API。
InfiniBand不仅对基于IP的应用提供了支持,同时对基于Socket、SCSI和iSCSI,以及对NFS的应用程序提供了支持。
例如,在iSER协议中,采用了SCSI中间层的方法插入到Linux,iSER在额外的抽象层(CMA,Connection Manager Abstraction layer)上工作,实现对基于InfiniBand和iWARP的RDMA技术的透明操作。
这样使得采用LibC接口的用户应用程序和内核级采用Linux文件系统接口的应用程序的透明化,不会感知底层使用的是什么互连技术。