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. 论文阅读笔记(二十三)【ECCV2018】:Robust Anchor Embedding for Unsupervised Video Person Re-Identification in the Wild

    Introduction 当前主要的非监督方法都采用相同的训练数据集,这些数据集在不同摄像头中是对称的,即不存在单个行人的错误项,这些方法将在实际场景中效果下降.在本方法中,作者引入了非对称数据,如下 ...

  2. 大二网课ing学习周记

    行稳致远,久久为功! 一个概念套着一个概念哦!码就是关键字,标识属性是也! 1.什么是主码和外码,请举例说明. 关键字也叫码! 首先,在一个关系中,能惟一标识元组的属性or最小属性集称为关系的候选码. ...

  3. set()和get()方法

    在很多程序中,都喜欢定义一个privata变量,然后为这个私有变量加上get(),set()方法.那为什么不直接定义一个public变量呢?这样做到底有什么好处和意义呢?难道真的仅仅只是为了代码规范? ...

  4. ClrFromCSharp_2_2_生成部署打包应用程序

    1,在\reps\CSharpFromCSarp\CSharpFromCSarp_2_2,建立新解决方案和解决项目 并且输入以下代码 namespace ClrFromCSharp_2_2 { cla ...

  5. C#最基本的Socket编程

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息,是一个简单示例,也是一个最基本的socket编程流程. 简单步骤说明: 1.用指定的port, ip 建 ...

  6. 2、Hdfs架构设计与原理分析

    文章目录 1.Hadoop架构 2.HDFS体系架构 2.1NameNode 2.1.1元数据信息 2.1.2NameNode文件操作 2.1.3NameNode副本 2.1.4NameNode心跳机 ...

  7. 剑指offer-面试题14-剪绳子-贪婪算法

    /* 题目: 给定一个长度为n的绳子,把绳子剪为m段,(n>1,m>1) 求各段绳子乘积的最大值. */ /* 思路: 贪婪算法. 当绳子的长度大于5时,尽可能多的剪长度为3的绳子:当剩下 ...

  8. BugkuCTF flag.php(反序列化)

    进去后是个登录页面,但是login根本不会跳转,看源码也没提示,但是这道题给了一个提示:hint,那么盲猜应该是一个get参数,因为post不能跳转,那么get总有内容吧,跟上hint参数,随便赋一个 ...

  9. 08-SV面向对象编程的高级技巧指南

    1.原始类与扩展类 (1)原始类被称为父类或者超类,扩展类被称为派生类或者子类.扩展类可以直接访问原始类和其本身的所有变量,应该将原始类中的子程序定义成虚拟的,这样它们就可以在扩展类中重定义.new函 ...

  10. elasticsearch 5.5 query 过程 源码分析

    (1)请求 transfer to  任意node 节点 标记为coordinate node server入口函数 transportSearchAction doExecute方法 coordin ...