陳旭輝,劉 洋,高 鵬,徐 娟
(甘肅省氣象信息與技術裝備保障中心,蘭州 730020)
氣象部門在長期的氣象探測、氣象服務中積累了大量的全球氣象監測及氣象分析產品數據。近年來,隨著物聯網技術、自動化氣象探測技術、氣象應用技術的發展,氣象數據的種類越來越多[1],監測數據的時空密度也越來越高,數據容量快速增長,以省級氣象部門為例,每天接收的數據約500 G。氣象數據具有典型的大數據特征,比如規模大、種類多、生成處理獲取速度快、價值大但密度低、可信賴度高,其核心作用在于預測[2,3]。關于氣象大數據的屬性,沈文海、熊安元等進行過詳細分析。2009年氣象部門建立了全國氣象信息共享系統[4-6],實現了全球氣象資料的收集、處理、存儲和共享,但該系統采用了傳統的集中存儲架構,隨著數據增長,擴展性和存儲性能已經無法滿足數據快速處理的需求。
沈文海認為以分布式計算和存儲為主的分布式技術是大數據不可或缺的核心技術,氣象部門應該建立以分布式技術和彈性計算為核心的大數據業務平臺[7]。分布式存儲是大數據需求驅動下出現的一種存儲技術[8,9],其安全可靠,擴展性強,并發性能好,特別適用于大數據處理環境[10]。NVMe(Non-Volatile Memory Express)全稱非易失性存儲器標準,是固態硬盤(SSD)的一種規范,NVMe規范采用了四通道PCI-E,PCI-E3.0的速度高達32 Gbps,是傳統AHCI(Advanced Host Controller Interface,高級主制接口)協議SSD的5倍多。NVMe盤具有高帶寬、高IOPS(Input/Output Per Second,每秒的讀寫次數)、低延遲、低功耗的特點,特別適合數據中心使用。
但是NVMe固態盤存在不支持主流的硬件RAID、使用壽命有限制、價格昂貴等缺點。因此NVMe盤在數據中心環境中使用數量比AHCI協議固態盤少,但隨著應用系統的支持、閃存顆粒技術的發展和NVMe協議的逐步完善,數據中心存儲向NVMe過渡是必然趨勢。
VROC(Virtual RAID on CPU)是Intel公司針對NVMe盤推出的軟件RAID技術,支持第三方NVMe固態盤,可以通過BIOS將多個NVMe盤組建成虛擬存儲設備,為用戶提供不同級別的RAID。
2019年中國氣象局啟動了氣象大數據云平臺(天擎)的建設,該系統使用了先進的大數據技術,構建了“數算一體”的氣象大數據云平臺,在存儲方面采用了彈性可擴展的分布式架構,有效提升了存儲系統的性能。甘肅省氣象局大數據云平臺采用了VROC技術,使用NVMe固態盤搭建了虛谷分布式數據庫環境,為結構化氣象數據提供高速存儲。文章測試并分析了NVMe盤在不同場景下的性能,旨在對NVMe在數據中心的使用提出非常有價值的建議。
此次測試使用甘肅省氣象局大數據平臺采購的H3C服務器。
為了對NVMe固態盤及VROC RAID性能進行測試,文章設計了如下測試方案。
1.2.1 單盤性能測試
采用128線程同步方式進行順序讀、順序寫、隨機讀、隨機寫測試,數據塊采用4 K、8 K、16 K、32 K、64 K、128 K、256 K、512 K、1024 K、2048 K共10種。目的是驗證NVMe單盤性能與標稱值之間的差異。
1.2.2 VROC測試
從3個方面對Intel VROC進行測試:1)RAID0和RAID5性能比較測試。采用與單盤測試相同的方法,對RAID0和RAID5進行測試,條帶(chunk size)大小均采用Intel缺省的128 K。2)不同條帶對RAID0性能影響測試。用VROC支持的4 K、8 K、16 K、32 K、64 K、128 K 6種條帶創建RAID0,采用章節1.2.1中方法進行測試。3)多線程多隊列深度順序讀測試。采用fio異步方式,線程數和隊列深度均為1、2、4、8、16、32、64、128、256、512、1024、2048,進行144次組合測試。
1.2.3 不同文件系統測試
將RAID0(128K條帶)格式化為EXT3、EXT4、XFS,分別采用1.2.1中方法進行測試,比較不同文件系統對NVMe固態盤的影響。
1.2.4 不同IO schedulers調度策略測試
高版本Linux內核采用多隊列IO調度器,redat7.6內核為3.10,只支持mq_deadline、kyber兩種多隊列調度方式。對NVMe RAID0盤分別使用mq_deadline、kyber、none調度器進行測試,分析不同調度器對NVMe盤性能的影響。
1.2.5 不同Linux內核測試
NVMe設備是比較新的設備,高版本的linux內核修復了NVMe方面的一些問題,文章采用3.10.0-862.el7.x86_64(reahat7.6缺省內核,簡稱3.10內核)、5.4.90-1.el7.elrepo.x86_64(redhat官方發布的最新lt版內核,簡稱5.4內核)兩個內核在同一臺機器上進行順序讀壓力測試和不同數據塊下讀寫測試。
1.3.1 fio測試數據處理
為了保證fio結果的可靠性,以連續3次帶寬距平百分率絕對值全部小于10%(平均值采用連續3次的滑動平均值)作為磁盤進入穩定態的標準,從進入穩定態的3次測試數據中選擇帶寬最大的一次作為最終測試結果。
1.3.2 RAID加速比及加速效率計算
為了表示RAID的加速性能,文章提出實測加速比、理論加速比、加速效率3個概念。實測加速比表示某一指標的RAID實測值除以單盤實測值,用S(L,C,B)表示,S(L,C,B)=RAID實測值/單盤實測值,下標L表示某種RAID級別,C表示對應的條帶,B為測試數據塊大小。理論加速比指每種RAID技術的理論加速比,用T(L,C,B)表示,采用Intel提供的方法進行計算,計算方法如表1所示,表中N表示RAID組磁盤的個數。
加速效率表示某一RAID實測加速比與理論加速比的比值,用E(L,C,B)表示,E(L,C,B)=S(L,C,B)/T(L,C,B),該值最大值為1,值越大,表示RAID加速性能越高,反之,說明該RAID加速性能越差。

表1 RAID讀寫理論IOPS計算方法
通過分析P4610的單盤讀寫性能測試結果得出,4 K順序讀帶寬略低于標稱值,順序寫帶寬與標稱值接近,隨機讀IOPS在4 K時高于標稱值,在4 K、8 K時低于標稱值,性能與標稱值基本符合。
延遲方面,P4610讀標稱值為77 μs、寫為18 μs,采用FIO 128線程,同步方式測試得到平均讀延時為260 μs,最小23 μs,平均寫延時為110 μs,最小10 μs,基本符合預期。
2.2.1 RAID5與RAID0測試結果分析
通過分析VROC RAID0和RAID5對不同數據塊順序讀帶寬測試結果可知,RAID5和RAID0讀的性能比較接近,實測加速比在1.97~5.77,加速效率在0.4以上。RAID5和RAID0在128 K和256 K時讀性能最佳。
分析RAID0和RAID5對不同數據塊隨機寫IOPS測試結果可見,RAID5隨機寫性能非常差,隨機寫IOPS低于單盤的20%,RAID加速效率不足13%,RAID0寫性能比RAID5高很多,可以達到單盤的2.6~4.6倍,RAID加速效率除4 K外都達到86%以上。RAID5性能很低這一結論與Brian Beeler在“Intel Virtual RAID on CPU (VROC) Review”中提到的測試結論基本一致。
2.2.2 VROC RAID0不同條帶大小下加速效率
通過對比分析不同條帶RAID0順序讀測試結果可知,不同條帶對RAID0讀性能影響不明顯,在數據包>256 K時性能有所下降。
分析隨機寫IOPS方面測試結果表明,RAID0加速效率比較穩定,除了4 K小包外,其他加速效率均達到0.8以上,說明RAID0寫加速效果較好。
分析RAID0隨機寫與單盤隨機寫CPU負載差,當RAID0條帶采用4 K時,CPU占用率都比較高,比單盤高出15百分點;當用4 K小包測試時,所有的RAID條帶CPU占用率比單盤高約41百分點;除了4 K條帶外,其他條帶下當數據包增大時,RAID0 CPU占用率呈明顯下降趨勢。
2.2.3 RAID0不同隊列深度及線程對性能影響分析
圖1為多隊列多線程順序讀帶寬分布圖,該圖表明線程對帶寬的貢獻更大,以Q1(隊列深度為1,下同)為例,線程增加到1024時,帶寬達到9.5 GMB/s,但T1(線程為1,下同)下,隊列深度為1024時,帶寬只有1.5 GMB/s。帶寬在Q128T64時接近最大值,達到12,238 MB/s,Q128為本機最理想的隊列深度,可以讓磁盤快速進入滿負載工作狀態,又能獲得較高的帶寬,隊列深度大于128時測試數據基本與Q128相同;當Q×T≤8時,Q1T1的帶寬明顯高于其他組合,大約是單盤標稱值的10%,與Q1T8或Q8T1的帶寬接近,這對于單隊列單線程任務的場景比較有利;當隊列深度≥256且線程數>512時,帶寬出現“虛增”現象,測試值超過了最大理論值,因此文章分析時只使用了Q1024、T1024以下的測試數據。

圖1 異步順序讀帶寬
根據主機CPU負載的測試結果顯示,當隊列深度≥64,并且測試線程數<64時,主機CPU負載較高,達到90%以上,但當線程數超過64時,主機CPU負載明顯下降。
由磁盤利用率測試結果可知,當增加隊列深度或增加線程數時,磁盤利用率提高,當線程數×隊列深度≥64時,除了T1、T2外,磁盤利用率接近100%,表明磁盤已進入負載飽和區。
用某種文件系統下測試數據除以裸盤的測試數據得到文件系統加速比,從NVMe RAID0 EXT3、EXT4和XFS文件系統的測試結果可知:1)EXT3、EXT4的讀寫性能比較接近;2) XFS的讀寫性能均高于EXT文件系統,尤其是寫操作。
根據NVMe RAID0在mq_deadline、kyber、none 3種調度器下的順序讀帶寬測試結果可知,當線程數≤8時,三者性能差別不大,隨著線程數的增加,三者出現了明顯差異,當線程≥32時,none調度器的性能最佳,kyber次之,mq_deadline最差。
圖1是采用2.2.3中的方法在linux 5.4內核測試得到的結果,1)5.4內核在更少的線程下,可以讓NVMe磁盤發揮出更好的性能。圖1中磁盤帶寬隨線程增長較快。2)5.4內核在處理巨量任務(隊列深度≥256且線程數≥512時)時性能比3.10內核更有優勢。圖1中,在處理巨量任務時,帶寬最高值收斂在理論帶寬附近。
采用2.1中方法在linux 5.4內核測試得到:1)兩個內核下XFS文件系統順序讀性能接近,均優于EXT4文件系統,3.10內核EXT4文件系統順序讀性能最差;2)當數據包<256 K時,5.4內核隨機寫IOPS遠高于3.10內核,兩種內核下EXT4文件系統寫的性能基本相同。
通過測試可以發現linux高版本內核對于NVMe盤的支持較好,讓NVMe在較少的CPU下可以發揮出較高的性能,同時高版本內核下XFS文件系統在處理小數據包時隨機寫性能方面高于低版本,以4 K為例,5.4內核IOPS是3.10內核的5倍。
為了驗證NVMe固態盤在不同場景下的性能,文章使用fio測試工具從多個方面對NVMe固態盤進行了測試,得出如下結論:
1)VROC RAID5寫性能損耗很大,不適合單機需要RAID5做數據保護的應用場景,VROC RAID0性能表現出色,非常適合建設分布式存儲;
2)XFS文件系統是VROC軟件RAID最佳的選擇,該文件系統可以充分發揮NVMe盤性能;
3)NVMe固態盤在none調度器下性能表現更出色;
4)5.0版本以上的Linux內核讓NVMe固態盤在較少的CPU下發揮出較高的性能;
5)NVMe盤只有在多隊列、多線程應用下優勢才能發揮出來,在單線程單隊列應用下,性能只有單盤性能的10%;
6)文章提出的RAID加速效率指標可以比較客觀地評估RAID的性能。