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

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

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

一、Ceph介紹

CLIENT——用戶層面:Ceph對外提供的三個服務

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

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

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

RGW——對象存儲接口

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

RBD——塊存儲接口

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

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

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

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

MON——monitor

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

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

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

OSD——對象存儲設備

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

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

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

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

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

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

解決方案

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

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

例:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

四、性能觀測工具

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

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

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

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

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

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

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

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

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

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

未來的展望和計劃

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

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

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

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

為什么不考慮將緩存做到blue Store里面?Blue Store在社區(qū)當時設計的目標是面向未來全閃存場景的,是沒有考慮過混合場景的;而且混合場景只是一個過渡階段,并不長遠,所以社區(qū)在設計時就沒有考慮過加緩存;如果將緩存做到Blue Store的話,是與社區(qū)設計理念相悖,同時導致整個Blue Store處理異常復雜;無論是以后跟進社區(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


極客網(wǎng)企業(yè)會員

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

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

長按掃碼 閱讀全文