FC-NVMe阅读摘要(一)
首字母缩写
IU Information Unit
BLS Basic Link Service
ELS Extended Link Service
PLOGI N_Port Login
PRLI Process Login
FLOGI Fabric Login
P_BSY N_Port Busy
LS_ACC Link Service Accept reply frame
LS_RJT Link Service Reject reply frame
定义
Data Series
数据序列。它是构成一个特定命令全部数据传输的NVMe数据信息单元们的集。【注:对应NVMe over Fabrics的SGL数据,这些IU中的数据们称为数据序列】
FLOGI
Fabric Login,扩展的链路服务。
LBA data
从NVMe设备上读或向NVMe设备上写的数据。【注:逻辑块地址数据】
metadata
关于特定LBA数据的上下文的信息。【元数据】
概况
结构与概念
FC是逻辑上的一个点对点串行数据通道。
支持NVMe over FC传输能力的Nx_Ports统称为NVMe_Ports。
FC-2层是一个交付服务,包含信息分组和定义的服务类。

NVMe over FC端口
作为NVM subsystem Port ID,是特定于NVM subsystem的,由NVM subsystem分配。如果多个NVM subsystem使用同一个端口,那么在多个NVM subsystem中使用的这同一个端口的NVM subsystem Port ID可能相同也可能不同。
NVMe over FC连接
NVMe over FC连接是对NVMe controller上抽象的一个SQ和CQ,这NVMe over FC连接可以是Admin队列也可以是一个I/O队列。
NVMe管理队列是在创建关联NVMe_LS请求时同时创建的。创建关联NVMe_LS请求指定了Admin提交队列的大小,也是Amin完成队列的大小。
NVMe的I/O队列也是由NVMe over Fabrics Connect命令创建。
First burst
在NVMe_XFER_RDY IU之前不能接收和处理NVMe_DATA IU。
按顺序交付和行为
4.7.1 概况
NVMe_Ports和Fabrics必须提供在一个Exchange中按顺序交付帧。
一些从initiator发的NVMe命令要求按顺序处理(例如fused操作)。为了容许这些命令按发送的顺序被处理,使用了Command Sequence Number。
对于NVMe应答,所有NVMe_ERSP信息单元应答被要求按它们发送的顺序来处理。为了容许NVMe_ERSP信息单元按顺序处理,也是用了Command Sequence Number。
没有顺序要求的NVMe应答信息单元,必须收到后尽快处理。对于应答,CQE必须按照第4.8.2章节中指定的那样生成。
4.7.2 命令序号(CSN)
命令序号是一个4字节无符号整数,从0开始,并且必须按照每个命令递增1。每个NVMe连接维护一个独立的递增计数器。计数达到最大表示值后绕回到0。以下是CSN的使用和判断规则:
a)CSN必须对每个NVMe连接的第一个NVMe命令信息单元从0开始计数,并按1递增;
b)CSN增长到最大数后绕回到0;
c)initiator的NVMe_Port不能在第一个命令提交完成前再使用相同的CSN发送:包括NVMe_XFER_RDY信息单元、NVMe_DATA信息单元的第一个数据帧、NVMe_RSP/NVMe_ERSP信息单元、ABTS。
d)target NVMe_Port必须使用CSN排序命令。
4.7.3 应答序号
4.11 数据传输
4.11.1 概况
NVMe over Fabrics指定了两种数据传输类型:
a)in-capsule数据
b)SGL数据
In-capsule数据是指数据传输在capsule里边。SGL数据时内存范围列表指定的数据。所有这两种数据传输对于NVMe over FC来说都必须转换成数据序列【Data Series】传输。为了在NVMe over FC上对应NVMe over Fabrics数据传输,指定了如下三种传输规则:
a)in-capsule数据;
b)关于写的SGL数据;
c)关于读的SGL数据。
4.11.2 in-capsule数据
in-capsule数据在数据序列中传输。对于数据和元数据,capsule包含指向数据序列偏移位置的指针。指针格式在NVMe中指定的。
3.11.3 SGL数据
4.11.3.1 概况
NVMe over Fabrics定义了在Fabric上传输SGL的机制,FC不能在Fabric上发送SGL(例如,需要RDMA机制支持),因此SGL必须转换成Data Series中的数据在FC网络上发送。
4.11.3.2 SGL映射
NVMe SGL是一个内存范围列表一边接收NVMe controller把它们聚集起来,为了能通过NVMe over FC传输:
a)写时,SGL指针指向的数据必须重新放置到Data Series中;
b)读时,必须让NVMe controller把数据重新放入Data Series中;
c)对于既读又写的情况,SQE中的SGL数据字段必须被重新放置。

4.11.3.3 SGL entry格式
为了在SQE中传输SGL,应该:
a)SGL Descriptor Type字段必须设置为0;
b)SGL Descriptor SubType字段必须设置为0;
c)SGL Data Blocak描述符的Address字段必须设置为0;
d)SGL Data Block描述的Length字段必须包含Data Series中数据的长度。
4.12 NVMe over FC功能的Discovery
一些NVMe over FC功能要求target端NVMe_Port和initiator端NVMe_Port达成共识写上一致的使用。下边Table 2提供了每个NVMe over FC功能的Discovery处理参考。

4.13 NVMe over FC的应用以及FC-FS-5和FC-LS-3行为
附录 C NVMe over FC初始化和设备发现
C.1 NVMe over FC设备发现步骤
C.1.1 发起端。。
以下步骤可以被发起端NVMe_Port用于发现交换网络拓扑中的NVMe over FC设备。
依赖于特定配置和管理需求,除了步骤1到3,其他任何步骤可以被省略或可以被本标准之外的动作执行。
1)执行Fabric Login;
2)使用Name Server登陆;
3)在Name Server上注册信息:
a)FC-4 类型对象(参见第7.2章节);
b)FC-4特性对象(参见第7.3章节)。
4)向Fabric Controller注册State Change Notification(参见FC-LS-3)
5)向Name Server下发一个GID_FF查询,含带Domain_ID Scope和Area_ID Scope字段设置成0,FC-4 Feature Bits字段设置为0x04(即:支持Discovery Service),Type code字段设置为0x28(即:NVMe over FC)。这个查询获得一个支持NVMe over FC设备的Port ID列表,以及Discovery Service。
6)对于GID_FF在接受CT_IU中返回的支持Type 0x28和FC-4 Feature Bits为0x04所有N_Port ID的每个Port ID:
i)NVMe层启动一个与NVMe Discovery Service的会话:
1)发起端NVMe_Port确保有一个与FC target NVMe_Port的login。注意:如果initiator端NVMe_Port和target端NVMe_Port之间已经有了一个活动的login,那么一下步骤可以跳过:
i)发送PLOGI;
ii)发送PRLI,Type字段设置为0x28。
2)FC-NVMe层创建一个关联并初始化Admin Queue连接:
i)发送Create Association NVMe_LS到Discovery Service子系统。
3)NVMe层通过新创建的传输层Admin Queue连接下发NVMe Connect命令。Connect命令用于创建Admin Queue。
i)Connect命令作为写操作类型。
4)NVMe层可以通过Admin Queue连接请求更多的NVMe或Fabric命令去处理。其他命令可以是执行NVMe Fabrics认证或获取/设置属性配置新创建的NVMe controller。
i)命令为无数据,读或写操作类。
5)这个NVMe Discovery Service无IO队列被创建。
6)NVMe层下发Get Log Page命令,Log Id设置为0x70,从Discovery Service读取Discovery Log Entries。
i)命令为读操作类。
7)NVMe层确定不需要再与Discovery Service进一步交互就可以使用FC-NVMe终止服务。
i)发送NVMe_Disconnect LS到Discovery Service。在LS参数里表明终止关联。
ii)FC-NVMe target接收LS并生成LS应答。
iii)传输层关联和所有相关连接被终止。
iv)如果这是initiator NVMe_Port与target NVMe_Port之间仅有的最后一个关联,login可能被终止。
1)发送LOGO到FC-NVMe target。
7)向Name Server下发一个GID_FF查询,含带Domain_ID Scope和Area_ID Scope字段设置成0,FC-4 Feature Bits字段设置为0x01(即:支持的NVMe over FC target功能),Type code字段设置为0x28(即:NVMe over FC)。这个查询获得一个支持NVMe over FC协议设备的Port ID列表,以及支持的NVMe over Fabrics Target Port Function;
8)操作期间,如果NVMe层选择与一个在Discovery Log记录中认定的某个NVMe存储子系统通信,NVMe层使用FC-NVMe层与NVMe subsystem建立会话;
i)
9)
FC-NVMe阅读摘要(一)的更多相关文章
- OpenCV学习笔记(六十二)——《OpenCV Computer Version with Python》阅读摘要
如今python火啊.每次OpenCV自带的ml模块都让我直呼坑爹,索性准备用python来做OpenCV后期的机器学习算法的处理.于是赶紧拿起这本书读读. 适合OpenCV和python都有一定基础 ...
- 《高性能javascript》阅读摘要
最近在阅读这本Nicholas C.Zakas(javascript高级程序设计作者)写的最佳实践.性能优化类的书.记录下主要知识. 加载和执行 脚本位置 放在<head>中的javasc ...
- android.app.Activity阅读摘要,有时候会不会需要保持一些现场数据呢? 想让系统帮你退出到后台或者挂掉前做些前置保持工作吗,重点参考吧:
* * @param savedInstanceState If the activity is being re-initialized after * previously being shut ...
- Inside the c++ object module 阅读摘要
这本书是 Stanley B. Lippman于1996年所写,而最早的c++标准是 ISO/IEC 14882:1998[18],即C++98. Chapter 1: Object Lessons ...
- 项目管理知识体系指南(PMBOOK指南)(第5版) 阅读摘要
1.7.2 项目经理的人际技能 领导力: 团队建设: 激励: 沟通: 影响力: 决策能力: 政治和文化意识: 谈判: 建立信任: 冲突管理: 教练技术: 3.4 规划过程组 在制定项目管理计划和项目文 ...
- mongodb地理空间索引原理阅读摘要
http://www.cnblogs.com/taoweiji/p/3710495.html 具体原理在上面 简单概述,(x,y)经纬度坐标,通过geohash的方式,通过N次方块四分割生成一个坐标码 ...
- IO-同步,异步,阻塞,非阻塞,阅读摘要
http://www.cnblogs.com/Fly-Wind/p/io.html http://blog.csdn.net/historyasamirror/article/details/5778 ...
- 猿取向的规划设计模式 ——GoF《设计模式》阅读摘要(零)
这个话题是很奇怪,设计模式是引导程序的设计不是模仿什么软件?呃.我的意思是,这是 面"对象"相对的设计模式. 我曾见过有人写<给妻子解释设计模式>,这样的把计算机中的思 ...
- Python Tips阅读摘要
发现了一本关于Python精通知识点的好书<Python Tips>,关于Python的进阶的技巧.摘录一些比较有价值的内容作为分享. *args and **kwargs 在函数定义的时 ...
随机推荐
- Java第一次代码作业汇总
练习题1:(完数问题) 求100以内的所有完数.(完数:它所有因子之和等于其本身) 方法一: /* 解体思路:1.先找出每个数的所有因子 2.比较因子之和是否与其数本身相等 */ public c ...
- Linux内存管理解析(二) : 关于Linux内存管理的大体框架
什么是内存管理 ? 首先内存管理管理的主要对象是虚拟内存,但是虚拟内存对应的映射主要为物理内存,其次也可能通过交换空间把虚拟内存与硬盘映射起来,既然如此,那我们先了解物理内存的管理. 对于物理内存而言 ...
- 什么是AOP面向切面编程思想
一.什么是AOP? 1.AOP不是一种语言,是一种编程范式 常见的编程范式: 面向过程.面向对象.函数式编程.事件驱动编程等 2.AOP可以解决特定问题,不能解决所有问题. 3.是面向对象的补充,不是 ...
- TCP/IP详解阅读记录----第一章 概述
1.TCP/IP协议族中不同层次的协议 2.五类互联网地址 3.各类IP地址范围 4.数据进入协议栈时的封装过程 5.以太网数据帧的分用过程
- 使用CSV Data Set Config配置原件,参数化数据
对接口数据的参数化方式大概有三种方式,1:jmeter内置函数:2:借助CSV Data Set Config配置原件:3:jdbc连接数据库,使用数据表字段 此处主要讲第二种:借助CSV Data ...
- zerotier的下载、安装、配置与使用(win10、ubuntu)
一.需求描述 2020年,由于“野味肺炎”的影响,笔者要开始在家办公,需要远程连接公司的电脑和设备. 但是公司的网络和家里的网络不是同个局域网,不能直接用微软的远程桌面连接.想挂上公司的vpn,但是又 ...
- JAVA中级开发应该掌握的小知识点
一.悲观锁.乐观锁的区别: 悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行,只有一个线程可以执行,其他线程在入口处等待,直到锁被释放.乐观锁:一段执行逻辑加上乐观锁,不同线程同时执行,可以同时进入执 ...
- 50元求解pyqt加载并显示pdf问题
50块钱求解决pyqt5加载pdf文档并显示,类似briss软件的效果
- jQuery---on注册事件的2种方式
on注册事件的2种方式 on注册事件的语法 on注册简单事件 // 这个是p自己注册的事件(简单事件) $("p").on("click", function ...
- docker常见操作总结
一.原理 1.Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,它能直接访问物理设备,会给每一台虚拟机分配内存.CPU.网络.磁盘等资 ...