浅析SAS协议:设备接入与探测

文章目录

    • SAS设备初始化
      • OOB信号
        • SAS设备间OOB交互
          • 场景一:SAS设备两边同时发送SAS COMINIT信号
          • 场景二:SAS设备A先发送COMINIT信号
          • 场景三:SAS设备B错过COMINIT信号
        • SAS与SATA设备间OOB交互
          • 场景一:SATA设备未响应COMSAS信号
          • 场景二:SATA设备使用COMINIT响应COMSAS信号
      • 速率协商
      • IDENTIFY序列
    • Discovery流程
      • Discovery探测流程
        • 使用到的SMP请求
      • Discovery探测示例
    • 相关参考

SAS设备初始化

SAS设备接入后,链路两边会自动开始探测对端设备在位状态、确认设备类型(SAS或SATA)以及进行速率协商等动作。在两边设备可以正式进行数据通信之前,硬件需要完成一些初始化步骤:

  1. 交互OOB信号探测连接设备在位状态,并确认它是SAS设备还是SATA设备;
  2. 根据SAS或SATA设备的协商方式,将链路协商到可支持的最大速率;
  3. 识别连接设备的信息,包括SAS地址等。

OOB信号

SAS协议定义了三种OOB信号:COMINIT、COMSAS、COMWAKE,其中COMINIT是通用OOB信号;COMSAS用于SAS设备之间的交互;COMWAKE用于SAS与SATA设备、SATA与SATA设备之间的交互。

SAS设备间OOB交互

SAS设备间OOB信号交互流程如下:

  1. 链路两边设备上电后,均按照一定的周期发送COMINIT信号;
  2. 当一边设备收到对方的COMINIT信号后,分成两种情况:
    1. 如果当前设备已经发送过COMINIT信号,将直接发送COMSAS信号;
    2. 如果当前设备没有发送过COMINIT信号,将发送COMINIT和COMSAS信号。
  3. 当一边设备收到对方的COMSAS信号后,如果尚未发送COMSAS信号,则发送COMSAS。
场景一:SAS设备两边同时发送SAS COMINIT信号

浅析SAS协议:设备接入与探测_第1张图片

场景二:SAS设备A先发送COMINIT信号

浅析SAS协议:设备接入与探测_第2张图片

场景三:SAS设备B错过COMINIT信号

浅析SAS协议:设备接入与探测_第3张图片

SAS与SATA设备间OOB交互

SAS与SATA设备间OOB交互流程如下:

  1. 链路两边设备上电后,均按照一定的周期发送COMINIT信号;
  2. 当SAS设备收到对方的COMINIT信号后,发送COMSAS信号,此时分成两种情况:
    1. SATA设备不响应COMSAS信号,后续COMSAS检测超时;
    2. SATA设备使用COMINIT响应COMSAS信号,后续COMSAS检测超时;
  3. SAS设备发送COMWAKE信号。
场景一:SATA设备未响应COMSAS信号

浅析SAS协议:设备接入与探测_第4张图片

场景二:SATA设备使用COMINIT响应COMSAS信号

浅析SAS协议:设备接入与探测_第5张图片

速率协商

当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探测流程的整体步骤如下:

  1. 向级联的Expander发送Report General请求,获取Expander设备的通用信息,包括Expander设备上的Phy数量、自配置能力等信息;
  2. 向级联的Expander发送Discover或Discovr List请求,遍历Expander的所有Phy,获取每个Phy的设备连接信息;
  3. 将探测到的设备添加到系统中。如果探测到的设备中有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的探测流程,如下:
浅析SAS协议:设备接入与探测_第6张图片

  1. 为了探测第一级Expander上连接的设备,启动器首先会向第一级Expander发送Report general帧;
  2. 通过Report general请求,启动器查询到了Expander设备上的Phy数量,为了进一步查询每个Phy是否有连接设备,启动器遍历所有Expander的所有Phy,并发送Discover请求。Expander接收到Discover请求后,会将请求Phy的设备信息组装成响应帧返回给启动器。启动器处理Discover响应数据,刷新设备拓扑信息;
  3. 若发现Phy对端连接的是Expander,那么启动器会再对二级Expander进行Report general、Discover请求,获取二级Expander上连接的设备信息;

如果第二级Expander后还接有第三级、第四级的设备,则重复上述流程,直到完成所有设备的扫描。

相关参考

  • 《SAS Protocol Layer》
  • 《SAS Storage Archteciture》

你可能感兴趣的:(存储技术手札,SAS,Discovery,SCSI)