一. 背景
NVMe是一种抽象的传输协议层,旨在提供可靠的NVMe命令和数据传输。NVMe over Fabric (NVMe-oF) 实现了NVMe标准在PCIe总线上的扩展,可以支持数据中心的网络存储,它支持多种传输方式包括FC,RDMA和TCP。NVMe-oF服务(应用) 是SPDK中非常重要的组成部分,也是SPDK感兴趣和使用最多的模块之一。SPDK NVMe-oF 应用已经有很多的文章介绍过它(比如,最近一篇“网络编程的未来,io_uring?”),在20.01版本中,我们增加了NVMe-oF example(下文简写为nvmf)进一步展示它的实现(代码位于 spdk_dir/examples/nvmf/),方便用户的理解和使用,包括搭建自己的NVMe-oF Target应用。
二. 为什么需要nvmf example?
SPDK已经有了NVMe-oF target应用,为什么还要增加一个example呢?主要有以下几点目的:
-
更直观的展示SPDK thread的实现。
-
展示如何使用SPDK lib 实现一个NVMe-oF target应用。
-
快速验证nvmf功能。
事实上,SPDK不仅仅提供APP,还提供用户态driver和lib,因此用户也可以根据实际的需求选择直接用我们的APP,还是用SPDK提供的lib自己开发,nvmf example就提供了一个这样的平台,展示如何使用SPDK lib 实现自己的nvmf。
SPDK thread的实现:它是SPDK framework的重要组成部分 [1] ,也是实现SPDK 无锁的基础。事实上,我们已经有一篇微信文章详细介绍了SPDK thread的实现 [2] ,这个example更直观的展示了如何使用SPDK lib实现SPDK thread layer,以及thread的调度算法。
NVMe-oF target的实现&