SPDK官方文档中文版

徘徊边缘 提交于 2019-11-28 07:27:41

SPDK(存储性能开发套件)官方文档中文版

(2019年8月版,译:王海亮)

 

 

目录

第一章 简介... 1

1.1.什么是SPDK?... 1

1.2.入门... 1

1.3. Vagrant开发环境... 3

1.4.更新日志(略)... 6

第二章 概念... 6

2.1. 用户空间驱动程序**. 6

2.2. 来自用户空间的DMA**. 7

2.3. 消息传递和并发**. 9

2.4. NAND Flash SSD内部... 13

2.5. 将I / O提交到NVMe设备**. 15

2.5.1 NVMe规范... 15

2.5.2 SPDK NVMe驱动程序I / O路径... 15

2.6. 使用Vhost-user进行虚拟化I / O. 16

2.6.1 介绍... 16

2.6.2 QEMU.. 17

2.6.3 设备初始化... 18

2.6.4 I / O路径... 19

2.6.5 SPDK优化... 20

2.7. SPDK目录结构概述... 20

2.8. SPDK移植指南... 22

第三章 用户指南... 22

3.1. 系统配置用户指南... 22

3.1.1 IOMMU配置... 22

3.2. SPDK应用程序概述... 23

3.2.1  配置SPDK应用程序... 23

3.3. iSCSI Target 26

3.3.1. iSCSI Target入门指南... 26

3.3.2. 通过配置文件配置iSCSI Target 27

3.3.3. 通过RPC方法配置iSCSI Target 28

3.3.4. 配置iSCSI启动器... 29

3.3.5. rpc配置示例***. 30

3.3.6. iSCSI 热插拔... 32

3.4. NVMe over Fabrics Target 32

3.5. Vhost Target(略)... 37

3.6 块设备用户指南... 38

3.6.1 bdev介绍... 38

3.6.2 通用RPC命令... 38

3.6.3 Ceph RBD.. 39

3.6.4 压缩虚拟Bdev模块... 40

3.6.5 加密虚拟Bdev模块... 41

3.6.6 延迟vbdev模块... 41

3.6.7 GPT(GUID分区表)... 42

3.6.8 iSCSI bdev. 43

3.6.9 Linux AIO bdev. 43

3.6.10 OCF虚拟bdev. 43

3.6.11 Malloc bdev. 44

3.6.12 NULL bdev. 44

3.6.13 NVMe bdev. 44

3.6.14 逻辑卷Lvol 45

3.6.15 RAID.. 46

3.6.16 Passthru. 46

3.6.17 Pmem.. 46

3.6.18 Virtio Block. 47

3.6.19 Virtio SCSI 47

3.7 BlobFS(Blobstore文件系统)... 48

3.7.1 RocksDB集成... 48

3.7.2 FUSE插件... 49

3.8 JSON-RPC方法(略)... 49

第四章 程序员指南... 49

4.1. Blobstore程序员指南... 49

4.1.1 介绍... 50

4.1.2 运作理论... 50

4.1.3 设计注意事项... 52

4.1.4 例子... 54

4.1.5配置... 54

4.1.6 组件细节... 54

4.2. 块设备层编程指南... 56

4.3 编写自定义块设备模块... 58

4.3.1 介绍... 58

4.3.2 创建一个新模块... 59

4.3.3创建虚拟Bdev. 60

4.4 NVMe over Fabrics目标编程指南... 61

4.4.1 介绍... 61

4.4.2 原语结构体... 61

4.4.3 基础函数... 62

4.4.4访问控制... 62

4.4.5发现子系统... 62

4.4.6 传输... 63

4.4.7选择线程模型... 63

4.4.8 跨CPU核心扩展... 63

4.4.9 零拷贝支持... 63

4.4.10 RDMA. 63

4.5 Flash传输层... 64

4.5.1 术语... 64

4.5.2 使用方法... 67

4.6 GDB宏用户指南... 69

4.6.1 介绍... 69

4.6.2 加载gdb宏... 71

4.6.3 使用gdb数据目录... 72

4.6.4 使用.gdbinit加载宏... 72

4.6.5 为什么我们需要显式调用spdk_load_macros. 72

4.6.6 以上可用的宏总结... 73

4.6.7 添加新宏... 73

4.7 SPDK “Reduce”块压缩算法... 73

4.7.1 介绍... 73

4.7.2 例子... 74

4.8 通知库... 78

第五章 基本信息... 79

5.1 事件框架... 79

5.1.1 事件框架设计注意事项... 80

5.1.2 SPDK事件框架组件... 80

5.1.3 应用框架... 80

5.2 逻辑卷... 81

5.2.1 术语... 81

5.2.2 配置逻辑卷... 84

5.3 矢量数据包处理(略)... 86

第六章 杂项... 86

6.1 介绍... 86

6.2 NVMe的P2P API 86

6.3 确定设备支持... 87

6.4 P2P问题... 87

第七章 驱动程序... 88

7.1 NVMe驱动程序***. 88

7.1.1 介绍... 88

7.1.2 例子... 88

7.1.3 公共接口... 89

7.1.4 NVMe驱动程序设计... 89

7.1.5 NVMe over Fabrics主机支持... 91

7.1.6 NVMe多进程... 91

7.1.7 NVMe Hotplug. 92

7.2 I/OAT驱动程序... 93

7.2.1 公共接口... 93

7.2.2 关键功能... 93

7.3 Virtio驱动程序... 93

7.3.1 介绍... 93

7.3.2 2MB大页面... 93

第八章 工具... 94

8.1 SPDK CLI 94

8.1.1 安装所需的依赖项... 94

8.1.2 运行SPDK应用程序实例... 94

8.1.3 运行SPDK CLI 94

8.1.4 可选 - 创建Python虚拟环境... 94

8.2 nvme-CLI 95

8.2.1 nvme-cli with SPDK入门指南... 95

8.2.2 使用场景... 95

第九章 性能测试报告(略)... 96

第十章NVMe-oF Target跟踪点***. 96

10.1 介绍... 96

10.2 启用跟踪点... 97

10.3 捕获事件的快照... 97

10.4 捕获足够的跟踪事件... 98

10.5 添加新的跟踪点... 99

 

 

 (正文)

第一章 简介

 

1.1.什么是SPDK?

存储性能开发工具包(SPDK)提供了一组工具和库,用于编写高性能,可伸缩的用户模式存储应用程序。它通过使用一些关键技术实现了高性能:

将所有必需的驱动程序移动到用户空间,这样可以避免系统调用并启用应用程序的零拷贝访问。

轮询硬件用于完成而不是依赖中断,这降低了总延迟和延迟差异。

避免I / O路径中的所有锁定,而是依赖于消息传递。

SPDK的基石是用户空间,轮询模式,异步,无锁NVMe驱动程序。这提供了从用户空间应用程序直接到SSD的零拷贝,高度并行访问。驱动程序被编写为带有单个公共头的C库。有关详细信息,请参阅 7.1 NVMe驱动程序。

SPDK还提供了一个完整的块堆栈作为用户空间库,它执行许多与操作系统中的块堆栈相同的操作。这包括统一不同存储设备之间的接口,排队以处理诸如内存不足或I / O挂起以及逻辑卷管理等情况。有关详细信息,请参阅阻止设备用户指南

最后,SPDK提供基于这些组件构建的NVMe-oFiSCSIvhost服务器,这些服务器能够通过网络或其他进程提供磁盘。NVMe-oF和iSCSI的标准Linux内核启动器与这些目标以及带有vhost的QEMU互操作。与其他实现相比,这些服务器的CPU效率可高达一个数量级。这些目标可用作如何实现高性能存储目标的示例,或用作生产部署的基础。

 

完整文章链接:

https://files.cnblogs.com/files/whl320124/SPDK_cn.zip

英文官网地址:

https://spdk.io/doc/

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!