第九章 天翻地覆——FC协议的巨大 力量
第四节 SAS大革命
9.4.3 SAS网络层
作为一个网络,SAS当然也需要编址和寻址。SAS网络中的每个节点使用的地址与FC网络类似,也是一个64b长度的定长地址,也叫做WWN;但是与FC Fabric不同的是,SAS直接使用这个64b地址来路由数据包,而FC Fabric则使用另外分配的24b的Fabric ID来路由数据包。编址是为了寻址,寻址就需要有地址表,或者叫做路由表。每个Expander上运行着一种协议,用来执行整个系统中的Expander发现以及路由条目学习,这种协议叫做SMP,全称为Serial Management Protocol。
我们首先来看只有一个SAS交换机或者交换芯片(或者SAS Expander)的情况下,SAS Expander是如何寻址的。熟悉IP路由的人很容易地就可以理解,对于直接连接在Expander上的终端节点,就属于直连模式,Expander在获取到它们的地址之后,会将这些地址加入路由表,并标明路由条目的模式属于“D”类型,即Direct。如图9-31所示,一个12端口的SAS Expander上接入了4块SAS磁盘,SAS磁盘为终端设备,Expander 会将这4条记录收录到路由表中,并标明为D类型。图中的SMP表示Serial Management Protocol,SMP在这里是一个抽象的对象,它作为一个实体路由协议和管理程序运行在每个Expander上,所以这里用它来代表每个Expander。由于目前的Expander是系统中唯一的一个,所以编号为SMP0,并且对应了一个虚拟的PHY12(第13个PHY并不存在)。

图9-31 SAS的寻址
此时,我们再增加一个Expander,将这两个Expander级联起来。并且在第二个Expander上也连接4块SAS磁盘。此时的路由表如图9-32所示。

图9-32 SAS级联时的路由表
上图中出现了一种新的路由类型,T类型,意思是Table Routes,暗指这种类型的路由条目是通过路由协议学习而得来的,并非自己本地直连的路由条目。SMP1表示新加入的Expander本身。然而,是否觉得缺了点什么呢?是的,磁盘和磁盘之间是不会通信的,磁盘只是作为Target端来等待Initiator端来发起指令。很显然Expander不是这个Initiator。我们需要向这个由两交换机(芯片)组成的网络中添加一个SAS Initiator,如图9-33所示。

图9-33 SAS Initiator的引入
上图中,Expander0的路由表中增加了一个条目,即它所连接的有一个直连终端,HOST0上的SAS适配卡,路由类型为“D,S”,D为直连类型。S即Subtractive,意义为默认路由,即,如果某个数据帧无法从D或者T类型的路由条目中找到目的地址,那么统统向S类型路由条目对应的PHY接口转发出去。SAS卡和Expander0之间同样运行着SMP协议,Expander0会学习到SAS卡为Initiator端,所以,Expander1也会学习到这条路由,但是Expander1的路由表中的默认路由显然应该设置为SMP0,即将具体路由未知的数据帧从连接SMP0的PHY转发出去。另外,Expander1也会同时学习到HOST0路由条目,但是不将其作为S类型,因为S类型路由存在的意义是可以在路由表中不保存HOST端的条目,在主机数量很大的时候,有利于保证路由效率。
SAS协议规定,可以由多个Expander任意连接而组成一个SAS网络,但是这个网络可以接入的最大的终端节点不能超过128个,这个一级SAS网络中所有的Expander组成一个Expander set。如果要达到更大的接入容量,需要一个核心Expander,这个Expander可以最多具有128个PHY,可以接入最多128个上述的Expander Set。此核心Expander称为“Fanout Expander”,Expander Set中的Expander称为“Edge Expander”。这样,最大的SAS网络中可接入的总容量为128×128再减掉Expander互联所耗费的端口数。图9-34所示为Fanout Expander与Edge Expander的互联示意图。Fanout Expander作为整个SAS网络的核心,其上不允许再有S类型的路由,只能有D和T类型的路由。Edge Expander连接Fanout Expander的PHY,对应这个PHY的路由皆为S类型路由,因为Edge Expander只能将未知条目转发给核心。

图9-34 Fanout与Edge的互联
每个独立的SAS网络被称为一个Domain。