第九章 天翻地覆——FC协议的巨大 力量
第四节 SAS大革命
9.4.2 SAS链路层
对于SAS的链路层协议内容,比如帧的组成结构、帧同步、链路错误恢复等由于太过底层,请想了解的读者自行参考SAS协议文本(大部分帧结构都与FC类似)。这里只简要介绍一下SAS链路层与FC的一个最大的不同之处以及速率适配方面。
SAS在链路层使用面向连接的交换技术。Initiator向Target发起通信之前必须建立好连接,但是要与传输层的端到端连接相区别开(SAS的传输层也有连接,下文描述)。SAS链路层的连接指的是在一个SAS网络内的两个PHY的通信路径中的所有Expander内部,都将为这条通信保持相应的资源,比如Crossbar矩阵内的交换路径。某个Initiator和Target对初次收发数据时,Crossbar上的Arbiter,或者叫Connection Manager会检测并且在Crossbar内新建一条路径,以便将它们之间的数据通过恒定的路径发送到下一跳Expander的端口,下一跳Expander再做相同的动作直到数据达到最终Target。连接是在每个PHY之间建立的,如果使用宽端口,则每个PHY之间都会为对应的OPEN请求建立连接,因为每个PHY之间都有链路,都需要保留对应的资源和路径。
具体连接发起和结束的过程如下。
(1)Initiator端的链路层首先通过PHY接口向其连接的Expander发起一个OPEN帧,帧中携带的是Target端PHY的SAS地址。
(2)本地Expander收到之后,首先返回AIP帧(Arbitration In Progress),这期间,Expander会为这个请求分配资源。由于Expander需要维持很多Initiator和Target的连接,有时资源不够的话,分配的资源会相冲突,需要根据SAS地址来判断连接的优先级以便有限分配高优先级连接的资源,这个过程就是仲裁,但是它与FCAL的仲裁有着本质的不同。
(3)Arbitration成功之后,在Expander内为其保留恒定资源和Crossbar路径,然后将这个帧路由到Target所在的Expander,途中经过的所有Expander都会为这个初始连接分配恒定资源和路径。
(4)Target端的链路层接收到OPEN请求之后,向Initiator端返回一个OPEN_ACCEPT帧。连接建立。
需要关闭连接的时候,Initiator端发送CLOSE帧。
图9-29所示为连接发起和接受期间的步骤。
对于适配不同速率的设备,SAS的链路层通过在快速链路上插入对应长度的ALIGN冗余数据来保持速率适配,如图9-30所示。

图9-29 SAS连接发起和接受过程 图9-30 SAS的速率适配