SAS Protocol Layer - 5 (SPL-5) 第一章:SAS协议基础概念(3)状态机和event

SAS Protocol Layer - 5 (SPL-5) 系列文章目录

第一章:概述以及SAS协议基础概念(1)
第一章:概述以及SAS协议基础概念(2)
第一章:SAS协议基础概念(3)状态机和event



前言

目前关于SATA的中文协议概述有很多,但是基于SAS和expander的中文协议很少,基于此,为了方便自己巩固学习,记录此系列博客,欢迎纠正讨论。

本篇继续梳理基础概念。

一、状态机

需要注意状态机的类型、位置,和状态机和各种模块中的数据是如何传输的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、Events:Reset sequences 复位序列

Reset sequences有以下几种:
a) link reset sequence;
b) phy reset sequence;
c) OOB sequence;
d) speed negotiation sequence;
e) identification sequence; and
f) hard reset sequence.
在这里插入图片描述

1、link reset sequence

对于SATA,它没有identification的概念,它的signature FIS承担了类似SAS identification sequence的作用。它的link reset sequence进程和phy reset sequence同步,link reset sequence可以用来做hard reset sequence。
在完成phy上的link reset序列并完成内部初始化后,expander中的ECM应该能够通过该phy路由连接请求。expander可能会返回OPEN_REJECT (NO DESTINATION或其他类型)原语,直到它准备好处理连接请求。
外部可配置expander的ECM依赖于使用表路由方法路由连接请求的DISCOVER发现过程的完成。

2、hard reset sequence和identification sequence

对于SAS,hard reset sequence和identification sequence用的是同一个状态机:SL_IR,因此,这两种reset sequence只能二选一出现。
如果一个逻辑phy在phy重置序列完成后的1毫秒内没有接收到一个HARD_RESET原语序列或一个有效的IDENTIFY地址帧,那么包含逻辑phy的物理phy将重新启动phy重置序列。

(1)hard reset sequence
在phy reset序列之后的1毫秒内,logical phy传输HARD_RESET原语(6个primitive)或接收HARD_RESET原语(3个primitive有效),接收方认为发生hard reset sequence。由link层处理,属于link reset sequence的一部分。
处理一个目标端口中所有phy。硬复位不影响设备其他端口。
当端口处理硬复位时,该端口将停止在其中包含的每个phy上传输有效的dwords。然后,每个phy可以参与新的phy复位序列(例如,响应传入的COMINIT),如果没有检测到一个新的link复位序列,则应发起一个新的link复位序列。
处理带有hard reset操作的SMP PHY CONTROL功能作用于expander的SAS port上的virtual expander PHY,expander中的SSP端口、STP端口和/或SATA端口。

在这里插入图片描述
图片中phy A试图执行identification序列,phy B执行hard reset序列。因为phy A接收到HARD_RESET原语序列,所以会发生hard reset序列+phy reset序列。

如果处理硬复位的端口是SSP端口,那么硬复位会导致传输复位事件通知发送到SCSI应用层,SCSI设备应该执行SAM-5中为硬复位定义的动作。在处理硬复位后,SSP目标端口所访问的每个LUN都应该为所有SSP启动器端口建立一个单元注意条件,并将额外的感知代码设置为SCSI BUS RESET OCCURRED。
如果进行硬复位的端口是STP SATA网桥中的STP端口,则SATA主机端口将产生link reset顺序。
如果处理硬复位的端口是STP端口,而该端口不在STP SATA桥接中,则STP目标设备应执行ATA8-AAM中为上电或硬件复位定义的动作。
如果处理硬复位的端口是一个expander端口,那么expander设备不应该在其任何其他phy上产生硬复位序列。expander的功能和其他expander端口不受硬复位的影响。expander中的SAS设备不受外部expander端口硬复位的影响。

(2)identification sequence
当一个logical phy传输一个或三个IDENTIFY地址帧(IDENTIFY address frame——IDAF),而且没有接收到HARD_RESET原语,认为发生identification sequence。
在这里插入图片描述
IDAF的格式是SOAF原语+data dword0~7+EOAF原语,具体传输内容参照下图。
设备中的端口根据identification sequence与phy关联。
在identification sequence期间,设备会
a) 发送 IDENTIFY 地址帧,包括包含逻辑物理设备的 SAS 设备类型SAS device type(即终端设备或扩展设备)、包含逻辑物理设备的 SAS 端口或扩展设备的 SAS 地址 SAS address、设备名称device name和其他信息;以及
b) 接收来自所附logical phy设备的 IDENTIFY 地址帧,其中包含同一组信息,包括所附 SAS 设备类型attached SAS device type、所附 SAS 地址attached SAS address、所附设备名称attached device name和其他所附信息。

如果一个逻辑phy在phy reset序列完成后的1ms内接收到一个有效的IDENTIFY地址帧,则出方向的IDENTIFY地址帧中的SAS地址和入方向的IDENTIFY地址帧中的SAS地址决定逻辑phy所属的端口。逻辑phy忽略后续的IDENTIFY地址帧hard_reset,直到另一个phy reset序列发生。

如果在identification sequence中,两个或多个phy
a) 发送的 SAS 地址与该端口中其他物理实体在传出的 IDENTIFY 地址帧中发送的 SAS 地址相同(即 SAS 地址相同);以及
b) 接收的 SAS 地址与该端口中其他物理实体在传入 IDENTIFY 地址帧中接收的地址相同(即所附 SAS 地址相同),
那么由以上相同SAS地址的phy组成的一个wide port就建立好了。
在这里插入图片描述

三、Events: I_T nexus loss

为目标SAS端口使用I_T nexus loss timer来延迟I_T nexus loss的检测(例如,在SAS启动器端口和SAS目标端口之间的路径上的phy丢失dword同步并执行新的link reset序列的情况下)。
SAS端口为目标端口建立一个I_T nexus loss timer事件,如果:
a)到目的端口的连接请求导致OPEN_REJECT (NO DESTINATION),OPEN_REJECT (RESERVED INITIALIZE 0),或OPEN_REJECT (RESERVED INITIALIZE 1);
b)对目的端口的连接请求导致Open Timeout;
c)到目的端口上逻辑phy的连接请求收到BREAK原语;
d)管理应用客户端正在完成DISCOVER过程,检测到目的端口已不在SAS域中;或
e) SAS端口中没有物理设备。
SAS端口在为目标端口建立I_T nexus loss timer事件后,初始化并启动此timer。

SAS端口在以下情况下停止I_T nexus loss timer:
a)到目标端口的连接请求导致OPEN_REJECT(RESERVED CONTINUE 0)、OPEN_REJECT(RESERVED CONTINUE 1)或OPEN_REJECT(RETRY);
b)建立了到目的端口的连接;或
c)管理应用客户端正在完成DISCOVER过程,检测到目的端口在SAS域中。

当SAS端口为目标端口建立I_T nexus loss timer事件后,SAS端口会重试任何到该目标端口的连接请求,直到建立到目的端口的连接或发生I_T nexus丢失事件。

SAS端口在以下情况下为目标端口建立I_T nexus丢失事件:
a) I_T nexus loss timer 超时;
b) 到目的端口的连接请求导致丢弃类OPEN_REJECT; 或
c) SAS端口接收到特定于供应商的指示(例如,SGPIO存在检测),表明目标端口不再在SAS域中。

如果目标端口发生I_T nexus loss,此事件由端口层状态机处理。在某些情况下,I_T nexus loss timer 将通过自配置扩展器设备遍历连接请求。
如果由于I_T nexus loss timer 超时,在启动器端口中发生I_T nexus丢失,那么管理应用程序客户端应该在连接到丢失的目标端口的phy上引起link reset序列(例如,如果直接连接,则连接到启动器端口中的phy,如果通过expander连接,则是expander中的phy连接到目标端口)。

如果在SSP端口中发生了I_T nexus丢失,那么SSP端口将向SCSI应用层发送一个nexus loss事件通知,SCSI设备将执行SAM-5中为I_T nexus丢失定义的操作。如果某个SSP启动器端口发生I_T nexus丢失,则SCSI应用程序客户端应该在该SSP启动器端口与该SSP目标器端口之间的下一次连接期间向该SSP目标器端口发送I_T nexus RESET任务管理函数。

如果在STP启动器端口发生I_T nexus丢失,则STP启动器端口将向ATA应用程序客户端发送一个Transport Event Notification (nexus loss, [Device])指示(即创建一个nexus丢失事件)(参见ATA8-AAM)。ATA应用程序客户端将认为对于丢失的STP目标端口的任何命令都是错误完成的。
如果在STP目标端口中发生I_T nexus丢失,那么ATA设备服务器将中止丢失的STP启动器端口的所有未执行命令。如果STP目标端口位于STP SATA桥接中,则STP SATA桥接将发起到SATA设备的link reset序列,以便SATA设备中的ATA设备服务器中止所有未执行的命令。

如果在SMP启动器端口中发生I_T nexus丢失,那么SMP启动器端口将停止尝试建立到丢失的SMP目标端口的连接。

四、Events:Power loss expected

如果在phy reset序列之后,phy接收到NOTIFY (POWER LOSS EXPECTED)原语,那么phy将认为这是一个预期的功率损失事件,并且包含phy的端口将处理一个预期的功率损失。

总结

涉及到的概念:
状态机组成和数据传输方向。
a) link reset sequence;
b) phy reset sequence;
c) OOB sequence;
d) speed negotiation sequence;
e) identification sequence; and
f) hard reset sequence.
I_T nexus loss timer and event
Power loss expected

  • 39
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值