NVME介绍

这篇具有很好参考价值的文章主要介绍了NVME介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

NVME介绍

本篇内容使用于介绍NVME 是什么、通信结构,接口类型、性能评定、NVME 协议通信原理,NVME代码解读等部分。

(一) 首先NVME是什么呢?

NVME是一种被用于host software与非易失性内存的子系统通信的寄存器级别的接口。

主要为企业、数据中心以及客户端系统中应用PCIe接口的固态存储设备(SSD)设计,它的目标是最大限度的释放闪存的潜能。

(二) 通信结构

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-1

图中展示NVME在数据传输过程中的位置,有一部分位于PCIE之上,这部分也是NVME驱动的主要部分,还有一部分位于用户态的软件层,用于应用层在NVME驱动间的交互。

(三) 接口类型

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-2

B key: 接口的固态硬盘,走SATA通道和PCI-EX2

M key: 接口的高端固态硬盘,走PCI-Ex4通道

B&M key接口的固态硬盘,走PCI-Ex2或者SATA;

想要查看自己电脑是什么接口可以通过CrystalDiskInfo工具查看;我电脑上的就是M key;

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-3
(四) 性能评定

一块NVME硬盘的性能好坏决定在日常电脑使用过程的中体验感,以及系统的稳定性。

评价一块硬盘的性能通常有两种方式,方式一:单位时间内数据吞吐量(MB/s);方式二:单位时间内I/O读写请求数量;

这两种方式有什么区别?

第一种:主要用于磁盘顺序读写大量数据时,评定磁盘的性能;

第二种:主要用于系统进程随机读写小批量数据时,评定磁盘的性能;

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-4

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-5

从图-4可以看出顺序读写分别为2860M/s, 以及2674M/s相比SATA3.0协议理论值600M/s,提速4倍之多。

(五) NVME 理论

名词定义:

Description Acronyms
Scatter Gather List SGL
Controller Configuration CC
Controller Status CSTS
Physical Region Page PRP
Admin Queue Attributes AQA
Admin Submission Queue Base Address ASQ
Admin Completion Queue Base Address ACQ
Submission Queue y Tail Doorbell SQyTDBL
Completion Queue y Head Doorbell CQyHDBL
Admin Command
I/O Command
Submission Queues SQ
Completion Queues CQ
Logical block address LBA
NameSpace NS
NameSpace ID NSID
Controller Capabilities CAP

NVME接口主要属性:

  • 在命令提交或者完成的路径上不需要读取相关寄存器;
  • 支持最多65535的I/O队列,每个队列支持64K的未处理命令;
  • 每个队列的优先级拥有明确的仲裁机制;
  • 为确保高效的IO操作,完成一个4KB读取请求需要的所有信息包含在64B的命令中;
  • 高效且流线型的指令集;
  • 支持MSI/MSI-X中断和中断聚合;
  • 支持多个命名空间;
  • 支持虚拟化架构,SR-IOV;
  • 健全的错误报告机制以及功能管理;
  • 支持多路径IO和命名空间共享

NVME Controller Registers:

此寄存器主要描述Controller 相关功能和性能配置。包括控制器的初始化或者复位,AQA命令配置,以及SQyTDBL配置等。

Host通过PCI BAR0 和 BAR1将Controller Registers 映射到内存空间中。

host访问寄存器空间应按照原始宽度或者32为对齐访问。

Memory Structures:

描述在host Memory中的内存结构,如果Controller Memory Buffer 是被支持的话,内存结构是支持在控制器的Memory中。

Submission Queue & Completion Queue

Head和Tail entry Pointers 分别对应Completion Queue Head DooBells 和 Submission Queue Tail Doorbells。Doorbell寄存器通过HostSoftware

更新;

在Submission Queue有新entry加入,Tail Entry Pointer应该加一;同理Completion

对于Submission Queue tail, host是Producer,Submission Queue head, Controller是Consumer;

对于CQ tail, host是Consumer,CQ head, Controller是Producer;

Empty Queue: 当Head entry pointer 等于 Tail entry pointer。

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-8

Full Queue:当Head entry pointer 加1等于Tail entry pointer。

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-9

Submission Queue Entry - Command Format

命令大小为64 bytes;

命令由Command Dword 0, Namespace Identifier,Metadata Pointer, PRP Entry 1, and PRP Entry 2,SGL Entry1 and Metadata SGL等。

命令格式主要的三种有Admin Command ,NVM Command , Admin and NVM Vendor Specific Command。具体格式差异请参考Spec。

Command Dword 0 中opcode是所有格式中必要的一部分;Opcode定义了格式中相关子功能标识。例如-图-10

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-10

Completion Queue Entry

Completion Queue是16字节的大小;

命令格式:DW0; DW1; DW2; DW3组成;如图-11

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

其中DW0为通用Command格式;参考SQEntry DW0

需要注意的是,host提交了Submission Queue Tail 之后,而SQ Head由Controller产生,host并不能知道head指向的位置,就需要由CQEntry 提供当前SQ Head状况。

Phase Tag§命令,代表SQTail已经被执行,Controller产生新的CQEntry命令到队列中,此时该标识会翻转。

PRP

PRP是一片指向物理内存页,被用来Controller和host Memory传输数据。而PRP的大小是由host Memory Page来决定的,对应CC.MPS。

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-11

如图-11,PRP Entry 由两部分组成,一部分为Page Base Address,另一部分为 Offset。

其中offset+2 应该等于Host Memory page大小。

Controller Memory Buffer

主要用来提升硬盘性能的,常用通信方式是通过将提Queue 命令存放到host Memory 中,host 和 Controller Regerster 通过SQ 和 CQ方式来传递数据;如果NVME支持Controller Memory Buffer,可以将数据放到Controller memory ,通过Controller Memory 与 Host Memory 直接传输数据,提升速度。

Admin Command Set

Admin Command 用来定义和描述提交到提交队列的命令。例如,Create I/O Submission Queue, Create I/O Completion Queue, Identify等。

其中关于 Identify Command 需要重点关注一下。命令用于返回一个描述关于NVM SubSystem,Controller, Namespace信息。返回的数据是4K的大小。

数据结构内容其一是 Controller Data Structure,里面定义了关于控制器的VID号,SN,MN,Controller ID等。

数据结构内容其二是 Namespace Data Structure, 里面定义关于NS区域的NS Size, NS Cap,NSID 等。

NVM Command Set

NVM Command 用于对logical Block区域进行操作,包括读写,以及擦除等等。

logical data 大小,是用byte表示的。logical支持512Bytes,1KB,2KB,4KB,等等。

在Create IO Submission Queue 和 IO Completion Queue之后,以及CSTS.RDY生效之后,命令才能被host提交。

Namespace

一个NVM Subsystem 是有不定数量的Controller,每个控制器下面有不定数量的NameSpace,每个NameSpace由不定数量的logical Block组成。如图-6所示或者图-7。

每一个NameSpace都有一个唯一的NSID值。

NS Size 定义在NameSpace data Struct中,其中NameSpace Size >= Namespcae Capacity >= Namespace Utilization。

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-6

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-7 控制器0只能访问NS A,但不能访问NS C。但NS B控制器0和控制器1都能访问。

Command Submission and Completion Processing

关于SQ和CQ命令处理,参考图-12

nvme接口,UEFI,服务器,嵌入式硬件,uefi,linux,ubuntu

图-12

解析:

  1. host创建SQEntry Command 到内存中;
  2. host更新SQ Tail Doorbell寄存器,通知Control来处理新命令;
  3. Control从Memory获取SQ command ;
  4. Control将命令放入可执行列表中,可能不按照顺序执行;
  5. 在命令被Control执行后,控制器写Completion Queue Entry 到 CQ中;表示最近SQ Entry被获取;
  6. 控制器产生一个Interrupt给host表示这有一个CQ Entry需要处理;
  7. host处理CQ Entry命令;
  8. host向CQ head Doorbell Register写值,表示CQ Entry已经被处理;
(六)代码讲解

参考MdemodulePkg/bus/pci/NvmExpressDxe模块。

(七)参考文档

参考文档:(NVM_Express_1_2_Gold_20141209)NVMe Base Specification – NVM Express文章来源地址https://www.toymoban.com/news/detail-516407.html

到了这里,关于NVME介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搭建 PXE 服务器(基于 Ubuntu 22.04,支持 IPv4/6 及 Legacy/UEFI)

    基于 Ubuntu 22.04 搭建 PXE 服务器,支持 IPv4, IPv6 网络,支持 Legacy, UEFI 启动模式。 PXE 启动大致流程如下: PXE Client(客户端)通过 DHCP 请求获取 IP,DHCP 服务器在响应请求时同时提供网络启动引导程序(Boot File)的地址(使用 TFTP 协议)。 PXE Client 获得 IP 后,访问 Boot File 地址

    2024年02月14日
    浏览(53)
  • OCP NVME SSD规范解读-3.NVMe管理命令-part1

    4.4 NVMe Admin Command Set章节详细介绍了设备应支持的NVMe管理命令集,包括必需的和可选的命令。以下是一些关键要求和描述: NVMe-AD-2:识别命令除了支持所有必需的CNS值和相关的必需字段外,还应支持以下可选字段: 格式进度指示器(FPI),更新粒度为1%。 I/O性能和耐久性提

    2024年02月04日
    浏览(49)
  • [元带你学NVMe协议] 你懂 PCIE 和 NVME是如何相依相恋?

    传送门: 总目录 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 固态硬盘中的王者,一说非PCIE 莫属,一说非NVME SSD 莫属。 PCIE 和 NVME 因何而生? PCIE 和 NVME 的联系和区别? 本着对 PCIE 和 NVME 的好奇心,本文带您一一

    2024年02月06日
    浏览(60)
  • 驱动 | Linux | NVMe | 1. NVMe Driver的前世今生和工作原理概述

    本文主要参考这里 1 ’ 2 的解析和 linux 源码 3 。 此处推荐一个可以便捷查看 linux 源码的网站 bootlin 4 。 更新:2022 / 02 / 19 NVMe 离不开 PCIe , NVMe SSD 是 PCIe 的 endpoint 。 PCIe 是 x86 平台上一种流行的外设总线,由于其 Plug and Play 的特性,目前很多外设都通过 PCI Bus 与 Host 通信,

    2024年02月16日
    浏览(44)
  • NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP

    提到NVMe over Fabric,我就会想到它的几种应用场景: 1、 存储阵列到主机的网络连接(替代FC、iSCSI等); 2、 服务器、本地NVMe存储解耦(跨机箱/JBOF),SSD存储资源池化共享; 3、 分布式存储/超融合系统内部互连? 关于上面第3点,对技术专家来说应该早有答案,而我会在下

    2024年02月02日
    浏览(47)
  • 华硕 P8B75-V 支持 NVME BIOS固件 和 刷 NVME 教程

    事前警告:刷BIOS有风险风险风险险险险 (变砖后一般可以通过烧录修复) 最近看网上的NVME硬盘很便宜 所以就买了一块 安装到电脑上。给我的老台式机升升级,买了一个 PCIE 转 NVME 协议的扩展卡。安装上以后克隆系统,以为全部搞定了。把老硬盘拿下来后发现无法启动到系

    2024年02月08日
    浏览(189)
  • NVMe驱动注释(持续更新)

    个人主页 :www.jiasun.top 界面比CSDN简洁一点,阅读体验更好,现已将全部博客迁移到个人主页,欢迎关注! 往期文章: NVMe驱动学习记录-1 NVMe驱动学习记录-2 NVMe驱动 请求路径学习记录 整合了之前文章的一些内容 源码地址:https://mirrors.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.90.ta

    2024年02月16日
    浏览(38)
  • NVMe TCG安全数据存储简介

    NVMe(非易失性内存主机控制器接口规范)与TCG(可信计算组)的集成主要体现在数据安全、固件验证和硬件信任根等方面,以确保存储设备的数据保护能力和安全性。 TCG Opal定义了一套针对自加密硬盘(SED, Self-Encrypting Drives)的标准化安全子系统类(SSC, Security Subsystem Class)

    2024年01月23日
    浏览(39)
  • VMware ESXi添加NVMe硬盘扩容

    18年春节,也就是2月份,我买了第一块NVMe固态硬盘,容量是250G,价格是499块,券后481块。当时对于这种读取2100 MBps,写入1300 MBps的高性能产品,我直呼太值了!毕竟当时SATA接口的固态盘也要四百块左右,而速度只有600 MBps。 后台因为容量问题,又在2019年国庆买了一块500G的

    2024年02月06日
    浏览(47)
  • 解决nvme m2硬盘睡眠/休眠掉盘问题

    nvme m2硬盘睡眠/休眠掉盘, 在网上几乎翻遍了资料, 用了各种建议的方法花了好几个小时都没解决, 最后在贴吧找到了方法, https://tieba.baidu.com/p/5763044188?pn=1 ,特写此文帮助其他童鞋, 避免再浪费时间多绕弯路, 下面是具体过程及详细步骤 电脑: 神舟tx9 系统: win10 故障

    2024年02月05日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包