3 命令

Fabrics命令用于创建队列和初始化controller。Fabrics命令的Opcode字段填写0x7F。无论controller是否处于使能状态(CC.EN)Fabrics命令都会被处理。Fabrics命令capsule在第2.1章节中定义,Fabrics应答capsule和状态在第2.2章节中定义。

3.1 认证接收命令和应答

Authentication Receive命令传输状态和一个或多个前边提交到controller的Authentication Send命令的数据结果。

Authentication Receive命令与前边Authentication Send命令之间的关联关系依赖于安全协议。传输数据的格式依赖于安全协议。安全协议详情请参考SPC-4。

Authentication Receive命令返回符合安全协议规则定义的Authentication Send命令的恰当数据。如果controller和主机之间出现通信丢失,或发生了Controller Level Reset,Authentication Receive命令数据不能保留。

3.2 认证发送命令和应答

Authentication Send命令用于传输安全协议数据到controller。传输的数据结构作为命令的一部分包括controller要执行的特定于安全协议的命令。数据结构可能包含与安全协议特定命令相关的数据或参数。对于Authentication Send命令提交的安全协议特定命令返回给主机的状态和数据,由Authentication Receive命令取回。

Authentication Send命令与随后Authentication Receive命令直接的关联依赖于在SPC-4中定义的Security Protocol字段。

3.3 连接命令和应答

Connect命令用于创建SQ和CQ队列对。如果Admin队列被指定,那么Connect命令建立一个主机和controller之间的关联关系。SQE(Submission Queue Entry)各字段的定义请参见Figure 19,数据部分的字段定义请参见Figure 20。

使用单个Host NQN的主机可以利用多个Host Identifier指派为彼此独立的(例如,主机的物理或逻辑划分)主机个体来访问一个NVM subsystem。或者选择另一种方式,一个主机可以使用多个Host NQN值被NVM subsystem作为独立的主机来对待。

NVM subsystem不能在0xFFF0~0xFFFF范围内申请Controller ID来作为Connect命令completion的有效Controller ID。如果NVM subsystem中的任何controller都不允许与这个主机建立关联,那么返回Connect Invalid Host。

如果NVM subsystem支持动态controller模式,那么:

  • 对Admin队列在Connect命令中必须指定0xFFFF作为Controller ID,否则返回Invalid Field in Command状态值;
  • NVM subsystem必须向主机返回一个可用的controller,在Connect应答中标明申请到的Controller ID。

如果NVM subsystem支持静态controller模式,那么:

  • 对于Admin队列,主机可以在Connect命令中请求一个指定的controller。如果主机不允许与指定的这个controller建立关联,那么返回Connect Invalid Host状态;
  • 在Admin队列上值为0xFFFE的Controller ID表示可以给申请任意的Controller ID,申请到的Controller ID在Connect应答中返回;
  • 对于Admin队列,如果主机指定Controller ID值为0xFFFF,那么返回Connect Invalid Parameters状态值。

NVM subsystem可以为特定的主机申请特定的controller。如果主机请求的controller不是为这个主机申请的,那么返回Connect Invalid Host状态值。

在与controller的I/O队列建立连接之前,主机必须与一个controller建立起关联并且使能controller。如果在controller被使能之前,主机发送Connect命令为I/O队列指定一个Queue ID,那么返回Connect Invalid Parameters状态值。如果主机发送Connect命令中为Admin队列或I/O队列指定的Queue ID已经被创建,那么返回Command Sequence Error状态值。

如果Host Identifier,Host NQN,NVM Subsystem NQN,Controller ID为I/O队列指定,但与主机和controller之间已经建立关联中那个Admin队列指定的值不相同,那么返回Connect Invalid Parameters状态值。如果Host NQN或NVM Subsystem NQN值与NVM subsystem所配置的值不匹配,那么返回Connect Invalid Parameters状态值。如果Host NQN或NVM Subsystem NQN值(NQN值的格式参考NVMe基础规格说明书第7.9章节)有语法错误,那么返回Connect Invalid Parameters状态值。如果Host Identifier为0,那么返回Connect Invalid Parameters状态值。

Connect应答为Connect命令提供状态。如果连接已经被建立,那么为主机申请到的Controller ID被返回。Connect应答格式定义请参见Figure 21。

对于一个失败的Connect命令,controller不得:

  • 返回Invalid Field in Command状态值;
  • 向Error Infomation Log中添加条目。

3.4 Property Get命令和应答

Property Get命令用于主机获得指定的property值。Property Get命令各字段的定义在Figure 23中。如果指定了一个无效的property或无效的偏移量,那么应该返回Invalid Field in Command状态值。

Property Get应答用于返回给主机那个请求的property值。Property Get应答格式在Figure 24中定义。

3.5 Property Set命令和应答

Property Set命令用于设置一个property值。Property Set命令各字段的定义在Figure 25中。如果指定了一个无效的property或无效的偏移量,那么应该返回Invalid Field in Command状态值。

Property Set应答为Property Set命令提供状态。Property Set应答在Figure 26中定义。

3.5.1 Property定义

一个property占controller属性的四个字节或八个字节。属性可以读、写、或读/写访问。主机访问property时必须从起始位置加偏移量用原生宽度来访问。【就是说访问时从开始位置加偏移量找到这个property,然后根据具体property的长度一次访问四个字节或八个字节】。所有保留的property或property中保留的某些bit位都是只读的,读取时返回0。Property们也许可以用Property Get命令读,也许可以用Property Set命令写。

property地址范围从0到0xFFF,是对等于NVMe over PCIe中定义的寄存器功能而保留的。从0x1000到0x12FF的property地址范围是被NVMe over Fabrics保留的定义内容。为NVMe over PCIe定义的门铃寄存器在NVMe over Fabrics中是不支持的。

Figure 27指定的这些property是被NVMe over Fabrics支持的。

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令的更多相关文章

  1. 《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(1)

    1 引言(入门介绍) NVMe版本1.2.1和之前的版本为主机软件与非易失存储系统通过PCIe通信定义了寄存器级接口.本规格说明书定义了对NVMe的扩展,启用通过其他网络互联上的操作(NVMe ove ...

  2. 《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(4)-- Controller Architecture

    4 Controller架构 NVMe over Fabrics使用与NVMe基础规格说明书中定义相同的controller架构.这包括主机和controller之间使用SQ提交队列和CQ完成队列来执 ...

  3. 2018.07.23 codeforces 438D. The Child and Sequence(线段树)

    传送门 线段树维护区间取模,单点修改,区间求和. 这题老套路了,对一个数来说,每次取模至少让它减少一半,这样每次单点修改对时间复杂度的贡献就是一个log" role="presen ...

  4. 2018.07.23 洛谷P4097 [HEOI2013]Segment(李超线段树)

    传送门 给出一个二维平面,给出若干根线段,求出x" role="presentation" style="position: relative;"&g ...

  5. 2018.07.23[PA2015]Siano(线段树)

    [PA2015]Siano 描述 Description 农夫Byteasar买了一片n亩的土地,他要在这上面种草. 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘 ...

  6. 2018.07.23 hdu5828 Rikka with Sequence(线段树)

    传送门 这道题维护区间加,区间开根,区间求和. 线段树常规操作. 首先回忆两道简单得多的线段树. 第一个:区间覆盖,区间加,区间求和. 第二个:区间开根,区间求和. 这两个是名副其实的常规操作. 但这 ...

  7. 2018.07.23 洛谷P4513 小白逛公园(线段树)

    传送门 线段树常规操作了解一下. 单点修改维护区间最大连续和. 对于一个区间,维护区间从左端点开始的连续最大和,从右端点开始的连续最大和,整个区间最大和,区间和. 代码如下: #include< ...

  8. NVMe over Fabrics 协议Discovery服务交互过程跟踪

    Discovery服务过程跟踪 对于NVMe over Fabrics的subsystem,有两种类型:Discovery子系统和NVM子系统.这里介绍与Discovery子系统相关的交互内容(即:在 ...

  9. NVMe over Fabrics:概念、应用和实现

    对于大部分人来说,NVMe over Fabrics(简称NVMf)还是个新东西,因为其第一个正式版本的协议在今年6月份才发布.但是这并不影响人们对NVMf的关注,因为这项依托于NVMe的技术很可能继 ...

随机推荐

  1. hydra-爆破工具的使用

    0x01简介 hydra 是一个支持众多协议的爆破工具,在kali上集成,但也可以在windows上下载运行: github上的源码: https://github.com/vanhauser-thc ...

  2. 安装Nginx到Linux(源码)

    运行环境 系统版本:无 软件版本:无 硬件要求:无 安装过程 NGINX官方提供源码包的下载,NGINX有两个版本Mainline(主线)版和Stable(稳定)版.主线版本我们可以理解为是开发版本, ...

  3. 硬件知识整理part1--电阻E系列行业规范

      仁者,人心也,义者,人路也. --孟子 “ E ”表示“指数间距”(Exponential Spacing) 在上个20世纪的电子管时代,电子元器件厂商为了便于元件规格的管理和选用.大规模生产的电 ...

  4. MySql优化之主从复制

    第一步: 配置节点信息(配置完毕重启mysql) 找到my.cnf配置文件,这个文件在etc目录下使用命令修改my.cnf文件 vi /etc/my.cnf 主节点配置: server-id =55 ...

  5. 【Git】git使用 - rebase的使用

    官方参考指南: Pro Git Book v2, § rebasing. English Pro Git Book v2, § rebase:衍合. 中文版 (建议还是看一下英文原版,就当熟练英语.) ...

  6. atcoder Keyence Programming Contest 2020 题解

    比赛地址 A 题意:给一个\(n*m\)的初始为白色的矩阵,一次操作可以将一行或一列染成 黑色,问至少染出\(k\)个黑点的最少操作次数. \(n\),\(m\)<=100,\(k\)<= ...

  7. C#加密与解密(DES\RSA)学习笔记

    本笔记摘抄自:https://www.cnblogs.com/skylaugh/archive/2011/07/12/2103572.html,记录一下学习过程以备后续查用. 数据加密技术是网络中最基 ...

  8. [JAVA] 面向对象小小总结

    面向对象概述 符合人类思维习惯的编程思想 , 生活中存在着不同形态的事物 , 这些事物存在着不同的联系 , 在程序中使用对象来映射现实中事物 , 使用对象关系来描述事物之间的联系, 这种思想就是面向对 ...

  9. TCP 与 UDP 浅谈

    TCP与UDP区别总结:1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失,不重 ...

  10. gulp常用插件之gulp-rev-collector使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-rev-collector这是一款根据gulp-rev生成的manifest.json文件中的映射, 去替换文件名称, 也可以替换路径. ...