当前位置: 首页 > news >正文

浅析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》》

相关文章:

浅析SAS协议:链路层

文章目录 概述原语通用原语连接管理原语连接通信原语 地址帧IDENTIFY地址帧OPEN地址帧 链路复位Link ResetHard ResetSATA的Link Reset 连接管理建立连接连接仲裁 流量控制SSP流控Credit Advance SMP流控 相关参考 概述 SAS链路层用于定义原语、地址帧以及连接相关的内容&…...

ES6之浅尝辄止1:class的用法

class是es6新增的一种语法糖,用于简化js中构造类的过程 1.es5中如何构造类? function Person(name,age){this.name name;this.age age; } Person.prototype.sayName function(){return this.name; } let p1 new Person(小明,22);2.es6中的class方式…...

django-发送邮件

一、业务场景 业务警告 邮箱验证 密码找回 二、邮件相关协议 1.SMYTP(简答邮件传输协议 25端口) 属于“推送”协议 负责发送 2.IMAP(交互式邮件访问协议,应用层协议,143端口) 用于从本地邮件客户端…...

IP私域系统搭建课,视频号打通你的个人ip私域

标题:搭建IP私域系统课程:打通视频号,打造个人IP私域的关键策略 导语: 在当今信息爆炸的时代,个人IP(知识产权)的价值越来越受到重视。搭建IP私域系统通过打通视频号,成为了打造个人…...

咸虾米之一些快捷方式的操作,一行方块的左右滑动,方块在一区域内的任意移动

由于本着只学习微信小程序的目的,上面的几篇博文都是跟着黑马程序的课程走的!后面的就讲解uni-app的实验呢!一个人的精力是有限的,于是换了们课程继续深造微信小程序!!! 以下是在 .wxml中的一些…...

Linux 高级指令

十个常用高级Linux指令、其具体用法和示例: 1.grep:用于搜索指定文本内容,可以通过正则表达式匹配搜索。 用法示例:在当前目录下搜索包含关键词“hello”的文件并列出文件名: grep -r "hello" 2.find&a…...

江苏移动基于OceanBase稳步创新推进核心数据库分布式升级

*本文首发自《中国电信业》 数字经济时代,数据库作为企业核心数据存储、处理、挖潜等方面的关键载体,重要性日益凸显。对于运营商而言,数据库具有行业用户数量多、访问数量多、业务复杂度高、数据安全性高、响应要求性高以及需要 7*24 小时服…...

6. 删除顺序表中的重复元素

p17 6. 删除顺序表中的重复元素 #include<stdio.h> #include<stdlib.h> #define MaxSize 100 typedef struct {int* data;int capacity;int length; }SeqList;int InitList(SeqList &L) {L.data (int*)malloc(MaxSize * sizeof(int));L.capacity MaxSize;L.l…...

Vue——axios的二次封装

文章目录 一、请求和传递参数1、get 请求2、post 请求3、axios 请求配置 二、axios 的二次封装1、配置拦截器2、发送请求 三、API 的解耦1、配置文件对应的请求2、获取请求的数据 四、总结 一、请求和传递参数 在 Vue 中&#xff0c;发送请求一般在 created 钩子中&#xff0c…...

JavaScript Web APIs -03 事件流、事件委托、其他事件(加载、滚动、尺寸)

Web APIs - 03 文章目录 Web APIs - 03事件流捕获和冒泡阻止冒泡 事件委托其他事件页面加载事件元素滚动事件页面尺寸事件 元素尺寸与位置 进一步学习 事件进阶&#xff0c;实现更多交互的网页特效&#xff0c;结合事件流的特征优化事件执行的效率 掌握阻止事件冒泡的方法理解事…...

QT DAY 2

window.cpp #include "window.h" #include<QDebug> #include<QIcon> Window::Window(QWidget *parent) //构造函数的定义: QWidget(parent) //显性调用父类的构造函数 {//this->resize(430,330);this->resize(QSize(800,600));// this…...

ELK安装、部署、调试(三)zookeeper安装,配置

1.准备 java安装&#xff0c;系统自带即可 2.下载zookeeper zookeeper.apache.org上可以下载 tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/local mv apache-zookeeper-3.7.1-bin zookeeper 3.配置zookeeper mv zoo_sample.cfg zoo.cfg /usr/local/zookeeper/con…...

企业级智能PDF及文档处理SDK GdPicture.NET 14.2 Crack

企业级智能PDF及文档处理SDK GdPicture.NET 提供了一组非常先进的 API&#xff0c;这些 API 利用了人工智能、机器学习和模糊逻辑算法等尖端技术。经过超过 15 年的持续研究和对创新的专注&#xff0c;我们的 SDK 已成为市场上针对PDF、OCR、条形码、文档成像和各种格式最全面的…...

应用程序管理工具

应用程序管理是 DevOps 的重要组成部分。它可以定义为在所有阶段监控和管理软件应用程序的可用性、运行状况、性能和功能的过程&#xff0c;包括规划、设计、构建、测试、部署、维护和更新。这意味着应用程序从概念到停止都受到监控。 应用程序管理的重要性 管理应用程序可确…...

当数据集较小时,调节学习率的方法

当数据集较小时&#xff0c;调节学习率的方法 当数据集较小时&#xff0c;调节学习率的方法可以参考以下步骤&#xff1a; 当数据集较小时&#xff0c;调节学习率的方法可以参考以下步骤&#xff1a; 先尝试一个较小的学习率&#xff0c;如0.001&#xff0c;或者根据经验设置一…...

JS实现数组的扁平化(ES6实现)----例子+难点解析

要求&#xff1a; 取出嵌套数组(多维)中的所有元素放到一个新数组(一维)中如: [1, [3, [2, 4]]] > [1, 3, 2, 4] 基础知识&#xff1a; arr.concat() 语法&#xff1a;数组.concat(其他数组) 作用&#xff1a;将其他数组和数组拼接在一起 返回值&#xff1a;拼接好的新数…...

git 提交错误,回滚到某一个版本

git log 查看版本号 commit 后面跟的就是版本号git reset --hard 版本号 &#xff08;就可以回滚到你要去的版本&#xff09;git push -f &#xff08;因为本地回滚了&#xff0c;所以和远程会差几个版本。所以这时候只有强制推送&#xff0c;覆盖远程才可以&#xff09;...

数据结构:八种数据结构大全

数据结构 1.1 数据结构概述 数据结构是计算机存储、组织数据的方式&#xff1b;通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构的优良将直接影响着我们程序的性能&#xff1b;常用的数据结构有&#xff1a;数组&#xff08;Array&#xff…...

Java正则表达式系列--Pattern和Matcher的使用

原文网址&#xff1a;Java正则表达式系列--Pattern和Matcher的使用_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java的正则表达式中的两个重要类的用法&#xff1a;Pattern和Matcher。 在Java中&#xff0c;java.util.regex包定义了正则表达式使用到的相关类&#xff0c…...

40个web前端实战项目,练完即可就业,从入门到进阶,基础到框架,html_css【附视频+源码】

当下前端开发可以说是一个比较火的职业&#xff0c;所以学习的人比较多&#xff0c;不管是培训还是自学都是希望通过前端可以找到一份好的工作&#xff0c;但是很多自学的朋友在自学过程中有些盲目&#xff0c;不仅大大降低了学习的效率&#xff0c;而且也会打击自己的学习热情…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...