陳旭輝,劉 洋,高 鵬,徐 娟
(甘肅省氣象信息與技術(shù)裝備保障中心,蘭州 730020)
氣象部門在長期的氣象探測、氣象服務(wù)中積累了大量的全球氣象監(jiān)測及氣象分析產(chǎn)品數(shù)據(jù)。近年來,隨著物聯(lián)網(wǎng)技術(shù)、自動(dòng)化氣象探測技術(shù)、氣象應(yīng)用技術(shù)的發(fā)展,氣象數(shù)據(jù)的種類越來越多[1],監(jiān)測數(shù)據(jù)的時(shí)空密度也越來越高,數(shù)據(jù)容量快速增長,以省級氣象部門為例,每天接收的數(shù)據(jù)約500 G。氣象數(shù)據(jù)具有典型的大數(shù)據(jù)特征,比如規(guī)模大、種類多、生成處理獲取速度快、價(jià)值大但密度低、可信賴度高,其核心作用在于預(yù)測[2,3]。關(guān)于氣象大數(shù)據(jù)的屬性,沈文海、熊安元等進(jìn)行過詳細(xì)分析。2009年氣象部門建立了全國氣象信息共享系統(tǒng)[4-6],實(shí)現(xiàn)了全球氣象資料的收集、處理、存儲和共享,但該系統(tǒng)采用了傳統(tǒng)的集中存儲架構(gòu),隨著數(shù)據(jù)增長,擴(kuò)展性和存儲性能已經(jīng)無法滿足數(shù)據(jù)快速處理的需求。
沈文海認(rèn)為以分布式計(jì)算和存儲為主的分布式技術(shù)是大數(shù)據(jù)不可或缺的核心技術(shù),氣象部門應(yīng)該建立以分布式技術(shù)和彈性計(jì)算為核心的大數(shù)據(jù)業(yè)務(wù)平臺[7]。分布式存儲是大數(shù)據(jù)需求驅(qū)動(dòng)下出現(xiàn)的一種存儲技術(shù)[8,9],其安全可靠,擴(kuò)展性強(qiáng),并發(fā)性能好,特別適用于大數(shù)據(jù)處理環(huán)境[10]。NVMe(Non-Volatile Memory Express)全稱非易失性存儲器標(biāo)準(zhǔn),是固態(tài)硬盤(SSD)的一種規(guī)范,NVMe規(guī)范采用了四通道PCI-E,PCI-E3.0的速度高達(dá)32 Gbps,是傳統(tǒng)AHCI(Advanced Host Controller Interface,高級主制接口)協(xié)議SSD的5倍多。NVMe盤具有高帶寬、高IOPS(Input/Output Per Second,每秒的讀寫次數(shù))、低延遲、低功耗的特點(diǎn),特別適合數(shù)據(jù)中心使用。
但是NVMe固態(tài)盤存在不支持主流的硬件RAID、使用壽命有限制、價(jià)格昂貴等缺點(diǎn)。因此NVMe盤在數(shù)據(jù)中心環(huán)境中使用數(shù)量比AHCI協(xié)議固態(tài)盤少,但隨著應(yīng)用系統(tǒng)的支持、閃存顆粒技術(shù)的發(fā)展和NVMe協(xié)議的逐步完善,數(shù)據(jù)中心存儲向NVMe過渡是必然趨勢。
VROC(Virtual RAID on CPU)是Intel公司針對NVMe盤推出的軟件RAID技術(shù),支持第三方NVMe固態(tài)盤,可以通過BIOS將多個(gè)NVMe盤組建成虛擬存儲設(shè)備,為用戶提供不同級別的RAID。
2019年中國氣象局啟動(dòng)了氣象大數(shù)據(jù)云平臺(天擎)的建設(shè),該系統(tǒng)使用了先進(jìn)的大數(shù)據(jù)技術(shù),構(gòu)建了“數(shù)算一體”的氣象大數(shù)據(jù)云平臺,在存儲方面采用了彈性可擴(kuò)展的分布式架構(gòu),有效提升了存儲系統(tǒng)的性能。甘肅省氣象局大數(shù)據(jù)云平臺采用了VROC技術(shù),使用NVMe固態(tài)盤搭建了虛谷分布式數(shù)據(jù)庫環(huán)境,為結(jié)構(gòu)化氣象數(shù)據(jù)提供高速存儲。文章測試并分析了NVMe盤在不同場景下的性能,旨在對NVMe在數(shù)據(jù)中心的使用提出非常有價(jià)值的建議。
此次測試使用甘肅省氣象局大數(shù)據(jù)平臺采購的H3C服務(wù)器。
為了對NVMe固態(tài)盤及VROC RAID性能進(jìn)行測試,文章設(shè)計(jì)了如下測試方案。
1.2.1 單盤性能測試
采用128線程同步方式進(jìn)行順序讀、順序?qū)?、隨機(jī)讀、隨機(jī)寫測試,數(shù)據(jù)塊采用4 K、8 K、16 K、32 K、64 K、128 K、256 K、512 K、1024 K、2048 K共10種。目的是驗(yàn)證NVMe單盤性能與標(biāo)稱值之間的差異。
1.2.2 VROC測試
從3個(gè)方面對Intel VROC進(jìn)行測試:1)RAID0和RAID5性能比較測試。采用與單盤測試相同的方法,對RAID0和RAID5進(jìn)行測試,條帶(chunk size)大小均采用Intel缺省的128 K。2)不同條帶對RAID0性能影響測試。用VROC支持的4 K、8 K、16 K、32 K、64 K、128 K 6種條帶創(chuàng)建RAID0,采用章節(jié)1.2.1中方法進(jìn)行測試。3)多線程多隊(duì)列深度順序讀測試。采用fio異步方式,線程數(shù)和隊(duì)列深度均為1、2、4、8、16、32、64、128、256、512、1024、2048,進(jìn)行144次組合測試。
1.2.3 不同文件系統(tǒng)測試
將RAID0(128K條帶)格式化為EXT3、EXT4、XFS,分別采用1.2.1中方法進(jìn)行測試,比較不同文件系統(tǒng)對NVMe固態(tài)盤的影響。
1.2.4 不同IO schedulers調(diào)度策略測試
高版本Linux內(nèi)核采用多隊(duì)列IO調(diào)度器,redat7.6內(nèi)核為3.10,只支持mq_deadline、kyber兩種多隊(duì)列調(diào)度方式。對NVMe RAID0盤分別使用mq_deadline、kyber、none調(diào)度器進(jìn)行測試,分析不同調(diào)度器對NVMe盤性能的影響。
1.2.5 不同Linux內(nèi)核測試
NVMe設(shè)備是比較新的設(shè)備,高版本的linux內(nèi)核修復(fù)了NVMe方面的一些問題,文章采用3.10.0-862.el7.x86_64(reahat7.6缺省內(nèi)核,簡稱3.10內(nèi)核)、5.4.90-1.el7.elrepo.x86_64(redhat官方發(fā)布的最新lt版內(nèi)核,簡稱5.4內(nèi)核)兩個(gè)內(nèi)核在同一臺機(jī)器上進(jìn)行順序讀壓力測試和不同數(shù)據(jù)塊下讀寫測試。
1.3.1 fio測試數(shù)據(jù)處理
為了保證fio結(jié)果的可靠性,以連續(xù)3次帶寬距平百分率絕對值全部小于10%(平均值采用連續(xù)3次的滑動(dòng)平均值)作為磁盤進(jìn)入穩(wěn)定態(tài)的標(biāo)準(zhǔn),從進(jìn)入穩(wěn)定態(tài)的3次測試數(shù)據(jù)中選擇帶寬最大的一次作為最終測試結(jié)果。
1.3.2 RAID加速比及加速效率計(jì)算
為了表示RAID的加速性能,文章提出實(shí)測加速比、理論加速比、加速效率3個(gè)概念。實(shí)測加速比表示某一指標(biāo)的RAID實(shí)測值除以單盤實(shí)測值,用S(L,C,B)表示,S(L,C,B)=RAID實(shí)測值/單盤實(shí)測值,下標(biāo)L表示某種RAID級別,C表示對應(yīng)的條帶,B為測試數(shù)據(jù)塊大小。理論加速比指每種RAID技術(shù)的理論加速比,用T(L,C,B)表示,采用Intel提供的方法進(jìn)行計(jì)算,計(jì)算方法如表1所示,表中N表示RAID組磁盤的個(gè)數(shù)。
加速效率表示某一RAID實(shí)測加速比與理論加速比的比值,用E(L,C,B)表示,E(L,C,B)=S(L,C,B)/T(L,C,B),該值最大值為1,值越大,表示RAID加速性能越高,反之,說明該RAID加速性能越差。
表1 RAID讀寫理論IOPS計(jì)算方法
通過分析P4610的單盤讀寫性能測試結(jié)果得出,4 K順序讀帶寬略低于標(biāo)稱值,順序?qū)憥捙c標(biāo)稱值接近,隨機(jī)讀IOPS在4 K時(shí)高于標(biāo)稱值,在4 K、8 K時(shí)低于標(biāo)稱值,性能與標(biāo)稱值基本符合。
延遲方面,P4610讀標(biāo)稱值為77 μs、寫為18 μs,采用FIO 128線程,同步方式測試得到平均讀延時(shí)為260 μs,最小23 μs,平均寫延時(shí)為110 μs,最小10 μs,基本符合預(yù)期。
2.2.1 RAID5與RAID0測試結(jié)果分析
通過分析VROC RAID0和RAID5對不同數(shù)據(jù)塊順序讀帶寬測試結(jié)果可知,RAID5和RAID0讀的性能比較接近,實(shí)測加速比在1.97~5.77,加速效率在0.4以上。RAID5和RAID0在128 K和256 K時(shí)讀性能最佳。
分析RAID0和RAID5對不同數(shù)據(jù)塊隨機(jī)寫IOPS測試結(jié)果可見,RAID5隨機(jī)寫性能非常差,隨機(jī)寫IOPS低于單盤的20%,RAID加速效率不足13%,RAID0寫性能比RAID5高很多,可以達(dá)到單盤的2.6~4.6倍,RAID加速效率除4 K外都達(dá)到86%以上。RAID5性能很低這一結(jié)論與Brian Beeler在“Intel Virtual RAID on CPU (VROC) Review”中提到的測試結(jié)論基本一致。
2.2.2 VROC RAID0不同條帶大小下加速效率
通過對比分析不同條帶RAID0順序讀測試結(jié)果可知,不同條帶對RAID0讀性能影響不明顯,在數(shù)據(jù)包>256 K時(shí)性能有所下降。
分析隨機(jī)寫IOPS方面測試結(jié)果表明,RAID0加速效率比較穩(wěn)定,除了4 K小包外,其他加速效率均達(dá)到0.8以上,說明RAID0寫加速效果較好。
分析RAID0隨機(jī)寫與單盤隨機(jī)寫CPU負(fù)載差,當(dāng)RAID0條帶采用4 K時(shí),CPU占用率都比較高,比單盤高出15百分點(diǎn);當(dāng)用4 K小包測試時(shí),所有的RAID條帶CPU占用率比單盤高約41百分點(diǎn);除了4 K條帶外,其他條帶下當(dāng)數(shù)據(jù)包增大時(shí),RAID0 CPU占用率呈明顯下降趨勢。
2.2.3 RAID0不同隊(duì)列深度及線程對性能影響分析
圖1為多隊(duì)列多線程順序讀帶寬分布圖,該圖表明線程對帶寬的貢獻(xiàn)更大,以Q1(隊(duì)列深度為1,下同)為例,線程增加到1024時(shí),帶寬達(dá)到9.5 GMB/s,但T1(線程為1,下同)下,隊(duì)列深度為1024時(shí),帶寬只有1.5 GMB/s。帶寬在Q128T64時(shí)接近最大值,達(dá)到12,238 MB/s,Q128為本機(jī)最理想的隊(duì)列深度,可以讓磁盤快速進(jìn)入滿負(fù)載工作狀態(tài),又能獲得較高的帶寬,隊(duì)列深度大于128時(shí)測試數(shù)據(jù)基本與Q128相同;當(dāng)Q×T≤8時(shí),Q1T1的帶寬明顯高于其他組合,大約是單盤標(biāo)稱值的10%,與Q1T8或Q8T1的帶寬接近,這對于單隊(duì)列單線程任務(wù)的場景比較有利;當(dāng)隊(duì)列深度≥256且線程數(shù)>512時(shí),帶寬出現(xiàn)“虛增”現(xiàn)象,測試值超過了最大理論值,因此文章分析時(shí)只使用了Q1024、T1024以下的測試數(shù)據(jù)。
圖1 異步順序讀帶寬
根據(jù)主機(jī)CPU負(fù)載的測試結(jié)果顯示,當(dāng)隊(duì)列深度≥64,并且測試線程數(shù)<64時(shí),主機(jī)CPU負(fù)載較高,達(dá)到90%以上,但當(dāng)線程數(shù)超過64時(shí),主機(jī)CPU負(fù)載明顯下降。
由磁盤利用率測試結(jié)果可知,當(dāng)增加隊(duì)列深度或增加線程數(shù)時(shí),磁盤利用率提高,當(dāng)線程數(shù)×隊(duì)列深度≥64時(shí),除了T1、T2外,磁盤利用率接近100%,表明磁盤已進(jìn)入負(fù)載飽和區(qū)。
用某種文件系統(tǒng)下測試數(shù)據(jù)除以裸盤的測試數(shù)據(jù)得到文件系統(tǒng)加速比,從NVMe RAID0 EXT3、EXT4和XFS文件系統(tǒng)的測試結(jié)果可知:1)EXT3、EXT4的讀寫性能比較接近;2) XFS的讀寫性能均高于EXT文件系統(tǒng),尤其是寫操作。
根據(jù)NVMe RAID0在mq_deadline、kyber、none 3種調(diào)度器下的順序讀帶寬測試結(jié)果可知,當(dāng)線程數(shù)≤8時(shí),三者性能差別不大,隨著線程數(shù)的增加,三者出現(xiàn)了明顯差異,當(dāng)線程≥32時(shí),none調(diào)度器的性能最佳,kyber次之,mq_deadline最差。
圖1是采用2.2.3中的方法在linux 5.4內(nèi)核測試得到的結(jié)果,1)5.4內(nèi)核在更少的線程下,可以讓NVMe磁盤發(fā)揮出更好的性能。圖1中磁盤帶寬隨線程增長較快。2)5.4內(nèi)核在處理巨量任務(wù)(隊(duì)列深度≥256且線程數(shù)≥512時(shí))時(shí)性能比3.10內(nèi)核更有優(yōu)勢。圖1中,在處理巨量任務(wù)時(shí),帶寬最高值收斂在理論帶寬附近。
采用2.1中方法在linux 5.4內(nèi)核測試得到:1)兩個(gè)內(nèi)核下XFS文件系統(tǒng)順序讀性能接近,均優(yōu)于EXT4文件系統(tǒng),3.10內(nèi)核EXT4文件系統(tǒng)順序讀性能最差;2)當(dāng)數(shù)據(jù)包<256 K時(shí),5.4內(nèi)核隨機(jī)寫IOPS遠(yuǎn)高于3.10內(nèi)核,兩種內(nèi)核下EXT4文件系統(tǒng)寫的性能基本相同。
通過測試可以發(fā)現(xiàn)linux高版本內(nèi)核對于NVMe盤的支持較好,讓NVMe在較少的CPU下可以發(fā)揮出較高的性能,同時(shí)高版本內(nèi)核下XFS文件系統(tǒng)在處理小數(shù)據(jù)包時(shí)隨機(jī)寫性能方面高于低版本,以4 K為例,5.4內(nèi)核IOPS是3.10內(nèi)核的5倍。
為了驗(yàn)證NVMe固態(tài)盤在不同場景下的性能,文章使用fio測試工具從多個(gè)方面對NVMe固態(tài)盤進(jìn)行了測試,得出如下結(jié)論:
1)VROC RAID5寫性能損耗很大,不適合單機(jī)需要RAID5做數(shù)據(jù)保護(hù)的應(yīng)用場景,VROC RAID0性能表現(xiàn)出色,非常適合建設(shè)分布式存儲;
2)XFS文件系統(tǒng)是VROC軟件RAID最佳的選擇,該文件系統(tǒng)可以充分發(fā)揮NVMe盤性能;
3)NVMe固態(tài)盤在none調(diào)度器下性能表現(xiàn)更出色;
4)5.0版本以上的Linux內(nèi)核讓NVMe固態(tài)盤在較少的CPU下發(fā)揮出較高的性能;
5)NVMe盤只有在多隊(duì)列、多線程應(yīng)用下優(yōu)勢才能發(fā)揮出來,在單線程單隊(duì)列應(yīng)用下,性能只有單盤性能的10%;
6)文章提出的RAID加速效率指標(biāo)可以比較客觀地評估RAID的性能。