文章目录
SAS设备初始化
SAS设备接入后,链路两边会自动开始探测对端设备在位状态、确认设备类型(SAS或SATA)以及进行速率协商等动作。在两边设备可以正式进行数据通信之前,硬件需要完成一些初始化步骤:
- 交互OOB信号探测连接设备在位状态,并确认它是SAS设备还是SATA设备;
- 根据SAS或SATA设备的协商方式,将链路协商到可支持的最大速率;
- 识别连接设备的信息,包括SAS地址等。
OOB信号
SAS协议定义了三种OOB信号:COMINIT、COMSAS、COMWAKE,其中COMINIT是通用OOB信号;COMSAS用于SAS设备之间的交互;COMWAKE用于SAS与SATA设备、SATA与SATA设备之间的交互。
SAS设备间OOB交互
SAS设备间OOB信号交互流程如下:
- 链路两边设备上电后,均按照一定的周期发送COMINIT信号;
- 当一边设备收到对方的COMINIT信号后,分成两种情况:
- 如果当前设备已经发送过COMINIT信号,将直接发送COMSAS信号;
- 如果当前设备没有发送过COMINIT信号,将发送COMINIT和COMSAS信号。
- 当一边设备收到对方的COMSAS信号后,如果尚未发送COMSAS信号,则发送COMSAS。
场景一:SAS设备两边同时发送SAS COMINIT信号
场景二:SAS设备A先发送COMINIT信号
场景三:SAS设备B错过COMINIT信号
SAS与SATA设备间OOB交互
SAS与SATA设备间OOB交互流程如下:
- 链路两边设备上电后,均按照一定的周期发送COMINIT信号;
- 当SAS设备收到对方的COMINIT信号后,发送COMSAS信号,此时分成两种情况:
- SATA设备不响应COMSAS信号,后续COMSAS检测超时;
- SATA设备使用COMINIT响应COMSAS信号,后续COMSAS检测超时;
- SAS设备发送COMWAKE信号。
场景一:SATA设备未响应COMSAS信号
场景二:SATA设备使用COMINIT响应COMSAS信号
速率协商
当OOB信号交互完成,两边都确认了对端的设备类型,后面就会进入速率协商流程。速率协商过程与链路协议相关,因此需要按照设备规定的方式进行。
IDENTIFY序列
SAS设备初始化的最后一个步骤是获取连接的设备信息。在完成OOB交互和速率协商之后,SAS设备会发送一个称作IDENTIFY的地址帧来相互交换设备信息,IDENTIFY包含了设备的SAS地址、名称以及Phy编号等信息。这里要注意的是,SATA设备没有SAS地址,因此SATA设备无法传输IDENTIFY地址帧。
Discovery流程
Discovery流程由SAS网络中的启动器发起,目的在于探测系统中连接的SAS设备,包括Expander、SAS硬盘以及SATA硬盘。
Discovery探测流程
对于启动器直连的设备,在设备链路协商时,通过交换Identify序列,启动器已经获取了对端的设备类型、SAS地址以及协商速率等信息;而对于非直连的设备,这类设备都是连接在Expander下,设备信息由Expander进行维护,启动器需要使用SMP协议向Expander查询连接的设备信息。Discovery探测流程的整体步骤如下:
- 向级联的Expander发送Report General请求,获取Expander设备的通用信息,包括Expander设备上的Phy数量、自配置能力等信息;
- 向级联的Expander发送Discover或Discovr List请求,遍历Expander的所有Phy,获取每个Phy的设备连接信息;
- 将探测到的设备添加到系统中。如果探测到的设备中有Expander,则对Expander重复前面的流程,以探测这个Expander下面接入的设备。
使用到的SMP请求
Discover过程通常涉及的SMP请求如下:
- Report General:用于查询Expander设备的通用信息,包括Expander设备上的Phy数量、自配置能力等;
- Report Manufacturer:用于查询Expander设备的厂商、型号等信息;
- Discover:携带了查询Phy的编号,用于获取指定Phy连接的设备信息;
- Discover List:Discover请求只能查询单个Phy连接的设备信心,Discover List提供了批量获取多个Phy连接设备信息的能力。
Discovery探测示例
这里以一个包含二级Expander的组网,来说明Discovery的探测流程,如下:
- 为了探测第一级Expander上连接的设备,启动器首先会向第一级Expander发送Report general帧;
- 通过Report general请求,启动器查询到了Expander设备上的Phy数量,为了进一步查询每个Phy是否有连接设备,启动器遍历所有Expander的所有Phy,并发送Discover请求。Expander接收到Discover请求后,会将请求Phy的设备信息组装成响应帧返回给启动器。启动器处理Discover响应数据,刷新设备拓扑信息;
- 若发现Phy对端连接的是Expander,那么启动器会再对二级Expander进行Report general、Discover请求,获取二级Expander上连接的设备信息;
如果第二级Expander后还接有第三级、第四级的设备,则重复上述流程,直到完成所有设备的扫描。
相关参考
- 《SAS Protocol Layer》
- 《SAS Storage Archteciture》