NVMe介绍

NVMe介绍

  • 1 概述
  • 2 操作原理
    • 2.1 Queue基本原理
    • 2.2 Admin与I/O Queue
    • 2.3 Submission与Completion Queue
    • 2.4 Submission与Completion Queue对应关系
  • 3 多路径I/O和命名空间共享
    • 3.1 1Port+1Controller
    • 3.2 1Port+2Controller
    • 3.3 2Port+2Controller
    • 3.4 SR-IOV

本文属于《 NVMe协议基础系列教程》之一,欢迎查看其它文章。

1 概述

NVM Express (NVMe)是一个寄存器级接口,用来实现主机软件与非易失性存储器子系统通信。该接口针对企业和客户端固态驱动器进行了优化,通常附加到PCI Express接口。该接口的目标是在客户端和企业系统中使用。
此外,该规范还定义了一个用于NVM子系统的标准命令集

2 操作原理

NVM Express是一种可扩展的主机控制器接口,旨在满足利用基于PCI Express的固态驱动器的企业和客户端系统的需求。
该接口提供了优化的命令提交和完成路径。它支持多达65,535个I/O队列,每个l/O队列最多可执行64K个未完成命令,从而支持并行操作。此外,还增加了对许多Enterprise功能的支持,例如端到端数据保护(与T10 DIF和SNIA DIX标准兼容)、增强的错误报告和虚拟化。

该接口具有以下关键属性:

  • 不需要在命令提交或完成路径中,读取不可缓存或MMIO寄存器。
  • 在命令提交路径中,最多需要一个MMIO寄存器写入。
  • 支持多达65535个I/O队列,每个I/O队列最多支持64K未完成命令。
  • 优先级与每个I/O队列相关联,具有良好定义的仲裁机制。
  • 完成4KB读请求的所有信息都包含在64B命令本身中,从而确保高效的小I/O操作。
  • 高效和精简的命令集。
  • 支持MSI/MSI- x和中断聚合。
  • 支持多个命名空间。
  • 有效支持I/O虚拟化架构,如SR-IOV。
  • 健壮的错误报告和管理能力。
  • 支持多路径I/O和命名空间共享。

本规范定义了一组精简的寄存器,其功能包括:

  • 控制器capabilities指示
  • 控制器故障Status(命令状态直接通过CQ处理)
  • Admin Queue配置(I/O Queue配置通过Admin commands处理)
  • Doorbell寄存器,可扩展提交队列和完成队列的数量

NVM Express控制器与单个PCI Function相关联。控制器支持的capabilities在Controller Capabilities (CAP) register中指明,并作为Controller和Namespace数据结构的一部分,被Identify命令返回。

  • Identify Controller数据结构,表示应用于整个控制器的capabilities和settings。
  • Identify Namespace数据结构,表示特定于特殊命名空间的capabilities和settings。

2.1 Queue基本原理

NVMe使用循环队列(Queue)传递消息,例如命令和命令完成通知。Queue可以位于主机PCle内存中的任何位置。

  • 通常,Queue位于主机内存中;
  • Queue可以由连续的物理内存块或可选的物理内存块组成不连续的物理内存页集(由PRP列表定义);
  • Queue由一组固定大小的元素组成。

Queue本质上,是具有固定大小的环形缓冲区,其逻辑视图和物理视图,如下所示:

Tail

  • 指向下一个空闲元素;
  • 如果将一个元素添加到tail所指向的元素中,则tail将加1,以指向下一个空闲元素。

Head

  • 如果队列不为空,则指向下一个要删除的条目;
  • 如果一个元素从head所指向的元素中被移除,那么head的值会加1,指向下一个元素。

Queue Size(可用)

  • 队列中的条目数- 1
  • 最小大小为2,I/O Queue最大值为64K,Admin Queue的最大值为4K

Queue Empty

  • Head == Tail

Queue Full

  • Head == Tail + 1 mod Of Queue Entries.

2.2 Admin与I/O Queue

Queue按Command划分,有2种类型,即:

  • Admin Queue
    它是为了控制器管理和控制而存在的,通常用于配置I/O Queue和控制器/特性管理。
    此Queue对应Admin Command Set,也就是说,只有属于Admin Command Set的命令才能提交到Admin Submission Queue。
    每个NVMe控制器有一个Admin Queue,每个Admin Queue最多有4K个元素。

  • I/O Queue
    用于提交/完成IO命令。
    此Queue对应IO Command Set,也就是说,只有属于IO Command Set的命令才能提交到I/O Submission Queue。
    每个NVMe控制器最多64K个I/O Queue,每个I/O Queue最多64K个元素。

2.3 Submission与Completion Queue

Queue按功能划分,也有2种类型,即:

  • Submission Queue(SQ)
    用于从主机向NVMe控制器,提交命令,以供控制器执行;通过SQ ID识别。

  • Completion Queue(CQ)
    用于从NVMe控制器向主机,为完成的命令,返回执行结果状态;通过CQ ID识别。对于每个Completion Queue,可以有一个独立的MSI-X中断。

因此,对于Admin Command Set,就有Admin Submission Queue和Admin Completion Queue。
对于IO Command Set,就有I/O Submission Queue和I/O Completion Queue。
我们捋一捋,其实一共就这4种Queue,他们的含义,如下所示:

  • Admin Submission Queue
    向NVMe控制器提交管理类命令,供控制器执行。
  • Admin Completion Queue
    向主机返回管理类命令,执行结果状态。
  • I/O Submission Queue
    向NVMe控制器提交IO命令,供控制器执行。
  • I/O Completion Queue
    向主机返回IO命令,执行结果状态。

2.4 Submission与Completion Queue对应关系

NVM Express基于成对的Submission和Completion Queue机制

  • 命令由host软件放入提交队列。
  • Completions由控制器放置到相关的完成队列中。
  • 多个提交队列可能使用同一个完成队列。
  • 提交队列和完成队列在主机内存中分配。

一对Admin Submission QueueAdmin Completion Queue是为了控制器管理和控制而存在的(例如,I/O Submission Queue和I/O Completion Queue的创建和删除,中止命令等),只有属于Admin Command Set的命令才能提交到Admin Submission Queue。

I/O命令集与I/O队列成对一起使用。本规范定义了一个I/O命令集,命名为NVM命令集。主机选择一个I/O命令集用于所有I/O queue对。

Host软件创建队列,可以达到控制器支持的最大队列数。通常,创建的命令队列数量取决于系统配置和预期的工作负载。
例如,在一个基于4个核心处理器的系统上,每个核心可能有一个queue对,以避免锁定并确保在适当的处理器核心的缓存中创建数据结构。

图1,提供了queue对机制的图形表示,显示了Submission Queues和Completion Queues之间的1:1映射。
在这里插入图片描述

图2,展示了一个例子,多个I/O Submission Queues利用了Core B上相同的I/O Completion Queues。
在这里插入图片描述
图1和图2显示了Admin Submission Queue和Admin Completion Queue之间总是存在1:1的映射。

  • Submission Queue (SQ)

Submission Queue (SQ)是一个具有固定槽大小的环形缓冲区,Host软件使用它来提交命令供控制器执行。当有1到n个新命令需要执行时,Host软件更新相应的SQ Tail doorbell register。当有新的doorbell register写入时,之前的SQ Tail值在控制器中被覆盖。控制器从Submission Queue中按顺序获取SQ条目,但是,它可以以任何顺序执行这些命令。

每个Submission Queue条目都是一个命令,命令大小为64字节。主机内存中用于数据传输的物理内存位置是使用Physical Region Page(PRP)项或Scatter Gather Lists指定的。每个命令可以包括两个PRP条目或一个Scatter Gather List (SGL)段。如果描述数据缓冲区需要两个以上的PRP项,则提供一个指向PRP链表的指针,该链表描述了PRP项的列表。如果需要多个SGL段来描述数据缓冲区,则SGL段提供一个指向下一个SGL段的指针。

  • Completion Queue(CQ)

Completion Queue(CQ)是一个具有固定槽大小的环形缓冲区,用于为完成的命令投递状态。一个完成的命令,由SQ标识符和命令标识符(由Host软件分配)的组合,唯一地标识。多个提交队列可以关联到一个完成队列。当单个工作线程通过一个完成队列处理所有命令完成时,即使这些命令来自多个提交队列,也可以使用此功能。在处理完最后一个空闲completion queue项之后,Host软件会更新CQ Head指针。在completion queue项中定义了一个Phase位,表示该项是否在未查询寄存器的情况下新发布。这使主机软件能够确定新条目是否作为前一轮或当前轮完成通知的一部分发布。具体来说,每一轮通过Completion Queue条目,控制器反转Phase位。

3 多路径I/O和命名空间共享

多路径I/O和命名空间共享,都要求NVM子系统包含两个或多个控制器
两台或多台主机对共享命名空间的并发访问,需要主机之间进行某种形式的协调。用于协调这些主机的过程,NVMe协议规范未进行约定。

  • 多路径I/O,是指一台主机和一个命名空间之间有两条或多条完全独立的物理PCI Express路径。
  • 命名空间共享,是指两台或更多主机使用不同的NVM Express控制器访问一个公共共享的命名空间的能力。

3.1 1Port+1Controller

图3,显示了一个NVM子系统,它包含一个NVM Express控制器和一个PCI Express端口。由于这是一个单一Function的PCI Express设备,NVM Express控制器应该与PCI Function 0相关联。一个控制器可以支持多个命名空间。
在这里插入图片描述
图3中的控制器,支持NS A和NS B两个命名空间,与每个控制器命名空间相关联的是命名空间ID,分别标记为NSID 1和NSID 2,由控制器用于引用特定的命名空间。

命名空间ID,不同于命名空间本身,它是主机和控制器用于在命令中,指定特定命名空间的句柄。控制器的命名空间id到命名空间的映射,NVMe规范未做约定。

在本例中,命名空间ID 1与NS A相关联,命名空间ID 2与NS B相关联。这两个命名空间都是控制器私有的,本配置不支持多路径I/O,也不支持命名空间共享。

3.2 1Port+2Controller

图4,显示了一个多Function NVM子系统,其中一个PCI Express端口包含两个控制器,一个控制器关联PCI Function 0,另一个控制器关联PCI Function 1。每个控制器,支持单个私有命名空间和对共享命名空间B的访问。在所有访问特定共享命名空间的控制器中,命名空间ID必须相同。在本例中,两个控制器使用命名空间ID 2,访问共享命名空间B。
在这里插入图片描述
每个控制器都有一个唯一的Identify Controller数据结构,每个命名空间都有一个唯一的Identify Namespace数据结构。

访问共享命名空间的控制器,返回与该共享命名空间相关联的Identify Namespace数据结构(即,访问同一个共享命名空间的所有控制器,都返回相同的数据结构内容)。在Identify Namespace数据结构中,EUI64 (IEEE Extended Unique Identifier, IEEE扩展唯一标识符)字段是一个全局唯一的名称,与命名空间本身相关,可用于确定是否有两个或多个控制器访问同一个共享命名空间。

与共享命名空间关联的控制器,可以并发地操作该命名空间。各个控制器执行的操作,在命令提交到的控制器的写原子性级别上,是原子到共享命名空间的。共享命名空间的控制器之间,不要求写原子性级别相同。如果,在发送给访问共享命名空间的不同控制器的命令之间,存在任何顺序要求,则需要宿主软件或相关应用程序,来强制执行这些顺序要求。

3.3 2Port+2Controller

图5,说明了具有两个PCI Express端口的NVM子系统,每个端口都有一个相关的控制器。两个控制器,都映射到对应端口的PCI Function 0。在这个例子中,每个PCI Express端口都是完全独立的,并且有自己的PCI Express基本复位和参考时钟输入。端口复位,只影响该端口关联的控制器,对其他控制器、共享命名空间和其他控制器对共享命名空间的操作没有影响。这个例子的Function行为,在其他方面与图4所示的相同。
在这里插入图片描述
图5中显示的两个端口,可能与相同的Root Complex或不同的Root Complex相关联,并且可能用于实现多路径I/O和I/O共享体系结构。系统级别的体系结构方面和PCI Express fabric中多个端口的使用,不在NVMe规范约定范围。

3.4 SR-IOV

图6,展示了一个支持单根I/O虚拟化(SR-IOV)的NVM子系统,它具有一个物理Function和四个虚拟Function。NVM Express控制器与每个虚拟Function相关联,每个控制器都有一个私有命名空间,并可以访问所有控制器共享的命名空间,命名为NS E。本例中控制器的行为,与本节中其他示例的行为类似。
在这里插入图片描述
本节提供的示例,旨在说明概念,并不打算列举所有可能的配置。例如,NVM子系统可能包含多个PCI Express端口,每个端口都支持SR-IOV。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Echarts饼图tooltip渐变色,内部legend百分比保留整数方法

业务场景:1、tooltip的背景需要渐变色,写 html 标签, 2、饼图内部的百分比需要保留整数 ,使用formatter, export function genChartPieOption(pieData) {const res {replaceMerge: [series,], // 解决刷新之后y轴丢失…

web前端游戏项目-堆木头游戏【附源码】

web前端游戏项目-堆木头游戏 《堆木头》游戏玩法简单,通过鼠标点击放木头的按钮,叠加在一起,构建出各种结构。游戏适合所有年龄段的孩子,可以锻炼孩子的动手能力和手眼协调能力,激发孩子的创造力和想象力 运行效果 …

一分钟学会“沉浸式翻译”插件的安装与使用

一、安装 安装地址:https://immersivetranslate.com/ 选择对应的浏览器进入安装即可 二、简单的翻译使用方法 第一次安装需要先刷新界面才可以达到翻译效果 核心需要修改的地方在以下三个: 第一处:设置翻译服务,免费版的可以直接…

MES管理系统哪些功能帮助印刷企业提高产品质量

随着市场竞争的日益激烈,产品质量已经成为企业生存和发展的关键因素。对于印刷企业来说,产品质量不仅关系到企业的声誉,更直接影响到企业经济效益。因此,如何提高产品质量成为印刷企业亟待解决的问题。MES管理系统作为一种先进的企…

左值右值引用,完美转发

1.c98/03,类模板和函数模板只能含固定数量的模板参数,c11的新特性可以创建接受可变参数的函数模板和类模板 //Args是一个模板参数包,args是一个函数形参参数包 //声明一个参数包Args… args,这个参数包可以包括0到任意个模板参数 template&l…

NLP论文阅读记录 - 2022 sota | 校准序列似然改善条件语言生成

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作强化学习方法两阶段重新排名方法具有序列级损失的多任务学习 三.本文方法3.1 相似度函数3.2 校准损失3.3正则化损失3.4 候选解码方法 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.…

ToB还是ToC?工业级与消费级AR眼镜都能干什么?

来源:虹科数字化与AR 虹科分享 | ToB还是ToC?工业级与消费级AR眼镜都能干什么? 原文链接:https://mp.weixin.qq.com/s/lyTASoKm29woIbfcKBtMvQ 欢迎关注虹科,为您提供最新资讯! 随着科技的飞速发展&#…

智能优化算法应用:基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于冠状病毒群体免疫算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.冠状病毒群体免疫算法4.…

【Amazon 实验③】Amazon WAF功能增强之追踪 Amazon WAF RequestID,排查误杀原因

文章目录 1. 方案介绍2. 架构图3. 操作演示 本实验将介绍如何利用 Amazon LambdaEdge,在 Amazon CloudFront 自定义错误页面 上展示每个由 Amazon WAF 返回的“403 Forbidden”错误的 Request ID。通过这个唯一的 WAF Request ID,网站运维工程师能够快速…

swing快速入门(二十四)绘画板-可调色

注释很详细,直接上代码 上一篇 Look here~ 听我说完再继续看更容易理解: 如果说用之前的绘图方法写一个绘画板你会怎么做?重绘会让之前的内容消失呀,用各种数据结构记录每个像素点的位置或颜色?嘶,感觉很麻…

HFish蜜罐搭建及简单使用

一、HFish蜜罐 HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的…

<蓝桥杯软件赛>零基础备赛20周--第11周--贪心

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上答疑&#x…

Java网络编程---TCP

服务端 import java.io.DataInputStream; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket;public class Server2 {public static void main(String[] args) throws Exception{System.out.println("------------服务端启动---------…

josef约瑟 DB-1电压回路断相闭锁继电器100V 5A 嵌入式安装

DB-1电压回路断相闭锁继电器 1 用途 DB-1型闭锁继电器,是在电压回路发生断路而可能引起继电保护误动作时,用以闭锁继电器。 2 结构和工作原理 DB-1型断相闭锁继电器的原理线路图见图1。 图1 DB-1原理接线图 断相闭锁继电器线路由零序电压过滤器(三个容量…

ubuntu20.04下安装pcl_ubuntu安装pcl

pcl点云数据库,用来进行3D信息的获取与处理,和opencv相比较,opencv是用来处理二维信息,他是学术界与工业界针对点云最全的库,且网络上相关的资料很多。以下是pcl的安装步骤以及遇到的问题。 提前说明,本人…

Shell三剑客:awk(格式化输出)

一、格式符 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g 自动选择合适的表示法 % % 显示%自身 # [.#] 第一个数…

10分钟创建AIGC应用,腾讯云推出高性能应用服务HAI

降低AIGC应用开发门槛,才能更快发现下一个AIGC现象级应用。 12月18日,腾讯云宣布推出高性能应用服务(Hyper Application Inventor,HAI),用户无需复杂配置,最快10分钟即可创建自己的AI应用。 HAI能够提供即插即用的算…

Vue 的两种实现:VSCode 中配置 vue 模板快捷方式的过程

1、创建配置文件: 其一、打开 VSCode ,CtrlShiftP, 打开搜索框: 其二、输入:user, 并点击进去 Snippets:Configure User Snippets 其三、输入 vue3js 并回车: 其四、打开项目,发现配置文件 vue3js.code-sn…

Layui 下拉select多选实现

1. html <div id"mo_deptment"></div> 2.引用 <script src"~/layuiadmin/layui/xm-select.js"></script>3.设置全局变量存储控件 var mo_deptmentSelect; 4.layui.use 中初始化 4.1 列表数据 var mo_deptmentdata [ …

红队打靶练习:DIGITALWORLD.LOCAL: DEVELOPMENT

信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.12.128 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.12.1 00:50:56:c0:00:08 …