當前位置:
首頁 > 科技 > 收藏:淺析SPDK技術和知識點

收藏:淺析SPDK技術和知識點

固態存儲設備正在取代數據中心。如今新一代的快閃記憶體存儲,比起傳統的磁碟設備,在性能、功耗和機架密度上具有顯著的優勢。這些現有的優勢將會繼續增大,使快閃記憶體作為下一代存儲設備進入市場。

用戶使用現在的固態設備,比如 Intel SSD DC P4600 Series Non-Volatile Memory Express(NVMe)驅動,面臨一個主要的挑戰:因為固態設備的吞吐量和延遲性能比起傳統的磁碟好太多,如今總的處理時間中,存儲軟體佔用了更大的比例。

換句話說,存儲軟體棧的性能和效率在整個存儲系統中越來越重要。隨著存儲設備繼續發展,它將面臨遠遠超過現今使用的軟體體系結構的風險(即存儲設備受制於相關軟體的不足而不能發揮全部性能)同時,在接下來的幾年裡,存儲設備將會繼續飛快發展到令人難以置信的程度。

為了提供一個完善的、端對端的參考存儲體系結構——Storage Performance Development Kit(SPDK)應運而生。SPDK已經證明很容易達到每秒鐘數百萬次I/O讀取,通過使用多個處理器核心和多個NVMe SSD進行存儲,而不需要額外的硬體。

SPDK如何工作?

達到這樣的超高性能運用了兩個關鍵技術:運行於用戶態和輪詢模式。讓我們進一步了解這兩個軟體工程術語。

首先,我們的設備驅動代碼運行在用戶態。這意味著,根據定義,驅動代碼不會在內核中運行。避免內核上下文切換和中斷可以節省大量的處理開銷,從而允許更多的時鐘周期被用來做實際的數據存儲。無論存儲演算法(去冗,加密,壓縮,空白塊存儲)多麼複雜,浪費更少的時鐘周期意味著更好的性能和很低的延遲。

這並不是說內核會增加不必要的開銷;相反,內核增加了那些可能不適用於專用存儲堆棧的通用計算用例相關的開銷。SPDK的指導原則是通過減少每一處額外的軟體開銷來達到最低時延和最高效率。

其次,輪詢模式驅動(Polled Mode Drivers,PMDs)改變了I/O的基本模型。在傳統的I/O模型中,應用程序提交讀寫請求後睡眠,一旦I/O完成,中斷就會將其喚醒。

PMDs的工作方式則不同,應用程序提交讀寫請求後繼續執行其他工作,以一定的時間間隔回過頭來檢查I/O是否已經完成。這種方式避免了中斷帶來的延遲和開銷,並使得應用程序提高I/O的效率。在旋轉設備時代(磁帶和機械硬碟),中斷開銷只佔整個I/O時間的很小的比例,因此給系統帶來了巨大的效率提升。

然而,在固態設備的時代,持續引入更低延遲的持久化設備,中斷開銷已然成為了整個I/O時間中不能被忽視的部分。這個問題在更低延遲的設備上只會越來越嚴重。系統已經能夠每秒處理數百萬個I/O,所以消除數百萬個事務的這種開銷,能夠節省額外的CPU資源。

SPDK由眾多子組件組成,相互鏈接並共享用戶態操作和輪詢模式操作的共有部分。 每一個子組件的創建都是為了客戶在構造端到端SPDK體系結構時遇到的特定功能和性能需求。同時,每一個子組件也可以被集成到非SPDK架構中,允許用戶利用SPDK中用到的經驗和技術來加速自己的軟體。

圖1 SPDK Architecture

(該構架圖主要對應了SPDK 18.07發布版本)

從下往上構建,主要的組件包括:

驅動(Drivers)

NVMe Driver:SPDK的基礎組件,這個高優化無鎖的驅動有著高擴展性、高效性和高性能的特點。

Intel QuickData Technology:也稱為Intel I/O Acceleration Technology(Inter IOAT,英特爾I/O加速技術),這是一種基於Xeon處理器平台上的copy offload引擎。通過提供用戶空間訪問,減少了DMA數據移動的閾值,允許對小尺寸I/O或NTB的更好利用。

NVMe over Fabrics(NVMe-oF)initiator:從程序員的角度來看,本地SPDK NVMe驅動和NVMe-oF啟動器共享一套共同的API命令。這意味著,例如本地/遠程複製將十分容易實現。

存儲服務

Storage Services(存儲設備)

Block device abstration layer(bdev):這種通用的塊設備抽象是連接到各種不同設備驅動和塊設備的存儲協議的粘合劑。並且還在塊層中提供靈活的API,用於額外的用戶功能,如磁碟陣列、壓縮、去冗等等。

Blobstore:為SPDK實現一個高精簡的文件式語義(非POSIX)。這可以為資料庫、容器、虛擬機或其他不依賴於大部分POSIX文件系統功能集(比如用戶訪問控制)的工作負載提供高性能基礎。

???

Blobstore Block Device:由SPDK Blobstore分配的塊設備,是虛擬機或資料庫可以與之交互的虛擬設備。這些設備得到SPDK基礎架構的優勢,意味著零拷貝和令人難以置信的可擴展性。

Logical Volume:類似於內核軟體棧中的邏輯卷管理,SPDK通過Blobstore的支持,同樣帶來了用戶態邏輯卷的支持,包括更高級的按需分配、快照、克隆等功能。

Ceph RADOS Block Device(RBD):使Ceph成為SPDK的後端設備,比如這可能允許Ceph用作另一個存儲層。???

Linux Asynchrounous I/O(AIO):允許SPDK與內核設備(比如機械硬碟)交互。

存儲協議(Storage Protocols)

iSCSI target:建立了通過乙太網的塊流量規範,大約是內核LIO效率的兩倍。現在的版本默認使用內核TCP/IP協議棧,後期會加入對用戶態TCP/IP協議棧的集成。

NVMe-oF target:實現了NVMe-oF規範。將本地的高速設備通過網路暴露出來,結合SPDK通用塊層和高效用戶態驅動,實現跨網路環境下的豐富特性和高性能。支持的網路不限於RDMA一種,FC,TCP等作為Fabrics的不同實現,會陸續得到支持。

vhost target:KVM/QEMU的功能利用了SPDK NVMe驅動,使得訪客虛擬機訪問存儲設備時延遲更低,使得I/O密集型工作負載的整體CPU負載減低,支持不同的設備類型供虛擬機訪問,比如SCSI, Block, NVMe塊設備。

常見問題問答

SPDK不適合於所有的存儲體系結構。一些常見問題的解答也許會幫助用戶判斷SPDK組件是否適合自己的體系結構。

Q: SPDK是否基於Linux或FreeBSD?

A:SPDK主要在Linux上測試和支持。硬體驅動被FreeBSD和Linux支持。

Q: SPDK的硬體平台是否要求是Intel體系結構?

A: SPDK被設計為充分利用Intel平台的特性,並針對Intel晶元和系統進行測試和調整。

Q: SPDK的高性能路徑是否運行在用戶態?

A: SPDK通過更多地在用戶態下運行從網卡到磁碟的高性能路徑,提高性能和效率。通過將具有SPDK功能(比如NVMe-oF目標,NVMe-oF啟動器,Blobstore)的應用程序結合起來,整個數據通路能夠在用戶空間運行,從而提供顯著的高效率。

Q: SPDK的體系結構可以合併無鎖的PMDs到它的線程模型嗎?

A: 因為PMD持續運行在它們的線程中(而不是睡眠或者不用時讓出處理器),所以它們有特殊的線程模型需求。

Q:SPDK現在是否使用DPDK處理網路數據包的工作負載?

A: SPDK和DPDK共享早期的編程模型,所以現在使用DPDK的用戶可能會發現與SPDK緊密整合可以帶來非常大的益處。同樣地,正在使用SPDK的用戶如果為網路處理添加DPDK功能,也可能會帶來重大的改進。

文章分享結束了。文章參考來源(作者:Jonathan S、翻譯:徐雯昀、貢獻者:曹剛),為了讓更多讀者比較全面了解SPDK技術,筆者整理了「詳解DPDK和SPDK技術知識點」資料,目錄介紹如下所示:

1、DPDK背景介紹1

2、DPDK架構和關鍵技術4

2.1概念和術語4

2.2 DPDK架構介紹6

2.3 大頁技術9

2.4 輪詢技術9

2.5 CPU親和技術9

2.6 DPDK的應用模型10

3、DPDK技術應用優勢10

4、DPDK初始化和轉發流程10

4.1 初始化流程11

4.2 批量轉發流程11

5、DPDK技術原理簡介11

5.1 環境抽象層概述12

5.2 核心組件分析13

5.3 DPDK環境抽象層15

5.3.1 LIBC與EAL的區別15

5.3.2 EAL載入過程16

5.3.3 內存分片介紹18

6、DPDK內存管理功能介紹19

6.1 Malloc函數庫介紹19

6.2 Ring 函數庫介紹20

6.2.1單個生產者入隊24

6.2.2單個消費者出隊26

6.2.3多個生產者入隊28

6.2.4多個消費者的出隊33

6.3 Mempool函數庫介紹33

6.3.1內存對齊的約束33

6.3.2 CPU本地Cache35

6.4 Mbuf函數庫37

6.5 DPDK內存對象分布38

7、DPDK Poll模型驅動43

8、DPDK多進程分析50

8.1 進程的創建51

8.2 調度與切換52

8.3 地址空間共享52

9、DPDK技術總結54

10、DPDK和VOS的關係57

11、SPDK背景介紹61

12、SPDK軟體體系結構62

12.1 SPDK主要組件64

12.1.1 SPDK驅動層64

12.1.2 塊設備層64

12.1.3 存儲服務層65

12.1.4 存儲協議層65

12.2 SPDK技術總結67

12.3 SPDK存儲的應用策略68

12.4 SPDK存在問題68

13、SPDK特點和其他技術68

13.1 SPDK應用編程框架69

13.2SPDK應用案例69

13.3Optane結合SPDK技術70

13.4 SPDK中國峰會介紹70

13.5 SPDK開源友好性71

14、SPDK和當前技術對比72

14.1 基於OS的文件操作72

14.2 基於SPDK架構的文件操作73

14.3 SPDK測試對比分析74

14.3.1 帶寬測試結果對比74

14.3.2 IOPS測試結果對比75

14.3.3 時延測試結果對比76

15、SPDK存儲模型Blobstore76

15.1 blobstore介紹76

15.2 blobstore中的對象77

15.3 blobstore關鍵數據結構78

15.4 blobstore元數據物理分布86

15.5 元數據頁的分配計算87

16、相關技術介紹90

16.1 RDMA高性能網路框架90

16.2 用戶態IO技術UIO90

16.3 Virtio技術介紹91

16.4 NVMf技術介紹93

16.5 Linux文件系統架構介紹93

17、SPDK關鍵技術分析94

17.1 Message傳遞與並發94

17.1.1 技術原理94

17.1.2 消息傳遞基礎架構95

17.1.3 事件架構介紹95

17.2 SPDK用戶態內存管理96

17.3 塊設備層編程97

17.4 編寫Blcok設備模塊97

17.4.1 創建一個新的組件98

17.4.2 創建bdevs98

17.5 JSON-RPC服務介紹98

17.6 NVME驅動介紹98

17.7 NVMe熱插拔技術99

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 架構師技術聯盟 的精彩文章:

詳解Kafka:大數據開發最火的核心技術
從4方面解釋,什麼叫雲原生應用?

TAG:架構師技術聯盟 |