SPDK

Storage Performance Development Kit, 存儲性能開發工具包,簡稱SPDK。 
點擊此處打開Intel原文鏈接

簡介

固態存儲媒介正在取代舊的數據中心。這一代閃存存儲相對於傳統磁盤介質在性能,功耗,盤架密度上都有着巨大優勢,這些優勢將使閃存存儲成爲存儲市場下一代的霸主。

使用固態存儲介質,如Intel的P3700 非易失內存高速驅動器(Non-Volatile Memory Express,NVMe)的用戶,面臨一個很大的挑戰:由於吞吐量和延遲性能比傳統磁盤介質高出太多,使得在整個事務處理時間中,軟件部分佔用時間的比例大大提升。換句話說,存儲系統中軟件棧的性能和效率變得更加重要。隨着存儲介質的進一步發展,現有的軟件體系結構將不能發揮出其全部的性能,而且在接下來的幾年中存儲介質還會繼續飛速發展。

爲了幫助存儲設備代工廠(OEM)和獨立軟件開發商(ISV)整合固態存儲介質,Intel創造出一系列驅動和一個完備的,端到端參考的存儲體系結構,即存儲性能開發工具包,簡稱SPDK。SPDK的目標是通過使用Intel的網絡,處理,存儲技術,將固態存儲介質出色的功效發揮到極致。

軟件體系結構概覽

SPDK如何工作?其超高的性能基於2點核心技術:運行於用戶態輪詢模式。讓我們進一步深入這兩個關鍵詞。

首先,我們的設備驅動代碼運行在用戶態,而非內核態。免去內核上下文切換和中斷將節省大量的處理器時間開銷,從而有更多的時鐘週期來做真正的存儲工作。拋開存儲算法(去冗,加密,壓縮,空白塊存儲)的複雜度,更少的浪費掉的時鐘週期將意味着更高的性能。

其次,輪詢模式驅動(Polled Mode Drivers)即持續等待工作,而不是被派遣工作。舉個例子,想象你在週六晚上繁忙的市中心打出租,對着一輛輛已經載客的計程車揮手。等待的時間將是不可預期的,很難說要在人行道上等多久才能打到車。這就像傳統的中斷-派遣存儲I/O驅動中一個包或一個數據塊等待一次傳送。另一方面,想象在機場打出租的過程,出租車司機只需要在隊首觀望,等待幾秒鐘,就可以載上乘客,把他們送到目的地。這就是輪詢的工作模式和SPDK的設計思想。包和數據塊被立即分發,等待時間很小,使得延遲更低,連續延遲更多(抖動更小),吞吐量更大。

SPDK由數個子構件組成,它們相互連接,並且共享用戶態和輪詢模式操作的共有部分。在創造端對端的SPDK體系結構時,每個子構件都是爲了解決一個特定的性能瓶頸。不過,這些子構件也可以整合進非SPDK的結構中,讓用戶可以使用SPDK技術來加速他們的軟件。舉例來說,用戶態網絡服務庫(UNS library)用來克服Linux內核中TCP/IP協議棧帶來的性能瓶頸。通過實現一個用戶態,輪詢模式的TCP/IP協議棧,SPDK能夠在更少的處理器週期完成TCP/IP包的排序和處理,從而得到更高的IOPS性能。

SPDK_ARCH

子構件分爲3類:網絡前端處理框架後端

前端由數據平面開發工具包(Data Plane Development Kit)、網卡驅動(Network Interface Card Driver)、用戶態網絡服務(Userspace Networking Services)構件組成。DPDK給網卡提供一個高性能的包處理框架;網卡驅動提供一個從網卡到用戶態空間的數據快速通道;然後用戶態網絡服務則破解TCP/IP包並生成iSCSI命令。

這時,處理框架得到包的內容,並將iSCSI命令翻譯爲SCSI塊級命令。不過,在將這些命令送給後端驅動之前,SPDK提供一個API框架以加入用戶指定的功能,即spcial sauce(上圖綠框中)。例如緩存,去冗,數據壓縮,加密,RAID和糾刪碼計算等,諸如這些功能都包含在SPDK中。不過這些功能僅僅是爲了幫助我們模擬真實世界的應用場景,所以不要和產品級的實現混淆。

最終,數據到達後端驅動,在這一層中與物理塊設備發生交互,即讀與寫。SPDK包括了幾種存儲介質的用戶態輪詢模式驅動:NVMe設備,Linux異步IO設備如傳統磁盤,基於塊地址的內存應用的內存驅動(如RAMDISKS),以及可以使用Intel I/O加速技術(I/O Acceleration Technology,代號Crystal Beach DMA,CBDMA)的設備。這套後端驅動涵蓋了各種性能的存儲設備,保證了幾乎每種存儲應用的可用性。

SPDK並不是適合所有的存儲體系。接下來一些問答也許可以幫助用戶決定SPDK是否適合他們的存儲體系結構:

這個存儲系統是基於Linux的嗎? 
SPDK現在僅僅在Linux上提供測試和支持。

這個存儲系統的高性能通路運行在用戶模式嗎? 
SPDK通過把從網卡到磁盤的高性能通路運行於用戶模式以提升性能和效率。

這個系統體系結構能把無鎖的輪詢驅動包含進線程模型嗎? 
由於輪詢驅動持續地運行在他們的線程中(而不是睡眠或不用時讓出CPU),所以他們有着特殊的線程模型需求。

這個系統現在用DPDK來處理網絡包的工作負載? 
DPDK包含SPDK的框架,所以現在使用DPDK的用戶很可能會發現與SPDK的緊密整合非常有用。

你們的許可模型可以使用不可再發行的源嗎? 
SPDK部分是開源,可以獲得的,BSD許可協議的組件(比如NVMe和CBDMA的用戶態驅動)。其他部分暫時是在Intel許可協議之下,但肯定會改變。所有SPDK的代碼都可以免費獲得。

開發團隊可以得到專家意見來理解並解決問題嗎? 
Intel沒有提供支持的義務。然而Intel和SPDK的開源社區將付出商業上合理的努力來調查未修改的發行版本潛在的問題。任何情況下Intel都沒有義務給用戶提供軟件的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章