初识SPDK,从SPDK的软件架构到使用实操

news/2025/1/30 17:37:37/

相信很多做存储的同学都听说过SPDK,它是Intel开发的一套开源存储栈。SPDK的全称为存储高性能开发包(Storage Performance Development Kit),从名称可以看出SPDK其实就是一个第三方的程序库。但是这个程序库却是非常强大的,下图是SPDK的软件模块图,从该图可以看出,几乎囊括了整个存储栈。

其实SPDK最早开发出来得时候功能还是比较单一的,它是作为一个用户态的NVMe驱动来发布的。这一点可以通过阅读SPDK的发布日志得到。但是到目前,SPDPK包含三层数十个功能组件。其底层是驱动层,包括NVMe驱动和经过网络的NVMe-oF驱动,这也是SPDK最开始发布的内容。

中间层则是SPDK开发的一个存储服务层,这里最核心的是提供了一个块设备抽象层。同时,在该层还实现了块存储服务常见的功能,比如逻辑卷、快照和克隆等等。

最上层则是存储协议层,包括常见的如iSCSI协议,Linux网络块存储nbd,以及NVMe相关的NVMe-oF等。通过该层的功能,主机端可以通过存储协议以远程的方式访问NVMe提供的存储功能。

我们从架构回到具体实现,如下图是SPDK的目录结构。在该目录树中,核心的三个目录分别是app、lib和module,这里面包含着SPDK中比较核心的代码。从目录名称上我们也大概能猜出其中代码的大致功能。

其中app目录包含着一些应用程序的源代码,其中包含iscsi_tgt、nvmf_tgt和spdk_dd等子目录,每个子目录可以编译成一个可以独立执行的应用程序。例如iscsi_tgt&


http://www.ppmy.cn/news/95004.html

相关文章

[Python]Flask简介与gunicorn部署

文章目录 Flask请求处理request对象 Gunicorn配置参数 使用flask run可非常方便地开发、调试web应用;但其默认服务器(Werkzeug)性能比较低,在生产环境下需要一个高性能的服务器来部署Flask服务,如Gunicorn。 Flask 安…

全志V3S嵌入式驱动开发(驱动开发准备)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 之前的文章都是教大家怎么搭建环境、看原理图、编译内核和根文件系统、做镜像,直到现在才进入驱动开发的主题。毕竟整个专栏的目的&…

Go对Json的支持[encoding/json]

数据类型中转json的函数 基本数据转json Marshal使用以下与类型相关的默认编码: 布尔值编码为JSON布尔值。 浮点数、整数和数字值编码为JSON数字。 字符串值编码为JSON字符串,强制为有效的UTF-8; 用Unicode替换符文替换无效字节。 这样JSON就可以安全地嵌入到HTML …

Zrlog接口测试:使用 fetchone() 方法从表中获取一条数据记录

# 导入 PyMySQL 库 import pymysql # 创建数据库对象 db pymysql.connect(# 设置数据库主机的地址host "192.168.199.204",# 设置数据库的用户名user "root",# 设置数据库password "123456",# 设置数据库的名称database "zrlog",…

【redis】Stream、String 超详细介绍

文章目录 一、Stream1.1 写入数据XADD条目 ID 的格式 1.2 获取数据XRANGE 和 XREVRANGEXREAD 监听新条目非阻塞形式阻塞形式 1.3 消费者组XGROUP 创建消费者组XREADGROUP 通过消费者组消费XACK 确认消息消费者组示例 1.4 XPENDING 和 XCLAIM 认领 其他消费者 的待处理消息XPEND…

To_Heart—题解——「NOI国赛 Round9」划分

大概的话就是晚鸢生完的。 可能还有的问题是对形式化题意不敏感?不知道了。 题意 给定长度为 2n 的两个序列 A,B,要求构造一个长度为 2n 的序列 C, C i C_i Ci​ A i A_i Ai​ 或 B i B_i Bi​ 。要求 C 单调不减。求 C 的方案数。 题…

数值计算 - 习题复习

1⃣️求矩阵的计算量 2⃣️求相对误差限 3⃣️根据最大误差求绝对误差限和相对误差限 ⚠️为什么使用微分? 绝对误差通过微分近似来计算基于这样的理念:如果我们在某个点附近考虑一个函数,那么该函数在该点附近的行为可以通过该点的切线来近似…

(八)K8S数据持久化存储

1.Volume讲解 概述: Volume是用于存储容器数据的抽象概念,它可以被挂载到一个或多个Pod中的一个或多个容器中。Volume提供了一种持久性的存储方式,使得容器中的数据可以在容器重启、重新调度或迁移时得以保留。 Kubernetes提供了多种类型的…