除了 NVMe 基本规范外,该组织还负责其他几项规范:NVMe over Fabrics (NVMe-oF) 基于网络连接架构使用 NVMe 命令, NVMe Management Interface (NVMe-MI)用于在服务器与存储系统中管理 NVMe/PCIe SSD。 NVMe-oF 传输协议 光纤通道 (NVMe/FC):FC-NVMe 和 FC-SCSI 同样都基于 FCP,IO 交互基于 Exchange。 TCP (NVMe/TCP):基于现有的 IP 网络,采用 TCP 协议传输 NVMe,在网络基础设施不变的情况下实现端到端 NVMe。 NVMe-oF 网络要求 协议要求 如上所述,NVMe-oF 解决方案不同,要求也不尽相同: >专用网络 NVMe/IB:使用基于 InfiniBand 网络的 RDMA。
NVMe的手下大将就是PCIe,它所制定的任何命令,都交由虎将PCIe去完成。虽然NVMe的命令可能可以由别的接口协议完成,但NVMe与PCIe合作形成的战斗力无疑是最强的。 NVMe是为SSD所生的。NVMe出现之前,SSD绝大多数走的是AHCI和SATA的协议,后者其实是为传统HDD服务的。 下面是NVMe1.2支持的命令列表: NVMe支持的Admin Command: ? ? NVMe支持的I/O Command: ? OK,具体的我们来看看NVMe是如何处理命令的,看图说话: ? 这是NVMe1.2规范中的第207张图。 于是,我把标题从”蛋蛋读NVMe”改成”蛋蛋读NVMe之一”,后面还有之二,之三。。。
说到NVMe,“快”是人们对它的第一印象。因为NVMe的出现,硬盘的性能得到了极大的提升。那到底什么是NVMe呢? 什么是NVMe? NVMe是一种高性能、NUMA(非统一内存访问)优化的、高度可扩展的存储协议,用于连接主机和内存子系统。NVMe是专门为NAND、闪存等非易失性存储设计的,NVMe协议建立在高速PCIe通道上。 ? 与SCSI和ATA命令集相比,NVMe提供了更加简化的命令集来处理I/O请求。相对于前两者,NVMe需要的CPU指令数量少一半。 ? NVMe的本质是上建立了多个计算机与存储设备的通路。 NVMe的优势包括: 低延时,NVMe协议可以通过PCIe通道跟CPU直接相连,数据不需要像SATA一样需要通过控制器再中转到CPU; IOPS大增,NVMe则可以把最大队列深度从32提升到64000, 写在最后 NVM Express Inc.在2016年6月发布了1.0版的NVMe over Fabrics(简称NVMe-OF),NVMe-OF的出现,就是将NVMe应用到前端,作为存储阵列与前端主机连接的通道
####添加图标路径########## ImagePath /home/Bobby/Pictures:+ ImagePath /usr/share/icons/hicolor/16×16/apps/:+ ImagePath /usr/share/icons/hicolor/22×22/apps/:+ ImagePath /usr/share/icons/hicolor/24×24/apps/:+ ImagePath /usr/share/icons/hicolor/32×32/apps/:+ ImagePath /usr/share/icons/hicolor/36×36/apps/:+ ImagePath /usr/share/icons/hicolor/48×48/apps/:+ ImagePath /usr/share/icons/hicolor/64×64/apps/:+ ImagePath /usr/share/icons/hicolor/72×72/apps/:+ ImagePath /usr/share/icons/hicolor/96×96/apps/:+ ImagePath /usr/share/icons/hicolor/128×128/apps/:+ ImagePath /usr/share/icons/hicolor/192×192/apps/:+ ImagePath /usr/share/icons/hicolor/256×256/apps/:+
全文概览 文章探讨了如何结合CXL和NVMe技术以实现高性能计算存储系统。 整体上,文章强调了CXL和NVMe结合在提升计算存储性能方面的潜力及其在数据处理中的应用前景。 为什么结合 CXL 和 NVMe技术? 配备 CXL SLM 的 NVMe 设备将使用增强型的 NVMe 驱动程序: 针对基于 CXL 的 SLM 配置进行了增强。 主机发出 NVMe® 执行程序命令至计算命名空间。 ® 技术可以同时使用 CXL 提供对 NVMe SLM 的加载/存储访问 CXL 和 NVMe 协同工作,支持 NVMe I/O 命令集,包括计算存储命令集 优势: 设备 SLM 和主机之间的一致性 小数据传输时
图中表格比较不同模拟器技术在NVMe 多个特性上的支持情况。 Trace-driven(基于轨迹驱动的模拟器) 无法部署到真实环境中,执行速度快,但缺乏现代存储功能支持(例如 NVMe 多队列)。 NVMe 指令通过 PCIe(外围组件互连高速通道)直接与 NVMe SSD 通信。 特点 直接硬件访问。 高性能和低延迟。 操作系统通过 I/O 堆栈生成 NVMe 指令。 NVMe 指令由 Hypervisor(虚拟机管理程序)处理,并转发到虚拟 NVMe SSD。 特点 提供对硬件抽象的访问。 适用于虚拟化环境。 提供以下功能 NVMe Controller Emulator(NVMe 控制器仿真器) 管理队列对(Administration Queue Pair) 处理控制和管理命令。 模拟多种存储模型 NVMVirt 是一种基于软件的虚拟化 NVMe 设备,使用轻量级内核模块实现 提供完整的 NVMe 控制器功能(例如队列管理、DMA 引擎)。
/SATA盘与NVMe盘混插(NVMe盘数量最多12个)。 2 GPU是怎么勾搭NVMe的 R840和R940xa这次无一例外的都支持大量NVMe槽位。GPU配NVMe,也算是好马配好鞍。 但是,NVMe是连接到CPU上,而NVMe的数据也需要先到DDR RAM,然后才能被GPU访问。而DDR RRAM也是连接到CPU上。如下图所示。 ? 为何不能让GPU直接从NVMe读数据呢?其实是可以的,只要GPU内部跑一个NVMe驱动就可以了,并负责NVMe的枚举、初始化操作,这样就与CPU完全没什么关系了。 最好的办法是依然让Mr.CPU+OS来枚举初始化和配置NVMe,但是读写数据的时候可以让GPU与NVMe直接沟通。
NVMe规范的出现主要是应对这些挑战。 什么是NVMe? NVMe是一种高性能的NUMA(非统一内存访问)优化和高度可扩展的存储协议,可将主机连接到内存子系统。 NVMe架构 - 了解I/O队列 让我们深入探讨NVMe架构以及它如何实现高性能和低延迟。NVMe可以支持多个I/O队列,最多64K,每个队列有64K条目。 根据系统配置和预期工作负载,NVMe主机软件可以创建最多NVMe控制器允许的最大队列。NVMe支持分散/收集IO,最大限度地减少数据传输的CPU开销,甚至可以根据工作负载要求更改其优先级。 图2 简化的NVMe架构视图 为什么NVMe从多核处理器获得最佳性能 如上所述,NVMe是NUMA优化协议。这允许多个CPU核心共享队列的所有权,它们的优先级,以及仲裁机制和命令的原子性。 NVMe协议创新功能 NVMe专为高性能和非易失性存储介质而设计,是唯一在高要求和计算密集型企业,云和边缘数据生态系统中脱颖而出的协议。
综述 NVMe over PCIe协议,定义了NVMe协议的使用范围、指令集、寄存器配置规范等。 >NVMe SSD 1)基本架构 整体来看,NVMe SSD可以分为三部分,host端的驱动(NVMe官网以及linux、Windows已经集成了相应的驱动)、PCIe+NVMe实现的控制器以及FTL+ 2)NVMe控制器 NVMe控制器实质上为DMA + multi Queue,DMA负责数据搬运(指令+用户数据),多队列负责发挥闪存的并行能力。 NVMe协议定义的内容相当于PCIe的上一层应用层,处于应用层。PCIe给NVMe提供了底层的抽象。 NVMe SSD相当于一个PCIe的端设备(EP)。 NVMe控制器取SQ中命令(通过HDB和TDB可以判断是否有未完成命令); 4. NVMe控制器执行命令; 5.
虚拟机用的nvme ssd盘的大小和数据在创建虚拟机时指定,不用支持动态添加nvme ssd和虚拟机带nvme ssd热迁移,nvme ssd数据不做多副本。 /dev/nvme7 -n 1 -c 0 nvme delete-ns /dev/nvme7 -n 1 nvme reset /dev/nvme7 nvme create-ns /dev/nvme7 -s 975175680 -c 975175680 -f 0 -d 0 -m 0 nvme attach-ns /dev/nvme7 -n 1 -c 0 nvme create-ns /dev/nvme7 -s 975175680 -c 975175680 -f 0 -d 0 -m 0 nvme attach-ns /dev/nvme7 -n 2 -c 0 nvme create-ns /dev/nvme7 nvme format -s1 /dev/nvme7n1 nvme format -s1 /dev/nvme7n2 方案 总体上来说,pci passthrough一个nvme ssd只能给一个虚拟机用
先看系统日志:确认错误是否持续dmesg | grep nvme9n1 | tail -50看是否 持续报错(比如每几秒一次 I/O error)。如果只有 一两次,可能是偶发,不一定真坏。 用 NVMe 工具查健康状态sudo smartctl -a /dev/nvme9n1字段正常值说明Critical Warning0x00非 0 就报警Media and Data Integrity 查看 NVMe 错误日志sudo nvme error-log /dev/nvme9n1看是否有 大量报错,错误条数 >100 或 每次查询都在涨 → 盘片/固件/链路至少有一个在持续出错,建议直接踢盘 但 252 块盘全部 DISK_OK,说明 Pangu 还没把 nvme9n1 标记为故障。Abnormal Chunks 只有 2 个且 副本数并未归零 → 全局数据安全,今晚可以睡个好觉。 检查文件系统是否只读或掉盘lsblk | grep nvme9n1mount | grep nvme9n1如果盘已掉线(lsblk 看不到),或文件系统变只读,说明盘已不可恢复。
前) 企业级SAN/NAS 高性能数据库 大规模对象/归档存储 03 NVMe 开启性能 01 性能跃迁 从SATA/SAS接口到基于PCIe总线的NVMe协议的转变,不仅仅是一次简单的速度提升,而是一场存储性能的革命 这种大规模的并行处理能力使得NVMe SSD能够与现代多核CPU架构完美协同。 05 NVMe时代RAID创新 面对NVMe和AI带来的双重挑战,存储行业做出了一系列创新性的回应。 此外,它们还整合了先进的PCIe交换技术,能够高效管理大规模的NVMe设备集群 41。 , SATA, M.2, accessed August 22, 2025, https://www.kingston.com/en/ssd/what-is-nvme-ssd-technology NVMe
存储 SR-IOV 介绍 图右是云化环境存储路径,虚拟化管理层(绿底)IO路径,效率不高;NVMe SSD 基于 SR-IOV能简化IO路径,提升效率。 功能区分: • 物理功能(PF):真实NVMe设备,负责配置和访问。 • 虚拟功能(VF):用于数据交换,由供应商定义具体用途。 • 允许VMM直接访问设备级NVME队列。 • 分离了快速I/O路径和慢速路径(如配置和重置)。 3. 架构特点: • 主机上的VMM虚拟设备组合管理多个VM。
本文使用两台PC,一台做NVMe over Fabrics Target(服务端),一台做NVMe over Fabrics initiator(客户端)。 /configure --with-rdma make 3.启动NVMe-oF target # modprobe nvme_rdma # scripts/setup.sh setup会把nvme盘的驱动由 nvme改为uio_pci_generic ? 盘 # scripts/rpc.py bdev_nvme_attach_controller -b Nvme0 -t PCIe -a 0000:01:00.0 # scripts/rpc.py nvmf_create_subsystem 4.disconnect # nvme disconnect -n "nqn.2016-06.io.spdk:cnode1" # nvme disconnect -n "nqn.2016-06.io.spdk
该基于CXL的NVMe-oC SSD可以被系统识别为标准的NVMe SSD以及一块可以直接被主机访问的内存区域(HDM),从而实现了更优化的缓存管理和数据访问。 图片描绘了使用CXL技术的NVMe存储解决方案的软件架构。 图片展示了一个用于演示NVMe over CXL技术的平台。 图注:NVMe-oC 支持下的SSD直接访问 柱状图对比了NVMe-oC SSD和传统SSD在不同负载下的读写性能。 这归因于NVMe-oC技术通过CXL总线实现的更高效的内存和数据管理。 图片比较了不同内存配置下Redis的性能,包括仅使用DRAM、仅使用HDM以及使用NVMe-oC连接的HDM和SSD的组合。
从内核中NVMe IO框架来看其中存在的问题 当前Linux内核中对NVMe SSD的访问是通过MQ框架来实现的,接入NVMe驱动后直接略过IO调度器,具体实现上来说是从block layer中的通用块层回调 从应用本身的IO Pattern来看使用NVMe问题 我们在评测一个NVMe SSD的性能的时候,往往都是通过benchmark工具,例如见1, 见2。 低估了NVMe的长尾延迟 然而在另外一些场景下,队列深度又会非常高(比如到1024甚至更高),在这种情况下NVMe SSD带来的QoS长尾延迟影响比上面的benchmark的测试又严重得多。 也就是说,我们很难通过direct IO来达到压满NVMe盘的目的。如果一定要打满NVMe盘,那么一方面要提高进程并发,另外一方面还要提高多进程多文件的并发。而这是生产系统中很难满足的。 这个功能在当前主流厂商的最新的NVMe SSD中已经支持。
简介 NVMe over Fabrics (NVMe-oF) 是 NVMe 网络协议对以太网和光纤通道的扩展,可在存储和服务器之间提供更快、更高效的连接,并降低应用程序主机服务器的 CPU 利用率 NVM 这包括启用存储系统的前端接口、横向扩展至大量 NVMe 设备以及扩展数据中心内可访问 NVMe 设备和 NVMe 子系统的距离 NVMe over Fabrics 规范的制定工作于 2014 年开始,目标是将 nvme_admin_get_log_page = 0x02 enum nvme_admin_opcode nvme管理命令 -> linux/nvme.h nvme_submit_admin_passthru nvme_init_request nvme_req(req)->flags |= NVME_REQ_USERCMD nvme_map_user_request -> nvme_alloc_request nvme_start_ctrl(&ctrl->ctrl) -> 启动nvme控制器, struct nvme_ctrl 抽象 NVMe 设备中和 NVMe 协议相关的部分 nvme_start_keep_alive
什么是NVMe-oF? NVMe-oF v1.0规范于2016年6月发布。NVMe-oF是一种网络协议,它通过网络存储扩展了非易失性内存高速接口(NVMe)协议的并行访问和低延迟特性。 基于TCP的NVMe(NVMe/TCP)的惊人速度和效率使其成为当今大规模性能敏感型工作负载的有前景的云存储协议。 什么是基于TCP的NVMe? 像NVMe/TCP这样的技术进步可以引发数据中心架构的范式转变。 NVMe/TCP作为NVMe-oF的一个子集,结合了NVMe的高性能以及使用TCP作为传输层的标准以太网网络的普遍性和成本效益。 像 NVMe/TCP 这样的技术创新通过降低部署 NVMe-oF 的成本和复杂性来加速 NVMe 的采用。
目前,NVMe SSD最高搭载PCIe Gen4通路,其理论有效带宽为7.877GB/s。 基础知识 NVMe协议基于PCIe协议之上实现NVMe Host与NVMe SSD之间高速数据通信。 NVMe NVMe同PCIe一样也是标准的协议,对于NVMe协议的入门建议大家可以看看这本书 《NVMe科普教程 》古猫著(新手必备) 出了新手村以后,必要的还是需要反复啃一下NVMe的Specification 注意NVMe 1.3和1.4有一些不同,我先读了1.4,后续发现大多数硬盘都是1.3版本的NVMe协议,后续又读了1.3。大家可以直接上手NVMe 1.3。 架构分析 现有NVMe存储系统均为复杂计算体系中的存储子系统,目前暂无NVMe 主控芯片用于搭建独立存储系统。 考虑到PCIe协议的高速吞吐量及NVMe协议的特性本系统采用软硬结合的方式实现NVMe协议。PL端实现PCIe的协议层,PS端实现PCIe总线枚举及NVMe协议。
虚拟机用的nvme ssd盘的大小和数据在创建虚拟机时指定,不用支持动态添加nvme ssd和虚拟机带nvme ssd热迁移,nvme ssd数据不做多副本。 /dev/nvme7 -n 1 -c 0 nvme delete-ns /dev/nvme7 -n 1 nvme reset /dev/nvme7 nvme create-ns /dev/nvme7 -s 975175680 -c 975175680 -f 0 -d 0 -m 0 nvme attach-ns /dev/nvme7 -n 1 -c 0 nvme create-ns /dev/nvme7 -s 975175680 -c 975175680 -f 0 -d 0 -m 0 nvme attach-ns /dev/nvme7 -n 2 -c 0 nvme create-ns /dev/nvme7 nvme format -s1 /dev/nvme7n1 nvme format -s1 /dev/nvme7n2 方案 总体上来说,pci passthrough一个nvme ssd只能给一个虚拟机用