NVMe协议详解(三)

  • 4.内存数据结构
    • 4.1 SQ与CQ的详细定义
      • 4.1.1 空队列
      • 4.1.2 满队列
      • 4.1.3 队列性质
    • 4.2 仲裁机制
      • 4.2.1 RR
      • 带有优先权的RR
      • 4.2.3 其他仲裁方式
    • 4.3 数据寻址方式(PRP和SGL)
      • 4.3.1 PRP
      • 4.3.2 SGL
      • 4.3.3 比较PRP与SGL

4.内存数据结构

4.1 SQ与CQ的详细定义

这里的SQ与CQ都是循环队列。

4.1.1 空队列

4.1.2 满队列

判断队列满可以有多种方法,协议中规定的是头指针比尾指针大一,所以队列满时,空余一个元素。

4.1.3 队列性质

  1. 队列大小有16bit,最小队列大小为2个元素(因为满队列的定义方式,所以最小为2个元素),对于I/O队列,最大队列大小为64k;对于Admin队列,最大队列为4k;
  2. QID来标识唯一ID,16bit,由host分配;
  3. host可以修改队列优先级(如果支持的话),共四级,U、H、M、L;

4.2 仲裁机制

4.2.1 RR

RR仲裁,Admin SQ与I/O SQ优先级相同,控制器每次可以选择一个队列中的多个命令(Arbitration Burst setting)。

带有优先权的RR

有3个严格的优先权,Priority1 > Priority2 > Priority3,在这三个优先级队列中,高优先级的队列中如果有命令,则优先执行(非抢占式)。

4.2.3 其他仲裁方式

Vendor Specific。

4.3 数据寻址方式(PRP和SGL)

4.3.1 PRP

NVMe把Host的内存分为页的集合,页的大小在CC寄存器中配置,PRP是一个64位的内存物理地址指针,结构如下:
最后两位为0,指四字节对齐;(n:2)位表示页内内偏移。
举个例子,内存页大小位4KB,则(11:2)表示页内偏移。
PRP寻址有两种方式,直接用PRP指针寻址,通过PRP List寻址。当使用PRP List寻址时,偏移必须为0h,每一个PRP条目表示一个内存页,如下:
Admin命令的数据地址只能采取PRP的方式,I/O命令的数据地址既可以采取PRP的方式,又可以采取SGL的方式。Host在命令中会告诉Controller采用何种方式。具体来说,如果命令当中DW0[15:14]是0,就是PRP的方式,否则就是SGL的方式。
命令的Dword6~Dword9只定义了PRP1、PRP2两个数据指针,通过PRP条目可以指向PRP List。如下图:

在上面的例子中,PRP1直接指向内存页,PRP2指向PRP List存在的地址,在PRP List中存有数据的真正的地址。

4.3.2 SGL

SGL是另外一种索引内存的数据结构。SGL由若干个SGL段组成,SGL段又由若干个SGL描述符组成,所以SGL描述符是SGL数据结构的基本单位。
目前定义的SGL描述符有6种:

  1. SGL 数据描述符,用来索引数据块地址,host内存;
  2. SGL 垃圾数据描述符,用来索引无用数据;
  3. SGL 段描述符,用来索引下一个SGL段;
  4. SGL 最后一个段描述符,用来索引最后一个SGL段;
  5. keyed SGL 数据描述符;
  6. Transport SGL 数据描述符;

在上面SGL例子中,共有3个SGL段,用到了4种SGL描述符。Host需要往SSD中读取13KB的数据,其中真正只需要11KB数据,这11KB的数据需要放到3个大小不同的内存中,分别是:3KB,4KB和4KB。

4.3.3 比较PRP与SGL

无论是PRP还是SGL,本质都是描述内存中的一段数据空间,这段数据空间在物理上可能连续的,也可能是不连续的。Host在命令中设置好PRP或者SGL,告诉Controller数据源在内存的什么位置,或者从闪存上读取的数据应该放到内存的什么位置。

SGL和PRP本质的区别在于,一段数据空间,对PRP来说,它只能映射到一个个物理页,而对SGL来说,它可以映射到任意大小的连续物理空间,具有更大的灵活性,也能够描述更大的数据空间。如下图:

NVME协议解读(三)相关推荐

  1. NVME协议解读(四)

    NVMe详解(四) 5. NVMe协议定义的命令 5.0 命令执行过程 5.1 命令分类 5.2 命令通用格式 5.3Admin 指令 5.4 NVM指令 6 控制器结构 6.1 命令执行过程 6.2 ...

  2. 【AHB协议解读 三】传输(Transfers)

    3.1 基本传输 AHBlite传输包含两个阶段: Address:持续一个HCLK,除非之前的传输未完成而延长 Data:可能需要几个HCLK,通过HREADY信号来控制整个完成周期持续的HCLK个 ...

  3. NVME协议解读(一)

    NVMe是什么:NVMe是一种Host与SSD之间通讯的协议,它在协议栈中隶属高层. NVMe制定了Host与SSD之间通讯的命令,以及命令如何执行的. NVMe有两种命令,一种叫Admin Comm ...

  4. MPHY协议解读三:8b10b编码

    目录 整体概述 8b10b编码优劣势 8b10b实现原理 8b10b符号和术语 3b4b/5b6b编码 RD MPHY实现相关点 整体概述 8b10b编码思维导图如下: 本章节主要分析MPHY协议中使 ...

  5. NVMe协议详解(三)

    NVMe协议详解(三) 4.内存数据结构 4.1 SQ与CQ的详细定义 4.1.1 空队列 4.1.2 满队列 4.1.3 队列性质 4.2 仲裁机制 4.2.1 RR 带有优先权的RR 4.2.3 ...

  6. 回望云计算发展 重新解读三种云服务

    本文讲的是回望云计算发展 重新解读三种云服务,云计算在非常短的时间里迅速兴起,并在个人和企业用户使用和运营计算的模式上发生了重要的演变.从概念上来说,云计算可以被视为在由虚拟化技术(虽然云计算并不总是 ...

  7. 群联固态硬盘修复工具_固态硬盘掉速修复小教程,SATA和NVMe协议通用

    不做云评测,只聊真体验,大家好,我是肉包爸爸. 近日,被我拿来做高速移动硬盘的一块海力士PC401 1T固态硬盘出现严重掉速,格式化后故障依旧. 由于硬盘盒接口为USB3.1 Gen2,所以理论速度被 ...

  8. NVMe 协议详解(一)

    NVMe 协议详解 1. 综述 1.1名词解释 1.1.1 Namespace 1.1.2 Fused Operations 1.1.3 指令执行顺序 1.1.4 写单元的原子性 1.1.5 元数据 ...

  9. CANopen协议解读

    CANopen协议解读 一.协议标准 二.CANopen报文说明 三.CANopen协议内容 1. ID的理解 2. NMT (1) 节点状态 (2) 节点状态控制 (3) 节点心跳报文 一.协议标准 ...

最新文章

  1. linux系统一直循环登录界面,Ubuntu 14.04解决登录界面无限循环的方法
  2. 一本教我们如何避免糟糕设计的书
  3. 三层交换网络的各层职责
  4. PE文件格式和ELF文件格式(上)----PE文件
  5. JS实现的展开隐藏效果
  6. linux系统写一个脚本,编写一个简单的linuxshell脚本
  7. css悬停动画,animate.css:悬停脚本上的动画
  8. UUID 查看linux的UUID 与 SVN 工程的 UUID。(两者之间没有联系)
  9. ZED2 ROS下bag包的录制与回放数据
  10. 19. Element id 属性
  11. django系统发送邮件到用户邮箱,完成验证
  12. 开启docker远程访问
  13. (二)PositionRank: An Unsupervised Approach to Keyphrase Extractionfrom Scholarly Documents解读一
  14. 磁盘管理压缩卷显示服务器异常,Win7分配盘符提示“磁盘管理控制台不是最新状态”错误怎么办...
  15. 原生javascript-图片爆炸的效果
  16. 贴片电阻封装经验选择学习研究总结
  17. python程序控制结构实验报告_20193227 实验二《Python程序设计》实验报告
  18. 使用ZED相机识别颜色醒目的水壶并计算与相机的距离
  19. 关于Compartor接口中compare方法的升序,降序
  20. Win11正式版具体安装教程

热门文章

  1. 计算机无法用630打印机,lq630打印机怎么恢复出厂设置 lq630打印机恢复出厂设置的步骤教程...
  2. python天天向上和天天向下代码解析_天天向上的力量python(举一反三)
  3. 优秀的 OKR 案例参考
  4. 树莓派集成Hx711称重传感器demo
  5. 趁着课余时间学点Python(六)终止循环,阻断循环
  6. 验证码有什么用?语音验证可以替代短信验证吗?
  7. Global Illumination_Directional Volumetric Light (定向体积光)
  8. 免费文字转语音软件哪个好?推荐这三款文字转语音软件给你
  9. 华为交换机记录日志_从S5700交换机获取日志文件
  10. SpingBoot加解密项目spring-boot-starter-encrypt操作