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. 【macOS使用技巧】使用空格键快速预览文件内容

    Quickview 是mac系统上一个强大的预览功能, 可以预览 mp4 mov等音频文件, 当然图片.文本.也都可以进行预览. 在系统中如果你希望快速浏览一下文件而不想打开的文件的话只要选择文件然后 ...

  2. Notes writer Pro

    Notes writer Pro pen钢笔和Pencil铅笔发现没啥区别 笔记软件使用说明书: https://www.lanzous.com/i777i3c

  3. GCD相关

    板子: ? gcd(b, a % b) : a; } POJ1930 题意:给你一个无限循环小数,给到小数点后 9 位,要求这个数的分数形式. 解法: 要想解决这道题,首先应该了解如何将循环小数化为分 ...

  4. RocketMQ幂等性问题

    什么是幂等性: 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同. 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消费并未对业务系 ...

  5. 图片上传的进度条-jquery

    <div style="padding: 10px;"> <div class="progress-bar" style="disp ...

  6. Wannafly Winter Camp 2020 Day 7D 方阵的行列式 - 数学

    于是去弄了个板子来 #include <bits/stdc++.h> using namespace std; #define int long long const int mod = ...

  7. Wannafly Winter Camp 2020 Day 6A Convolution - NTT

    求 \(\sum_{i=1}^n \sum_{j=1}^n 2^{a_ia_j}\) Solution 化简一下 \[ 2^{a_ia_j} = p^{(a_i+a_j)^2-a_i^2-a_j^2} ...

  8. Net Core使用Lucene.Net和盘古分词器 实现全文检索

    Lucene.net Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎, ...

  9. Redis 数据类型及操作

    前言 作为Key-value型数据库,Redis也提供了键(Key)和键值(Value)的映射关系.但是,除了常规的数值或字符串,Redis的键值还可以是以下形式之一: Lists (可重复列表) S ...

  10. Flink架构,源码及debug

    序 工作中用Flink做批量和流式处理有段时间了,感觉只看Flink文档是对Flink ProgramRuntime的细节描述不是很多, 程序员还是看代码最简单和有效.所以想写点东西,记录一下,如果能 ...