目录
第一章 简介 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
1