NVMe over Fabrics 支持即将登陆 Linux 4.8 内核
闪存峰会最近在加利福尼亚州圣克拉拉市闭幕,只有一种闪存技术抢尽了风头:NVMe over Fabrics (NVMeF)。从众多的演示和公司公告来看,NVMeF 显然是与会者最感兴趣的话题。
随着 2011 年首次行业规范的发布,Non-Volatile Memory Express (NVMe) 迅速崛起为固态硬盘 (SSD) 技术的前沿。从历史上看,SSD 构建于串行 ATA (SATA)、串行连接 SCSI (SAS) 和光纤通道总线之上。这些接口在闪存技术成熟的早期运行良好,但由于所有协议开销和总线速度限制,这些驱动器很快就遇到了性能瓶颈。如今,现代 SAS 驱动器的运行速度为 12 Gbit/s,而现代 SATA 驱动器的运行速度为 6 Gbit/s。这就是技术将重点转向 PCI Express (PCIe) 的原因。随着总线更靠近 CPU,并且 PCIe 能够以越来越出色的速度运行,SSD 似乎非常适合。使用 PCIe 3.0,现代驱动器可以达到高达 40 Gbit/s 的速度。正是利用 PCIe 的优势,才构思出了 NVMe。对 NVMe 驱动器的支持已集成到 Linux 3.3 主线内核(2012 年)中。
真正使 NVMe 在操作系统的 SCSI 堆栈之上脱颖而出的是其更简单、更快速的排队机制。这些机制被称为提交队列 (SQ) 和完成队列 (CQ)。每个队列都是一个固定大小的循环缓冲区,操作系统使用它向 NVMe 控制器提交一个或多个命令。其中一个或多个队列也可以固定到特定的核心,从而实现更不间断的操作。
几乎立即,PCIe SSD 就以更高的价格面向企业级计算市场销售。尽管仍然比其 SAS 或 SATA 同类产品更昂贵,但每千兆字节闪存的美元价格持续下降,足以说服更多公司采用该技术。然而,仍然存在一个问题。与 SAS 或 SATA SSD 不同,NVMe 驱动器的可扩展性不太好。它们被限制在插入的服务器中。
在 SAS 或 SATA 的世界中,您有存储区域网络 (SAN)。SAN 的设计围绕 SCSI 标准。SAN(或任何其他存储网络)的主要目标是跨网络中的一个或多个路径向单个或多个操作系统主机提供对一个或多个存储卷的访问。如今,最常用的 SAN 是基于 iSCSI,即基于 TCP/IP 的 SCSI。从技术上讲,NVMe 驱动器可以在 SAN 环境中配置,尽管协议开销会引入延迟,使其成为不太理想的实现方式。2014 年,NVMe Express 委员会准备通过 NVMeF 标准来纠正这一问题。
NVMeF 背后的目标很简单:启用一个 NVMe 传输桥,该桥构建于 NVMe 排队架构之上,并避免除支持的 NVMe 命令(端到端)之外的任何和所有协议转换开销。通过这样的设计,网络延迟显着降低(小于 200 纳秒)。这种设计依赖于 PCIe 交换机的使用。还有第二种设计正在兴起,它基于使用远程直接内存访问 (RDMA) 的现有以太网结构。

两个网络的对比:PCIe Fabrics 与其他存储网络的比较
说它是巧合也好,但最近发布的 4.8 内核的第一个候选版本引入了大量新代码来支持 NVMeF。这些补丁是由英特尔、三星和其他公司的辛勤工作的开发人员共同努力提交的。三个主要组件被修补到内核的候选版本中。这包括通用的 NVMe 目标支持框架。该框架使块设备能够使用 NVMe 协议从 Linux 内核导出。依赖于此框架,现在支持 NVMe 环回设备以及 NVMe over Fabrics RDMA 目标。如果您还记得,最后一部分是两种更常见的 NVMeF 部署之一。当导出目标时,它使用“唯一”的 NVMe Qualified Name (NQN) 完成。这个概念与 iSCSI Qualified Name (IQN) 非常相似。此 NQN 使其他操作系统能够导入和使用网络上的远程 NVMe 设备,该网络可能托管多个 NVMe 设备。
无论如何,固态硬盘和 Linux 内核方面正在进行许多新的、令人兴奋的事情。我们只需要睁大眼睛,看看接下来会发生什么。