当前位置: 首页 > news >正文

Nvme Spec 第一章节学习

@Nvme Express Base Specification

第一章 简介

1.1概述

NVM ExpressTM(NVMeTM)接口允许主机软件与非易失性存储器子系统通信。
此接口针对企业和客户端固态驱动器进行了优化,通常作为寄存器级接口连接到PCI Express接口。
注:在开发过程中,本规范被称为企业NVMHCI。然而,在完成之前,该名称已修改为NVM Express基本规范。此接口的目标是在客户端和企业系统中使用。

1.1.1 NVMe over PCIE 和 NVMe over Fabrics

NVM Express基本规范修订版1.4和之前的修订版定义了一个寄存器级接口,用于主机软件通过PCI Express与非易失性存储器子系统通信(PCIeTM上的NVMeTM)。
NVMeTM over Fabrics规范定义了一个协议接口和NVMe接口的相关扩展,使其能够通过其他互连(例如以太网、InfiniBand™, 光纤通道)。结构上的NVMe规范对每个NVMe传输都有一个NVMe传输绑定(在该规范中或通过引用)。
在本规范中,可以将需求/功能记录为特定于结构上的NVMe实现或特定的NVMe传输绑定。
此外,PCIe上的NVMe和Fabrics上的NVMe实现系统对功能和特性的支持要求可能有所不同。

1.2范围

该规范定义了用于与NVM子系统中的控制器通信的寄存器接口。它还定义了控制器可能支持的标准命令集。有三种类型的控制器具有不同的功能:
a) I/O controllers;
b) discovery controllers; and
c) administrative controllers
在本文档中,当可根据上下文确定适用的控制器类型时,通常使用通用术语控制器,而不是枚举特定的控制器类型。

1.3 范围之外

寄存器接口和命令集是与NVM的任何使用模型分开指定的,而是仅指定到NVM子系统的通信接口。因此,本规范没有规定非易失性存储器系统是否用作固态驱动器、主存储器、高速缓冲存储器、备份存储器、冗余存储器等。具体的使用型号不在范围内,是可选的,并且未获得许可。该接口是在任何非易失性内存管理(如损耗均衡)之上指定的。对诸如NAND之类的NVM技术的擦除和其他管理任务进行了抽象。
本规范不包含任何关于缓存算法或技术的信息。
本说明书中提及的其他已发布规范的实现或使用,即使需要符合规范,也不在本规范的范围内(例如PCI、PCI Express和PCI-X)。

1.4 操作原理

NVM Express可扩展接口旨在满足使用基于PCI Express的固态驱动器或结构连接设备的企业和客户端系统的需求。该接口提供了优化的命令提交和完成路径。它支持并行操作,支持最多65535个I/O队列,每个I/O队列最多有64Ki-1个未完成的命令。
此外,还增加了对许多企业功能的支持,如端到端数据保护(与SCSI保护信息,通常称为T10 DIF和SNIA DIX标准)、增强的错误报告和虚拟化。
接口具有以下关键属性:
*  不需要在命令提交或完成路径中读取不可缓存/MIO寄存器;
*  在命令提交路径中,最多需要一个MMIO寄存器写入;
* 支持最大65535个IO队列,每个IO队列支持65535个未完成的command;
* 每个队列的优先级具有定义明确的仲裁机制;
* 完成4KiB读取请求的所有信息都包含在64B的命令本身中,确保了高效的小型IO操作;
* 高效精简的指令集;
* 支持MSI/MSI-X和中断聚合;
* 支持多namespaces;
* 支持SR-IOV等I/O虚拟化体系结构;
* 错误报告和管理能力
* 支持多通路IO和namespace共享。
该规范定义了一组精简的寄存器,包括以下功能:
* 显示controller的capabilities。
* 控制器故障状态(直接通过CQ处理命令状态)
* admin 队列设置,io 队列设置是通过admin cmd实现;
* Doorbell registers针对提交和完成队列的数量。
NVM Express控制器与单个PCI功能相关联。适用于整个控制器的功能和设置显示在控制器功能(CAP)寄存器和标识控制器数据结构中。
namespace是可以格式化为逻辑块的大量非易失性存储器。一个nvme express 控制器可以支持使用多namespace 通过引用namespace ID。namespace 可以被创建或者删除通过使用namespace management和namespace Attachment cmd.Identify namespace 数据结构显示了一个指定的namespace的功能和设置。所有namespace通用的功能和设置由namespace ID FFFFFFFF h的Identify namespace数据结构报告。
Nvm express 接口是基于成对的SQ和CQ的机制。command是通过host 放到一个SQ里面,Completions 是被controller放到一个与之对应的CQ里面。多个SQ可以使用相同的CQ。SQ和CQ是在内存中分配的。
admin SQ和对应CQ是用于controller管理和控制的。(例如:IO SQ和CQ的创建、删除,命令的中断等)。只有admin cmd可以被提交到admin SQ里面。
IO 命令集与IO 队列一起使用。协议定义了IO 命令集名为NVM Comand Set.Host 选择一个IO 命令集对IO 队列使用。Host 创建队列,数量达到控制器支持的最大数。通常创建的命令队列数量是基于系统配置和预期的workload。例如,在一个基于4核处理器的系统上,每个core有一个队列对一避免锁定并确保在合适的处理器core的缓存中创建数据结构。Figure 1 提供了一种队列对机制的图形解释,展示了在SQ与CQ之前1比1的映射。Figure 2展示了一个例子,多个IO SQ在core B上对应同一个CQ。Figure 1和Figure 2都展示了 admin SQ和admin CQ是1比1 对应的。
一个SQ 是一个具有固定大小的环形buffer,是Host用来提交 给controller 执行的命令。Host 更新对应的SQ Tail doorbell寄存器当有一个新的命令需要执行的时候。在controller内部之前的SQ Tail 值会被复写当新的doorbell 寄存器被写的时候。controller 会从SQ中按顺序的取到提交的命令条目并且可以按任意的顺序去执行这些command。每一个SQ条目就是一个command。一个command是64字节。内存中用于数据传输的物理内存位置是使用g Physical Region Page(PRP)和Scatter Gather Lists(SGL)。每个command都包含有2个PRP条目或者一个SGL段落。如果需要两个以上PRP 条目来描述数据缓存区,则提供一个指针指向用来描述PRP 条目的List。如果需要超过一个SGL段落来描述数据缓存区,SGL 段落提供一个指针指向下一个SGL段落。
一个CQ是一个具有固定大小的环形buffer,用来发布完成命令的状态。已完成的命令是由SQ标识符和Host分配的命令标识符组成的唯一标识符。多个SQ可能与一个CQ关联。这个特性可用于单个工作进程通过一个完成队列处理所有命令完成的情况,即使这些command来自不同的SQ。CQ的head 指针会被Host更新,在host处理完最后一个空闲的CQ的完成队列的条目。在完成队列条目中定义了相位标记(P)位,以指示条目是否是在未查阅注册表的情况下新发布的。这使Host能够确认新条目是上一轮还是当前一轮完成通知的一部分发布的。具体地说,在完成队列条目的每一轮中,控制器反转相位标记位。

1.4.1 多通路IO和namespace共享

本章节概述了多通路IO和namespace 共享。多路径I/O指的是单个主机和命名空间之间的两个或多个完全独立的路径,而命名空间共享指的是两个或更多主机使用不同的NVM Express控制器访问公共共享命名空间的能力。

1.4.2 非对称控制器的行为

1.5 约定

硬件应为标记为保留的所有位和寄存器返回“0”,主机软件应写入值为0h的所有保留位和寄存器。
在寄存器章节(即第2节和第3节)内,使用了以下术语和缩写:RO 				:只读RW				:可读可写R/W				:可读可写。读取的值可能不是最后写入的值。RWC			:Read/Write ‘1’ to cleaRWS			:Read/Write ‘1’ to setImpl Spec	:控制器可以自由实现HwInit			:默认状态取决于NVM Express控制器和系统配置。该值在重置时初始化,例如通过扩展ROM,或者在集成设备的情况下,通过平台BIOS。Reset			:此列指示重置后字段的值。
针对一些寄存器字段,它是特定于具体实施的字段是RW、RWC还是RO。这通常显示为RW/RO或RWC/RO,表示如果不支持该功能,则该字段为只读。
当文档中引用寄存器字段时,使用的约定是“寄存器符号.字段符号”。例如,PCI命令寄存器奇偶校验错误响应启用位的名称为CMD.PEE。如果寄存器字段是一个位数组,则该字段被称为“寄存器符号。字段符号(数组偏移到元素)”
基于0的值是一种编号方案,其中数字0h表示1h的值,1h表示2h,2h表示3h等。在该编号方案中,没有表示0h值的方法。
除非另有规定,否则本规范中的值以1为基础(即,数字1h表示1h的值,2h表示2h等)。
值的大小以二进制单位或十进制单位显示。用于表示这些值的符号如图7所示

1.6 定义

1.6.1 admin queue

Admin queue是标识符为0的一对SQ和CQ队列。Admin SQ和相应的CQ是分别用来提交管理命令队列和接受这些管理命令的完成。
Admin SQ是与CQ是一一对应切唯一对应。

1.6.2 administrative controller

一种用于公开允许主机管理NVM子系统的功能的控制器。管理控制器不实现I/O队列,不提供对与非易失性存储器存储介质上的逻辑块相关联的数据或元数据的访问,也不支持连接到管理控制器的命名空间(即,从不存在任何活动NSID)。

1.6.3 arbitration burst

一次可以从使用具有紧急优先级类仲裁的RR或WRR的提交队列启动的最大命令数。

1.6.4 arbitration mechanism

用于确定在启动控制器执行的命令之前选择哪个提交队列的方法。定义了三种仲裁机制,包括循环机制、具有紧急优先级的加权循环机制和特定于供应商的机制

1.6.5 cache

1.6.6 candidate command

1.6.7 command completion

1.6.8 command submission

1.6.9 controller

1.6.10 directive

1.6.11 discovery controller

1.7 Key Word

1.7.1 mandatory

一个关键字,指示本规范定义的要实现的项。

1.7.2 may

1.7.3 optional

描述本规范不要求的功能的关键字。但是,如果实现了规范中定义的任何可选功能,则该功能应按照规范定义的方式实现。

1.7.4 R

1.7.5 reserved

一个关键字,指的是为将来的标准化而保留的位、字节、字、字段和操作码值。它们的使用和解释可以通过本规范或其他规范的未来扩展来指定。保留位、字节、字、字段或寄存器应清除至0h,或根据本规范的未来扩展。收件人不需要检查保留的位、字节、字或字段。命令中定义字段中的保留编码值的接收应作为错误报告。将保留的编码值写入控制器寄存器字段会产生未定义的结果。

1.7.6 shall

1.7.7 should

1.8 Byte, Word, and Dword 关系

相关文章:

Nvme Spec 第一章节学习

Nvme Express Base Specification 第一章 简介 1.1概述 NVM ExpressTM(NVMeTM)接口允许主机软件与非易失性存储器子系统通信。 此接口针对企业和客户端固态驱动器进行了优化,通常作为寄存器级接口连接到PCI Express接口。 注:在…...

第一章:最新版零基础学习 PYTHON 教程(第九节 - Python 语句中的 – 多行语句)

Python 中的语句: 在Python中,语句是Python解释器可以读取和执行的逻辑命令。它可能是Python 中的赋值语句或表达式。 Python 中的多行语句: 在Python中,语句通常写成一行,每行的最后一个字符是换行符。要将语句扩展到一行或多行,我们可以使用大括号 {}、圆括号 ()、方…...

kafka 3.0 离线安装

1.安装zookeeper 解压apache-zookeeper-3.8.0-bin.tar.gz到指定目录,复制conf目录下zoo_sample.cfg到zoo.cfg,并修改配置。 # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit…...

MySQL数据库入门到精通2--基础篇(函数,约束,多表查询,事务)

3. 函数 函数 是指一段可以直接被另一段程序调用的程序或代码。MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。 3.1 字符串函数 MySQL中内置了很多字符串函数,常用的几个如下: 演示如下: A. con…...

c-数据在内存中的存储-day7

...

3D大模型如何轻量化?试试HOOPS Communicator,轻松读取10G超大模型!

随着计算机技术的不断发展,3D模型在各行各业中的应用越来越广泛。然而,随着模型的复杂性和规模不断增加,处理和浏览超大型3D模型变得越来越具有挑战性。本文将探讨如何轻量化3D大模型,以及如何使用HOOPS Communicator来读取和浏览…...

go并发操作且限制数量

使用管道chan func returnNum() int64 {return time.Now().Unix() } func main() {threadAmount : runtime.GOMAXPROCS(0)if threadAmount < 2 {threadAmount 2}fmt.Println(threadAmount)threadChan : make(chan int, threadAmount)defer close(threadChan)for {for i :…...

AI深度学习-卷积神经网络000

文章目录 前言1.什么是深度学习2.语义分割与实例分割概述3.什么是卷积&#xff1f;4.Unet网络 前言 本栏目&#xff0c;主要为深度学习保姆教程。 主要通过B站视频整理而来&#xff1a; 深度学习保姆级教学 Unet语义分割视觉三维重建算法 1.什么是深度学习 深度学习保姆级教…...

网站有反爬机制就爬不了数据?那是你不会【反】反爬

目录 前言 一、什么是代理IP 二、使用代理IP反反爬 1.获取代理IP 2.设置代理IP 3.验证代理IP 4.设置代理池 5.定时更新代理IP 三、反反爬案例 1.分析目标网站 2.爬取目标网站 四、总结 前言 爬虫技术的不断发展&#xff0c;使得许多网站都采取了反爬机制&#xff…...

2023华为杯研究生数学建模C题分析

完整的分析查看文末名片获取&#xff01; 问题一 在每个评审阶段&#xff0c;作品通常都是随机分发的&#xff0c;每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比性&#xff0c;不同专家评审的作品集合之间应有一些交集。但有的交集大了&#xff0c;则…...

第三天:实现网络编程基于tcp/udp协议在Ubuntu与gec6818开发板之间双向通信

互联网地址 每一台设备接入互联网后&#xff0c;都会举报一个唯一的地址编号 IP地址 INTERNET地址 internet地址 &#xff1a;它是协议上的一个逻辑地址 目前来说&#xff0c;我们主要的IP地址有两类 IPV4 IPV6 IPV4 其实就是使用一个32bit整数作为IP IPV6 其实就是使用一…...

【MediaSoup---源码篇】(三)Transport

概述 RTC::Transport是mediasoup中的一个重要概念&#xff0c;它用于在mediasoup与客户端之间传输实时音视频数据。 Transport继承着众多的类&#xff0c;主要用于Transport的整体感知 class Transport : public RTC::Producer::Listener,public RTC::Consumer::Listener,publ…...

爱分析《商业智能最佳实践案例》

近日&#xff0c;国内知名数字化市场研究咨询机构爱分析发布《2023爱分析商业智能最佳实践案例》&#xff0c;此评选活动面向落地商业智能的各行企业和商业智能厂商&#xff0c;以第三方专业视角深入调研&#xff0c;评选出具有参考价值的创新案例。永达汽车集团与数聚股份合作…...

golang:context

context作用 goroutine的退出机制 多个goroutine都是平行的被调度的&#xff0c;多个goroutine如何协调工作涉及通信、同步、通知和退出 通信&#xff1a;goroutine之间的通信同步chan通道 同步&#xff1a;不带缓冲的chan提供了一个天然的同步等待机制。通过WaitGroup也可以…...

探讨代理IP与Socks5代理在跨界电商中的网络安全应用

在数字化时代&#xff0c;跨界电商已经成为了商业世界中的一大趋势。然而&#xff0c;跨越国界的电商活动也伴随着网络安全挑战。本文将讨论如何利用代理IP和Socks5代理技术来提高跨界电商中的网络安全&#xff0c;同时也探讨了与游戏相关的爬虫应用。 1. 代理IP和Socks5代理的…...

Guava Cache介绍-面试用

一、Guava Cache简介 1、简介 Guava Cache是本地缓存&#xff0c;数据读写都在一个进程内&#xff0c;相对于分布式缓存redis&#xff0c;不需要网络传输的过程&#xff0c;访问速度很快&#xff0c;同时也受到 JVM 内存的制约&#xff0c;无法在数据量较多的场景下使用。 基…...

ARM 汇编指令作业(求公约数、for循环实现1-100之间和、从SVC模式切换到user模式简单写法)

1、求两个数最大公约数 .text .globl _start_start:mov r0, #9mov r1, #15 Loop: 循环cmp r0,r1 比较r0和r1的大小beq stop 当r0和r1相等时&#xff0c;跳到stop标签subhi r0,r0,r1 r0-r1>0 时&#xff0c;证明r0>r1,将r0-r1的值赋给r0&…...

Go - 【字符串,数组,哈希表】常用操作

一. 字符串 字符串长度&#xff1a; s : "hello" l : len(s) fmt.Println(l) // 输出 5遍历字符串&#xff1a; s : "hello" for i, c : range s {fmt.Printf("%d:%c ", i, c) } // 输出&#xff1a;0:h 1:e 2:l 3:l 4:ofor i : 0; i < le…...

vue 普通组件的 局部注册

vue 普通组件的 注册 11 Vue2_3入门到实战-配套资料\01-随堂代码素材\day03\素材\00-准备代码\小兔鲜首页静态页\src...

医疗虚拟仿真和虚拟现实有什么区别?哪个更好?

随着我们在仿真教育中越来越多地使用新技术&#xff0c;区分虚拟模式的类型很重要。虚拟仿真是一个统称&#xff0c;用来概括术语来描述各种基于仿真的体验&#xff0c;从基于屏幕的平台到沉浸式虚拟现实。然而&#xff0c;各虚拟平台在保真度、沉浸感和临场感的水平上有很大差…...

【.net core】yisha框架使用nginx代理swagger接口无法访问问题

后端代码配置 #在StartUp.cs文件中Configure方法中增加以下代码 app.UseSwagger(c >{//代理路径访问c.PreSerializeFilters.Add((doc, item) >{//根据代理服务器提供的协议、地址和路由&#xff0c;生成api文档服务地址doc.Servers new List<OpenApiServer>{ new…...

uniapp录音功能和音频播放功能制作

录音功能 在 UniApp 中&#xff0c;你可以使用 uni.getRecorderManager() 方法来创建一个录音管理器实例&#xff0c;从而实现录音功能。 以下是一个示例&#xff0c;演示了如何在 UniApp 中使用 uni.getRecorderManager() 实现录音功能&#xff1a; // 在需要录音的页面或组…...

服务器数据恢复-LINUX操作系统下各文件系统误删除/格式化数据的恢复方案

服务器数据恢复环境&#xff1a; 基于EXT2/EXT3/EXT4/Reiserfs/Xfs文件系统的Linux操作系统。 服务器故障&#xff1a; LINUX操作系统下误删除/格式化数据。 服务器数据恢复过程&#xff1a; 1、首先会检测服务器是否存在硬件故障&#xff0c;如果检测出硬件故障&#xff0c;交…...

python/C++二分查找库函数(lower_bound() 、upper_bound,bisect_left,bisect_right)

二分查找是一种经典的搜索算法&#xff0c;广泛应用于有序数据集中。它允许在大型数据集中高效地查找目标元素&#xff0c;减少了搜索的时间复杂度。本文将介绍在 C 和 Python 中内置的二分查找函数&#xff0c;让二分查找变得更加容易。 c lower_bound() 、upper_bound 定义…...

爬虫 — App 爬虫(二)

目录 一、Appium介绍二、node.js 安装三、Java 的 SDK 安装以及配置1、安装步骤2、配置环境变量 四、安卓环境的配置1、配置环境变量 五、Appium 安装1、安装2、打开 APP3、使用 六、Appium 使用1、定位数据&#xff08;方法一&#xff0c;不常用&#xff09;2、定位数据&#…...

汽车电子相关术语

SOA SOA&#xff08;Service-Oriented Architecture&#xff0c;面向服务的架构&#xff09;是一种在计算机环境中设计、开发、部署和管理离散模型的方法。是由Garnter1996年提出的概念&#xff0c;将应用程序的不同功能单元&#xff08;称为服务&#xff09;进行拆分&#xf…...

Python 找出最大数

"""在输入的三个数中找出最大知识点&#xff1a;1、条件嵌套语句if/else2.字符串分割函数split()3、列表元素索引4、数据类型转换举一反三&#xff1a;1、如何控制只能输入三个数&#xff0c;否则重新输入2、如何避免输入无效字母"""# 定义一个变…...

Spring Security 用了那么久,你对它有整体把控吗?

文章目录 1.Servlet Filter&#xff1a;守门人的角色2.DelegatingFilterProxy&#xff1a;桥接 Servlet 和 Spring 的神器3.FilterChainProxy&#xff1a;Spring Security 过滤器链的管家3.SecurityFilterChain&#xff1a;Security 过滤器的串绳4.Spring Security 中的过滤器机…...

vue+minio实现文件上传操作

vueminio实现文件上传操作 minio文件上传vueminio实现文件上传操作 minio文件上传 minio文件上传有两种方法&#xff1a; 第一种是通过ak&#xff0c;sk&#xff0c;调用minio的sdk putObject进行文件上传&#xff1b;该方法支持go&#xff0c;java&#xff0c;js等各种语言&…...

使用JavaScript实现无限滚动的方法

前言 在网页设计中&#xff0c;无限滚动是一种常见的交互方式&#xff0c;用户可持续地加载更多内容而无需刷新页面&#xff0c;提高用户体验。本文将介绍如何运用JavaScript实现无限滚动的效果&#xff0c;使网页能够自动加载更多数据&#xff0c;减轻用户加载新页的负担&…...

无法打开建行网站/刷百度指数

传送门 ☞ 1.Web服务内功经脉 传送门 ☞ 3.掀起请求盖头来 传送门 ☞ 4.静态页面启程 上一节我们对于实现TomJetty服务器做了一些与Web有关的知识铺垫和回顾。那么从本节正式开始实现TomJetty服务器的“山寨”之旅。要想实现一个服务器&#xff0c;第一步要把服务器建立起来&am…...

新乡网站建设那家好/百度信息流投放

先把软件安装好&#xff0c;然后可以参考&#xff1a;srvctl常用命令分类&#xff1a;*增加 oracle asm/database/listener 注册信息eg&#xff1a;srvctl add asm -l LISTENER -p crs/dbserve-cluster/ASMPARAMETERFILE/registry.253.743836405eg: srvctl add database -d orc…...

苏州市吴江建设局网站/品牌策划

抓娃娃机游戏相信很多小伙伴都玩过&#xff0c;然而抓它千百遍宝贝依然居于崖端而不落&#xff0c;现在别在怀疑自己了&#xff0c;其实这就是套路&#xff0c;近日日本的大型远程网上远程实体抓娃娃机游戏《Toreba》被指员工造假&#xff0c;引发舆论哗然。 《Toreba》是近期超…...

购物网站建设 属于信息系统管理与设计么/企业推广网站有哪些

一、获取HTTPS安全证书 在操作之前&#xff0c;请将你的域名的隐私保护去掉&#xff0c;让证书服务商能通过域名解析查看到域名管理者的邮箱&#xff0c;否则验证证书时会无法进行。 登录阿里云管理控制台&#xff0c;【云盾】菜单选择【证书服务】 选择购买证书 在购买页面&…...

国外创意海报设计网站/网站策划

hello.c #incude <stdio.h> int main() { printf("Hello,world\n"); } 1.1信息就是位上下文 系统所有的信息&#xff0c;都是由一串位表示的。 在不同的上下文中&#xff08;可以理解为程序&#xff0c;或者运算&#xff09;&#xff0c;一个同样的字节序列可能…...

dede跳转到其他网站/网络平台销售

用Zabbix通过JMX方式监控JVM/Tomcat/Weblogic/Websphere/Jboss等转载自&#xff1a;http://www.huilog.com/?p688 JMX&#xff08;Java Management Extensions&#xff0c;即Java管理扩展&#xff09;是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构…...