1. NVMe概述

  • NVMe是一个针对基于PCIe的固态硬盘的高性能的、可扩展的主机控制器接口。
  • NVMe的显著特征是提供多个队列来处理I/O命令。单个NVMe设备支持多达64K个I/O 队列,每个I/O队列可以管理多达64K个命令。
  • 当主机发出一个I/O命令的时候,主机系统将命令放置到提交队列(SQ),然后使用门铃寄存器(DB)通知NVMe设备。
  • 当NVMe设备处理完I/O命令之后,设备将处理结果写入到完成队列(CQ),并引发一个中断通知主机系统。
  • NVMe使用MSI/MSI-X和中断聚合来提高中断处理的性能。

2. SPDK概述

The Storage Performance Development Kit (SPDK) provides a set of tools and libraries for writing high performance, scalable, user-mode storage applications. It achieves high performance by moving all of the necessary drivers into userspace and operating in a polled mode instead of relying on interrupts, which avoids kernel context switches and eliminates interrupt handling overhead.

SPDK(存储性能开发套件)为编写高性能的、可扩展的、用户态存储应用提供了一套工具和库函数。SPDK之所以能实现高性能,是因为所有必要的驱动被挪到了用户空间运行,使用轮询模式代替了中断模式,从而避免了内核上下文切换和消除了中断处理开销。

The bedrock of SPDK is a user space, polled-mode, asynchronous, lockless NVMe driver. This provides zero-copy, highly parallel access directly to an SSD from a user space application. The driver is written as a C library with a single public header. Similarly, SPDK provides a user space driver for the I/OAT DMA engine present on many Intel Xeon-based platforms with all of the same properties as the NVMe driver.

SPDK的基石是一个运行在用户空间的、采用轮询模式的、异步的、无锁的NVMe驱动。用户空间应用程序可直接访问SSD盘,而且是零拷贝、高度并行地访问SSD盘。该驱动程序实现为一个C函数库,该函数库携带一个单一的公共头文件。类似地,SPDK为许多基于Intel至强平台的I/OAT DMA引擎提供了一个用户空间驱动程序,NVMe驱动所具备的所有属性,该驱动程序都具备。

SPDK also provides NVMe-oF and iSCSI servers built on top of these user space drivers that are capable of serving disks over the network. The standard Linux kernel iSCSI and NVMe-oF initiator can be used (or the Windows iSCSI initiator even) to connect clients to the servers. These servers can be up to an order of magnitude more CPU efficient than other implementations.

SPDK还提供了NVMe-oF和基于这些用户空间驱动程序构建的iSCSI服务器, 从而有能力提供网络磁盘服务。客户端可以使用标准的Linux内核iSCSI和NVMe-oF initiator(或者甚至使用Windows的iSCSI initiator)来连接服务器。跟其他实现比起来,这些服务器在CPU利用效率方面可以达到数量级的提升。

SPDK is an open source, BSD licensed set of C libraries and executables hosted on GitHub. All new development is done on the master branch and stable releases are created quarterly. Contributors and users are welcome to submit patches, file issues, and ask questions on our mailing list.

SPDK是一个开源的、BSD授权的集C库和可执行文件一体的开发套件,其源代码通过GitHub托管。所有新的开发都放到master分支上,每个季度发布一个稳定版本。欢迎代码贡献者和用户提交补丁、报告问题,并通过邮件列表提问。

3. SPDK/NVMe驱动概述

The NVMe driver is a C library that may be linked directly into an application that provides direct, zero-copy data transfer to and from NVMe SSDs. It is entirely passive, meaning that it spawns no threads and only performs actions in response to function calls from the application itself. The library controls NVMe devices by directly mapping the PCI BAR into the local process and performing MMIO. I/O is submitted asynchronously via queue pairs and the general flow isn't entirely dissimilar from Linux's libaio.

NVMe驱动是一个C函数库,可直接链接到应用程序从而在应用与NVMe固态硬盘之间提供直接的、零拷贝的数据传输。这是完全被动的,意味着不会开启线程,只是执行来自应用程序本身的函数调用。这套库函数直接控制NVMe设备,通过将PCI BAR寄存器直接映射到本地进程中然后执行基于内存映射的I/O(MMIO)。I/O是通过队列对(QP)进行异步提交,其一般的执行流程跟Linux的libaio相比起来,并非完全不同。

进一步的详细信息,请阅读这里。

4. 其他NVMe驱动实现

  • Linux内核NVMe驱动 : 去官网www.kernel.org或者镜像下载内核源代码,然后阅读include/linux/nvme.h, drivers/nvme
  • NVMeDirect : 这是韩国人发起的一个开源项目,跟SPDK/NVMe驱动类似,但是严重依赖于Linux内核NVMe驱动的实现。 可以说,NVMeDirect是一个站在巨人肩膀上的用户态I/O框架。
Do not let what you cannot do interfere with what you can do. | 别让你不能做的事妨碍到你能做的事。

转载于:https://www.cnblogs.com/vlhn/p/7727141.html

[SPDK/NVMe存储技术分析]001 - SPDK/NVMe概述相关推荐

  1. [SPDK/NVMe存储技术分析]012 - 用户态ibv_post_send()源码分析

    OFA定义了一组标准的Verbs,并提供了一个标准库libibvers.在用户态实现NVMe over RDMA的Host(i.e. Initiator)和Target, 少不了要跟OFA定义的Ver ...

  2. SPDK/NVMe存储技术分析之理解SGL

    在NVMe over PCIe中,I/O命令支持SGL(Scatter Gather List 分散聚合表)和PRP(Physical Region Page 物理(内存)区域页), 而管理命令只支持 ...

  3. [SPDK/NVMe存储技术分析]010 - 理解SGL

    在NVMe over PCIe中,I/O命令支持SGL(Scatter Gather List 分散聚合表)和PRP(Physical Region Page 物理(内存)区域页), 而管理命令只支持 ...

  4. 弘易信泰,企业级SAAS数据存储技术分析

    前言 "大数据" 通常指的是那些数量巨大.难于收集.处理.分析的数据集,指那些在传统基础设施中长期保存的数据,大数据存储将这些数据集持久化到计算机中.行政易作为一款SaaS软件产品 ...

  5. 技术分析之OGNL表达式概述

    1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写* 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象* 通过它 ...

  6. Microsoft .NET Pet Shop 4 架构与技术分析(转)

    Microsoft .NET Pet Shop 4 架构与技术分析 1.项目概述与架构分析微软刚推出了基于ASP.NET 2.0下的Pet Shop 4, 该版本有了一个全新的用户界面.是研究ASP. ...

  7. 存储技术对比:NVMe与SATA孰强孰弱?

    闪存的性能表现,可以说对得起它的名号了,但是它的速度还是有提升空间的,特别是在数据中心领域. 为了追求更快的存储性能,企业对NVMe越来越感兴趣.这是一项"闪存友好型"技术,可以极 ...

  8. 《深入浅出DPDK》读书笔记(十六):DPDK应用篇(基于DPDK的存储软件优化:SPDK)

    Table of Contents 基于DPDK的存储软件优化 180.基于以太网的存储系统 181.以太网存储系统的优化 SPDK介绍 182.SPDK介绍 (1)兼容性 (2)性能 183.用户态 ...

  9. 【重识云原生】第三章云存储3.2节——SPDK方案综述

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  10. 6U VPX NVME存储板 速度≥10GB/S 最大32TB

    丰科卓辰 6U VPX NVME存储板 速度≥10GB/S 最大32TB是基于FPGA与NVMe储架构定制开发的一款高端数据采集存储板卡.该板卡为标准6U 5HP VPX架构产品,选取Xilinx公司 ...

最新文章

  1. Visual C# 编程操作Excel
  2. 关于a标签的 href 与 onlick
  3. 第三阶段:2.产品运营:4.活动运营
  4. [Java 安全]加密算法
  5. oracle10g数据库热备份,Oracle10g数据库冷备份脚本文件
  6. freemarker生成word模板
  7. mods文件夹怎么创建_TCL电视怎么安装蜜蜂视频通用教程
  8. 新基建系列之:中国城市人工智能发展指数报告
  9. 贝叶斯信念网络和马尔科夫链有什么区别
  10. python爬虫的具体流程_[专栏作家]【Python】爬虫程序 (一)
  11. c语言字符型数据怎么输入输出,C语言基础之数据类型与输入/输出
  12. git 理解 HEAD^与HEAD~
  13. 互联网日报 | 4月29日 星期四 | 虎牙20亿购买LPL直播版权;返利网正式借壳登陆A股;淘宝直播全面开放官方货品池
  14. 前端SSR的落地实践
  15. 全球最大智慧集装箱码头如何做到“空无一人”?
  16. js获取当前农历时间
  17. 多个mysql共存_双mysql共存(MySQL8.0与MySQL5.7)
  18. matlab做误差棒图,科学网—Matlab误差棒、图例、颜色配比,很有用的代码 - 周锋的博文...
  19. 十大实用网站推荐(1)
  20. 浏览器控制bartender打印方案

热门文章

  1. AutoDL云GPU安装opencv-python报错解决方法
  2. 阿里安全归零实验室招聘启事
  3. 0420-如何为CDH集成Active Directory的Kerberos认证
  4. 安卓软件程序开发入门学习!带着问题深入学习Handler,面试心得体会
  5. iPhone照片删除了怎么恢复?宝藏方法分享!
  6. ClusterStorage-2-配置Cluster Storage实验
  7. 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
  8. 企业中台建设的关键思维与构建原则
  9. c语言事业单位考试试题,2020全国事业单位考试题目综合应用C类考情分析
  10. ThreadPoolExecutor自定义线程池|拒绝策略|线程工厂|统一捕获异常