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掛起以及邏輯卷管理等情況。有關詳細信息,請參閱3.6塊設備用戶指南。
最后,SPDK提供基於這些組件構建的NVMe-oF,iSCSI和vhost服務器,這些服務器能夠通過網絡或其他進程提供磁盤。NVMe-oF和iSCSI的標准Linux內核啟動器與這些目標以及帶有vhost的QEMU互操作。與其他實現相比,這些服務器的CPU效率可高達一個數量級。這些目標可用作如何實現高性能存儲目標的示例,或用作生產部署的基礎。
完整文章鏈接:
https://files.cnblogs.com/files/whl320124/SPDK_cn.zip
英文官網地址: