繼爲SDN和NFV領域帶來福音的DPDK以後,英特爾於2015年9月開始,逐步將爲NVMe等新一代存儲規範優化的Linux性能工具包SPDK(Storage Performance Developmen Kit)對合做夥伴與社區開源,試圖將Linux用戶態存儲服務程序與底層硬件設施打通,大幅度縮短IO路徑,充分利用無鎖機制,爲NVMe等新一代的存儲介質打通軟件層瓶頸,使其可以在有限的系統資源消耗下支撐關鍵業務存儲系統足夠的帶寬和延時要求。html
市售的基於NVMe硬盤動輒可達到單盤GB級的讀寫帶寬和十萬量級的隨機IOPS,爲SATA固態硬盤的5~10倍。然而,因爲Linux內核驅動實現與調度機制的限制,通常存儲軟件的表現,相對於NVMe來講,在整個IO事務中消耗的時間百分比就顯得太多了。換言之,主流的軟件定義存儲系統並不能徹底釋放其性能,存儲軟件協議棧的性能和效率在存儲總體系統中的地位就顯得愈來愈關鍵了。前端
咱們能夠把NVMe看作一個硬件進步推進軟件革新需求的例子,隨着後續比它更快的存儲介質投入市場,這種推進力將更爲急迫。web
SPDK(Storage Performance Development Kit),包含一套驅動程序,以及一整套端到端的存儲參考架構。SPDK的目標是可以把硬件平臺的計算、網絡、存儲的最新性能進展充分發揮出來。自芯片而上進行設計優化,SPDK已展現出超高的性能指標。算法
它的高性能實際上來自於兩項核心技術:第一個是用戶態運行,第二個是輪詢模式驅動。後端
將設備驅動代碼運行在用戶態,是和運行在「內核態」相對而言的。把設備驅動移出內核空間避免了內核上下文切換與中斷處理,從而節省了大量的CPU負擔,容許更多的指令週期用在實際處理數據存儲的工做上。不管存儲算法複雜仍是簡單,也不管進行去重(deduplication),加密(encryption),壓縮(compression),仍是簡單的塊讀寫,更少的指令週期浪費意味着更好的總體性能。緩存
中斷式IO處理模式:有IO須要處理時就請求一箇中斷,CPU收到中斷後才進行資源調度來處理IO,採用的是被動的派發式工做。當硬盤速度上千倍的提升後,將隨之產生大量IO中斷,Linux內核的中斷驅動式IO處理(Interrupt Driven IO Process)就顯得效率不高了。網絡
定點輪詢(polling)模式:使用專門的計算資源(特定的CPU核)用來主導存儲設備的輪詢式處理——就像專門的出租車道和車流用來處理乘客任務,數據包和塊獲得迅速派發,等待時間最小化,從而達到低延時、更一致的延時(抖動變少)、更好的吞吐量的效果。架構
關於兩種方式的比較和討論,參考這裏...,注意:spdk使用輪詢模式的前提是高性能的磁盤設備,最終是終端驅動處理仍是輪詢驅動處理,取決於系統硬件的搭配方式,不一樣的條件會匹配不一樣的優化策略框架
SPDK中大概有三類子組件:網絡前端、處理框架、後端。工具
圖1 spdk基本架構
網絡前端子組件包括DPDK網卡驅動和用戶態網絡服務UNS(這是一個Linux內核TCP/IP協議棧的替代品,可以突破通用TCP/IP協議棧的種種性能限制瓶頸)。DPDK在網卡側提供了一個高性能的發包收包處理框架,在數據從網卡到操做系統用戶態之間提供了一條快速通道。UNS代碼則接續這一部分處理,「crack」了TCP/IP數據包的標準處理方式,並造成iSCSI命令。
「處理框架」部分拿到了數據包內容,將iSCSI命令轉換爲SCSI塊級命令。然而,在它將這些命令發到「後端」驅動以前,SPDK提供了一套API框架,讓廠商可以插入本身定義的處理邏輯(架構圖中綠色的方框)。經過這種機制,存儲廠商可在這裏實現例如緩存、去重、壓縮、加密、RAID計算,或擦除碼(Erasure Coding)計算等功能,使這些功能包含在SPDK的處理流程中。在SPDK的開源軟件包裏,會有這些功能的實現樣例。
數據到達了「後端」驅動層,在這裏SPDK和物理塊設備交互(讀和寫操做)。如前所述,SPDK提供了用戶態的PMD[2],支持NVMe設備、Linux AIO設備(傳統spinning硬盤)、RAMDISK設備,以及利用到英特爾I/O加速技術的新設備(CBDMA=3D XPoint?)。這一系列後端設備驅動涵蓋了不一樣性能的存儲分層,保證SPDK幾乎與每種存儲應用造成關聯。事實上,英特爾在2015年9月首先開源的SPDK部分就主要包含支持NVMe的用戶態輪詢模式驅動。
Ceph長期以來就其計算資源佔用率和性能方面,雖不斷提升,但在閃存環境下仍難覓突破性進展。順應業界趨勢,將SPDK的支持在Ceph中實現勢在必行。
Ceph與SPDK結合架構圖
一、spdk介紹:http://www.spdk.io/
二、dpdk原理:http://blog.csdn.net/jincm13/article/details/50972641
三、SPDK,軟件定義存儲的催化劑:http://www.techweb.com.cn/network/hardware/2016-01-26/2268226.shtml
四、Introduction to the SPDK by intel:https://software.intel.com/en-us/articles/introduction-to-the-storage-performance-development-kit-spdk
五、XSKY藉助英特爾SPDK提高Ceph性能:http://news.watchstor.com/news-153050.htm
六、中斷與輪詢的比較:http://www.cnblogs.com/jhxk/articles/1893314.html