声明:
博主主页:王_嘻嘻的CSDN主页
未经作者允许,禁止转载
本专题部分内容源于《InfiniBand-network architecture》,侵权必删
本章介绍了IBA子网中报文从源端口路由到目的端口时使用的地址,解释了在CA、交换机和路由器上的端口如何编号。解释了Local ID (LID)地址空间、LID地址的用途以及SM为每个端口分配的唯一LID;最后介绍了SM路径数据库的概念。
在解释后续的Local ID等概念前,需要先介绍一下端口的概念:我理解的端口是除设备本体外,数据传输的最高层,数据的目标就是在端口间的传输。
而在IB架构中,三类设备CA、路由器(router)和交换机(switcher)的端口实现数量和功能略有区别:
Local ID是在同一个子网下,对设备的端口进行编号的一个结果。
分配给端口的LID是由SM分配的16位值。这意味着有64K个LID可分配给子网端口,LID整体地址范围细分如下:
数据需要使用LID标记的根本原因在于:包在路由过程中需要通过LID来辨认目的地方向。
在实际应用中DLID(destination LID)和SLID(source LID)共同组成Local Route Header(LRH),DLID表示目标端口的LID,SLID表示源端口的LID,如下图所示。
以下是一个报文从HCA出发,并一路通过LID搜索目标端口的过程:
当端口接收到Packet后,在链路层会检查Packet的DLID项的值是否落在PortInfo所设置的DLID范围内,如果DLID正确,代表packet抵达正确目的地,Port会将包向更高层传输并处理。
此外,当SQ(RC UC UD时)或者EEC(RD)发送Packet时,需要提供给链路层一个选择器,为了选择哪个LID插入到Packet中的LRH:SLID项中。
选择器实际上在规范的描述中被称为Source Path Bits,可以通过一列Verb修改该选择器:
需要注意的是,子网中任意两个CA和/或路由器端口之间通常存在多条路径。在配置阶段,SM会将CA和路由器端口之间所有可能的path都进行记录,构建一个路径库。
当软件后续需要在QP间构建连接时,通过查询该路径库来确定路径,并由LID或GID指定。
搜索关注我的公众号【IC墨鱼仔】,获取我的更多IC干货分享!