spdk intel


前言

  繼為SDN和NFV領域帶來福音的DPDK之后,英特爾於2015年9月開始,逐步將為NVMe等新一代存儲規范優化的Linux性能工具包SPDK(Storage Performance Developmen Kit)對合作伙伴與社區開源,試圖將Linux用戶態存儲服務程序與底層硬件設施打通,大幅度縮短IO路徑,充分利用無鎖機制,為NVMe等新一代的存儲介質打通軟件層瓶頸,使其能夠在有限的系統資源消耗下支撐關鍵業務存儲系統足夠的帶寬和延時要求。

spdk動機

  市售的基於NVMe硬盤動輒可達到單盤GB級的讀寫帶寬和十萬量級的隨機IOPS,為SATA固態硬盤的5~10倍。然而,由於Linux內核驅動實現與調度機制的限制,一般存儲軟件的表現,相對於NVMe來說,在整個IO事務中消耗的時間百分比就顯得太多了。換言之,主流的軟件定義存儲系統並不能完全釋放其性能,存儲軟件協議棧的性能和效率在存儲整體系統中的地位就顯得越來越關鍵了。

  我們可以把NVMe看做一個硬件進步推動軟件革新需求的例子,隨着后續比它更快的存儲介質投入市場,這種推動力將更為急迫。

spdk基本原理

  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的用戶態輪詢模式驅動。

spdk在ceph中的使用

  Ceph長期以來就其計算資源占用率和性能方面,雖不斷提高,但在閃存環境下仍難覓突破性進展。順應業界趨勢,將SPDK的支持在Ceph中實現勢在必行。

Ceph與SPDK結合架構圖

 

引用參考:

1、spdk介紹:http://www.spdk.io/

2、dpdk原理:http://blog.csdn.net/jincm13/article/details/50972641

3、SPDK,軟件定義存儲的催化劑:http://www.techweb.com.cn/network/hardware/2016-01-26/2268226.shtml

4、Introduction to the SPDK by intel:https://software.intel.com/en-us/articles/introduction-to-the-storage-performance-development-kit-spdk

5、XSKY借助英特爾SPDK提升Ceph性能:http://news.watchstor.com/news-153050.htm

6、中斷與輪詢的比較:http://www.cnblogs.com/jhxk/articles/1893314.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM