業(yè)界共識(shí),網(wǎng)絡(luò)層是分布式存儲(chǔ) "性能木桶的最短板"。在存儲(chǔ)領(lǐng)域的概念中,一般有兩張網(wǎng)絡(luò)--用戶(hù)應(yīng)用與存儲(chǔ)對(duì)接的"接入網(wǎng)絡(luò)"和存儲(chǔ)系統(tǒng)內(nèi)部交換數(shù)據(jù)的"數(shù)據(jù)分布網(wǎng)絡(luò)"。傳統(tǒng)存儲(chǔ)的"數(shù)據(jù)分布網(wǎng)絡(luò)"通常用SAS總線或Infiniband網(wǎng)絡(luò)實(shí)現(xiàn),犧牲的是水平擴(kuò)展能力和通用硬件特性,換來(lái)較低的時(shí)延和相對(duì)較少的中央處理器負(fù)擔(dān)。而在主流的分布式存儲(chǔ)系統(tǒng)中,為了整個(gè)集群的硬件通用一致性,和接入部分一樣,通常采用基于TCP/IP的以太網(wǎng)進(jìn)行數(shù)據(jù)分布工作?;贚inux內(nèi)核的通用TCP/IP協(xié)議棧在10Ge以上的高帶寬條件下,面對(duì)大量的數(shù)據(jù)交換工作,性能和資源利用率兩方面都難令人滿(mǎn)意。
另一方面,TCP/IP網(wǎng)絡(luò)協(xié)議本身是一個(gè)復(fù)雜龐大的標(biāo)準(zhǔn),通用的TCP/IP實(shí)現(xiàn)通常是一個(gè)"謙遜"的方式進(jìn)行包收發(fā),使得不管在手機(jī),終端,WAN下都有較好表現(xiàn),但是在目前數(shù)據(jù)中心網(wǎng)絡(luò)越來(lái)越快的背景下,特別是存儲(chǔ)后端速度飛速提高下,通用TCP/IP棧已經(jīng)很難滿(mǎn)足需求。那么是不是意味著在兼容性和性能兩方面一定要進(jìn)行取舍?
DPDK是Intel、6WIND、Calsoft Labs、Tieto等公司應(yīng)對(duì)這一問(wèn)題的解決方案[1]。在x86架構(gòu)下,處理數(shù)據(jù)包的傳統(tǒng)方式是CPU中斷方式,即網(wǎng)卡驅(qū)動(dòng)接收到數(shù)據(jù)包后通過(guò)中斷通知CPU處理,然后由CPU拷貝數(shù)據(jù)并交給協(xié)議棧。在數(shù)據(jù)量大時(shí),這種方式會(huì)產(chǎn)生大量CPU中斷,導(dǎo)致CPU無(wú)法運(yùn)行其他程序。而DPDK則采用輪詢(xún)方式實(shí)現(xiàn)數(shù)據(jù)包處理過(guò)程:DPDK重載了網(wǎng)卡驅(qū)動(dòng),該驅(qū)動(dòng)在收到數(shù)據(jù)包后不中斷通知CPU,而是將數(shù)據(jù)包通過(guò)零拷貝技術(shù)存入內(nèi)存,這時(shí)應(yīng)用層程序就可以通過(guò)DPDK提供的接口,直接從內(nèi)存讀取數(shù)據(jù)包。這種處理方式節(jié)省了CPU中斷時(shí)間、內(nèi)存拷貝時(shí)間,并向應(yīng)用層提供了簡(jiǎn)單易行且高效的數(shù)據(jù)包處理機(jī)制,使得網(wǎng)絡(luò)應(yīng)用的開(kāi)發(fā)更加方便[2]。
DPDK技術(shù)最初為Intel公司貢獻(xiàn),于2013年開(kāi)源。DPDK可與Intel、Mellanox等廠商的高速以太網(wǎng)卡協(xié)同運(yùn)行,使得在x86平臺(tái)上構(gòu)建和ASIC效能相當(dāng)?shù)木W(wǎng)絡(luò)模塊成為可能,因此,在SDN/NFV領(lǐng)域,DPDK被認(rèn)為是關(guān)鍵的開(kāi)源技術(shù)之一。
為了推進(jìn)Ceph存儲(chǔ)系統(tǒng)中兩個(gè)網(wǎng)絡(luò)的融合化,發(fā)揮通用硬件潛力,XSKY[3]自從去年底開(kāi)始嘗試?yán)肈PDK實(shí)現(xiàn)數(shù)據(jù)客戶(hù)端與OSD之間的網(wǎng)絡(luò)通信,以及OSD之間數(shù)據(jù)復(fù)制的網(wǎng)絡(luò)通信,充分利用DPDK的緩存管理、無(wú)鎖隊(duì)列與用戶(hù)態(tài)輪詢(xún)式網(wǎng)卡驅(qū)動(dòng),在x86通用平臺(tái)和標(biāo)準(zhǔn)IP交換網(wǎng)絡(luò)下將數(shù)據(jù)分布網(wǎng)絡(luò)的時(shí)延降到可與傳統(tǒng)存儲(chǔ)系統(tǒng)相匹敵的水平。
在 Ceph Jewel版啟用的 AsyncMessenger 新網(wǎng)絡(luò)框架中會(huì)支持插件式網(wǎng)絡(luò)后端,如默認(rèn)的Kernel TCP/IP,DPDK Userspace TCP/IP[5] 和未來(lái)的Infiniband/RDMA網(wǎng)絡(luò)。AsyncMessenger實(shí)現(xiàn)同一個(gè)網(wǎng)絡(luò)會(huì)話(huà)處理層面向不同的網(wǎng)絡(luò)設(shè)備和后端。新的Userspace TCP/IP[4]棧會(huì)最小化TCP的損耗,實(shí)現(xiàn)對(duì)CPU核的負(fù)載分區(qū)。結(jié)合運(yùn)行于SPDK NVMe驅(qū)動(dòng)BlueStore,最大化DPDK的資源調(diào)配優(yōu)勢(shì),實(shí)現(xiàn)端到端的無(wú)鎖調(diào)度和內(nèi)存零拷貝。
根據(jù)最近使用ceph_perf_msgr_server/ceph_perf_msgr_client在原型代碼上的測(cè)試[5](相當(dāng)于Linux中的iperf 工具,進(jìn)行在Ceph網(wǎng)絡(luò)框架上的消息傳輸壓測(cè)),如果采用標(biāo)準(zhǔn)的Linux內(nèi)核TCP/IP棧,IO發(fā)起者和遠(yuǎn)端OSD組件間的PingPong時(shí)延大概在100μs左右;使用DPDK優(yōu)化的網(wǎng)絡(luò)協(xié)議棧,這個(gè)數(shù)值降至25~30μs,更加接近IB-RDMA協(xié)議棧下5~8 μs的水平??梢灶A(yù)見(jiàn),這一優(yōu)化必將使通用硬件上的Ceph分布式存儲(chǔ)系統(tǒng)的網(wǎng)絡(luò)層瓶頸得到又一次突破,以便適應(yīng)更加普遍的OLTP應(yīng)用場(chǎng)景。
下圖中的時(shí)延測(cè)試數(shù)據(jù)包括Message Encode/Decode,F(xiàn)ast Dispatch和整個(gè)Messenger會(huì)話(huà)邏輯,這部分固有延遲時(shí)間占據(jù)1/3左右。
測(cè)試環(huán)境在兩個(gè)物理機(jī)之間使用Intel 82599ES芯片的萬(wàn)兆網(wǎng)卡,開(kāi)啟了以下硬件Offload 技術(shù):
1. RX/TX TCP Checksum Offload
2. RX/TX IP Checksum Offload
3. TX TCP Segmentation Offload
4. TX VLAN Tag Insert
5. RX RSS
6. RX VLAN Stripping
7. HW CRC Stripping
8. RX TCP Large Receive Offload
9. Hardware Flow Control
該測(cè)試同樣適用用于Mellanox MT27710 ConnectX-4 Lx。
在業(yè)界利用專(zhuān)用硬件設(shè)備如高速網(wǎng)卡,高速SSD和FPGA優(yōu)化方案層出不窮的背景下,用通用和開(kāi)放架構(gòu)解決分布式存儲(chǔ)性能問(wèn)題仍然是一個(gè)值得嘗試的方向。軟件定義存儲(chǔ)不僅僅是在API,控制面提供靈活性,更應(yīng)該在數(shù)據(jù)面提供開(kāi)放、通用且統(tǒng)一的存儲(chǔ)服務(wù)。網(wǎng)絡(luò)與硬盤(pán)性能一直是制約存儲(chǔ)軟件化的關(guān)鍵因素。而現(xiàn)在,借助于開(kāi)放的DPDK、SPDK對(duì)于硬件能力和豐富特性的抽象,我們希望在兼容性和性能上完成一個(gè)平衡,讓硬件提供機(jī)制,軟件實(shí)現(xiàn)策略,來(lái)真正提供軟件定義數(shù)據(jù)面的能力,給用戶(hù)提供的是一個(gè)開(kāi)放而又高性能的存儲(chǔ)服務(wù)。
DPDK網(wǎng)絡(luò)是構(gòu)建全用戶(hù)態(tài)軟件定義存儲(chǔ)的關(guān)鍵一步,XSKY會(huì)在下個(gè)月的Ceph Off-site會(huì)議上貢獻(xiàn)DPDK部分代碼并開(kāi)始發(fā)起對(duì)于主線的合并,并在即將到來(lái)的4月7日的產(chǎn)品發(fā)布會(huì)上將揭示這一技術(shù)
分享到微信 ×
打開(kāi)微信,點(diǎn)擊底部的“發(fā)現(xiàn)”,
使用“掃一掃”即可將網(wǎng)頁(yè)分享至朋友圈。