[HDC.Cloud]基于鯤鵬平臺的Ceph深度性能調(diào)優(yōu)

隨著IOT、大數(shù)據(jù)、移動互聯(lián)等應(yīng)用的暴漲,產(chǎn)生的數(shù)據(jù)也越來越多,整個(gè)存儲市場總量也逐年增長,預(yù)計(jì)到2021年分布式存儲會占到整個(gè)存儲市場的50%,到2027年,分布式存儲會占到整個(gè)市場的70%。Ceph則是典型的分布式存儲軟件的代表。

杉巖數(shù)據(jù)作為一家軟件定義存儲商,軟件的發(fā)展與硬件的結(jié)合密必不可分,與華為共建ARM生態(tài)是杉巖發(fā)展的關(guān)鍵著力點(diǎn)。目前,杉巖數(shù)據(jù)的對象存儲MOS和塊存儲USP已完成在鯤鵬平臺的適配工作,且可進(jìn)行商用了,以下是杉巖數(shù)據(jù)在Ceph開發(fā)和應(yīng)用方面的經(jīng)驗(yàn)分享。

一、Ceph介紹

CLIENT——用戶層面:Ceph對外提供的三個(gè)服務(wù)

1、 Block storage即(RDB塊存儲接口):如同一個(gè)沒有格式化的U盤,在第一次接入個(gè)人PC時(shí),windows操作系統(tǒng)會彈出一個(gè)格式化的請求界面供用戶選擇參數(shù),如比較重要的文件系統(tǒng)選項(xiàng),有NTFS、exFAT等文件系統(tǒng)以供選擇,格式化完成后的U盤才能進(jìn)行創(chuàng)建目錄、拷貝文件等操作;形象一點(diǎn)的概括:整個(gè)塊設(shè)備可以看成一棟大樓的框架,在進(jìn)入大樓工作生活前,需要對這棟大樓進(jìn)行裝修,即格式化。而大樓不可能只有一個(gè)人,所以需要物業(yè)進(jìn)行管理,物業(yè)可以比作一個(gè)文件系統(tǒng)。

2、 Object storage即(RADOS GW對象存儲):對象存儲在大家的生活中也是接觸較多的,例如我們平常使用的云盤;或者我們使用的智能手機(jī)都有云備份功能,都是基于對象存儲的一種業(yè)務(wù)表現(xiàn)。所以對象存儲是為了解決信息化時(shí)代海量不規(guī)則文件的存儲問題。就如世界上沒有兩片相同的葉子,每個(gè)人都會產(chǎn)生不同的信息,如何解決這些獨(dú)一無二數(shù)據(jù)的存儲,對象存儲就是提供了一種解決方法。

3、 Flie system文件系統(tǒng):把Ceph提供文件系統(tǒng)服務(wù),類比成購買個(gè)人電腦的過程,DIY用戶可能會買各種硬件、零件組裝起來裝上操作系統(tǒng)之后才能使用,而電腦商家還會提供一個(gè)已經(jīng)預(yù)裝好windows系統(tǒng)的整機(jī)供用戶選擇,用戶購買之后接通電源開機(jī)后可直接使用。Ceph提供的文件系統(tǒng)服務(wù)也就類似于這樣的一個(gè)整機(jī),用戶只需將對應(yīng)的目錄掛載到本地即可進(jìn)行工作。

RGW——對象存儲接口

使用這個(gè)接口服務(wù)需要配合一些客戶端軟件;當(dāng)然了,手機(jī)上的云備份功能是因?yàn)槭謾C(jī)操作系統(tǒng)已經(jīng)內(nèi)置了APP進(jìn)行支撐,所以不需要再額外安裝軟件。

RBD——塊存儲接口

如果使用的是Linux系統(tǒng),可以使用內(nèi)核模塊krbd直接在本地直接生成一個(gè)塊設(shè)備供用戶使用。針對Windows系統(tǒng),則可以通過iSCSI協(xié)議,虛擬一塊硬盤來供用戶使用。

RADOS——抽象的對象存儲集群

紅色的RADOS層是整個(gè)Ceph集群的統(tǒng)一抽象層,上面的所有接口數(shù)據(jù)經(jīng)過處理后都會以對象的形式保存在集群當(dāng)中。同時(shí)RADOS還確保這些接口數(shù)據(jù)在整個(gè)集群中的一致性,而LIBRADOS,主要是訪問RADOS層的接口庫。

接下來看看Ceph集群中一些比較重要的組件,還有一些組件,如mgr,mirror等在圖中沒體現(xiàn)。這些組分布在集群中的各個(gè)服務(wù)器上;下面簡略的說明各個(gè)組件的職能:

MON——monitor

第一個(gè)是MON,可以認(rèn)為是集群的大腦,負(fù)責(zé)集群狀態(tài)的維護(hù)和元數(shù)據(jù)的管理。

MDS——元數(shù)據(jù)服務(wù)器

MDS是為Ceph FS接口服務(wù)提供文件層次結(jié)構(gòu)檢索和元數(shù)據(jù)管理的,如果不需要Ceph FS服務(wù),可以選擇不部署該組件。

OSD——對象存儲設(shè)備

OSD是整個(gè)集群中用戶數(shù)據(jù)主要承載的終端設(shè)備,用戶所有的數(shù)據(jù)讀寫請求基本上最終由OSD來負(fù)責(zé)執(zhí)行。所以O(shè)SD的性能決定了整個(gè)上層業(yè)務(wù)的表現(xiàn)。OSD一般會綁定一個(gè)較大的存儲空間,例如一塊硬盤或一個(gè)硬盤分區(qū);而OSD管理存儲空間的本地存儲接口主要有File Store和Blue Store。當(dāng)然File Store還需要借助本地文件系統(tǒng)(比如XFS)來管理存儲空間。而Blue Store則可以直接接管裸設(shè)備,這樣就可以減少它的IO路徑,以提高性能。

總結(jié)一下Ceph,它是一個(gè)統(tǒng)一的分布式存儲系統(tǒng)。它的設(shè)計(jì)目標(biāo)是較好的性能,可靠性和可擴(kuò)展性。這是因?yàn)閺腃eph的架構(gòu)來看,沒有專門的緩存層,所以在性能表現(xiàn)并不是很理想。社區(qū)也針對這個(gè)問題一直在推動分級緩存(tier)功能,但這個(gè)功能還沒有達(dá)到可生產(chǎn)的階段;所以目前比較通用的做法就是在操作系統(tǒng)層面來緩存Ceph數(shù)據(jù);如內(nèi)核的通用塊層使用dm-cache、bcache、enhanceIO等開源軟件,在操作系統(tǒng)層面將數(shù)據(jù)緩存在一個(gè)較高速的設(shè)備(如SSD),以此提高Ceph的性能。

二、Ceph現(xiàn)有架構(gòu)與業(yè)務(wù)存在的問題

Q1:Ceph數(shù)據(jù)與內(nèi)核緩存的割裂問題。以BlueStore為例,它將OSD的元數(shù)據(jù)保存在RockDB中,RockDB又是運(yùn)行在一個(gè)簡化的文件系統(tǒng)(Blue FS)之上的,此時(shí)可以認(rèn)為Blue FS的IO就是OSD的元數(shù)據(jù),但對于內(nèi)核緩存來說,它是無法感知OSD下發(fā)的數(shù)據(jù)是有元數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù)之分的。

Q2:內(nèi)核緩存無法區(qū)分OSD業(yè)務(wù)的熱點(diǎn)數(shù)據(jù)和冷數(shù)據(jù),比如用戶配置比較典型的三副本存儲策略,此時(shí)只有主副本數(shù)據(jù)才會為客戶端提供讀寫服務(wù),而從副本則直接不用緩存即可,但是內(nèi)核層緩存是沒法區(qū)分這種差異的。如果使用的是DM Cache,還會在內(nèi)存中分配一個(gè)空間來緩存部分?jǐn)?shù)據(jù),這無還疑會浪費(fèi)內(nèi)存資源。

總體來說,內(nèi)核緩存存在浪費(fèi)Cache空間,還有Cache命中率不高,頻繁刷新緩存導(dǎo)致緩存設(shè)備壽命縮短等缺陷。

解決方案

在BlueStore下發(fā)IO的地方增加一個(gè)適配層,用來標(biāo)記下發(fā)IO的類型,在內(nèi)核緩存入口處增加一個(gè)適配層,用來捕捉OSD的IO類型,最后在內(nèi)核緩存處理時(shí),根據(jù)IO類型進(jìn)行不同的寫回、淘汰策略。

例如將三副本中的兩個(gè)從副本用NOCACHE標(biāo)簽經(jīng)過適配層隨IO請求一起帶到內(nèi)核緩存里去,這樣內(nèi)核緩存就可以不緩存,直接寫后備盤。同時(shí)可以將Blue FS的IO標(biāo)記成元數(shù)據(jù)類型,讓其在內(nèi)核緩存更長時(shí)間的駐留?;蚋鶕?jù)用戶業(yè)務(wù)需求,將用戶有比較重要的,且讀寫頻繁的數(shù)據(jù),標(biāo)為高等級,其他不重要的數(shù)據(jù)標(biāo)成中或低等級,然后在內(nèi)核緩存針對高等級數(shù)據(jù)采用和元數(shù)據(jù)一樣的處理策略;這樣就可以根據(jù)用戶需求來執(zhí)行不同的淘汰和回寫策略。

例:

BlueStore使用的是Libaio API接口來下發(fā)IO請求,此時(shí)需要一個(gè)IOCB結(jié)構(gòu)體作為下發(fā)請求的IO參數(shù),可以通過io_prep_pwrite函數(shù)生成iocb結(jié)構(gòu)體之后,把io flag設(shè)置到IOCB的Flag結(jié)構(gòu)體當(dāng)中,作為io_submit的參數(shù),一起提交至內(nèi)核層;內(nèi)核在VFS層時(shí)捕捉到Direct io時(shí),將flag轉(zhuǎn)換到通用塊設(shè)備層的BIO結(jié)構(gòu)體里面,比如BIO的bi_rw結(jié)構(gòu)體里面,此時(shí)位于通用塊層的內(nèi)核緩存即可捕捉到上層業(yè)務(wù)標(biāo)簽。內(nèi)核緩存可根據(jù)不同的標(biāo)簽執(zhí)行不同的回寫、分配策略,比如讓元數(shù)據(jù)更久的駐留在緩存當(dāng)中,或者讓高等級的用戶數(shù)據(jù)和元數(shù)據(jù)執(zhí)行相同的緩存策略。

針對鯤鵬平臺的Ceph調(diào)優(yōu)——Ceph在ARM架構(gòu)上面臨的問題與挑戰(zhàn)

一、華為鯤鵬處理器與Intel Xeon的差異

ARM的跨片訪問:主要反映在內(nèi)存方面,(數(shù)據(jù)是估測值,非實(shí)測數(shù)據(jù),不做測評)。ARM相對X86來說不占優(yōu)勢,所以后面的優(yōu)化手段中有規(guī)避跨片numa的操作。

矢量運(yùn)算方面,未獲取到鯤鵬的具體參數(shù),以ARM的A76作為參考,從目前來看, ARM也是不占優(yōu)勢的(圖)。

內(nèi)存操作:ARM采用的是load-store的微架構(gòu),簡單地理解為:ARM在內(nèi)存到內(nèi)存之間的拷貝是需要CPU參與的,X86則可以直接做到不用CPU參與內(nèi)存到內(nèi)存間的拷貝。這是ARM微架構(gòu)決定的。

協(xié)處理器即加速器:加速器方面鯤鵬920有EC/RSA/zlib等外圍協(xié)處理器,相對通用的X86 6148來說是較為豐富,這是鯤鵬920的優(yōu)勢。

物理核數(shù):ARM先天就有物理核數(shù)上面的優(yōu)勢。功耗比,單論總體的功耗不太準(zhǔn)確,畢竟功耗還跟啟用的物理核數(shù)有關(guān)系。當(dāng)然先進(jìn)的工藝在可以降低功耗。如果論單個(gè)物理核的功耗比,ARM確實(shí)相對X86是有優(yōu)勢的。

二、主流的優(yōu)化方案

1、       針對跨片NUMA操作場景,限定進(jìn)程運(yùn)行在片內(nèi)NUMA

針對跨片NUMA操作場景,采用將進(jìn)程限定在片內(nèi)NUMA上面,以Ceph為例,Ceph M及以后的版本提供一個(gè)OSD_numa_node參數(shù),該參數(shù)可以限定整個(gè)OSD進(jìn)程所運(yùn)行的numa。如果使用的是其他版本的ceph,可以借助numactl和taskset這兩個(gè)工具來實(shí)現(xiàn)限定進(jìn)程運(yùn)行在指定numa的功能。numactl需要在進(jìn)程啟動時(shí)進(jìn)行設(shè)置,主要的參數(shù)有綁分配內(nèi)存NUMA(--membind)、綁進(jìn)程運(yùn)行的NUMA(--cpunodebind),以及更細(xì)的,綁進(jìn)程運(yùn)行的物理核(--physcpubind)。Taskset較為靈活,可以在進(jìn)程運(yùn)行時(shí)進(jìn)行設(shè)置。限定了NUMA之前,對應(yīng)的硬件都盡量分配在片內(nèi)的總線下面,比如網(wǎng)卡、內(nèi)存、SSD等都盡量分配在對應(yīng)片內(nèi)總線下面,以避免跨片訪問。

2、       矢量運(yùn)算短板借助協(xié)處理器補(bǔ)齊

矢量運(yùn)算方面可以借助鯤鵬920的平臺的加速器,華為有提供一些基礎(chǔ)設(shè)施的接口文檔,可以根據(jù)這些文檔進(jìn)行相應(yīng)的適配;比如這里的糾刪碼運(yùn)算(EC),華為提供的接口文檔有詳細(xì)的設(shè)置和參數(shù)配置,需要在代碼層面上進(jìn)行適配,此時(shí)需要投入工作量,進(jìn)行穩(wěn)定性方面的測試。

3、       增加進(jìn)/線程數(shù)以及內(nèi)存操作

利用鯤鵬在物理核上的優(yōu)勢,可以增加相應(yīng)處理業(yè)務(wù)的進(jìn)程或線程,針對業(yè)務(wù)繁忙的線程,可以把線程拆分成兩個(gè),分配到不同物理核上去。

內(nèi)存操作方面,除了減少內(nèi)存操作,華為還針對ARM微架構(gòu)出了一個(gè)補(bǔ)丁,該補(bǔ)丁主要優(yōu)化了內(nèi)存方面的接口,可以去華為的基礎(chǔ)設(shè)施網(wǎng)站上下載patch來提升性能。

三、其他優(yōu)化手段

綁網(wǎng)卡或NVME SSD中斷:必須先把irqbalace服務(wù)關(guān)閉,否則irqbalace服務(wù)會將綁定給重新均衡掉。

cgroup隔離業(yè)務(wù):針對對繁忙的線程或者進(jìn)程來說是比較有效的,主要是基于CPU cache考慮,如果CPU被切換到不相關(guān)的進(jìn)程和線程的時(shí)候,會導(dǎo)致CPU cache刷新,致使命中率下降,CPU cache預(yù)讀也會浪費(fèi)內(nèi)存帶寬。同時(shí)進(jìn)程CPU一旦被切出,就會導(dǎo)致整個(gè)流水線被清空/排空的,此時(shí)并發(fā)的指令數(shù)也會減少,所以對性能還是有影響的。主要還是在業(yè)務(wù)比較繁忙的時(shí)候?qū)π阅艿母纳票容^大。

第三方庫:主要是優(yōu)化內(nèi)存的分配和回收效率,有Tcmalloc和jemalloc可選,可以去Tcmalloc和jemalloc的網(wǎng)站去下載相關(guān)文件進(jìn)行閱讀。

四、性能觀測工具

Ceph自帶工具——Ceph的OSD perf/perf daemon:OSD perf主要記錄IO讀寫的時(shí)延,可以初步判斷到底的瓶頸是否在我們的硬盤上面,如果是,可以采取相應(yīng)的優(yōu)化手段。

perf daemon主要是記錄整個(gè)IO請求在Ceph內(nèi)部的一些狀態(tài)的處理流程,這些處理流程耗時(shí)多少,都會通過這個(gè)命令導(dǎo)出,可以進(jìn)行初步的診斷。

操作系統(tǒng)——Perf工具:比較常用的perf top,顯現(xiàn)當(dāng)前整個(gè)系統(tǒng)的運(yùn)行情況,如上圖的右上腳,OSD進(jìn)程顯然是耗費(fèi)了大量的CPU,可以進(jìn)行層級下剝,查找到熱點(diǎn)函數(shù)位置,再針對性地去優(yōu)化熱點(diǎn)函數(shù)。而perf stat主要是采集進(jìn)程在一段時(shí)間內(nèi)的總體的情況。還可以使用perf record,記錄數(shù)據(jù),后續(xù)可以結(jié)合FlamGraph生成一個(gè)火焰圖,這種火焰圖相對來說比較直觀。主要關(guān)注一些平頭的函數(shù)調(diào)用(圖),因?yàn)檫@里耗費(fèi)的cpu時(shí)間比重比較大,是優(yōu)化的目標(biāo)。

Systemtap:主要在Redhat系統(tǒng)用得比較多。通過采集內(nèi)核函數(shù)、系統(tǒng)調(diào)用、用戶函數(shù)的運(yùn)行信息、函數(shù)出入口數(shù)據(jù)等,根據(jù)這些采集的數(shù)據(jù),進(jìn)行函數(shù)級別的分析。如基于openresty-systemtap-toolkit工具,進(jìn)行二次開發(fā)。通過工具就可以去分析整個(gè)系統(tǒng)或者是程序在哪里有瓶頸點(diǎn),然后再針對瓶頸點(diǎn)進(jìn)行性能優(yōu)化。

成果——經(jīng)過優(yōu)化后Ceph存儲系統(tǒng)性能

產(chǎn)品移植到鯤鵬上面的成果:兼容性方面,從開始到結(jié)束整個(gè)過程沒有遇到比較大的阻塞點(diǎn),依賴庫和部分技術(shù)問題在華為的基礎(chǔ)設(shè)施網(wǎng)站上能夠找到解決方法,將產(chǎn)品移植到鯤鵬平臺上的整個(gè)流程較為順利。

優(yōu)化的性能:基于現(xiàn)有服務(wù)器配置進(jìn)行的優(yōu)化前后對比,這里的測試并未鯤鵬CPU的極限,主要的瓶頸點(diǎn)是在硬盤上。主要是展示經(jīng)過上面介紹的優(yōu)化方法、手段進(jìn)行優(yōu)化后的成果。如表所示,可以看到優(yōu)化后的性能是有改善的。

低功耗:主要體現(xiàn)在ARM的單物理核的功耗確實(shí)比X86要低的,所以在后期運(yùn)營成本上具備優(yōu)勢。

下面介紹一下我們的塊存儲產(chǎn)品運(yùn)行在鯤鵬平臺上的狀況,主界面顯示的是整個(gè)塊存儲產(chǎn)品集群的狀態(tài),節(jié)點(diǎn)信息部分,這個(gè)上面部署了monitor和OSD等組件,這里的服務(wù)器信息可以看出是華為的TaiShan服務(wù)器,TaiShan 200(型號2280)的服務(wù)器使用的就鯤鵬920的處理器。

其他管理功能,例如卷管理,Linux系統(tǒng)可以通過內(nèi)核的krbd模塊實(shí)現(xiàn)本地掛載,,也可以走iSCSI協(xié)議掛載到windows系統(tǒng)上供用戶使用(圖)。當(dāng)了還有其他的功能,這就不展開了。

未來的展望和計(jì)劃

首先是基于TaiShan服務(wù)器的一個(gè)長遠(yuǎn)計(jì)劃,例如發(fā)布一個(gè)基于全閃存場景的產(chǎn)品,這種場景下所有的硬盤性能都比較高,而傳統(tǒng)以太網(wǎng)網(wǎng)絡(luò)將是一個(gè)瓶頸,現(xiàn)在TaiShan服務(wù)器剛好支持RDMA功能,為全閃存場景的部署鋪平了道路,無需額外適配、調(diào)優(yōu)網(wǎng)絡(luò)端口了。

seastar對于ARM架構(gòu)來說,多核競爭中跨片訪問時(shí),性能處于劣勢,此時(shí)采用無共享編程的seastar框架,有利于規(guī)避ARM跨片訪問的劣勢;seastar架構(gòu)的改造社區(qū)也在積極投入,我們也會持續(xù)跟進(jìn)。

最后是安全存儲產(chǎn)品對數(shù)據(jù)加解密和解壓縮的處理較為重要,而鯤鵬外圍加速器zlib/rsa/md5/sm3能夠提供高效的數(shù)據(jù)安全處理流程。

關(guān)于強(qiáng)耦合的內(nèi)核緩存改造后是否需要重新編譯操作系統(tǒng)?不需要,在VFS層時(shí)是通過kernel hacking的方式處理I/O的,不需要改動內(nèi)核原有的邏輯,只需將修改后的KO加載到操作系統(tǒng)就可以處理我們定制的IO了。

為什么不考慮將緩存做到blue Store里面?Blue Store在社區(qū)當(dāng)時(shí)設(shè)計(jì)的目標(biāo)是面向未來全閃存場景的,是沒有考慮過混合場景的;而且混合場景只是一個(gè)過渡階段,并不長遠(yuǎn),所以社區(qū)在設(shè)計(jì)時(shí)就沒有考慮過加緩存;如果將緩存做到Blue Store的話,是與社區(qū)設(shè)計(jì)理念相悖,同時(shí)導(dǎo)致整個(gè)Blue Store處理異常復(fù)雜;無論是以后跟進(jìn)社區(qū)還是向社區(qū)推送改動都比較麻煩。

分享嘉賓信息:

 演講精彩視頻:https://www.huaweicloud.com/kunpeng/activity/hdc_kunpeng.html?utm_campaign=04MHQHQ19W146V&utm_medium=atricle&utm_source=csdn&source=Ceph&utm_content=HDC%20Session 

 或者短鏈接: http://suo.im/69Mmj7


免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2020-04-01
[HDC.Cloud]基于鯤鵬平臺的Ceph深度性能調(diào)優(yōu)
杉巖數(shù)據(jù)作為一家軟件定義存儲商,軟件的發(fā)展與硬件的結(jié)合密必不可分,與華為共建ARM生態(tài)是杉巖發(fā)展的關(guān)鍵著力點(diǎn)。目前,杉巖數(shù)據(jù)的對象存儲MOS和塊存儲USP已完成在鯤鵬平臺的適配工作,且可進(jìn)行商用了,以下是杉巖數(shù)據(jù)在Ceph開發(fā)和應(yīng)用方面的經(jīng)驗(yàn)分享。

長按掃碼 閱讀全文