Ceph分布式存儲系統(tǒng)優(yōu)化分析
前篇文章“Ceph分布式存儲系統(tǒng)架構研究綜述”重點分析了Ceph分布式存儲系統(tǒng)架構,今天接著Ceph話題,繼續(xù)分享Ceph常見的系統(tǒng)和性能優(yōu)化技術。
Ceph支持多種存儲訪問接口,現(xiàn)有的多種性能測試工具都可用于Ceph的性能測試,如測試塊接口性能的fio,iometer等;測試CephFS接口的filebench,fio等;測試對象接口的cosbench等。Ceph有專用的基準測試集CBT,其包含radosbench,librbdfio,kvmrbdfio和rbdfio。radosbench基準測試使用ceph common軟件包附帶的rados二進制文件,通過對象接口來訪問Ceph集群。剩下的3個工具都是測試塊存儲性能的。
- librbdfio基準模塊通過用戶態(tài)librbd庫來測試RBD的塊存儲性能。
- kvmrbdfio基準測試要求在使用CBT之前創(chuàng)建虛擬機實例,并掛載RBD塊設備。
- rbdfio基準測試使用內(nèi)核進行驅(qū)動并將其映射到塊設備的RBD塊設備上。Teuthology是一個Ceph自動化測試的框架,可以在指定節(jié)點運行測試用例,也可以用于性能的測試。
對Ceph系統(tǒng)進行持續(xù)的性能監(jiān)控可以了解集群運行狀況,及早發(fā)現(xiàn)性能瓶頸。Ceph提供了命令行接口輸出性能相關的統(tǒng)計數(shù)據(jù)。OSD以PG為單位收集性能數(shù)據(jù)并定期發(fā)給Monitor節(jié)點。Monitor節(jié)點匯總性能數(shù)據(jù)并同步至其他Monitor節(jié)點。我們也提出了一種針對Ceph存儲系統(tǒng)層進行分層性能監(jiān)測和采集的框架,以及一種通過Ceph電文來分析系統(tǒng)性能和瓶頸的方法。
Ceph存儲系統(tǒng)的特點和挑戰(zhàn)
本節(jié)總結了Ceph分布式存儲系統(tǒng)的特點和面臨的挑戰(zhàn)。
(1)Ceph存儲系統(tǒng)的優(yōu)點
- 1)高性能。針對并發(fā)量大的異步IO場景,隨著集群規(guī)模的擴大,Ceph可提供近線性的性能增長。
- 2)高可擴展性。Ceph通過CRUSH算法來實現(xiàn)數(shù)據(jù)尋址。這種方法避免了元數(shù)據(jù)訪問的瓶頸,使集群的存儲容量可以輕易擴展至PB級,甚至EB級。
- 3)統(tǒng)一存儲,適用范圍廣。Ceph支持塊、文件和對象存儲,可滿足多種不同的需求。底層的RADOS可擴展并支持不同類型的存儲服務。
- 4)支持范圍廣。自2012年起,Linux內(nèi)核開始支持Ceph,目前Ceph可以在幾乎所有主流的Linux發(fā)行版和其他類UNIX系統(tǒng)上運行。自2016年起,Ceph開始支持ARM架構,同時也可適用于移動、低功耗等領域,其應用場景覆蓋了當前主流的軟硬件平臺。
(2)Ceph面臨的挑戰(zhàn)
- 1)Ceph底層采用定長的對象存儲,為了保證對象級別的原子性,底層存儲引擎的寫放大問題嚴重影響了性能。
- 2)Ceph的數(shù)據(jù)分布算法CRUSH在實際環(huán)境中存在一些問題,包括擴容時數(shù)據(jù)遷移不可控、數(shù)據(jù)分布不均衡等。這些問題影響了Ceph性能的穩(wěn)定性。
- 3)Ceph對新型存儲介質(zhì)的支持較差。在使用高速存儲介質(zhì)時,軟件造成的時延比硬件導致的時延高出數(shù)十倍。社區(qū)也在開發(fā)面向新型存儲介質(zhì)的存儲引擎。
- 4)Ceph的架構復雜,抽象層次多,時延較大。雖然Ceph采用面向?qū)ο蟮脑O計思想,但其代碼內(nèi)對象間的耦合嚴重,導致不同版本間的接口不兼容。針對不同版本的性能優(yōu)化技術和方法也互相不兼容。
- 5)Ceph是一個通用的分布式存儲系統(tǒng),可應用于云計算、大數(shù)據(jù)和高性能計算等領域。針對不同的訪問負載特征,Ceph還有較大的性能提升和優(yōu)化空間。
Ceph是一個通用的分布式文件系統(tǒng),適用于不同的場景。內(nèi)部機制的優(yōu)化對所有的場景都會產(chǎn)生性能的提升,但是優(yōu)化的難度和復雜度也最高。
存儲引擎的優(yōu)化
在分布式存儲系統(tǒng)中,數(shù)據(jù)被分散在大量的存儲服務器上,大部分分布式存儲系統(tǒng)都直接使用本地文件系統(tǒng)來存儲數(shù)據(jù),如HDFS、,Lustre等。高性能、高可靠的分布式存儲系統(tǒng)離不開高效、一致、穩(wěn)定、可靠的本地文件系統(tǒng)。Ceph存儲引擎的優(yōu)化,參考“Ceph分布式存儲系統(tǒng)架構研究綜述”。
網(wǎng)絡通信的優(yōu)化
在分布式存儲系統(tǒng)中,節(jié)點間需要通過網(wǎng)絡通信來交換狀態(tài)和數(shù)據(jù)。Ceph有3種類型的通信模式,分別是Simple,Async和XIO。Simple線程模式對每個網(wǎng)絡連接都創(chuàng)建了兩個線程,分別用于接收和發(fā)送。Ceph集群中OSD、Monitor節(jié)點及客戶端之間都需要建立連接。隨著集群規(guī)模的增長,創(chuàng)建的連接數(shù)和線程數(shù)會呈指數(shù)級增長,需要消耗更多的CPU和內(nèi)存資源。在內(nèi)存有限的情況下,Simple模式將導致大量線程的頻繁切換以致內(nèi)存耗盡。Async模式將連接和線程分開,通過線程池管理來維護線程的使用,用戶可設置線程池中線程的數(shù)量。這是目前被廣泛采用的方式,自2017年發(fā)布Kraken版本后,這已經(jīng)成為默認的通信模式。XIO模式使用了開源的網(wǎng)絡通信庫accelio來實現(xiàn),現(xiàn)今仍處于實驗階段。目前針對網(wǎng)絡通信優(yōu)化的研究都是基于Async通信模式實現(xiàn)的。
Async模式使用線程池,可兼顧資源和性能的平衡,但早期其設計是基于循環(huán)的簡單調(diào)度方案,未考慮傳輸數(shù)據(jù)大小和線程負載。這種早期設計會導致工作線程負載不平衡,在高負荷情況下產(chǎn)生一些性能問題。Han等提出了一種用于Ceph文件系統(tǒng)的動態(tài)消息感知通信的調(diào)度程序,以解決工作線程調(diào)度不平衡的問題,從而提高性能。他提出的調(diào)度算法根據(jù)傳入消息的類型來平衡工作線程的工作量,同時避免了工作線程之間不必要的連接轉換。
一方面,該算法將低優(yōu)先級消息(例如來自心跳連接的消息)分配給特定線程,以免干擾其他高優(yōu)先級消息。另一方面,高優(yōu)先級消息被平均分配給每個工作線程,以平衡線程之間的工作負載。同時其使用遺傳算法(GA)來使不必要的連接轉換最小化。測試結果表明,在相同的客戶端工作負載下,該方法比原始Asyncmessenger的性能高出12.5%,在客戶端的隨機工作負載下,其性能比原始Asyncmessenger高出24%。
優(yōu)化Asyncmessenger還可以通過將多個工作線程分配給單個連接來處理來自該連接的流量。但是,由于多個線程爭用訪問連接中的共享資源,這種映射結構會引起與鎖定維護有關的另一種開銷。
Ceph的Luminous版本將Async網(wǎng)絡通信模型作為默認的通信方式。雖然Async實現(xiàn)了IO的多路復用,使用共享的線程池來實現(xiàn)異步發(fā)送和接收任務,但是如何平衡Async工作線程的負載也是一個值得關注的問題。下表總結了幾種常見的算法的優(yōu)化方案。
RDMA是一種低延遲、高性能的網(wǎng)絡傳輸協(xié)議,已被廣泛應用于高性能計算環(huán)境中。為了在Ceph中利用RDMA以實現(xiàn)高速的數(shù)據(jù)傳輸,開發(fā)社區(qū)提出了兩種方案。
第一種方案是降低Ceph對網(wǎng)絡層狀態(tài)的要求,減少Messenger需要實現(xiàn)的邏輯?,F(xiàn)在的XioMessenger規(guī)定的語義和策略過于復雜,使用新的網(wǎng)絡協(xié)議實現(xiàn)的難度大;減少Messenger的邏輯則需要增加上層的邏輯。
第二種方案是基于目前的AsyncMessenger的框架,擴展出支持RDMA的網(wǎng)絡后端而無需關心上層的會話邏輯。國內(nèi)的XSKY公司和Mellanox公司合作提出了基于AsyncMessenger的網(wǎng)絡通信引擎。這種修改使用RDMA的雙邊通信機制,性能提升有限。并且在當前版本的代碼實現(xiàn)中,RDMA只可用于客戶端與服務器之間、服務器與服務器之間的通信,不能在兩個網(wǎng)絡中同時被應用,這也限制了該方案的應用。
數(shù)據(jù)放置方法的優(yōu)化
經(jīng)典Ceph存儲系統(tǒng)在副本模式下選擇存儲節(jié)點時,僅以節(jié)點存儲容量為唯一選擇條件,并沒有考慮到網(wǎng)絡和節(jié)點的負載狀況,這影響了系統(tǒng)在網(wǎng)絡性能差和節(jié)點高負載的情況下的讀寫性能。為解決這些問題,文獻設計了基于軟件定義網(wǎng)絡技術的Ceph存儲系統(tǒng)模型和存儲節(jié)點選擇策略,首先利用軟件定義網(wǎng)絡技術實時獲取網(wǎng)絡和負載狀況,以簡化網(wǎng)絡配置和減小測量開銷,然后通過建立并求解出綜合考慮了多種因素的多屬性決策數(shù)學模型來確定存儲節(jié)點的位置。
在實際環(huán)境中對設計的存儲節(jié)點選擇方法進行讀寫操作的測試,結果表明,與現(xiàn)有的CRUSH算法相比,提出的存儲節(jié)點選擇方法可以在保持與原有Ceph系統(tǒng)相同的寫操作性能的同時,針對4KB對象的100%讀操作的響應時間比原有的Ceph集群的縮短了10ms左右,針對4096KB對象的100%讀操作響應時間相對縮短了120ms左右。這種方法需要獲取網(wǎng)絡的實時性能以用于數(shù)據(jù)放置策略的調(diào)整,引入了網(wǎng)絡負載采集的開銷,在大規(guī)模集群場景下應用受限。并且由于該方法會頻繁更新CRUSH算法的參數(shù),其讀取性能會有所下降。
配置參數(shù)性能調(diào)優(yōu)
Ceph存儲系統(tǒng)的可配置參數(shù)有1500多個,參數(shù)的調(diào)整對系統(tǒng)性能有較大的影響。默認配置針對不同的硬件和應用通常不是最優(yōu)配置。通過鎖優(yōu)化和系統(tǒng)參數(shù)調(diào)優(yōu)技術使系統(tǒng)的吞吐率提升了1.6倍,但其并未討論修改了哪些配置參數(shù)。雖有文獻詳細介紹了在全閃存環(huán)境下需要調(diào)整哪些參數(shù)(包括內(nèi)核、文件系統(tǒng)、磁盤緩存、RADOS和RBD等),但是沒有給出調(diào)整前后的性能對比。
Intel開發(fā)并開源了一個性能優(yōu)化工具CeTune,該工具可用于Ceph集群的部署、測試、分析和調(diào)優(yōu)。該工具是一個交互性的調(diào)優(yōu)工具,尚不能自動尋找最優(yōu)配置。分布式存儲系統(tǒng)的性能調(diào)優(yōu)仍是一個具有挑戰(zhàn)性的問題。參數(shù)組合導致問題解空間大,且參數(shù)之間會互相影響。在數(shù)據(jù)庫領域已有一些利用機器學習和決策樹的方法進行自動調(diào)優(yōu)的成功案例,而在分布式存儲系統(tǒng)領域,相關研究仍處于起步階段。
面向特定硬件環(huán)境的優(yōu)化
隨著3DXpoint和非易失內(nèi)存等技術的發(fā)展與成熟,最快的存儲介質(zhì)性能已接近內(nèi)存性能。使用新型存儲器件的系統(tǒng)中軟件已成為瓶頸。如圖所示,HDD,SATASSD,NVMe NANDSSD,3 DXPointStorage,3DXPoint Memory系統(tǒng)中的軟件造成的延遲分別是0,10%,20%,40%和90%。通過重構軟件的體系結構來充分發(fā)揮高速存儲介質(zhì)的性能是目前的一個研究熱點。
1、固態(tài)存儲
固態(tài)存儲設備相比磁盤設備,在性能、功耗和機架密度上具有顯著的優(yōu)勢。SATA接口限制了固態(tài)存儲設備的最大吞吐率。Intel提出的利用PCIE總線來訪問固態(tài)存儲的NVMe接口方法提供了通用的高速存取方案。使用NVMe的固態(tài)存儲設備在吞吐量和延遲性能上比傳統(tǒng)的磁盤高出1-2個數(shù)量級,因此在總的IO處理時間中,軟件造成的延遲占據(jù)更大的比例?,F(xiàn)有的存儲系統(tǒng)為低速硬件設計了合并寫、異步寫等機制,但是這些機制并不適用于高速存儲設備。隨著存儲設備性能的進一步提升,存儲系統(tǒng)軟件棧的性能和效率對存儲系統(tǒng)的影響越來越大。存儲系統(tǒng)因受制于低效冗余的軟件棧而不能充分發(fā)揮硬件性能。
SPDK是Intel提出的使用NVMeSSD作為后端存儲的應用軟件加速庫。該軟件庫的核心是實現(xiàn)用戶態(tài)、異步、無鎖、輪詢方式的NVMe驅(qū)動。雖然SPDK等新型驅(qū)動可以將NVMeSSD的性能最高提高6倍,但是在Ceph中直接使用SPDK卻沒有明顯的性能提升。其主要原因在于在BlueStore的處理中有很多線程協(xié)作,線程間的互斥和切換開銷較大。
在Ceph中,OSD使用異步IO等待IO完成,多線程可以充分利用NVMeSSD多通道的特點來提升性能。由于一個OSD無法充分利用NVMeSSD的帶寬,研究人員發(fā)現(xiàn)將NVMeSSD進行分區(qū),然后在其上運行多個OSD可顯著提高性能。圖給出了一個NVMeSSD分別使用1個OSD、2個OSD和4個OSD時的性能,可以看到在1個SSD上運行4個OSD時的隨機讀,其IOPS增長很快但延遲增長緩慢。
但是將SSD分區(qū)并同時支持多個OSD也有一些缺點,如降低了可靠性、小塊隨機寫延遲增大、需要更多內(nèi)存和CPU資源等。另一項對于隨機寫的測試結果如圖所示,在1個SSD上運行2個OSD時的IOPS與運行4個OSD時的IOPS相近,且需要的CPU資源更少。使用多個OSD的提升效果與SSD的性能和CPU的性能相關,且需要占用較多的CPU和內(nèi)存資源,對可用性也有影響,因此不適用于大規(guī)模生產(chǎn)環(huán)境。
除了NVMe以外,現(xiàn)在還有一些使用SATASSD來代替HDD的策略,但直接替換存儲介質(zhì)的性能提升有限。Ceph針對HDD設計了很多異步和調(diào)整寫順序的機制,但這些機制反而降低了SSD的性能。當使用Ceph集群和全閃存SSD進行4K隨機寫入/讀取的性能測試時,隨機寫入性能也只能達到16KIOPS。當線程數(shù)增加到32個及以上時,IOPS幾乎保持不變,且延遲急劇增加。隨機讀取時,當線程數(shù)少于32時,IOPS較低,且延遲較高。
2、非易失內(nèi)存
存儲是數(shù)據(jù)密集型系統(tǒng)中最慢的組件。盡管基于NVMe的固態(tài)驅(qū)動器提供了更快、更持久的存儲,IO性能已大大提高,但其仍然比系統(tǒng)中的其他組件慢。隨著NVDIMM產(chǎn)品的出現(xiàn),可字節(jié)尋址的非易失性存儲器將提供與內(nèi)存相近的IO性能。
Intel將Client端的NVM作為緩存,提出了3個優(yōu)化方案,大大提升了塊存儲接口的訪問性能。
方案一提出由于Ceph快照中的父對象是只讀的,Client端將其緩存在本地SSD中以提高讀取性能。但該方案僅緩存特定的不變對象,不具有通用性。
方案二利用Client端的NVM實現(xiàn)了一個寫回緩存,寫入NVM的數(shù)據(jù)并將其不定期刷新至OSD中。該方案性能提升的效果明顯,能將99.99%的寫入延遲縮短到1/10以下。但是因為在客戶端發(fā)生故障時,保存在NVM中的數(shù)據(jù)沒有寫入Ceph后端的OSD,所以會造成數(shù)據(jù)不一致。
為了解決這個問題,方案三通過RDMA技術為Client節(jié)點和OSD節(jié)點的NVM空間建立鏡像,以避免因Client故障導致的數(shù)據(jù)丟失。復制寫日志機制將數(shù)據(jù)同時持久化至Client和OSD的NVM中,當Client不發(fā)生故障時,OSD僅提供鏡像空間,無需額外的CPU等資源。基于客戶端的緩存性能提升明顯,但為每個客戶端配置NVM和RDMA的成本較高,且該方案并未充分利用OSD端的NVM特性。
3、混合存儲
在Ceph集群中可以使用SSD作為保存日志或緩存來提高訪問性能。Ceph支持使用高速存儲設備作為緩存來加速IO性能。目前有兩種不同的緩存實現(xiàn)方式:1)在OSD內(nèi)部使用緩存;2)將高性能節(jié)點組成緩存層。
根據(jù)第一種方案,在使用FileStore時,文件系統(tǒng)可以識別并使用異構來存儲介質(zhì),并將其中的SSD作為緩存,其架構如圖7(a)所示。這種方案可以依賴已有的緩存工具(如dm-cache,bcache,F(xiàn)alshCache)來實現(xiàn)該功能,也可以使用現(xiàn)有的多種緩存控制方法。其中,dm-cache作為linux內(nèi)核的一部分,采用devicemapper機制以允許用戶建立混合卷;bcache是linux內(nèi)核塊層緩存,使用SSD作為HDD硬盤的緩存,從而起到加速作用;FlashCache可智能緩存最近讀取過的用戶數(shù)據(jù)或元數(shù)據(jù),從而加快數(shù)據(jù)訪問。
圖片
第二種方案的實現(xiàn)方式是將獨立的設備或節(jié)點組成緩存池,在慢速節(jié)點保存冷數(shù)據(jù),在高性能節(jié)點保存熱數(shù)據(jù)。在這種方案中,高速節(jié)點被組織成為緩存層,該緩存層也是一個RADOS池,不僅具有持久化的能力,還具有獨立的CRUSH策略。該層以下是基于HDD的RADOS池,其可以采用三副本的ReplicatePG作為后端,也可以采用Erasurecoded作為后端。
未來展望
針對前面提到的不同的性能優(yōu)化方法,本節(jié)從Ceph內(nèi)部機制優(yōu)化、基于新型硬件和面向不同負載優(yōu)化這3個方面對性能優(yōu)化問題的未來研究方向進行了展望。
1、Ceph內(nèi)部機制的優(yōu)化
Ceph發(fā)展至今,其規(guī)模和復雜性不斷增大。數(shù)據(jù)分發(fā)、元數(shù)據(jù)管理和對象一致性保證等方面的邏輯復雜,目前的多線程和加鎖機制效率較低。采用新的內(nèi)存分配機制和高效KV數(shù)據(jù)來管理子系統(tǒng)可能對性能有所提升。目前內(nèi)置的性能采集機制不完善,采集內(nèi)容和方法、性能數(shù)據(jù)分析這兩方面都有改進的空間。
2、基于新型特定硬件的優(yōu)化
隨著新型存儲介質(zhì)的發(fā)展,NVM和3D XpointSSD等介質(zhì)的訪問性能比傳統(tǒng)HDD提升了2-4個數(shù)量級。存儲系統(tǒng)優(yōu)化需通過結合硬件特征來重構存儲系統(tǒng)的體系結構,刪除冗余抽象和功能,并重新分配軟硬件的功能。存儲軟件中針對傳統(tǒng)硬件的優(yōu)化方法可能會降低性能,如異步寫、隨機寫合并等。SSD的文件轉換層的垃圾回收、空間映射與管理功能也可移至軟件實現(xiàn)。多種不同性能的介質(zhì)也將長期共存于存儲系統(tǒng)中,根據(jù)數(shù)據(jù)冷熱和介質(zhì)特性自適應實現(xiàn)高性價比的數(shù)據(jù)分布也是一個研究方向。Ceph雖然已支持RDMA協(xié)議,但是雙邊操作方式性能的提升有限,設計新的通信機制、采用單邊操作可進一步提高性能。
3、面向應用場景的自適應優(yōu)化
Ceph應用場景眾多,不同應用的訪問特征和數(shù)據(jù)分布差異較大。在不同的負載情況下,基于人工制定的存儲優(yōu)化方案不能滿足要求。根據(jù)不同應用負載的自適應優(yōu)化技術也是一個挑戰(zhàn),其研究內(nèi)容包括利用訪問標簽來實現(xiàn)不同應用的性能服務質(zhì)量保證以及性能隔離、利用機器學習技術自動尋找最優(yōu)配置,以及動態(tài)的數(shù)據(jù)預取和遷移。
結束語
本文介紹了Ceph分布式存儲系統(tǒng)的發(fā)展歷史和特點,并從內(nèi)部優(yōu)化機制、面向硬件設備和應用場景這3個方面梳理了現(xiàn)有的性能優(yōu)化方法。作為一個開源的統(tǒng)一存儲系統(tǒng),Ceph提供了高性能、高可擴展性和高可用的塊、文件和對象存取功能。Ceph的特點使之被廣泛應用于云計算、高性能計算和大數(shù)據(jù)處理領域。目前,Ceph的性能優(yōu)化研究工作雖然有一定的進展,但仍有很多問題尚未完全解決。