SATA系列专题之六:浅析NCQ原生指令序列

一、故事前传

在之前的文章中, 我们已经针对SATA相关内容进行了较为详细的解析,如果感兴趣的话,请见之前文章:

1,浅析SATA Physical Layer物理层OOB信号;

2,SATA Link Layer链路层解析2.0-2.3;

3,SATA Transport Layer传输层解析3.0-3.4;

4,SATA Command Layer命令层解析4.0-4.1;

5SATA Link Power Managment解析;

我们这里主要解析一下SATA NCQ(Native Command Queuing)原生指令序列的相关内容。


二、SATA NCQ 原生指令序列

NCQ是SATA中的命令协议,允许同时在Drive中执行多个命令。 当用户的应用程序发送多条指令到用户的硬盘,NCQ可以优化完成这些指令的顺序,从而降低负荷达到提升性能的目的。

此外,SATA Spec中还定义了三个特殊的功能来加强NCQ的性能:

  1. Race-Free Status Return: 无竞争状态返回机制,允许任何指令任何时间报告执行状态,此外,多个命令执行完毕信息可以打包一起回传。

  2. Interrupt Aggregation: 在DMA传输模式下,硬盘通知传输结束,会引起一个中断(Interrupt),造成延迟。所以,SATA spec提供中断聚集机制。如果硬盘同时间内完成多组命令,这些命令完成所引起的中断就可以聚集在一起,大幅减少中断的数目,这对于降低中断延迟有极大的贡献。

  3. First-Party DMA(FPDMA): SATA允许硬盘端通过DMA setup FIS直接对Host控制器送出数据传输请求,DMA引擎就可以直接进行资料传输,这个过程中并不需要Host端软件的介入。

当Drive收到一个Command,是要将其重新排列?还是立即执行呢?这怎么区分呢?

不怕,SATA Spec定义了两个特殊的NCQ指令:

  1. Read FPDMA Queued;

    图片

  2. Write FPDMA Queued;

    图片

 

从上面Read FPMA Queued Inputs和Write FPMA Queued Inputs我们可以看到红色框里面有一个特别的5-bit参数TAG(bit3~bit7). 这个参数就代表了NCQ一次可以最多执行32个Commands(如下图红色框Command List)。

图片

在Device端,当Queued Commands(最多32)中的一个write或者read准备好传输数据时,通过发送DMA setup FIS告知Host已准备好数据传输,其中要附带更新Tag Value(如下图红色框)。

图片

  

在Device端,当Queued Commands执行完成后, 通过发送Set Device Bits FIS告知Host完成状态,此时SActive区域对应TAG的相关内容(最多32个Command)

图片

FPDMA Read Command(60h) Protocol如下:

图片

我们抓取了一个FPDMA Read Command(60h)的SATA trace,如下图:

图片

从上面的SATA trace我们可以得到:

  1. 这个FPDMA read cmd对应的Tag=8;

  2. 这个FPDMA read cmd要读取32768 bytes的数据;

    在之前的文章“SATA Transport Layer传输层解析”中,我们提到过,Data FIS中的数据长度最大为2048 DWs,也就是8192 Bytes。所以,我们可以看到在上面的sata trace中,分4次发送Data FIS来实现32768 bytes数据的传输。

FPDMA Write Command(61h) Protocol如下:

图片

我们抓取了一个FPDMA Write Command(61h)的SATA trace,如下图:

图片

从上面的SATA trace我们可以得到:

  1. 这个FPDMA write cmd对应的Tag=0xEh=14;

  2. 这个FPDMA write cmd要写入131072 bytes的数据;

    在之前的文章“SATA Transport Layer传输层解析”中,我们提到过:Data FIS中的数据长度最大为2048 DWs,也就是8192 Bytes。所以,我们可以看到在上面的sata trace中,分16次发送Data FIS。但是每发送一个DMA DATA FIS后,要再次收到DMA Activate FIS才能发送下一个DMA DATA FIS;

下面我们再看个完整的例子加深一下对NCQ的理解:

举例:Host向Device发送两个Read FPDMA Queued指令

针对这个例子,我们作两个假设:

假设1:

第一个Read FPDMA Queued指令 Tag=0;

第二个Read FPDMA Queued指令 Tag=5;

假设2:

Device要先执行第二个指令(Tag=5), 然后在执行第一个指令(Tag=0)

图片

上图中指令下发流程如下:

  1. Host先下发第一个Read FPDMA Queued指令,并且SActive bit0=1, 写入NCQ buffer,这时NCQ队列深度=1;

  2. Host先下发第二个Read FPDMA Queued指令,并且SActive bit0 & bit5=1, 写入NCQ buffer,这时NCQ队列深度=2;

在假设2中,我们要求先执行第二个指令(Tag=5),那么,这个时候就需要NCQ对这两个指令重新排序,如下图红色框显示:

图片

NCQ对这个两个指令重新排序后,就开始执行依次这两个Read FPDMA Queued指令, 指令执行流程见前面介绍的“FPDMA Read Command(60h) Protocol”内容。

上图是执行Tag=5指令的示意图,下图为执行Tag=0指令的示意图:

图片

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SATA系列专题之三:3.3 Transport Layer传输层Flow Control机制解析

一、故事前传 在之前的文章中,已经解析了SATA协议的部分相关内容。较为详细解释请见之前的文章: 1,浅析SATA Physical Layer物理层OOB信号; 2,SATA Link layer链路层解析2.0-2.3; 3,SATA Transport layer链路层解析3.0-3.2;我们这里主要解析Transport layer Flow Contr…

ipv6解析导致 blackbox_exporter 采集http监控项超时问题

排查过程 打开blackbox_exporter后台 http://127.0.0.1:9115/ 找到监控项对应的 Debug Logs点开查看日志: Logs for the probe: ts=2024-11-05T06:38:25.081157873Z caller=main.go:304 module=http_2xx target=http://img.xxx.cn/test.jpg level=info msg="Beginning pr…

SATA系列专题之二《2.2 Link layer链路层加扰/解扰/CRC解析》

文章目录系列文章目录 前言 一、故事前传 二、SATA Link Layer 加扰/解扰解析 二、SATA Link Layer CRC解析 总结 前言 一、故事前传我们之前说到Link layer的结构,link layer的作用大致可以包括以下几点:Frame flow controlCRC的生成与检测对数据与控制字符的Scrmable/Descr…

GBU1016-ASEMI新能源专用整流桥GBU1016

GBU1016-ASEMI新能源专用整流桥GBU1016编辑:ll GBU1016-ASEMI新能源专用整流桥GBU1016 型号:GBU1016 品牌:ASEMI 封装:GBU-4 批号:2024+ 现货:50000+ 最大重复峰值反向电压:1600V 最大正向平均整流电流(Vdss):10A 功率(Pd):中小功率 芯片个数:4 引脚数量:4 安装方式…

Rockylinux9 配置静态IP地址

像往常一样,安装完操作系统后,准备配置网络,直接cd到网络配置文件夹中,发现之前配置的参数文件没有了,只剩下一个readme,神奇,打开看看 大致总结下来就是:主要变化是从 Network-Scripts转为用 Network Manager 和 key 文件,而不是基于 ifcfg 的文件。 在 Rocky Linux …

SATA系列专题之一《1.0 Physical Layer物理层OOB信号》

文章目录前言一、SATA物理层概述二、OOB(Out of Band)信号解析三、实例解析总结前言 一、SATA物理层概述 说OOB之前,首先得了解一下SATA结构以及物理层的含义。 SATA主要包括:应用层(Application Layer), 传输层(Transport Layer),链路层(Link Layer)、物理层(Physical Laye…

易基因:多组学分析揭示围产期IL-6动物模型肾脏发育过程中的DNA甲基化+基因表达调控网络|Cells

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因, 慢性肾脏病(Chronic kidney disease,CKD)是全球发病率和死亡率的主要原因之一。母体肥胖与系统性炎症和促炎细胞因子白细胞介素-6(Interleukin-6,IL-6)水平升高有关。此前研究证明妊娠期间母体 IL-6 增加…

利用射线检测实现光束照射激活功能——2024TapTap聚光灯GameJam(一)

利用射线检测实现光束照射激活功能——2024TapTap聚光灯GameJam记录日期 2024-11-05                          记录时间 13:35 项目完成 2024-10-28                         历经时长 21 天 简介 项目主题:Light 项…

【救急手册】API挂了如何应对...淘宝...京东...1688...诸如此类

电商API在跑任务的路上可能会跌个大跟头。诸如淘宝、京东、1688等可能是它自己的问题(服务器错误),也可能是我们给的指令不对(客户端错误),又或者是网络在作怪。不管是哪种,我们的目标都是一样的:尽快解决问题,恢复正常。今天,我们来聊聊那些在数字世界中默默工作的英…