从零学习 InfiniBand-network架构(九) —— IB协议中子网本地地址

从零学习 InfiniBand-network架构(九) —— IB协议中子网本地地址


声明:
博主主页:王_嘻嘻的CSDN主页
未经作者允许,禁止转载
本专题部分内容源于《InfiniBand-network architecture》,侵权必删

   本章介绍了IBA子网中报文从源端口路由到目的端口时使用的地址,解释了在CA、交换机和路由器上的端口如何编号。解释了Local ID (LID)地址空间、LID地址的用途以及SM为每个端口分配的唯一LID;最后介绍了SM路径数据库的概念。


端口号

  在解释后续的Local ID等概念前,需要先介绍一下端口的概念:我理解的端口是除设备本体外,数据传输的最高层,数据的目标就是在端口间的传输
  而在IB架构中,三类设备CA、路由器(router)和交换机(switcher)的端口实现数量和功能略有区别:

  • CA:端口数在1—255之间
    CA的每个端口,必须在SM启动阶段就分配完16-bits的LID地址;
    每个端口在子网下必须有唯一的LID。
  • 路由器:端口数在2—255之间,如果只有1个端口,那么路由器将变成‘死路‘,具体路由器规则可参照第一章:从零学习 InfiniBand-network架构(一) —— IB协议中常用术语及定义;
    LID规则与CA一致;
  • 交换机:端口数在3—255之间,port0是管理端口
    Port0将分配唯一的LID,而不能分配LID范围。

LID地址空间

  Local ID是在同一个子网下,对设备的端口进行编号的一个结果。
  分配给端口的LID是由SM分配的16位值。这意味着有64K个LID可分配给子网端口,LID整体地址范围细分如下:

  • 0000h不能被使用
  • 0001h—BFFFh(48K)作为单播地址,单播包不会运往多个Port
  • C000h—FFFEh(16K)作为多播地址,多播包会前往多个目的地
  • FFFFh作为permissive LID PLID,有特殊用途;

使用LID的目的

  数据需要使用LID标记的根本原因在于:包在路由过程中需要通过LID来辨认目的地方向。
  在实际应用中DLID(destination LID)和SLID(source LID)共同组成Local Route Header(LRH),DLID表示目标端口的LID,SLID表示源端口的LID,如下图所示。

从零学习 InfiniBand-network架构(九) —— IB协议中子网本地地址_第1张图片


以下是一个报文从HCA出发,并一路通过LID搜索目标端口的过程:

  • 源端TCA将报文传入链路中;
  • 在到达目的端口的路径中,数据包到达第一个交换机的端口;
  • 交换机的链路层会检查包的DLID内容,确定是单播包还是多播包,并根据内部的查找表确定,包接下去该前往的端口;
  • 到达目标TCA端口后,端口的链路层解码数据包的DLID字段并确定它是目标端口,之后,数据包被传递到网络层进行处理。
    从零学习 InfiniBand-network架构(九) —— IB协议中子网本地地址_第2张图片

DLID解析

  当端口接收到Packet后,在链路层会检查Packet的DLID项的值是否落在PortInfo所设置的DLID范围内,如果DLID正确,代表packet抵达正确目的地,Port会将包向更高层传输并处理

  此外,当SQ(RC UC UD时)或者EEC(RD)发送Packet时,需要提供给链路层一个选择器,为了选择哪个LID插入到Packet中的LRH:SLID项中。

选择器实际上在规范的描述中被称为Source Path Bits,可以通过一列Verb修改该选择器:

  • Modify QP verb
  • Modify EEC verb
  • Create Address Handle verb

SM路径库

  需要注意的是,子网中任意两个CA和/或路由器端口之间通常存在多条路径。在配置阶段,SM会将CA和路由器端口之间所有可能的path都进行记录,构建一个路径库
  当软件后续需要在QP间构建连接时,通过查询该路径库来确定路径,并由LID或GID指定。



搜索关注我的公众号【IC墨鱼仔】,获取我的更多IC干货分享!

你可能感兴趣的:(学习,网络,服务器)