第3章:架构概述
本章自上而下地描述了 InfiniBand 架构(IBA)的特性、功能、组件和要素,并阐述了各种操作原理。这是一个高层次的概述,旨在作为指导性内容,因此为清晰起见,某些细节被有意省略。
IBA 定义了一种系统区域网络 (SAN),用于连接多个独立的处理器平台 (即主机处理器节点)、I/O 平台和 I/O 设备 (见图 6)。IBA SAN 是一种通信和管理基础设施,支持一个或多个计算机系统的 I/O 和进程间通信(IPC)。IBA 系统可以小到仅有一个处理器和少量 I/O 设备的服务器,也可以大到拥有数百个处理器和数千个 I/O 设备的大规模并行超级计算机安装。此外,IBA 对互联网协议(IP)友好的特性允许桥接到互联网、内联网或连接到远程计算机系统。
IBA 定义了一种交换式通信结构,允许多个设备在受保护的、可远程管理的环境中以高带宽和低延迟并发通信。端节点可以通过多个 IBA 端口进行通信,并且可以利用通过 IBA 结构的多个路径。IBA 端口的多重性和通过网络的路径被用于容错和增加数据传输带宽。
IBA 硬件从 CPU 卸载了大部分 I/O 通信操作。这允许多个并发通信,而不会有与传统通信协议相关的开销。IBA SAN 为其 I/O 和 IPC 客户端提供零处理器拷贝的数据传输,无需内核参与,并使用硬件提供高可靠性的、容错的通信。

图 6
IBA 系统区域网络
IBA 系统区域网络由通过 IBA 结构互连的处理器节点和 I/O 单元组成,该结构由级联的交换机和路由器构成。
I/O 单元的复杂度范围很广,从单个 ASIC IBA 连接设备(如 SCSI 或 LAN 适配器)到复杂度可与处理器节点媲美的大型大容量 RAID 子系统,再到复杂的分布式并行文件系统。
3.1 架构范围
本卷 InfiniBand 架构规范定义了互连结构、路由元件、端节点、管理基础设施以及通信格式和协议。它不指定 I/O 命令或集群服务。
例如,考虑一个 IBA SCSI 适配器。IBA 不定义磁盘 I/O 命令、SCSI 适配器如何与磁盘通信、操作系统(OS)如何看待磁盘设备,也不定义集群中的哪个节点拥有该磁盘适配器。IBA 是这些操作每一个的基本底层支撑,但不直接定义其中任何一个。相反,IBA 定义了如何在处理器节点上的 I/O 驱动器和 SCSI 适配器之间传输数据和命令。
IBA 在多计算机环境中处理 I/O 和 IPC 的数据通信。它支持 I/O 所需的高带宽和可扩展性。它满足 IPC 所需的极低延迟和低 CPU 开销。借助 IBA,操作系统可以为其客户端提供绕过操作系统内核并直接访问 IBA 网络通信硬件的通信机制,从而实现高效的消息传递操作。
IBA 非常适用于最新的计算模型,并且是新型 I/O 和集群通信的构建块。IBA 允许 I/O 单元之间相互通信,并与系统中的任何或所有处理器节点通信。因此,I/O 单元具有与任何处理器节点相同的通信能力。
3.1.1 拓扑与组件
在高层次上,IBA 用作端节点的互连,如图 7 所示。每个节点可以是处理器节点、I/O 单元和/或到另一个网络的路由器。

图 7
IBA 网络
IBA 网络被细分为由路由器互连的子网,如图 8 所示。端节点可以连接到单个子网或多个子网。

图 8
IBA 网络组件
IBA 子网由端节点、交换机、路由器和子网管理器通过链路互连组成,如图 9 所示。每个 IBA 设备可以连接到单个交换机或多个交换机,和/或彼此直接连接。任意两个 IBA 设备之间可以存在多条链路。

图 9
IBA 子网组件
- 单个端节点到端节点的连接创建一个独立的子网,与其余 IBA 设备没有连接,在这种情况下,两个互连端节点之一充当该链路的子网管理器。
该架构针对包含多个独立进程和线程(消费者)的单元进行了优化,如图 10 所示。每个通道适配器构成结构上的一个节点。该架构支持每个单元多个通道适配器,每个通道适配器提供一个或多个连接到结构的端口,在这种情况下,处理器节点对结构显示为多个端节点。

图 10
处理器节点
在处理器节点中,消息和数据服务是操作系统的一个组件,不在本文档范围内。本文档规定了消息和数据服务与通道适配器之间接口的语义行为。该语义接口被称为 IBA Verbs(动词)。Verbs 描述了配置、管理和操作主机通道适配器所需的函数。这些动词标识了每个特定函数需要包含的适当参数。如本规范所定义的,Verbs 不是 API,而是描述 API 必须提供的语义行为,以允许消费者直接访问 InfiniBand 通道适配器提供的服务。
IBA 被架构为一阶网络,因此它定义了主机行为(verbs),并定义了内存操作,使得通道适配器可以尽可能靠近内存综合体定位。它在同意通信的消费者之间提供独立的直接访问,无论这些消费者是 I/O 驱动器和 I/O 控制器,还是以对等基础通信的软件进程。IBA 提供通道语义(发送和接收)和具有保护级别的直接内存访问,以防止非参与消费者的访问。
3.2 通信
3.2.1 队列
IBA 操作的基础是其异步特性,这意味着消费者可以将一系列服务请求排队以供硬件执行。用于保存这些服务请求的队列被称为工作队列 。工作队列通常成对创建,称为队列对(QP),一个用于发送操作,一个用于接收操作。通常,发送工作队列保存导致数据在消费者内存和另一个消费者内存之间传输的指令,接收工作队列 保存关于将从另一个消费者接收的数据放置在何处的指令 。另一个消费者被称为远程消费者 ,即使它可能位于同一节点上。IBA 明确描述了主机通道适配器(HCA)的队列关系,但没有描述 I/O 单元,因为 I/O 单元不一定受主机环境中存在的第二方和第三方互操作性约束(即 HCA 供应商、OS 供应商和 IHV 的 I/O 驱动器或 ISV 使用 IPC 的应用程序之间的互操作性)。以下描述 HCA 队列模型。
- XRC 传输服务工作队列不是成对创建的。
消费者提交工作请求(WR),这导致一个称为工作队列元素(WQE)的指令被放置在适当的工作队列上。通道适配器按照它们被放置在工作队列上的顺序执行 WQE。当通道适配器完成一个 WQE 时,一个完成队列元素(CQE)被放置在完成队列上。每个 CQE 指定了工作完成所需的所有信息,或者直接包含该信息,或者指向包含该信息的其他结构,例如,相关的 WQE。

图 11
消费者队列模型
Work Queue Work Queue Completion Queue
WQE WQE CQE
WQE WQE CQE
WQE WQE CQE
WQE CQE
Work Queue
Hardware
Consumer Work Work
Completion Request
- WQE 和 CQE 不是架构化的实体,只有工作请求动词是架构化的。
每个消费者可以有自己的一组工作队列,每对工作队列彼此独立。每个消费者创建一个或多个完成队列,并将每个发送和接收队列关联到特定的完成队列。发送和接收队列使用同一个完成队列并不是必需的。
因为工作队列需要来自远程节点的确认,并且某些 WQE 使用多个数据包来传输数据,所以通道适配器可以同时有多个 WQE 在进行中,即使来自同一个工作队列。因此,CQE 被发布到完成队列的顺序是不确定的,除了同一工作队列的 CQE 通常按照相应 WQE 被发布到工作队列的顺序发布。

图 12
工作队列操作
- 可靠数据报服务的接收完成是例外,因为在多个 EE 上下文上的并发接收可能导致乱序发布。
发送队列操作有三类:SEND 、远程内存访问(RDMA)和内存绑定(MEMORY BINDING)。
-
对于 SEND 操作,WQE 指定消费者内存空间中的一个数据块,供硬件发送到目的地,让已经在目的地排队的接收 WQE 指定放置该数据的位置。
-
对于 RDMA 操作,WQE 还指定远程消费者内存中的地址。因此,RDMA 操作不需要涉及目的地的接收工作队列。RDMA 操作有 3 种类型:RDMA-WRITE、RDMA-READ 和 ATOMIC。
- RDMA-WRITE 操作规定硬件将数据从消费者内存传输到远程消费者内存。
- RDMA-READ 操作规定硬件将数据从远程内存传输到消费者内存。
- ATOMIC 操作规定硬件对远程 64 位内存位置执行读取。目标返回读取的值,并通过将更新后的值写回同一位置来有条件地修改/替换远程内存内容。
-
内存绑定(MEMORY BINDING) 指示硬件更改内存注册关系(参见第 10.6.6.2 节)。它将内存窗口(Memory Window)关联(绑定)到现有内存区域(Memory Region)内的指定范围。内存绑定允许消费者指定它与其他节点共享的已注册内存的哪些部分(即远程节点可以访问的内存),并指定读写权限。结果生成一个内存密钥(R_KEY),消费者将其传递给远程节点,供其在 RDMA 操作中使用。
- 带有即时数据的 RDMA Write 确实涉及目的地的接收工作队列。
接收队列操作只有一种,即指定接收数据缓冲区。
- RECEIVE WQE 指定硬件在另一个消费者执行 SEND 操作时将从何处接收到的数据放置到何处。每次远程消费者成功执行 SEND 操作时,硬件从接收队列中取出下一个条目,将接收到的数据放置在该接收 WQE 指定的内存位置,并在完成队列上放置一个 CQE,向消费者指示接收操作已完成。因此,SEND 操作的执行会在远程消费者处导致接收队列操作。
通常,RDMA 操作不会在目的地消耗接收 WQE,但有一个例外。即指定了即时数据的 RDMA WRITE 操作。即时数据是 32 位信息,可选地在 SEND 或 RDMA WRITE 指令中提供,作为操作的一部分传输,但不是将即时数据写入内存,而是将数据视为另一块状态信息,并作为 RECEIVE CQE 状态的特殊字段返回。这意味着带有即时数据的 RDMA WRITE 将在目的地消耗一个 RECEIVE WQE。
3.2.2 连接
IBA 支持面向连接和数据报服务。对于连接服务,每个 QP 恰好与一个远程消费者关联。在这种情况下,QP 上下文配置了远程消费者队列对的身份。远程消费者由一个端口和一个 QP 号标识。端口由本地标识符(LID)和可选的全局标识符(GID)标识。在通信建立过程中,此信息和其他信息在两个节点之间交换。
对于数据报服务,QP 不绑定到单个远程消费者,而是 WQE 中的信息标识目的地。需要与每个目的地进行类似于连接设置的通信设置过程来交换该信息。
3.3 通信栈
IBA 的通信栈如图 13 所示。该架构提供了许多 IBA 事务,消费者可以使用这些事务与远程消费者执行事务。消费者将工作队列元素(WQE)发布到 QP,通道适配器解释每个 WQE 以执行操作。

图 13
IBA 通信栈
对于发送队列操作,通道适配器解释 WQE,创建请求消息,如有必要将消息分段为多个数据包,添加适当的路由首部,并通过适当的端口发送数据包。
端口逻辑通过链路传输数据包,交换机和路由器在结构中中继数据包到目的地。
当目的地接收到数据包时,端口逻辑验证数据包的完整性。通道适配器将接收到的数据包与特定的 QP 关联,并使用该 QP 的上下文来处理数据包并执行操作。如有必要,通道适配器创建响应(确认)消息并将其发送回发起者。
某些请求消息的接收会导致通道适配器从接收队列中消耗一个 WQE。当它这样做时,一个与被消耗的 WQE 对应的 CQE 被放置在适当的完成队列上,这导致向拥有该 QP 的消费者发出工作完成。
3.4 IBA 组件
IBA 系统中的设备分类如下:
- 交换机
- 路由器
- 通道适配器
- 中继器
- 互连交换机、路由器、中继器和通道适配器的链路
管理基础设施包括:
- 子网管理器
- 通用服务代理
3.4.1 链路和中继器
链路将通道适配器、交换机、中继器和路由设备互连以形成结构。链路可以是铜缆、光缆或背板上的印刷电路布线。中继器是透明设备,可扩展链路的范围。InfiniBand 架构规范第 2 卷规定了各种介质类型的链路和中继器要求,以及 I/O 设备的各种模块外形尺寸。第 1 卷中描述的架构独立于链路类型和外形尺寸。
- 透明是指中继器仅在物理层协议级别参与,节点不知道它们的存在。
链路和中继器不能直接寻址,但可以通过链路每一端的设备确定链路状态。
3.4.2 通道适配器
通道适配器是处理器节点和 I/O 单元中生成和消费数据包的 IBA 设备。IBA 定义了两种类型的通道适配器:主机通道适配器(HCA)和目标通道适配器(TCA)。HCA 提供了一个消费者接口,提供 IBA 动词指定的功能。IBA 没有规定 TCA 的消费者接口语义。
通道适配器是一个具有特殊保护特性的可编程 DMA 引擎,允许在本地和远程启动 DMA 操作。

图 14
通道适配器
通道适配器可以有多个端口。通道适配器的每个端口被分配一个本地标识符(LID)或一个 LID 范围。每个端口都有自己的一组发送和接收缓冲区,因此每个端口都能够并发发送和接收。缓冲通过虚拟通道(VL)进行,每个 VL 有自己的流量控制。
通道适配器提供内存转换与保护(MTP)机制,将虚拟地址转换为物理地址并验证访问权限。本文档未指定特定的内存管理机制,也未对 TCA 的此类机制提出要求。
通道适配器以队列对(QP)的形式向其消费者提供多个通信接口实例,QP 由发送和接收工作队列组成。
子网管理器为通道适配器配置每个物理端口的本地地址,即端口的 LID。为配置通道适配器而与子网管理器通信的实体被称为子网管理代理(SMA)。
每个通道适配器都有一个由通道适配器供应商分配的全局唯一标识符(GUID)。由于子网管理器分配的本地标识符不是持久的(即可能从一个加电周期到下一个加电周期发生变化),通道适配器 GUID(称为节点 GUID)成为用于持久标识通道适配器的主要对象。此外,每个端口都有一个由通道适配器供应商分配的端口 GUID。
3.4.3 交换机
交换机主要根据数据包的本地路由首部(LRH)中的目的地址转发数据包。交换机还消耗和生成管理交换机自身所需的数据包。可选地,交换机端口可以并入物理 TCA 端口的属性。
IBA 交换机是子网内路由的基本路由组件(子网间路由由 IBA 路由器提供)。交换机通过在链路之间中继数据包来互连链路。

图 15
IBA 交换机元件
交换机暴露两个或多个端口,在这些端口之间中继数据包。
子网内的每个目的地配置有一个或多个唯一的本地标识符(LID)。数据包包含指定目的地 LID 的目的地址。从交换机的角度来看,目的地 LID 代表通过交换机的路径。交换机元件配置了转发表。单个数据包在交换机内基于数据包的目的地 LID 和交换机的转发表被转发到出站端口或多个端口。
IBA 交换机支持单播转发,并可支持组播转发。单播是将单个数据包传递到单个目的地,组播是结构将单个数据包传递到多个目的地的能力。
子网管理器配置交换机,包括加载其转发表。
为了最大化可用性,可以在交换机结构内部署端节点之间的多条路径。如果交换机之间有多条路径可用,子网管理器可以将这些路径用于冗余或基于目的地 LID 的负载共享。在存在多条路径的情况下,子网管理器可以通过重新加载受影响区域中交换机的转发表来重新路由数据包以绕过故障链路。
3.4.4 路由器
与交换机一样,路由器既不生成也不消费数据包(管理数据包除外)。它们只是传递数据包。路由器根据数据包的全局路由首部(GRH)转发数据包,并在数据包从子网到子网时实际替换数据包的本地路由首部(LRH)。
IBA 路由器是子网间路由的基本路由组件(子网内路由由 IBA 交换机提供)。路由器通过在子网之间中继数据包来互连子网。

图 16
IBA 路由器元件
路由器暴露一个或多个端口,在这些端口之间中继数据包。路由器可以嵌入到其他设备中,例如通道适配器或交换机。
路由器对端节点不是完全透明的,因为源必须指定路由器的 LID,并提供目的地的 GID。
每个子网都有一个唯一的子网标识符,称为子网前缀(Subnet Prefix)。子网管理器为所有端口(通过 PortInfo 属性)编程该子网的子网前缀。当与端口 GUID 结合时,该组合成为端口的自然 GID。端口可以具有其他本地管理的 GID。
从路由器的角度来看,GID 的子网前缀部分代表通过路由器的路径。IPv6 指定了路由器之间执行的协议以派生其转发表。单个数据包在路由器内基于数据包的目的地 GID 和路由器的转发表被转发到出站端口或多个端口。
每个路由器将数据包通过下一个子网转发到另一个路由器,直到数据包到达目标子网。最后一个路由器使用与目的地 GID 关联的 LID 作为目的地 LID 发送数据包。
子网管理器配置路由器,提供有关子网的信息,例如使用哪些 VL 和分区信息。
为了最大化可用性,可以在结构内部署子网之间的多条路径。如果有多条路径可用,路由器可以将这些路径用于冗余或负载共享。在存在多条路径的情况下,路由器可以重新路由数据包以绕过故障子网。
3.4.5 管理组件
IBA 管理提供了一个子网管理器和支撑许多通用管理服务的基础设施。管理基础设施要求每个节点中有一个子网管理代理,并定义了一个通用服务接口,允许额外的通用服务代理。
该架构定义了一个通用的管理数据报(MAD)消息结构,用于管理器和管理代理之间的通信。
3.4.5.1 子网管理器
子网管理器(SM)是连接到子网的实体,负责配置和管理交换机、路由器和通道适配器。SM 可以与其他设备(如通道适配器或交换机)一起实现。
IBA 支持每个子网多个子网管理器的概念,并指定多个子网管理器如何协商使其中一个成为主 SM。它不禁止合作 SM 之间用于管理主/备用关系的其他方法。
主 SM:
- 发现子网拓扑,
- 为每个通道适配器端口配置 LID 范围、GID 子网前缀和 P_Key,
- 为每个交换机配置 LID、子网前缀及其转发数据库,
- 维护子网的端节点和服务数据库,从而提供 GUID 到 LID/GID 解析服务以及服务目录。
3.4.5.2 子网管理代理
每个节点提供一个子网管理代理(SMA),SM 通过一个称为子网管理接口(SMI)的众所周知的接口访问它。SMI 允许 LID 路由数据包和定向路由数据包。定向路由提供了在交换机和端节点配置之前进行通信的手段。只有 SMI 允许定向路由数据包。
3.4.5.3 通用服务代理
每个节点可能包含额外的管理代理,称为通用服务代理(GSA*),可以通过一个称为通用服务接口(GSI)的众所周知的接口访问。GSI 仅支持 LID 路由。IBA 定义的通用服务类别包括:
- 子网管理(SA)------这是 SM 提供的服务,允许节点访问有关子网的信息以发现其他节点和服务,解析路径,并注册其服务。
- 性能管理------监控和报告定义明确的性能计数器
- 基板管理------使用第 2 卷中定义的 IB-ML 提供机箱管理。
- SNMP 隧道------通过定义发送和接收 SNMP 消息的方法提供 SNMP 功能。
- 供应商定义------允许设备供应商用于远程配置和管理其设备的私有扩展。
- 通信管理(ComMgt)------提供端节点之间的连接建立和其他通信管理功能。
- 设备管理(DevMgt)------提供 I/O 资源管理。
- 应用特定------此类别定义了一组可供应用程序使用的通用方法。应用程序可以自由定义新方法和属性,但是它们必须符合本规范后续章节中描述的管理数据报格式和限制。
3.5 IBA 特性
3.5.1 队列对
QP 是硬件向 IBA 消费者提供的虚拟接口;它充当消费者的虚拟通信端口。该架构每个通道适配器支持多达 2^24 个 QP;每个 QP 的操作彼此独立。每个 QP 提供高度的隔离和保护,使其免受其他 QP 操作和其他消费者的影响。因此,QP 可以被视为分配给单个消费者的私有资源。如图 17 所示,一个消费者可以使用多个 QP。

图 17
通信接口
消费者通过分配 QP 并指定其服务类别来创建此虚拟通信端口。通信在源 QP 和目的地 QP 之间进行。对于面向连接的服务,每个 QP 恰好与另一个 QP 紧密绑定,通常在不同的节点上。消费者启动任何必要的通信建立,以将 QP 与目的地 QP 绑定,并使用某些信息配置 QP 上下文,例如目的地 LID、服务等级(SL)和协商的操作限制。
消费者向 QP 发布工作请求以通过该 QP 调用通信。
3.5.2 服务类型
每个 QP 根据其源 QP 和接收 QP 的交互方式配置为特定的操作类别(称为服务类型)。源 QP 和目的地 QP 都必须配置为相同的服务类型。每种服务类型基于以下属性:
- 面向连接与数据报------对于面向连接的服务,QP 恰好与另一个 QP 关联,并且发布到该 QP 的所有工作请求导致消息被发送到已建立的目的地 QP。数据报操作允许单个 QP 用于向/来自任何节点上的任何适当 QP 发送和接收消息。
- 可靠与不可靠------IBA 传输通过一系列确认保证可靠性。对于可靠服务,传输保证每条消息的传递,按顺序且恰好一次(在没有错误的情况下)。为了提供这种可靠性水平,接收 QP 用正确认(ACK)或负确认(NAK)确认所有接收到的入站请求。对于不可靠服务,传输协议不保证所有数据都被传递,尽管有机制允许它确保所有接收到的数据最多传递一次,并且传递的数据没有损坏。此外,在某些情况下,结构配置的变化可能导致数据乱序传递;可靠服务可以检测并从中恢复。不可靠服务可以检测这些情况,但不能独立从中恢复。
- IBA 传输与其他传输------IBA 传输服务为基于通道和基于内存的操作定义了特定的传输协议。IBA 还支持将通道适配器用作数据链路引擎,以在节点之间发送原始数据包,这对支持传统协议栈和传统网络很有用。
IBA 定义的服务类型在表 2 中指定。
某些 IBA 操作仅对某些服务类别有效。QP 对为其配置的服务类别无效的操作拒绝 WQE。
面向连接的服务要求消费者与目标节点启动通信建立过程(连接设置),以在任何 QP 操作之前关联 QP 并建立 QP 上下文。实际上,除了原始数据报之外的所有服务类别都需要某种形式的通信设置来关联队列对。对于可靠数据报服务,节点执行通信建立过程以将端到端(EE)上下文(稍后解释)与每个目标节点关联。所有配置为可靠数据报服务的 QP 使用已建立的 EE 上下文,工作请求指定该操作使用哪个 EE 上下文。
表 2
服务类型
| 服务类型 | 面向连接 | 确认 | 传输 |
|---|---|---|---|
| 可靠连接(RC) | 是 | 是 | IBA |
| 不可靠连接(UC) | 是 | 否 | IBA |
| 可靠数据报(RD) | 否 | 是 | IBA |
| 不可靠数据报(UD) | 否 | 否 | IBA |
| 原始数据报 | 否 | 否 | 原始 |
原始数据报类似于不可靠数据报,只是源 QP 不知道将接收和处理消息的 QP 的身份。原始数据报允许路由器将原始数据报数据包转发到不同结构(如 LAN 或 WAN)上的非 IBA 目的地,这些目的地没有 QP 的等效物。原始数据报有两种类型:IPv6 和 Ethertype。IPv6 原始数据报包含全局路由首部(GRH),数据包有效载荷包含由全局路由首部标识的传输协议服务数据单元。Ethertype 原始数据报包含一个以太网类型字段,数据包有效载荷包含由以太网类型字段标识的传输协议服务数据单元。
IBA 定义了通道(发送/接收)和内存(RDMA)语义。原始数据报和不可靠数据报服务不支持内存语义。
3.5.3 密钥
IBA 使用各种密钥来提供隔离和保护。密钥是由管理实体分配的值,以多种方式用于消息中。密钥本身不提供安全性,因为密钥在跨越结构的消息中可用,因此任何可以访问结构内部的实体都可以确定密钥值。IBA 确实对应用程序如何访问某些密钥施加了限制。
密钥包括:
-
管理密钥(M_Key):强制执行主子网管理器的控制。由子网管理器管理,并在某些子网管理数据包中使用。每个通道适配器端口都有一个 SM 设置然后启用的 M_Key。SM 可以为每个端口分配不同的密钥。一旦启用,端口拒绝不包含已编程 M_Key 的某些管理数据包。因此,只有具有已编程 M_Key 的 SM 才能更改节点的结构配置。只要 SM 处于活动状态,SM 就可以防止端口的 M_Key 被读取。端口维护一个超时,如果 SM 失败,端口将恢复为未管理状态。交换机有一个 M_Key。
-
基板管理密钥(B_Key):强制执行子网基板管理器的控制。由子网基板管理器管理,并在某些 MAD 中使用。每个通道适配器端口都有一个基板管理器设置的 B_Key。基板管理器可以为每个端口分配不同的密钥。一旦启用,端口拒绝不包含已编程 B_Key 的某些管理数据包。因此,只有具有已编程 B_Key 的基板管理器才能更改节点的基板配置。只要基板管理器处于活动状态,基板管理器就可以防止端口的 B_Key 被读取。端口维护一个超时,如果基板管理器失败,端口将恢复为未管理状态。交换机有一个 B_Key。
-
分区密钥(P_Key):强制执行成员资格。通过子网管理器由分区管理器(PM)管理。每个通道适配器端口包含一个由 PM 设置的分区密钥表。QP 需要配置为相同的分区才能通信(QP0、QP1 和配置为原始数据报的端口除外),因此 P_Key 在每个 IB 传输数据包中携带。通信建立过程的一部分确定特定 QP 或 EEC 使用哪个 P_Key。EEC 包含可靠数据报服务的 P_Key,QP 上下文包含其他 IBA 传输类型的 P_Key。QP 或 EEC 中的 P_Key 放置在发送的每个数据包中,并与接收到的每个数据包中的 P_Key 进行比较。P_Key 比较失败的接收数据包被拒绝。每个交换机有一个用于管理消息的 P_Key 表,并可选择支持基于其 P_Key 过滤数据包的分区执行表。
-
队列密钥(Q_Key):强制执行可靠和不可靠数据报服务(不包括原始数据报服务类型)的访问权限。由通道适配器管理。在数据报服务的通信建立期间,节点交换特定队列对的 Q_Key,节点在其发送到该远程 QP 的所有数据包中使用传递给它的值。同样,远程节点使用提供给它的 Q_Key。接收到的数据包具有与该节点提供给远程队列对不同的 Q_Key 意味着该数据包无效,因此被拒绝。
最高有效位设置的 Q_Key 被视为受控 Q_Key(如 GSI Q_Key),HCA 不允许消费者任意指定受控 Q_Key。尝试发送受控 Q_Key 会导致使用 QP 上下文中的 Q_Key。因此操作系统保持控制,因为它可以为特权消费者配置 QP 上下文中的受控 Q_Key。
-
内存密钥(L_Key 和 R_Key):启用虚拟地址的使用,并为消费者提供控制其内存访问的机制。这些密钥由通道适配器通过注册过程管理。消费者向通道适配器注册一个内存区域并接收 L_Key 和 R_Key。消费者在工作请求中使用 L_Key 向 QP 描述本地内存,并将 R_Key 传递给远程消费者以在 RDMA 操作中使用。当消费者排队 RDMA 操作时,它指定从远程消费者传递给它的 R_Key,并且 R_Key 包含在发往原始通道适配器的 RDMA 请求数据包中。R_Key 验证发送方访问目的地内存的权利,并为目的地通道适配器提供将虚拟地址转换为物理地址的手段。
3.5.4 虚拟内存地址
IBA 针对虚拟寻址进行了优化。也就是说,IBA 消费者在工作请求中使用虚拟地址,通道适配器能够根据需要转换虚拟地址。为此,每个消费者向通道适配器注册虚拟内存区域,通道适配器返回 2 个称为本地密钥(L_Key)和远程密钥(R_Key)的内存句柄。然后,消费者在每个需要访问该区域内存的工作请求中使用 L_Key。有关 L_Key 用法的描述,请参见第 3.5.3 节。
内存注册提供了允许 IBA 消费者描述一组虚拟连续内存位置或一组物理连续内存位置的机制,以允许 HCA 使用虚拟地址将内存作为虚拟连续缓冲区访问。
IBA 还支持远程直接内存访问(RDMA),允许远程消费者访问该注册内存。对于 RDMA,消费者将远程密钥(R_KEY)和该内存区域内缓冲区的虚拟地址传递给另一个消费者。该远程消费者在其将访问原始节点内存的 RDMA WQE 中提供该 R_Key。有关 R_Key 用法的详细描述,请参见第 3.5.3 节。
3.5.5 保护域
内存注册不仅允许使用虚拟内存寻址,而且还提供了更高级别的保护,防止意外和未经授权的访问。
由于消费者可能与许多不同的目的地通信,但不想让所有这些目的地对其注册的内存具有相同的访问权限,IBA 提供了保护域。保护域允许消费者控制其内存区域(MR)和内存窗口(MW)的哪些集合可以被其队列对(QP)的哪些集合访问。
在消费者分配 QP 或注册内存之前,它创建一个或多个保护域。QP 被分配到保护域,内存被注册到保护域。特定内存域的 L_Key 和 R_Key 仅在为其创建的同一保护域的 QP 上有效。
3.5.6 分区
分区强制隔离共享 InfiniBand 结构的系统。分区与子网、交换机或路由器建立的边界无关。相反,分区描述了结构内可以通信的一组端节点。
- QP0、QP1 和配置为原始数据报类型的 QP 除外。
端节点的每个端口至少是一个分区的成员,并且可以是多个分区的成员。分区管理器为每个通道适配器端口分配分区密钥(P_Key)。每个 P_Key 代表一个分区。每个 QP 和 EE 上下文被分配到一个分区,并在其发送的所有数据包中使用该 P_Key,并在其接收的所有数据包中检查 P_Key。接收到无效 P_Key 会导致数据包被丢弃。
交换机和路由器可以选择用于执行分区。在这种情况下,分区管理器为交换机或路由器编程 P_Key 信息,当交换机或路由器检测到具有无效 P_Key 的数据包时,它会丢弃该数据包。
3.5.7 虚拟通道
虚拟通道(VL)提供了一种在单个物理链路内创建多个虚拟链路的机制。虚拟通道代表端口中的一组发送和接收缓冲区。所有端口都支持 VL15,它专门为子网管理保留。还有 15 个其他 VL(VL0 到 VL14),称为数据 VL,所有端口至少支持一个数据 VL(VL0),并可提供 VL1 到 VLn-1,其中 n 是端口支持的数据 VL 数量)。
端口实际使用的数据 VL 由 SM 配置,基于数据包中的服务等级(SL)字段。默认是使用 VL0,直到 SM 确定链路两端支持的 VL 数量并编程端口的 SL 到 VL 映射表。
端口对每个数据 VL 维护单独的流量控制,以便一个 VL 上的过量流量不会阻塞另一个 VL 上的流量。

图 18
虚拟通道
VL 分配仅存在于链路每一端的端口之间,并且一条链路上的 VL 分配与其他链路上的分配无关。
每个数据包都有一个在其首部中指定的服务等级(SL)。当数据包遍历结构时,其 SL 决定将在每条链路上使用哪个 VL。
每个端口维护一个 SL 到 VL 映射表,以便在适当的 VL 上发送数据包。
当链路每一端的端口支持不同数量的数据 VL 时,支持更高数量的端口降级为另一个端口支持的数量。因此,对于仅支持单个数据 VL 的端口,所有数据流量默认使用 VL0。
3.5.8 服务质量
IBA 提供了几种机制,允许子网管理器为面向连接和无连接服务管理各种服务质量保证。这些机制是服务等级(Service Level)、服务等级到虚拟通道映射(Service Level to Virtual Lane Mapping)和分区(Partitions)。IBA 不定义服务质量(QoS)级别(例如,尽力而为)。
3.5.8.1 服务等级
IBA 定义了一个服务等级(SL)属性,允许数据包在 16 个服务等级之一上运行。每个服务等级的定义和目的在架构范围之外,留作结构管理策略。因此,服务等级的分配是每个节点的通信管理器与其与子网管理器协商的功能。
3.5.8.2 SL 到 VL 映射
另一个与服务等级相关的 IBA 机制是虚拟通道。每个数据包标识其 SL,当数据包遍历结构时,数据包的 SL 是确定在下一条链路上使用哪个 VL 的一个组成部分。为此,每个端口(交换机、路由器、端节点)都有一个由子网管理配置的 SL 到 VL 映射表。自然,对于所有终止于仅支持一个数据 VL 的端口的链路,所有 SL 都映射到 VL0。
否则,子网管理策略确定每个 SL 到可用 VL 的映射。
寻址到 QP0 的数据包是子网管理数据包(SMP),专门使用 VL15,其 SL 被忽略。VL15(管理 VL)不是数据 VL,不用于寻址到非 QP0 的数据包。
3.5.8.3 分区
另一个可以与服务等级相关的 IBA 机制是分区。结构管理可以为特定分区分配某些 SL。这允许 SM 隔离这些分区之间的流量,即使两个分区以相同的 QoS 级别运行,每个分区都可以保证其公平的带宽份额,无论其他分区中的节点是否行为不当或超额订阅。
3.5.9 注入速率控制
IBA 定义了许多不同的链路比特率。最低的比特率 2.5 Gb/秒被称为 1x(一倍)链路。其他链路速率是 10Gb/秒(4x)和 30 Gb/秒(x12)。有关当前速度路线规划的信息,请访问 InfiniBand 贸易协会网站(www.infinibandta.org)。为了支持结构内的多种链路速度,IBA 定义了一种静态速率控制机制,防止具有高速链路的端口超出具有较低速度链路的端口的容量。
作为路径解析过程的一部分,SubnAdm:PathRecord 为节点提供路径的 MTU 和速率信息。使用路径信息是因为交换机端口或端节点都可能是限制因素。
图 19 中的示例说明,具有 12x 链路速度的端口 A 有可能以端口 B 容量的 3 倍和端口 C、D 或 E 容量的 12 倍注入流量。此外,端口 B 有可能以端口 C、D 或 E 容量的 4 倍注入流量。由于流量往往是突发性的,每次端口 A 向其他端口之一发送时,结构都有很高的拥塞概率。链路流量控制防止结构由于该拥塞而丢失数据包,但背压会影响其他否则不会拥塞的路径。
IBA 通过为以高于 1x 的链路速度运行的端口定义静态速率控制机制来解决这个问题。

图 19
速率匹配示例
每个目的地都有一个与之关联的超时值,该超时值基于源和目的地比特率之间的比率。当源和目的地比特率相等时,超时值为 0(不需要)。否则,当端口向目的地发送数据包时,它将该目的地 LID 和超时值放入其静态速率控制表中。端口在超时时间段到期后删除该条目。只要条目保留在表中,端口就不会向该目的地发送任何更多数据包(即,将流量推迟到表中未列出的其他目的地)。当表中没有条目时,端口通过将数据包放置在适当的 VL 输出队列上来传输数据包。
3.5.10 寻址
每个端节点包含一个或多个通道适配器,每个通道适配器包含一个或多个端口。此外,每个通道适配器包含多个队列对(QP)。
每个 QP 都有一个由通道适配器分配的队列对号(QPN),它在通道适配器内唯一标识该 QP。
每个端口有两个众所周知的 QP(QP0 和 QP1),所有其他 QP 都配置为通过特定端口操作。对于可靠数据报服务,是 EE 上下文而不是 QP 上下文决定端口。
除原始数据报之外的数据包包含目的地 QP 的 QPN。当通道适配器接收到数据包时,它使用目的地 QPN 的上下文(以及可靠数据报的 EE 上下文)来处理数据包。
每个端口都有一个由本地子网管理器(即子网的子网管理器)分配的本地标识符(LID)。在子网内,LID 是唯一的。交换机使用 LID 在子网内路由数据包。本地子网管理器基于 LID 和该端口相对于特定交换机的位置在交换机中配置路由表。每个数据包包含一个源 LID(SLID),标识将数据包注入子网的端口,以及一个目的地 LID(DLID),标识结构应将数据包传递到的端口。
IBA 还通过定义 LID 掩码控制(LMC)提供了在一个物理端口内多个虚拟端口的功能。LMC 指定物理端口在验证数据包 DLID 与其分配的 LID 匹配时掩码(忽略)的 LID 最低有效位数。这些位不被交换机忽略,因此子网管理器可以基于这些最低有效位在结构中编程不同的路径。因此,该端口对于跨结构路由的目的显示为 2^LMC 个端口。
每个端口还具有至少一个全局标识符(GID),其格式为 IPv6 地址。GID 是全球唯一的。每个数据包可选地包含一个全局路由首部(GRH),指定一个源 GID(SGID),标识将数据包注入结构的端口,以及一个目的地 GID(DGID),标识结构应将数据包传递到的端口。路由器使用 GRH 在子网之间路由数据包。交换机忽略 GRH。
每个通道适配器都有一个称为节点 GUID 的全局唯一标识符(GUID),由通道适配器供应商分配。其每个端口都有一个也由通道适配器供应商分配的端口 GUID。端口 GUID 与本地子网前缀结合成为端口的默认 GID。
子网管理提供 GUID 到 LID/GID 解析服务。因此,节点可以通过记住节点或端口 GUID 来持久标识另一个节点。
QP 的地址是端口地址(GID + LID)和 QPN 的组合。要与 QP 通信需要一组信息,包括端口地址(LID 和/或 GID)、QPN、服务等级、路径 MTU,以及可能的其他信息。此信息可以通过寻址到子网管理的路径查询请求获得。
服务 ID 用于解析 QP。某些服务 ID 是众所周知的(即,某些功能具有预定的服务 ID),某些在 I/O 控制器的服务条目列表中发布。子网管理器提供 GUID 到 GID/LID 解析,但目标在通信管理过程中提供服务 ID 到 QP 解析。
通常,通信请求消息的目标节点使用服务 ID 将请求定向到决定是否继续通信建立的实体。如果决定是肯定的,目标返回建立通信所需的信息,包括 QPN 以及特定于传输服务类型的其他信息。
简化的地址解析过程如图 20 所示。

图 20
简化的地址解析过程
在图示中,目标是 I/O 控制器,发起者通过查询 IOC 获取其支持的 I/O 协议列表来了解服务 ID。如果正在建立的服务使用与管理 MAD 不同的路径特性(SL、QoS、MTU 等),则只需要第二次路径解析。
3.5.11 组播
组播是一种一对多/多对多通信范式,旨在简化和提高一组端节点之间通信的效率。
每个组播组由唯一的 GID 标识。节点通过管理操作加入和离开组播组,其中节点提供将参与的每个端口的 LID。此信息被分发到交换机。每个交换机都配置了组播流量的路由信息,指定数据包需要经过的所有端口。注意确保没有环路(即,单个生成树,使得数据包不会被转发到已经处理过该数据包的交换机)。
节点在其发送到该组播组的所有数据包中使用组播 LID 和 GID。当交换机接收到组播数据包(即,数据包目的地 LID(DLID)字段中具有组播 LID 的数据包)时,它复制数据包并将其发送到除到达端口之外的每个指定端口。通过这种方式,每个级联交换机复制数据包,使得数据包仅到达每个订阅的端节点一次。
通道适配器可以限制能够为相同组播地址注册的 QP 数量。通道适配器将组播数据包分发到为该组播地址注册的 QP。单个 QP 可以为同一端口注册多个地址,但如果消费者希望在多个端口上接收组播流量,则每个端口需要一个不同的 QP。通道适配器通过数据包的 DLID 或数据包目的地 QP 字段中的特殊值识别组播数据包,并将数据包路由到为该地址和端口注册的 QP。
注意,组播数据包中的目的地 QP 字段不是 QPN。

3.5.11.1 组播示例
图 21 说明了一个不可靠组播 IBA 操作的示例:
- 一个 PSN = 1129 的数据包在 IBA 路由元件(交换机或路由器)端口上接收。
- 交换/路由元件检查数据包首部并提取 DLID/组播 GID 以确定它是否对应于一个组播组。实现可以将其内部路由表的一部分维护这些数据,例如,一个对应于此数据包应转发的输出端口的位掩码。
- 交换机或路由器复制数据包(取决于实现)并将数据包转发到输出端口。
3.5.11.2 组管理
IBA 未定义实现加入和离开操作的组播组管理协议。但是,指定了实现组播组协议的管理接口和相关管理数据报(MAD)。虽然这些机制是子网管理(SA)的一部分,但某些操作由子网管理器(SM)隐式执行。对于以下讨论,术语组播管理实体用于描述 SA/SM 对组播管理的预期责任。有关更多信息,请参阅子网管理属性的组播成员记录。
3.5.11.2.1 组播组创建
组播组创建是 IBA 中的显式操作,以便对组特性进行单一控制并允许成员秘密加入。组必须由组播管理实体创建,然后加入才能成功:
-
一个(管理)应用程序定义(或确定)一个目标组播组地址(GID)。它指定特定的组特性(PMTU、P-Key 等),并通过向组播管理实体调用组播组创建来创建组播组。此应用程序可以请求特定的组播 GID 或为其分配一个。
-
组播管理实体可以通知子网上的适当路由器正在创建的新组(未在 IBA V 1.1 中定义)。路由器协议应确定此组播组是否正在另一个子网中运行。如果是,路由器返回现有组播组的 PMTU,以确定是否允许创建。
-
组播管理实体将组播组地址映射到组播 LID。
3.5.11.2.2 组播组加入
组播组加入算法(适用于 IBA 不可靠数据报组播组)定义如下:
-
应用程序定义或确定目标组播组地址并调用组播加入操作。
-
底层加入实现确定关联的端节点是否正在参与组播组。如果是,应用程序建立一个新的本地 QP 并执行加入该组所需的步骤。如果不是,应用程序调用管理接口与组播组管理实体通信。
-
组播管理实体在接收到加入请求后执行以下步骤:
- a) 验证组播组地址------如果无效,加入操作失败。
- b) 验证请求的 PMTU------如果无效,加入操作失败。
- c) 验证连接到端节点的交换机是否能够进行组播操作。交换机通过数据包复制支持组播操作,或者可以配置为将所有组播数据包发送到连接端节点的端口。
- d) 如果组播组地址当前正在此子网中运行,采取以下操作:
- i) 验证参与此组播组的所有交换机和路由器都能支持请求的 PMTU。如果不能,加入操作失败。
- ii) 每个组播组通过定义跨参与交换机的逻辑路由树来实现。重建/修改路由树以包含新的端节点。组播管理实体通知结构管理更新所有交换机和路由器中的关联路由转发表以反映此新拓扑。
- e) 如果组播组地址未在此子网中运行,采取以下步骤:
- i) 通知此子网中的每个路由器加入操作。路由器协议应确定此组播组是否正在另一个子网中运行。如果是,路由器返回现有组播组的 PMTU,以确定是否允许创建和后续加入操作。
- ii) 将组播组地址映射到未使用的组播 LID。
- iii) 建立组播路由树并相应地更新关联的交换机和路由器路由转发表。
- iv) 创建组并将 PMTU 分配给组播组。
- v) 将组播 LID 和关联的组特性返回给端节点,并允许启动组播操作。
- f) 通知此子网中的每个路由器成功的组播加入操作。路由器调用适当的组播组管理操作,将此子网添加为参与关联组播组。此协议在 IBA 规范之外。
-
将成员添加到组。
3.5.11.2.3 组播组离开
当应用程序离开组播组时,使用以下算法:
-
应用程序的 QP 作为组播组的目标被移除。如果仍有 QP 参与此组播组,则不需要进一步操作。
-
如果此端口上没有更多 QP 参与组播组,离开实现通知组播管理实体此端节点不再参与此组播组。组播管理实体采取以下步骤:
- a) 更新交换机和路由器路由转发表以有效地将此端节点移除作为与此组播组关联的数据包的目标。
- b) 从组中移除成员。
3.5.11.2.4 组播组删除
当(管理)应用程序认为不再需要组播组或没有其他端节点参与组播组时,可以删除组播组。接收到删除请求后,组播管理实体采取以下步骤:
-
从组播组地址取消映射组播 LID。
-
通知此子网中的每个路由器此子网不再参与关联的组播组。
3.5.11.3 组播修剪
为了提高结构效率,组播组管理实体应定期验证参与组播组的所有端节点和路由器是否仍在参与,如果没有,应通过执行组播组离开算法将它们从组播组中修剪。验证周期在 IBA 范围之外。
3.5.12 Verbs(动词)
IBA 描述了主机通道适配器(HCA)与主机通道适配器提供的 I/O 服务消费者之间的服务接口。向消费者公开的所需行为由一组称为 Verbs 的语义描述。Verbs 描述了基于特定队列模型在主机通道适配器和消费者之间发生的操作,用于向通道适配器提交工作请求和返回完成状态。
Verbs 的目的不是指定 API,而是充分描述接口以允许定义一个 API,使 I/O 服务的消费者能够充分利用架构的优势。
Verbs 描述了配置和管理通道适配器、分配(创建和销毁)队列对、配置 QP 操作、向 QP 发布工作请求、从完成队列获取完成状态所需的参数。
3.6 通道与内存语义
IBA 通信为用户提供通道语义和内存语义,因为两者对 I/O 和 IPC 都很有用。通道语义,有时称为发送/接收,指的是经典 I/O 通道中使用的通信风格------一方推送数据,目的地方确定数据的最终目的地。也就是说,事务是双端的,需要请求方和响应方之间的协作。在线上传输的消息只命名目的地的 QP,消息不描述消息内容将写入目的地消费者内存空间的何处。相反,目的地 QP 包含用于将消息传递到适当内存位置的寻址信息。
使用内存语义,发起方直接读取或写入远程节点的虚拟地址空间。远程方只需要通信缓冲区的位置;它不涉及数据的实际传输。因此,这种风格有时被称为单端通信。
典型的 I/O 事务可能使用通道语义和内存语义的组合。例如,主机进程可能使用通道语义向 I/O 设备发送磁盘写入命令来启动 I/O 操作。I/O 设备检查命令并使用内存语义直接从处理器节点的内存空间读取数据缓冲区。操作完成后,I/O 单元使用通道语义将 I/O 完成消息推送回处理器节点。
3.6.1 通信接口
"通道适配器"是标识将节点连接到 IBA 结构的硬件(包括任何支持软件)的术语。处理器节点的通道适配器称为"主机通道适配器"(HCA),I/O 节点中的通道适配器是"目标通道适配器"(TCA)。消费者通过一个或多个"队列对"(QP)进行通信。HCA 通常支持数百或数千个 QP,而 TCA 可能支持少于十个 QP。
QP 是通信接口。用户启动工作请求(WR),导致称为 WQE 的工作项被放置到队列上,通道适配器执行该工作项。
具体而言,发送队列支持的操作有:
-
发送缓冲区(Send Buffer)------一种通道语义操作,将本地缓冲区推送到远程 QP 的接收缓冲区。发送 WR 包含一个收集列表(gather list),将来自几个虚拟连续本地缓冲区段的数据组合成一条推送到远程 QP 接收缓冲区的单个消息。本地缓冲区的虚拟地址必须在创建本地 QP 的消费者的地址空间中。
-
RDMA 读取(RDMA Read)------一种内存语义操作,读取远程节点上的虚拟连续缓冲区。RDMA 读取操作读取远程端节点上的虚拟连续缓冲区,并将数据写入本地内存缓冲区。与发送操作一样,本地缓冲区必须在创建本地 QP 的消费者的地址空间中。远程缓冲区必须在拥有 RDMA 读取目标远程 QP 的远程消费者的地址空间中。
-
RDMA 写入(RDMA Write)------一种内存语义操作,写入远程节点上的虚拟连续缓冲区。WR 包含本地缓冲区段的收集列表(gather list)以及将本地缓冲区段中的数据写入其中的远程缓冲区的虚拟地址。与发送 WR 一样,本地缓冲区必须在创建本地 QP 的消费者的地址空间中。远程缓冲区必须在拥有 RDMA 写入目标远程 QP 的远程消费者的地址空间中。
-
原子操作(Atomic)------一种内存语义操作,对远程 64 位字执行原子操作。原子操作是组合的读取、修改和写入操作。
原子操作的一个例子是"比较并交换如果相等"(Compare and Swap if Equal)操作。WR 指定一个远程内存位置、一个比较值和一个新值。远程 QP 读取指定的内存位置,将该值与消息中提供的比较值进行比较,并且仅当这些值相等时,QP 才将新值写入该相同的内存位置。无论哪种情况,远程 QP 都将从内存位置读取的值返回给请求 QP。另一个原子操作是 FetchAdd 操作,其中远程 QP 读取指定的内存位置,将该值返回给请求 QP,将该值与消息中提供的值相加,然后将结果写回该相同的内存位置。
-
内存绑定(Memory Bind)------一种更改内存窗口绑定的内存管理操作。Bind Memory Window 操作将先前分配的内存窗口关联到现有内存区域内的指定地址范围,以及一组指定的远程访问权限。
对于接收队列,只有一种 WR 类型:
- 发布接收缓冲区(Post Receive Buffer)------一种通道语义操作,描述一个本地缓冲区,传入的发送消息被写入其中。WR 包含一个描述多个本地缓冲区段的分散列表(scatter list)。传入发送消息的内容按照指定的顺序写入这些缓冲区段。缓冲区的虚拟地址必须在创建本地 QP 的消费者的地址空间中。没有分散-收集列表的 WR 可用于从写入操作或零长度发送操作接收即时数据。
零处理器拷贝数据传输,无需内核参与,是提供高带宽、低延迟通信的关键。消费者可以通过 QP 直接从缓冲区所在的内存位置传输数据缓冲区。此外,R_Key 和 L_Key(内存注册)提供的保护消除了操作系统验证数据传输的需要。因此,操作系统可以允许从用户模式发布 WQE,绕过操作系统,从而消耗更少的指令周期。
IBA 操作支持虚拟地址的使用和现有的虚拟内存保护机制,以确保对所有内存的正确和适当的访问。因此,IBA 应用程序不需要对任何操作使用物理寻址。
消费者可以使用两种机制之一来启用对其内存的远程访问(RDMA)。首先,在注册其内存(创建内存区域)时,消费者可以简单地启用对整个内存区域的远程访问。如果需要更多的远程访问控制,消费者可以分配一个内存窗口并将其绑定到现有内存区域的子集。任一方法都会产生一个 R_Key。然后,消费者将该 R_Key 和数据缓冲区的虚拟地址提供给远程节点,供其在后续 RDMA 操作中使用。只有具有正确 R_Key 的传入 RDMA 请求才能访问内存的特定区域。此外,QP 和内存区域或窗口必须在同一个保护域中。
3.6.2 IBA 传输服务
IBA 传输机制提供多种通信服务类别。创建 QP 时,将其配置为提供以下传输服务类别之一:
- 可靠连接(已确认 - 面向连接)
- 可靠数据报(已确认 - 多路复用)
- 不可靠连接(未确认 - 面向连接)
- 不可靠数据报(未确认 - 无连接)
- 原始数据报(未确认 - 无连接)
可靠连接服务将一个本地 QP 与一个且仅一个远程 QP 关联。因此,放置在一个 QP 上的发送缓冲区 WQE 导致数据被写入关联 QP 的接收缓冲区。RDMA 操作在关联 QP 的地址空间上操作。
连接服务要求每个消费者为每个希望与之通信的消费者创建一个 QP。因此,如果每个 N 个平台上有 M 个消费者都希望通过连接的服務类别进行通信,则每个平台需要 M^2 * N 个 QP。这假设特定平台上的每个消费者都与该平台上的消费者(包括其自身)通信,利用将 QP 连接到同一节点上的 QP 的能力。

图 22
连接服务
可靠连接是可靠的,因为通道适配器可以维护序列号并确认所有消息。硬件和通道适配器软件的组合重试任何失败的通信。QP 的消费者即使在存在位错误、接收缓冲区下溢、网络拥塞的情况下,以及如果结构中存在备用路径,结构交换机或链路故障的情况下,也能看到可靠的通信。
确认确保数据在关联的 QP 之间可靠传递,从而在每个节点的内存之间可靠传递。
确认不是消费者级别的确认------它不验证接收消费者是否已经消费了数据。确认仅意味着数据已到达目的地。
不可靠连接服务还将一个本地 QP 与一个且仅一个远程 QP 关联。因此,放置在一个 QP 上的发送缓冲区请求导致数据被写入关联 QP 的接收缓冲区。RDMA 写入操作在关联 QP 的地址空间上操作。
与可靠连接服务不同,不可靠连接不确认,因此没有重发丢失或损坏消息的能力。相反,丢失或损坏的消息只是被丢弃。由于没有确认,不支持 RDMA 读取和原子操作。由于 RDMA 写入的数据包可能丢失或损坏,可能会发生缓冲区的部分写入,但一旦接收到丢失或损坏的数据包,写入操作就会停止,直到新消息的开始。
不可靠数据报服务是无连接和未确认的。它允许 QP 的消费者与任何节点上的任何不可靠数据报 QP 通信。接收操作允许来自任何节点上的任何不可靠数据报 QP 的传入消息。
不可靠数据报服务大大提高了 IBA 的可扩展性。由于该服务是无连接的,具有固定数量 QP 的端节点可以与比使用可靠连接和不可靠连接服务可能的更多的消费者和平台进行通信。

图 23
数据报服务
这是管理用于发现和集成新 IBA 交换机和端节点的服务类别。它不提供其他服务类别的可靠性保证,但在每个端节点维护较少的状态下运行。与其他消息由多个数据包传输的服务不同,最大消息长度被限制为适合单个数据包。
可靠数据报(RD)服务通过称为端到端上下文(EEC)的节点之间的连接进行多路复用,这允许每个 RD QP 与具有已建立 EEC 的任何节点上的任何 RD QP 通信。多个 QP 可以使用相同的 EEC,单个 QP 可以使用多个 EEC(每个可靠数据报域的每个远程节点一个 EEC)。
可靠数据报域(RDD)确定哪些 RD QP 集合可以访问哪些 EEC 集合。需要多个 RDD 的一些可能原因包括不同分区中的流量、不同的 QoS 特性、安全性和性能。
EEC 使用与每条消息关联的序列号和确认来确保与可靠连接服务相同程度的可靠性。每个通道适配器为每个节点维护端到端特定的状态,以跟踪序列号、确认和超时值。每个 EEC 由该 RDD 的所有可靠数据报 QP 共享。
对于每个 RDD 的可靠数据报服务,每个消费者只需要创建一个 QP,节点为其与之通信的每个平台创建一个 EE 上下文。因此,如果每个 N 个平台上有 M 个消费者都希望通过 IBA 可靠数据报服务进行通信,则每个平台需要 M 个 QP 和 N 个端到端上下文。

图 24
可靠数据报服务
扩展可靠连接服务(XRC)是前两种的混合:在请求者端,它的行为与正常的可靠连接发送队列一样,但在接收端存在一个在概念上类似于可靠数据报服务接收端找到的数据结构。XRC 服务的目标是提高全对全数据模式的可扩展性,同时限制任一端所需的数据结构的增长。XRC 在没有产生可靠数据报服务的重大限制的情况下实现了其目标,该限制是仅限于单数据包消息。
原始数据报是一种数据链路服务,允许 QP 发送和接收原始数据报消息。原始数据报服务有两种类型(EtherType 和 IPv6)。EtherType 原始数据报数据包包含一个不由通道适配器解释的通用传输首部,但它指定了协议类型。IPv6 原始数据报包含一个标识协议类型的全局路由首部。
使用 IPv6 原始数据报服务,IBA 通道适配器可以支持基于 IPv6 的标准协议,例如 TCP 和 UDP。因此,原生 IPv6 数据包可以桥接到 IBA SAN 并直接传递到端口及其 IPv6 原始数据报 QP。这允许原始数据报 QP 消费者支持多种传输协议。
使用 EtherType 原始数据报服务,IBA 通道适配器可以支持与以太网相同的标准协议,包括 TCP 和 UDP 以及 IPv4。因此,原生以太网数据包可以桥接到 IBA 子网并直接传递到端口及其 EtherType 原始数据报 QP。
创建 QP 时,消费者向通道适配器注册以将接收到的数据报定向到它(一个用于 IPv6,一个用于 EtherType)。
3.7 IBA 分层架构
IBA 操作可以被描述为一系列层。每一层的协议独立于其他层。每一层依赖于其下层的服务,并为其上层提供服务。

图 25
IBA 架构层
3.7.1 物理层
物理层指定如何将位放置在导线上以形成符号,并定义用于成帧的符号(即,数据包开始和数据包结束)、数据符号以及数据包之间的填充(空闲)。它指定了信号协议,即什么构成有效形成的数据包(即,符号编码、成帧符号的正确对齐、开始和结束定界符之间没有无效或非数据符号、没有 disparity 错误、同步方法等)。

图 26
IBA 数据包成帧
物理层规范在第 2 卷中。它指定了比特率、介质、连接器、信号技术等。
3.7.2 链路层
链路层描述了数据包格式和数据包操作的协议,例如流量控制以及数据包如何在子网内的源和目的地之间路由。有两种类型的数据包。
-
链路管理数据包------这些数据包用于训练和维持链路操作。这些数据包在链路层内创建和消耗,不受流量控制。链路管理数据包用于协商链路每一端的端口之间的操作参数,例如比特率、链路宽度等。它们还用于传递流量控制信用和维护链路完整性。链路管理数据包永远不会转发到其他链路。
-
数据数据包------这些是传递 IBA 操作的数据包,它们由许多不同的首部组成,这些首部可能存在也可能不存在。

图 27
IBA 数据数据包格式
本地路由首部(LRH)始终存在,它标识交换机将路由数据包的本地源和本地目的地端口,并指定数据包传输的服务等级(SL)和虚拟通道(VL)。VL 在数据包遍历子网时发生变化,但其他字段保持不变。
子网管理器为通道适配器的每个端口以及交换机的管理实体分配唯一的 LID。源将目的地的 LID 放置在 LRH 中,交换机将数据包路由到该目的地。如果数据包要路由到另一个子网,数据包的目的地 LID 包含路由器的 LID,否则数据包的目的地 LID 指定分配给通道适配器(或交换机,对于某些管理数据包)的 LID。
每个数据包中有两个 CRC。不变 CRC(ICRC)覆盖在数据包遍历结构时不应更改的所有字段。可变 CRC(VCRC)覆盖数据包的所有字段。这两个 CRC 的组合允许交换机和路由器修改适当的字段,同时仍然保持数据包传输控制和数据部分的端到端数据完整性。ICRC 的覆盖范围取决于数据包是否路由到另一个子网(即,包含全局路由首部)。
链路级流量控制是一种基于信用的方法,其中每条链路上的接收器向链路另一端的发送器发送信用。信用是按 VL 的,指示接收器在该 VL 上可以接受的数據包数量。发送器仅在接收器指示它有空间时才发送数据数据包。VL15(管理 VL)不受流量控制。
3.7.3 网络层
网络层描述了在子网之间路由数据包的协议。
全局路由首部(GRH)存在于遍历多个子网的数据包中。GRH 使用 IPv6 地址格式的 GID 标识源和目的地端口。路由器基于 GRH 的内容转发数据包。当数据包遍历不同的子网时,路由器修改 GRH 的内容并替换 LRH。但源和目的地 GID 不会改变,并受 ICRC 字段保护。路由器重新计算 VCRC 但不重新计算 ICRC。这保持了端到端传输完整性。
每个子网都有一个唯一的子网标识符,即子网前缀。当与端口 GUID 结合时,该组合成为端口的全局标识符(GID)。节点可能具有其他本地管理的全局标识符。源将目的地的 GID 放置在 GRH 中,将路由器的 LID 放置在 LRH 中。每个路由器将数据包通过下一个子网转发到另一个路由器,直到数据包到达目标子网。最后一个路由器使用目的地的 LID 替换 LRH。
3.7.4 传输层
网络和链路协议将数据包传递到所需的目的地。数据包的传输部分将数据包传递到适当的 QP,并指示 QP 如何处理数据包的数据。
传输层负责当消息的数据有效载荷大于路径的最大传输单元(MTU)时,将操作分段为多个数据包。接收端的 QP 将数据重新组装到其内存中指定的数据缓冲区。

图 28
数据分段
基础传输首部(BTH)存在于除原始数据报之外的所有数据包中。它指定目的地 QP 并指示操作码、数据包序列号和分区。
操作码标识数据包是消息的第一个、最后一个、中间的还是唯一的数据包,并指定操作(发送、RDMA 写入、读取、原子)。
数据包序列号(PSN)作为通信建立过程的一部分初始化,并且每次 QP 创建新数据包时递增。接收 QP 跟踪接收到的 PSN 以确定是否丢失了数据包。对于可靠服务,接收器发送 ACK 或 NAK 数据包回发送器,通知数据包是否被正确接收。在这种情况下,接收方丢弃后续数据包,直到发送器重发丢失的消息。对于未确认服务,当接收方检测到丢失的数据包时,它中止当前操作并丢弃所有后续数据包,直到接收到指定第一个或唯一操作码的数据包。然后操作继续。
根据服务类别和操作码,有条件地存在各种扩展传输首部(ETH)。
对于可靠数据报服务,ETH 标识 QP 用于检测丢失数据包的 EE 上下文。
RDMA 读取或写入操作的第一个消息包含一个 RDMA ETH,指定要读取或写入的数据缓冲区的虚拟地址、R_Key 和总长度。后续的 RDMA 写入数据包提供剩余的数据。QP 验证内存是否已正确注册以供该 QP 访问,并且写入的总数据不超过指定的长度。对于 RDMA 读取操作,QP 获取数据,将其分段为读取响应数据包,并将它们发送给发起者。接收 RDMA 响应时,QP 将数据写入 RDMA 读取请求 WQE 中指定的缓冲区。
原子操作包含一个原子 ETH,指定作为操作对象的内存位置的虚拟地址和 R_Key,以及 2 个操作数。QP 验证内存是否已正确注册以供该 QP 访问。QP 获取数据,将该值返回给发起者,执行操作,并将结果写回内存。对于比较和交换操作,QP 将内存位置的内容与第一个操作数进行比较,如果它们匹配,则将第二个操作数写入该相同位置。否则不修改它。对于获取和添加操作,QP 使用原子 ETH 中的 64 位添加数据字段执行无符号加法,并将结果写回相同的内存位置。无论哪种情况,操作都是原子的,使得另一个 QP 不允许在读取和后续写入之间修改该内存位置。
即时数据(IMMDT)字段可选地存在于 RDMA WRITE 和 SEND 消息中。它包含消费者放置在发送或 RDMA 写入请求中的数据,接收 QP 将该值放置在当前的接收 WQE 中。带有即时数据的 RDMA 写入将消耗一个接收 WQE,即使 QP 没有将任何数据放入接收缓冲区,因为 IMMDT 放置在引用接收 WQE 的 CQE 中,并指示 WQE 已完成。
对于可靠连接服务,IBA 定义了端到端消息级流量控制。这允许接收器在 WQE 被发布到接收队列时向发送器发送信用。QP 跟踪发布和从接收队列退役的 WQE 数量,并跟踪接收到的消息数量。它将这些数字相加,以达到一个消息限制值,并将其发送到连接另一端的发送器。发送器跟踪它创建的邮件总数,并在达到连接另一端建立的限制值时停止传输。
3.7.5 上层协议
如图 29 所示,IBA 通过各种用户消费者支持任意数量的上层协议。IBA 还为某些管理功能定义了消息和协议。这些管理协议分为子网管理和子网服务。这两者都有独特的属性。

图 29
上层
3.7.5.1 子网管理
子网管理实际上分为子网管理器(SM)应用程序和子网管理代理(SMA)。每个子网只需要一个子网管理器,它可以驻留在任何节点中,包括交换机和路由器。子网管理使用一种称为子网管理数据包(SMP)的特殊管理数据报(MAD)类别,该数据包定向到特殊的队列对(QP0)。如图 30 所示,每个端口都有一个 QP0,每个节点包含一个 SMA:
- 处理在 QP0 上接收的 Get() 和 Set() SMP
- 通过 QP0 发送 GetResp() SMP
- 通过 QP0 发送 Trap() SMP
子网管理器:
- 通过 QP0 向任何端口的 QP0 发送 SMP
- 处理在 QP0 上接收的所有 SMP,除了由该节点的 SMA 处理的 SMP。

图 30
子网管理元件
3.7.5.2 通用服务
通用服务代理(GSA*)实际上由许多管理服务代理组成,如图 31 所示。某些服务是可选的。通用服务使用称为通用管理数据包(GMP)的消息格式,它是一种管理数据报(MAD),通常定向到称为通用服务接口(GSI)的特殊队列对(QP1)。如图 31 所示,每个端口都有一个 QP1,在 QP1 上接收的所有 GMP 都由其中一个 GSA 处理。GSA 实际上能够将其特定服务类别的 GMP 重定向到另一个队列对,允许每个 GSA 维护自己的通信接口。

图 31
通用服务
3.8 IBA 事务流
消费者通过称为队列对的数据结构与 IBA 通道适配器交互,队列对由发送队列和接收队列组成。消息通过发布工作请求启动,导致 WQE 被放置在发送队列上。通常,QP 是对称的,意味着流量可以在任一方向上进行。XRC 服务是一个例外,它是不对称的。
通道适配器检测 WQE 发布并访问 WQE。通道适配器解释命令,验证 WQE 的虚拟地址,将其转换为物理地址,并访问数据。传出消息缓冲区被分成一个或多个数据包。对于每个数据包,通道适配器添加传输首部(序列号、操作码等)。如果目的地位于远程子网上,通道适配器添加网络首部(源和目的地 GID)。然后通道适配器添加本地路由首部并计算可变和不变校验和。
数据包流受每条链路上的链路级协议约束。
数据包是在 IBA 结构中路由的信息单元。数据包是端节点到端节点的构造,因为它由端节点创建和消耗。当数据包通过交换机时,交换机可能需要更改虚拟通道,因此必须用新值替换可变 CRC,但不接触不变 CRC。如果数据包通过路由器,路由器更改本地路由首部并更新全局路由首部中的字段,再次更新可变 CRC 但不更改不变 CRC。每个交换机和路由器都将数据包移近其最终目的地。
当数据包到达其最终目的地时,它经过正常的有效性检查(例如,成帧违规、disparity、非法字符、对齐等),并检查 VCRC 和 ICRC 的完整性。传输首部标识目标 QP,通道适配器使用该 QP 的上下文来验证数据包是否来自正确的源等,并检查数据包序列号是否有效(没有丢失的数据包)。对于发送操作,QP 从其接收队列上的下一个 WQE 检索接收缓冲区的地址,将其转换为物理地址,并访问内存写入数据。如果这不是消息的最后的数据包,QP 在其上下文中保存当前写入位置,并等待下一个数据包,届时它继续写入接收缓冲区,直到接收到指示它是操作最后数据包的数据包。然后它更新接收 WQE,将其退役,并向发起者发送确认消息。
对于可靠服务类型,如果 QP 检测到一个或多个丢失的数据包,它会向发起者发送 NAK 消息,指示其下一个预期的序列号。发起者然后可以从预期的数据包开始重新发送。
当发起者接收到确认时,它在 CQ 上创建 CQE 并将 WQE 从发送队列中退役。
QP 在任何时候都可以有多个未完成的消息,但目标总是按照发送顺序确认,因此 WQE 按照它们发布的顺序退役。
3.9 IBA 管理基础设施
IBA 管理为以下方面定义了通用的管理基础设施:
- 子网管理------提供子网管理器发现、配置 IBA 设备和管理结构的方法。
- 通用管理服务
- 子网管理------为节点提供 SM 收集的信息,并为节点注册其提供的通用服务提供注册器。
- 端节点之间的通信建立和连接管理
- 发现和管理局通道适配器"后面"的 I/O 设备的机制
- 配置管理------分配 I/O 资源给主机的权限
- 性能管理------监控和报告定义明确的性能计数器
- 基板管理------使用第 2 卷中定义的 IB-ML 提供电源和机箱管理
- SNMP 隧道(SNMP)------提供在管理代理和管理应用程序之间发送和接收信息的方法。这包括简单网络管理协议(SNMP)、桌面管理接口(DMI)和通用信息模型(CIM),以及其他标准和专有接口。
子网管理的物理和逻辑模型如图 32 所示。通用服务模型如图 33 和图 34 所示。

图 32
子网管理模型
每个通道适配器、交换机和路由器都有一个响应子网管理数据包的子网管理代理(SMA)。SM 和 SMA 之间的通信使用一个众所周知的接口,称为子网管理接口(SMI),其中每个端口都有一个 QP 号为 0(QP0)的 QP,专门用于发送和接收 SMP。
保护------子网管理器可以在每个节点中放置一个密钥(M_Key),该密钥不能被其他节点读取,并防止没有 M_Key 的节点修改节点的配置。SM 仅在必要时与受信任的同伴共享 M_Key。IBA 还提供了一种租约到期机制,如果 SM 在与其继任者共享 M_Key 信息之前死亡,租约到期,节点返回到允许继任 SM 建立新 M_Key 的状态。
IBA 管理定义了允许发现和初始化 IBA 设备及相应结构并对其进行控制的基本接口和原则。它定义了适用于 IBA 管理元件的通用管理模型和框架,识别这些元件,并定义其管理特性。管理应用程序使用此基础设施来管理 IBA 设备并与其他管理应用程序通信。

图 33
通用服务物理模型

图 34
通用服务逻辑模型
IBA 管理基础设施支持许多不同的管理服务类别,并在逻辑上允许任何节点承载类别管理器。图 34 说明了管理类别可以使用管理基础设施的不同方式。
-
受管理代理模型允许类别管理器或管理应用程序通过为要管理的每个节点上存在的该类别定义的通用服务代理(GSA)来管理节点。这与子网管理使用的模型相同,也是 I/O 设备管理、基板管理、SNMP 和性能管理类别使用的模型。
-
对等代理模型允许驻留在每个节点上作为 GSA 的管理器相互通信。这是通信管理类别使用的模型。
-
受管理服务模型允许管理应用程序访问类别管理器。这是子网管理和 I/O 资源管理类别使用的模型。
IBA 管理涉及多种概念,包括:
- 一种从端节点、交换机和路由器配置和收集信息的手段。
- 一种作为通用错误处理机制的Diagnostics框架。
- 安装和配置服务,以允许发现和初始化结构及端节点。
- 一种称为"管理数据报"或"MAD"的标准管理数据包。
- 子网管理数据包(SMP)作为 MAD 的一个子集,允许子网管理器和 IBA 设备之间的特定设置和获取操作。
- 通用管理数据包(GMP)作为 MAD 的其余子集,允许子网管理器和 IBA 设备之间的管理操作以及 IBA 设备本身之间的管理操作。
- 通信管理服务,允许通道适配器之间的通信设置和拆卸。
- 分区服务,将端节点的端口配置为一个或多个可能重叠的集合(称为分区)的成员。
IBA 提供了操作系统限制对管理基础设施访问的手段。对于 SMI,子网管理数据包必须从 QP0 发起。GSI 使用特权的 Q_Key(即,最高有效位设置的 Q_Key)。主机通道适配器不允许在工作请求中指定特权的 Q_Key,而是必须通过使用特权的 Q_Key 配置 QP 上下文来将 QP 配置为特权操作。这允许管理应用程序和类别管理器维护它们自己的 QP。GSI 使用 QP1 进行初始通信,但允许将特定类别的流量重定向到特权 QP。
3.9.1 管理数据报
IBA 定义了支持通用处理的管理消息的标准格式。每个 MAD 包含相同的头格式,标识管理消息的类别和方法。SMP 是一类管理消息,另一类是定向路由 SMP。其他类别的 MAD 称为通用管理数据包(GMP),包括子网管理、通信管理、性能管理、SNMP、设备管理和基板管理。
MAD 以携带所有类别通用信息的标准头开始。对于使用可靠多数据包协议(RMPP)的类别,紧随其后的是用于 RMPP 信息的附加头。RMPP 是一种允许管理实体交换比单个 MAD 所能容纳的更多数据的协议。RMPP 可由任何管理类别使用。例如,子网管理类别使用它向客户端提供有关节点之间路径集合的信息。
3.9.2 管理方法
IBA 定义了任何类别都可以采用的通用方法。这些方法包括 Get、Set、GetResp、Send、Trap、TrapRepress、Report 和 ReportResp。当然,每个管理类别定义其自己的属性集。这些方法对许多类别来说已经足够,但 IBA 还提供了类别特定的方法。
3.9.2.1 获取和设置
获取和设置是 MAD 最常见的用途,尤其是 SM。SM 轮询结构并通过发送 SMP Get 请求消息了解其拓扑。每个目的地通过发送包含请求数据的 GetResp 响应消息进行响应。SM 通过发送 Set 请求消息来配置 IBA 设备。这实际上是一种设置和获取请求。每个目的地通过发送包含设置操作后数据值的 GetResp 响应消息进行响应。由于并非所有参数都是可设置的,或者它们可能有限制,发起者检查响应消息以确定设置请求消息的真实效果。
3.9.2.2 陷阱和通知
陷阱是管理代理在其类别管理器发生某些异步管理事件(如协议违规)时发送的消息。通知是可以排队在被管理节点上的通知队列中的属性,可以由类别管理器检索和清除。陷阱消息的数据采用通知属性的形式。类别管理器使用有关发送陷阱位置的信息对节点进行编程,当节点从类别管理器接收到 TrapRepress 时,节点停止发送陷阱。
IBA 设备在发生某些事件时使用 SMP 向子网管理器发送陷阱。一种用途是交换机在检测到其某个端口上的状态变化(即拓扑变化和/或设备加入或离开)时向子网管理器发送陷阱。当然,由于 SMP 是不可靠的,SM 不能仅依赖这种类型的通知,但成功的陷阱将减少管理拓扑变化的延迟。
3.9.2.3 发送
Send() 是一种管理方法,其中一个实体按类别特定基础向另一个实体发送数据。与获取和设置不同,响应包含与请求相同的属性和事务 ID,发送没有显式响应。基于发送的管理协议可能会用另一个发送来响应,这可能包含完全不同的属性。在这种情况下,需要在属性中包含信息以将一个发送与另一个发送相关联。
3.9.2.4 报告
管理基础设施提供了一种手段,供管理实体向类别管理器订阅,以便类别管理器转发其从管理的代理接收的陷阱。管理实体通过向类别管理器发送设置来订阅,标识类别管理器要转发陷阱的端口和 QP。当类别管理器接收到陷阱时,它将以报告 MAD 的形式将通知属性转发给订阅实体,实体以 ReportResp MAD 响应,让类别管理器知道它已收到报告。类别管理器继续发送报告,直到订阅实体以 ReportResp 响应。
3.9.3 管理接口
IBA 为管理接口定义了两个众所周知的 QP。QP0 保留给子网管理,QP1 指定用于通用管理服务。
3.9.4 子网管理接口
每个 IBA 端口都有一个专门用于子网管理的 QP。这就是 QP0。QP0 具有使其与其他 QP 相比独特的特殊功能。
- QP0 永久配置为不可靠数据报服务类别。
- IBA 设备的每个端口都有一个发送和接收数据包的 QP0。
- QP0 是所有分区的成员(即,可以接受指定任何分区的任何数据包)。
- 只有子网管理数据包(SMP)是有效的
- QP0 的流量(即 SMP)专门使用 VL15,VL15 不受链路级流量控制。
3.9.4.1 结构初始化
子网管理器使用此服务接口来轮询和配置结构。交换机支持一种称为定向路由的特殊路由模式,允许 SMP 在交换机配置其转发数据库之前以及节点分配本地 ID 之前通过交换机路由。子网管理器通过发送 SMP 到设备并发现它是否是交换机来遍历结构。使用定向路由,它可以然后发送 SMP 出交换机的每个端口,以发现连接到交换机的设备。此过程继续,直到子网管理器发现所有设备及其互连方式。
一旦 SM 了解了子网的拓扑,它就为每个节点配置本地 ID 并配置交换机的路由表。结构配置完成后,SMP 可以使用目的地路由发送。
IBA 允许每个子网有多个子网管理器,但只有一个可以是主管理器。因此,IBA 定义了子网管理器如何检测另一个子网管理器的存在以及选择哪个将成为主子网管理器的仲裁机制。
3.9.4.2 定向路由
SMP 可以指定其通过结构的路由。这是通过在 SMP 中包含定义通过子网的路径的端口号列表(即路径向量)来完成的。路径向量指定沿路径的每个交换机的输出端口。数据包包含两个路径向量(一个用于正向路由,一个用于反向路由),一个指示要遍历哪个路径向量的方向位,以及一个指示路径向量中当前位置的跳指针。反向路径向量由交换机在处理正向路径向量时构建。
当交换机接收到定向路由 SMP 时,它使用当前的跳指针来标识它在路径向量中的位置。如果方向是"正向",它从正向路径向量确定输出端口,通过添加接收 SMP 的端口号来更新反向路径向量,递增当前跳指针,然后将数据包转发出指定的输出端口。当数据包到达目的地时,目标设备通过简单地改变方向位的含义并从接收它的端口发送回复 SMP 来使用反向路由字段进行回复。因为方向是"反向",每个交换机现在递减当前跳指针,使用它来确定原始输入端口,然后将数据包发送出该端口。
3.9.5 通用服务接口
每个 IBA 通道适配器都有一个专门用于通用结构服务的 QP。这就是 QP1。QP1 具有使其与其他 QP 相比独特的特殊功能。
- QP1 永久配置为不可靠数据报服务类别。
- IBA 设备的每个端口都有一个发送和接收数据包的 QP1。
- QP1 是其端口所有分区的成员(即,可以接受指定端口 P_Key 表中包含的 P_Key 的任何数据包)。
- 只有管理数据报(MAD)是有效的
- QP1 的流量不使用 VL15
3.9.5.1 重定向
QP1 作为众所周知的接口有其优点和缺点。一个缺点是所有管理类别都进入同一个队列,这往往会造成瓶颈并促进队头阻塞。因此,IBA 定义了一种允许通道适配器将通用服务请求重定向到其他 QP 的机制。
当通道适配器在 QP1 上接收到 GMP 时,它可以响应一个重定向响应,指示新的端口和 QP。发起者然后将请求重新发送到新地址,并将该地址用于所有后续对该相同管理类别的请求。
3.10 I/O 操作
IBA I/O 架构支持从简单的原生设备到大规模 I/O 子系统的各种 I/O 实现。I/O 单元的模型如图 35 所示。I/O 单元由通道适配器和多个 I/O 控制器组成。I/O 单元的通道适配器被称为目标通道适配器(TCA)。TCA 具有与 HCA 相同的功能,但与 HCA 不同,它不一定是为通用用途设计的,这意味着它只需要支持其控制器所需的功能。

图 35
I/O 单元
I/O 控制器代表处理 I/O 事务请求的硬件和软件。I/O 控制器的示例包括 SCSI 接口控制器、RAID 处理器、存储阵列处理器、LAN 端口控制器、磁盘驱动器控制器、控制台服务。
I/O 单元包含一个响应在 QP0 上接收的 SMP 的子网管理代理(SMA)。I/O 单元还包含响应在 GSI(QP1)上接收的 GMP 的通用服务代理(GSA*)。GSA* 至少包含通信管理和 I/O 设备管理(DevMgt)。每个 I/O 控制器都向 DevMgt GSA 注册,以便它可以响应带有有关控制器特定信息的 DevMgt GMP。
通常,处理器节点中的 I/O 资源管理器向 I/O 单元发送 DevMgt GMP 以发现控制器的属性。属性包含足够的信息,供 I/O 资源管理器识别适当的 I/O 驱动器。I/O 资源管理器加载驱动器(如有必要),并使用控制器的身份(I/O 单元和控制器 ID)配置 I/O 驱动器。然后,I/O 驱动器在处理器节点上创建适当的通信端口(即 QP),并调用处理器节点的通信管理器来创建与 I/O 控制器的适当连接。连接建立后,I/O 驱动器在连接上交换控制消息和数据。

图 36
I/O 操作
驱动器使用的通信端口数量是一个实现变量。I/O 驱动器可以使用任何可用的服务类别(可靠连接、不可靠连接、可靠数据报或不可靠数据报),并且可以为不同的通信端口使用各种服务类别。