深入理解SPDK读写数据的过程,从应用到NVMe驱动

本文深入探讨SPDK NVMe驱动的数据读写过程,重点介绍spdk_nvme_ns_cmd_read/write API,阐述NVMe协议读数据的流程,包括命令提交、队列对交互、命名空间定位以及回调函数机制。同时,概述了写数据API的实现和读数据API的相似性,展示了NVMe命令如何通过PCIe transport提交并跟踪。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前文我们从使用层面介绍了基于SPDK读写数据的过程,本文将继续深入从NVMe驱动的实现层面介绍一下数据读写的相关内容。在SPDK的NVMe驱动中,两个基本的读写API分别是spdk_nvme_ns_cmd_read和spdk_nvme_ns_cmd_write。这两个API提供基于缓冲区的数据读写,也就是数据是在一段连续的内存缓冲区中。

除了上述基本的API外,SPDK还有一些扩展功能的API,以写数据的API为例,比如支持SGL的spdk_nvme_ns_cmd_writev,以及spdk_nvme_ns_cmd_writev_with_md和spdk_nvme_ns_cmd_writev_ext等函数。本文以基本API spdk_nvme_ns_cmd_read/write为例进行介绍,其他API大同小异,本文不再赘述。

在介绍函数具体实现之前,我们先了解一下NVMe协议读数据的流程,具体如下图所示。在读数据时,NVMe命令会被写入提交队列(1),然后通过门铃通知NVMe控制器命令就绪(2)。NVMe控制器接到就绪通知后会从提交队列读取命令(3),然后进行命令的处理工作(4),具体包括将数据从控制器拷贝到主机内存等。处理完成后通过完成队列通知主机,本文暂时只介绍前半部分。

了解了具体流程,接下来我们详细介绍一下具体实现。如下图是spdk_nvme_ns_cmd_read的原型,其参数包括目的命名空间、IO队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据存储张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值