浅析SAS协议:链路层

文章目录

    • 概述
    • 原语
      • 通用原语
      • 连接管理原语
      • 连接通信原语
    • 地址帧
      • IDENTIFY地址帧
      • OPEN地址帧
    • 链路复位
      • Link Reset
      • Hard Reset
      • SATA的Link Reset
    • 连接管理
      • 建立连接
      • 连接仲裁
    • 流量控制
      • SSP流控
        • Credit Advance
      • SMP流控
    • 相关参考

概述

SAS链路层用于定义原语、地址帧以及连接相关的内容,提供认证序列、hardreset序列、连接管理以及SSP、STP和SMP帧传输等功能

原语

原语定义为第一个字符为K28.3或K28.5的双字,其作用是保持链路传输中的数据同步及时钟补偿等。原语格式定义如下:
在这里插入图片描述
SAS链路中的原语根据作用可大致分为三类:通用原语、连接管理原语、连接通信原语。

通用原语

原语描述
ALIGN用于速率调整,保持连接的phy传输速率一致
HARD_RESET发起Hard Reset
BROADCAST链路变化原语,由Expander发出,指示SAS网络中存在链路发生变化
ERROR用于误码

连接管理原语

连接管理原语用于配合地址帧进行连接管理,包括CLOSE、AIP等。

原语描述
SOAF/EOAF地址帧的起始与结束标识
OPEN_ACCEPT接受一个连接请求
OPEN_REJECT拒绝一个连接请求,携带的字符数据指示了拒绝连接的原因
AIP连接仲裁原语,连接建立过程中由被请求端发送,携带的字符数据指示了当前未建立的原因
CLOSE关闭一条连接
BREAK中断一条连接

连接通信原语

连接通信原语主要用于SSP、SMP连接内的数据通信,包括ACK、NAK等。

原语描述
SOF/EOF帧的起始与结束标识
RRDY允许发送帧
CREDIT_BLOCED用于流控
ACK/NAK用于对COMMAND、TASK、XFER_RDY、RESPONSE帧进行响应,正常时返回ACK,异常返回NAK
DONE数据帧传输完成

地址帧

SAS协议定义了两种类型的地址帧:IDENTIFY地址帧和OPEN地址帧,分别用于IDENTIFY序列中交互设备信息和建立连接请求。地址帧在链路上的传输格式如下:
在这里插入图片描述
地址帧的通用格式定义如下:
在这里插入图片描述

IDENTIFY地址帧

当SAS设备之间链路建立后,两端设备会发送IDENTIFY地址帧以交换双方的设备信息。IDENTIFY地址帧格式如下:
在这里插入图片描述

OPEN地址帧

SAS通信模型中约束SAS设备之间要进行数据通信,必须要先建立一条端到端的连接。作为连接的发起方,需要通过发送OPEN地址帧,以请求建立一条到目标设备的数据连接通路。OPEN地址帧格式定义如下:
在这里插入图片描述

链路复位

SAS链路定义了多种级别的链路复位序列:包括Link Reset、Hard Reset。

Link Reset

Link Reset会重新触发两端的链路协商以及信息认证,Link Reset流程如下:
在这里插入图片描述

Hard Reset

Hard Reset对比Link Reset流程,多出了一个Hard Reset的序列,通常这个序列会发送一个Hard Reset类型的原语。Target端在接收到Hard Reset原语后可能会做一些额外的资源清理等,例如SAS盘就可能回去清除盘上所有正在运行的IO。
在这里插入图片描述

SATA的Link Reset

SATA的链路复位要单独进行说明,SATA协议只定义了Link Reset这一种方式,其Link Reset序列示意图如下:
在这里插入图片描述

连接管理

SAS协议要求启动器端口和目标器端口在进行数据通信之前,必须要先建立连接。根据链路层所承载的协议不同,连接类型可以分为三种,分别为SSP连接、STP连接和SMP连接,其中:

  • SSP连接:用于SSP Initiator端口和SSP Target端口之间传输SCSI命令请求、任务管理请求以及数据帧等;
  • STP连接:用于SSP Initiator端口和STP Target端口之间传输SATA数据帧,其中STP Target端口有Expander设备提供,代理SATA设备与SSP Inititor设备建立STP连接;
  • SMP连接:用于SMP Initiator端口和SMP Target端口之间传输SMP请求和SMP响应数据。

建立连接

待续。。。

连接仲裁

待续。。。

流量控制

流量控制用于保证发送端发送的流量不会超出接收端的接收能力,而导致数据被接收端丢掉。基本的实现流量控制的方式有两种:一种是基于反压机制,例如以太网使用的Global Pause、PFC等;另外一种是基于信用的流控
,高速链路大都采用这种方式,例如PCIe。SAS协议使用基于信用的流量控制机制,本端如果要发送数据,必须要先收到对端的信用。

SSP流控

SSP链路层的流控使用RRDY原语来授予SSP帧信用,以允许连接中的其它SSP phy发送帧。本端在每次接收到一个RRDY原语时,都会将递增信用计数;每个信用都会允许本端向对端发送一个SSP帧,帧发送完后,信用也会递减。
在这里插入图片描述

Credit Advance

除了RRDY原语外,OPEN地址帧CREDIT ADVANCE位也可以用来授予SSP帧信用。它的运作机制如下:

  • 如果本端具有可用的接收资源,则它可以通过在OPEN地址帧中将CREDIT ADVANCE位设置为1来预付信用,这样可以允许本端在接收到OPEN_ACCEPT之后才发送RRDY;
  • 而在对端接收到CREDIT ADVANCE位设置为1的OPEN地址帧后,会增加SSP帧信用,同时也会忽略下一个接收到的RRDY原语。

SMP流控

SMP链路层其实并未实现流量控制,SMP帧的交互是一个简单的请求-响应的通信模型。当接受SMP连接时,就意味着SMP Target端口已经准备好接受SMP请求了;同样的对于SMP Intiator端口,当发送SMP请求时,也就做好了接受SMP响应的准备。

相关参考

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/93617.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基金市场的冷热传递什么信号?

摘要及声明 1:本文主要利用实际数据进行检验,从定量角度分析基金发行情况与股票市场之间的关系; 2:本文主要为理念的讲解,模型也是笔者自建,文中假设与观点是基于笔者对模型及数据的一孔之见&#xff0c…

高效UI设计必备的4个UI设计软件,真的好用!

随着UI设计工作的不断发展,工作中的需求变得更加多样,一个好用的 UI 设计软件将极大减轻设计师的工作负担,提高设计师的工作效率,今天本文精选了4款好用的UI设计软件,并将逐一介绍的它们各自的特点和用法,给…

经过6年发展,NIST发布三种可以抵御量子计算机未来攻击的算法标准草案

近日,美国国家标准与技术研究院(NIST)发布了2022年选定的四种算法中的三种算法的标准草案:CRYSTALS–KYBER、CRYSTALS–Dilithium和SPHINCS,第四种算法FALCON的标准草案将在大约一年内发布。 近年关于量子计算机的研究…

前端console.log打印内容与后端请求返回数据不一致

后端传值num0 前端打印num1 ,如图,console.log后台显示的数据与展开后不一致 造成该问题原因是深拷贝与浅拷贝的问题。 var obj JSON.parse(JSON.stringify(res)) 修改后打印 正常

微信小程序隐私协议接入

自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,微信要求,仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则后,方可调用微信提供的隐私接口。 相关公告见:关于小程序隐私保…

Python实现T检验

今天来分享一下T检验的python实现方法。 01 先来上一波概念。 1.单样本t检验,又称单样本均数t检验,适用于来自正态分布的某个样本均数与已知总体均数的比较,其比较目的是检验样本均数所代表的总体均数是否与已知总体均数有差别。已知总体均数…

hiredis的安装与使用

hiredis的介绍 Hiredis 是一个用于 C 语言的轻量级、高性能的 Redis 客户端库。它提供了一组简单易用的 API,用于与 Redis 数据库进行交互。Hiredis 支持 Redis 的所有主要功能,包括字符串、哈希、列表、集合、有序集合等数据结构的读写操作&#xff0c…

【CSS 画个梯形】

使用clip-path: polygon画梯形 clip-path: polygon使用方式如下: 效果实现 clip-path: polygon 是CSS的属性之一,用于裁剪元素的形状。它可以通过定义一个具有多边形顶点坐标的值来创建一个多边形的裁剪区域,从而实现元素的非矩形裁剪效果。…

Python实现企业微信群告警

Python实现企业微信告警 1. 创建企业微信群机器人 1-1. 什么是企业微信群机器人? 企业微信群机器人是企业微信平台提供的一种功能,可以通过Webhook方式将消息发送到指定的企业微信群中。它可以用于自动化发送通知、告警等信息,实现监控和信…

设计模式之职责链模式(ChainOfResponsibility)的C++实现

1、职责链模式的提出 在软件开发过程中,发送者经常发送一个数据请求给特定的接收者对象,让其对请求数据进行处理(一个数据请求只能有一个对象对其处理)。如果发送的每个数据请求指定特定的接收者, 将带来发送者与接收…

elementUI moment 年月日转时间戳 时间限制

changeStartTime(val){debuggerthis.startT val// this.startTime parseInt(val.split(-).join())this.startTime moment(val).unix() * 1000 //开始时间毫秒if(this.endTime){this.endTime moment(this.endT).unix() * 1000 //结束时间毫秒if(this.startTime - this.endTi…

webassembly003 ggml GGML Tensor Library part-2 官方使用说明

https://github.com/ggerganov/whisper.cpp/tree/1.0.3 GGML Tensor Library 官方有一个函数使用说明,但是从初始版本就没修改过 : https://github1s.com/ggerganov/ggml/blob/master/include/ggml/ggml.h#L3-L173 This documentation is still a work in progres…

Windows用户如何安装Cpolar

目录 概述 什么是cpolar? cpolar可以用在哪些场景? 1. 注册cpolar帐号 1.1 访问官网站点 2. 下载Windows版本cpolar客户端 2.1 下载并安装 2.2 安装完验证 3. token认证 3.1 将token值保存到默认的配置文件中 3.2 创建一个随机url隧道&#x…

芯片 半导体 晶圆

芯片(chip)就是半导体元件产品的统称,是 集成电路(IC, integrated circuit)的载体,由晶圆分割而成。 半导体集成电路是将很多元件集成到一个芯片内, 以处理和储存各种功能的电子部件。由于半导…

【ES6】—【新特性】—Symbol详情

一、一种新的原始数据类型 定义:独一无二的字符串 二、 声明方式 1. 无描述声明 let s1 Symbol() let s2 Symbol() console.log(s1, s2) // Symbol() Symbol() console.log(s1 s2) // falsePS: Symbol 声明的值是独一无二的 2. 有描述的声明 let s1 Symb…

Linux系统编程系列之进程间通信(IPC)-信号

一、什么是信号 信号是进程间通信的一种方式,它是异步通信的。而异步的意思就是不同步,事件的发生和处理没有协同。 二、信号的特性 Linux/Unix系统下,信号总共分成两大类,一类是最常用的标准信号,另一类是后面的引入…

云服务器 宝塔(每次更新)

su root 输入密码 使用 root 权限 /etc/init.d/bt default 获取宝塔登录 位置和账号密码。进入宝塔 删除数据库 删除php前端站点 删除PM2后端项目 前端更改完配置打包dist文件 后端更改完配置项目打包 数据库结构导出 导入数据库 配置 PM2 后端 安装依赖

任务执行和调度----Spring线程池/Quartz

定时任务 在服务器中可能会有定时任务,但是不知道分布式系统下次会访问哪一个服务器,所以服务器中的任务就是相同的,这样会导致浪费。使用Quartz可以解决这个问题。 JDK线程池 RunWith(SpringRunner.class) SpringBootTest ContextConfi…

java开发之fastjson

依赖 <!-- fastjson依赖 --> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> <…

数据分析基础-数据可视化学习笔记04-互动方式

交互方式 交互&#xff08;Interaction&#xff09;是指用户与系统、设备或其他用户之间的相互作用、传递信息和交流的过程。在计算机科学、人机交互和用户体验领域&#xff0c;交互是用户与技术之间的核心概念&#xff0c;它决定了用户如何与计算机系统或其他技术进行沟通、操…