鄧平 張慶花 張玉龍
(作者單位:鄧平,深圳市氣象局;張慶花、張玉龍,曙光信息產業(yè)(北京)有限公司)
闡述了開展并行I/O研究對氣象數(shù)值預報的重要意義,以及通過并行I/O技術充分發(fā)揮并行存儲性能的必要性和迫切性,提出了并行文件系統(tǒng)底層優(yōu)化策略及基于MPI-IO的高層I/O庫的優(yōu)化方法,優(yōu)化后可支持氣象要素的并行輸出,試驗測試數(shù)據表明,優(yōu)化后輸出效率明顯提升。
氣象數(shù)值模式大規(guī)模并行計算會在短時間內產生大量的數(shù)據,并且小文件數(shù)量巨大,對整個系統(tǒng)的I/O性能、穩(wěn)定性要求很高,一般要求有分布式存儲系統(tǒng)或者并行文件系統(tǒng),否則容易形成I/O瓶頸,很難獲得理想的模式計算加速比。隨著氣象數(shù)值模式的時空分辨率不斷提升,要求更大的數(shù)據存儲容量及更高的并發(fā)I/O存儲帶寬,I/O性能成為模式運行效率的主要瓶頸之一。本文以深圳市氣象局逐時雷達同化預報系統(tǒng)(Hourly Assimilation Prediction System,HAPS)1 km算例為例進行分析。
逐時雷達同化預報系統(tǒng)是深圳市氣象局業(yè)務化運行系統(tǒng),“十三五”期間,為滿足精細化城市預報需求,該系統(tǒng)的水平分辨率要從4 km提升至1 km,垂直分辨率要從51層提高到70層。升級后的應用系統(tǒng)對整個系統(tǒng)的I/O性能、穩(wěn)定性要求很高,模式讀入輸入數(shù)據后,以特定積分步長、完成特定的計算任務,在特定的時間間隔把計算結果的輸出到文件,該模式的輸出文件為NetCDF數(shù)據格式。
HAPS 1 km算例模擬時間范圍為24 h,每積分30 min輸出一個wrfout文件,每個wrfout文件大小為8.1 G,一次算例的輸出文件大小共為396.9 G,串行輸出時耗時約為5880 s。因此,傳統(tǒng)的串行輸出方式一方面影響了模式運行的效率,另一方面造成了計算資源的浪費,且未能充分發(fā)揮并行存儲的優(yōu)勢。
針對深圳市氣象局數(shù)值計算時普遍遇到的I/O性能瓶頸問題,開展了面向氣象領域的數(shù)據并行處理技術的研究,以解決模式運行時數(shù)據的讀寫效率問題。經過深入分析,可從以下兩個方面對應用程序的輸出效率進行優(yōu)化。
一方面,從存取文件的方式以及應用程序內部的讀寫算法進行調整,提高氣象應用的文件訪問效率。應用并行I/O庫,由同一并發(fā)程序的多個進程產生對文件數(shù)據的并發(fā)請求。減少了串行讀取數(shù)據時并行通信域中其他處理器核心處于等待狀態(tài)造成的計算資源浪費,同時多個處理器并行訪問數(shù)據可充分發(fā)揮并行存儲的性能優(yōu)勢。另一方面,從文件系統(tǒng)角度,針對模式計算和前后處理的I/O特征,進行并行文件系統(tǒng)底層軟件優(yōu)化和I/O策略優(yōu)化。優(yōu)化策略主要包含鎖顆粒優(yōu)化、atime優(yōu)化、文件鎖優(yōu)化、條帶塊大小自適應、條帶寬度調整、條帶預讀、數(shù)據均衡、基于智能算法提高緩存命中率,優(yōu)化并行文件系統(tǒng)的性能。
讀寫文件策略(圖1)分為三類:
1)只有一個進程讀寫
主進程需要負責所有文件的I/O操作,將文件中的所有數(shù)據讀入自己的緩沖區(qū)(buffer),然后用MPI發(fā)送接收函數(shù)將大部分數(shù)據傳給并行程序的所有任務。計算結束后,主進程負責將所有結果數(shù)據寫到文件。顯然,該策略時,應用存取數(shù)據的效率取決于MPI通信性能和主任務對文件的訪問性能。
圖1 I/O策略
2)多個進程分別讀寫
用戶將應用所需的一個數(shù)據文件按照特定的方式分成多個文件,每個進程只操作自己的文件,彼此間不協(xié)調,相互獨立。這種策略優(yōu)點為既能同時使用計算服務器的多個網絡通道,發(fā)揮并行存儲系統(tǒng)的多客戶端接入能力,并且沒有額外的鎖開銷,適用于進程數(shù)量較少且單進程訪存的數(shù)據量大的情況。缺點是當進程數(shù)量較多時,輸出的文件數(shù)據太多,增加了后續(xù)處理的復雜度及難度。
3)多個進程讀寫同一文件
MPI-2對MPI-1進程了幾個重要的擴展,增加了對MPI-IO的支持,MPI-IO是一個并行I/O庫,提供了執(zhí)行可移植的、用戶級的I/O 操作接口。MPI可以通過該接口在文件和進程間傳送數(shù)據。從而實現(xiàn)了并行程序通過多任務并發(fā)讀取同一個文件。多個進程相互配合,避免無用操作。
MPI-IO分為非集中式I/O操作及集中式I/O操作,相比于POSIX I/O接口,其具有以下優(yōu)點:1)更高級別的數(shù)據接口,可以并行寫入復雜的數(shù)據類型,允許并行文件系統(tǒng)及MPI-IO調用優(yōu)化性能;2)支持數(shù)據一致性和原子性;3)優(yōu)化I/O函數(shù)。目前,已有Parallel-NetCDF及HDF5等支持MPI-IO的專業(yè)庫。Parallel-NetCDF繼承了傳統(tǒng)的NetCDF代碼。保持了NetCDF數(shù)據格式的兼容性的特點,是一個高性能的對NetCDF格式數(shù)據進行訪問的應用編程接口。Parallel-NetCDF及HDF5均創(chuàng)建于MPI-IO上層,提供集合I/O,驅動底層MPI-IO,獲得持續(xù)的并行訪問性能。可極大地提高I/O效率。
原HAPS模式I/O策略采用串行I/O方式,只有一個進程進行讀寫,主進程負責所有文件的I/O操作,數(shù)據輸出效率成為模式整體效率的瓶頸。而多個進程分別讀寫的方式則會產生與進程數(shù)相同的文件,輸出的文件數(shù)目很多,增加了后處理的復雜度及難度。因此本文研究在HAPS模式中應用并行I/O庫,使用多個進程讀寫同一個文件的策略,一方面通過多進程并行輸出提升I/O的性能,另一方面采用該策略不會增加后處理的復雜度。
MPI-IO基于軟件包ROMIO實現(xiàn),包含多個驅動,并可針對文件系統(tǒng)進行針對性優(yōu)化,目前MPI-IO的優(yōu)化技術在部分文件系統(tǒng)的表現(xiàn)不如人意,根源是部分文件系統(tǒng)的分布式鎖沒有配合好。目前鎖協(xié)議類型多,通過研究測試選擇合適的鎖協(xié)議,減少申請鎖的次數(shù),減少不必要的時間消耗。
分布式鎖是分布式系統(tǒng)控制同步訪問共享資源的一種方式。如果不同的系統(tǒng)或是同一個系統(tǒng)的不同主機之間共享了一個或一組資源,那么訪問這些資源的時候,需要互斥來防止彼此干擾來保證一致性,在這種情況下,便需要使用到分布式鎖。對于文件系統(tǒng),資源可以是文件的數(shù)據區(qū)間,也可以是文件的元數(shù)據屬性;對于數(shù)據庫系統(tǒng),資源可以是一張表或者一條記錄。資源實體是描述資源各種屬性的實體結構。
文件系統(tǒng)根據共享資源不同支持多種粒度的鎖:節(jié)點鎖、文件系統(tǒng)鎖、目錄鎖、文件鎖和區(qū)間鎖等。通過細化分布式鎖的粒度降低應用請求之間的沖突,提升系統(tǒng)的并發(fā)性能。
根據鎖處理過程中的角色不同,存儲文件系統(tǒng)將系統(tǒng)中的邏輯節(jié)點劃分為協(xié)調者和發(fā)起者。協(xié)調者負責某一資源上的所有鎖的授予召回操作,協(xié)調者根據資源上不同類型鎖之間的優(yōu)先級和互斥性決定是否授予相應的鎖。每個資源對應一個協(xié)調者,但是一個協(xié)調者可以管理多個資源的鎖操作。文件系統(tǒng)中存在多個協(xié)調者,而且一個資源可以切換協(xié)調者,但是同一時間,一個資源只有一個協(xié)調者。鎖的發(fā)起者可以是客戶端節(jié)點的應用進程,也可以是存儲后臺服務進程,同一資源的鎖發(fā)起者之間存在競爭。
確定加鎖機制后,對文件系統(tǒng)中選擇合適的鎖顆粒,不合適的鎖顆粒就會造成巨大的資源消耗:內存、CPU計算能力、存儲空間等。通過并行文件系統(tǒng)測試優(yōu)化鎖顆粒的設置。
文件系統(tǒng)的默認配置一般針對順序大塊I/O場景性能最優(yōu),通過鎖擴展提升鎖命中度,進一步提升I/O性能。多進程并發(fā)讀寫同一個文件的場景,鎖擴展后每個進程獲取到更大范圍的鎖空間,導致進程之間鎖沖突的概率增大。對鎖沖突的處理會降低I/O效率,關閉鎖擴展,根據I/O粒度加對應的鎖,降低鎖沖突可以極大的提升I/O性能。
按照標準的POSIX語義,讀操作需要更新文件的atime。在業(yè)務運行過程中,讀取輸入數(shù)據階段,多個進程讀同一個文件的場景,即為多個進程并發(fā)修改同一個文件的atime的場景。
對于需要上萬核心并發(fā)執(zhí)行的高性能作業(yè),對于輸入文件atime的修改會成為讀取輸入數(shù)據的瓶頸。部分文件系統(tǒng)支持掛載時noatime參數(shù),即關閉atime更新,提升讀取輸入數(shù)據性能,關閉atime的優(yōu)化方案適用于不依賴atime的應用程序。對于依賴atime的應用程序,文件系統(tǒng)通過細化元數(shù)據鎖粒度,設置單獨的atime鎖,提升atime更新性能。
應用程序必須調用MPI庫讀寫數(shù)據的場景,文件系統(tǒng)通過提升鎖服務線程個數(shù)并且在客戶端開啟鎖緩存的方式提升加鎖性能。
文件系統(tǒng)將用戶文件劃分成定長的數(shù)據段,每個數(shù)據段中的數(shù)據對象以條帶化的方式存放在多個存儲設備上。為了保證數(shù)據的可靠性,同一個數(shù)據段中的數(shù)據對象之間采用多副本或糾刪碼的方式進行冗余保護:當部分數(shù)據對象所在的存儲節(jié)點、網絡或存儲設備發(fā)生故障時,系統(tǒng)可以通過其他數(shù)據對象來及時重建該數(shù)據,以保證數(shù)據的可靠性。
文件系統(tǒng)對I/O 性能的優(yōu)化,除了鎖顆粒、atime、文件鎖優(yōu)化之外,還包括以下幾個方面:
1)條帶塊大小自適應:針對不同大小的文件,文件系統(tǒng)可以自適應的選擇不同的條帶塊大小,確保各種大小文件的I/O性能達到最優(yōu);
2)增加條帶寬度:文件系統(tǒng)在線調整條帶寬度,在存儲系統(tǒng)擴容后,可以通過增加條帶寬度,優(yōu)化文件的順序訪問I/O性能;
3)條帶預讀:條帶預讀是文件系統(tǒng)預讀算法中的一種,通過條帶預讀可以進一步優(yōu)化順序讀I/O的性能;
4)數(shù)據均衡:文件系統(tǒng)可存儲節(jié)點和存儲設備的容量進行數(shù)據均衡,在保證冗余規(guī)則的前提下,調整數(shù)據對象在系統(tǒng)中的分布情況,提高數(shù)據訪問性能。
條帶化主要受限于存儲集群規(guī)模和數(shù)據冗余度。更大規(guī)模的集群可以支持更多的條帶化配置和數(shù)據冗余度配置,I/O性能優(yōu)化的空間越大。
隨著IT技術的發(fā)展,CPU計算能力發(fā)展迅速,機械硬盤(HDD)容量雖有著驚人的擴展,但是性能的提升遠遠不夠,硬盤與CPU之間的性能鴻溝越來越大。在工作負載較大、對性能要求較高的I/O中,硬盤的性能往往成為瓶頸。增加內存(RAM Cache)可以明顯提升系統(tǒng)的訪問速度,但單位容量的內存價格過于昂貴,絕大多數(shù)的用戶難以接受。
SSD相較于機械硬盤,帶寬及響應時間有著明顯的優(yōu)勢,并且容量遠大于普通內存。將SSD作為緩存資源,可以顯著降低存儲系統(tǒng)的響應時間,有效提高數(shù)據的訪問頻率。
文件系統(tǒng)利用SSD盤對隨機小文件讀取速度快的特點,將SSD盤組成介于HDD與內存之間的二級緩存池。通過智能算法將訪問頻度高的隨機小文件熱點數(shù)據存放到SSD上,應用程序再次訪問該數(shù)據時,可以直接從SSD上獲取。由于SSD盤的數(shù)據讀取速度遠遠高于機械硬盤,因此可以顯著縮短熱點數(shù)據的響應時間,從而提升系統(tǒng)的性能。
存儲系統(tǒng)的數(shù)據節(jié)點上配置一塊或多塊的SSD,通過配置參數(shù)設定作為緩存資源的SSD容量(其余容量可以用作普通數(shù)據盤)。SSD只能加速所在節(jié)點上的數(shù)據訪問,SSD故障后不影響數(shù)據正確性,拔掉SSD緩存盤后再插入,其上的緩存數(shù)據會自動清除。
SSD緩存功能需要消耗一定的內存容量來記錄數(shù)據的訪問熱度等信息。一般情況下,開啟SSD緩存功能后,消耗的內存與SSD緩存容量比例為1∶50,即1 TB的SSD緩存容量需要消耗20GB的普通內存。
基于智能算法,自動識別連續(xù)/隨機I/O,過濾大塊連續(xù)I/O操作,僅將隨機訪問的小塊數(shù)據放置到SSD,最大程度地發(fā)揮SSD緩存作用。開啟SSD讀緩存功能后,數(shù)據節(jié)點將熱點數(shù)據拷貝至SSD緩存中。相較于機械硬盤,SSD無尋道時間,可以大大減少熱點數(shù)據的讀取時間,提高熱點數(shù)據的讀性能。
SSD緩存讀取流程包括讀緩存命中和讀緩存未命中。
2.4.1 讀緩存命中
當客戶端訪問的數(shù)據在SSD緩存中時,讀取請求將由SSD直接返回至內存,稱之為讀緩存命中。以POSIX協(xié)議訪問為例,讀取流程如圖2所示。具體如下:1)客戶端向索引節(jié)點請求文件的位置;2)索引節(jié)點返回文件元數(shù)據信息;3)客戶端計算得到文件存儲的數(shù)據節(jié)點位置,并向數(shù)據節(jié)點的內存發(fā)送讀請求;4)若數(shù)據未在內存中,繼續(xù)向本節(jié)點的SSD發(fā)送讀請求;5)SSD緩存命中后,將數(shù)據從SSD讀取到內存中;6)內存將讀取到的數(shù)據返回到客戶端。
2.4.2 讀緩存未命中
圖2 讀緩存命中流程
當客戶端訪問的數(shù)據不在SSD緩存中時,讀取請求需要從機械硬盤返回至內存,稱之為讀緩存未命中。以POSIX協(xié)議訪問為例,讀取流程如圖3所示。具體如下:1)客戶端向索引節(jié)點請求文件的位置;2)索引節(jié)點返回文件元數(shù)據信息;3)客戶端計算得到文件存儲的數(shù)據節(jié)點位置,并向數(shù)據節(jié)點的內存發(fā)送讀請求;4)若數(shù)據未在內存中,繼續(xù)向本節(jié)點的SSD發(fā)送讀請求;5)SSD緩存未命中,將結果返回給內存;6)內存下發(fā)I/O請求至機械硬盤;7)機械硬盤將數(shù)據返回至內存;8)內存將數(shù)據寫入到SSD,作為熱點數(shù)據緩存;若SSD作為緩存的容量已滿,將根據LRU算法將之前寫入的部分數(shù)據拋棄;9)內存將數(shù)據返回給客戶端。
圖3 讀緩存未命中流程
針對逐時雷達同化預報系統(tǒng)的讀操作,一方面將SSD盤作為二級緩存池,顯著降低存儲系統(tǒng)的響應時間,有效提高數(shù)據的訪問頻率;另一方面通過智能算法將訪問頻度高的隨機小文件熱點數(shù)據存放到SSD上,應用程序再次訪問該數(shù)據時,可以直接從SSD上獲取,提升應用程序的訪存性能。
HAPS 1 km算例為單層嵌套網格,水平網格數(shù)為1281×961,垂向層數(shù)為70層,時間步長為6 s,積分時長為24 h,輸入文件大小共為1.549 G,輸出設置為每半小時輸出模擬結果,每次輸出文件大小為8.1 G,共輸出文件49個,輸出文件大小共為396.9 G。
1)硬件配置
● 單節(jié)點2顆Intel Xeon Gold 6142 CPU;
● 單節(jié)點內存:192 GB;
● 通信網絡:100 Gbps EDR infiniband
● 分布式并行文件存儲系統(tǒng)
2)軟件配置
● Intel compiler 2017
● Intelmpi 2017
● Netcdf 4.4.0
● Pnetcdf 1.8.1
● Slurm作業(yè)調度系統(tǒng)
1)MPI-IO庫優(yōu)化:在HAPS 應用中調用支持PNETCDF庫,提供集合I/O,驅動底層MPI-IO,獲得持續(xù)的并行訪問性能,以提高I/O效率。應用中使用PNETCDF庫,版本為1.8.1,具體驗證時可在編譯HAPS應用時添加-DPNETCDF選項,通過設置namelist.input中的選項io_form_history參數(shù)判定輸出文件使用Netcdf方式或者并行Pnetcdf方式,設置io_form_history=2為使用串行I/O方式,設置io_form_hisory=11為使用MPI-IO方式。
2)atime優(yōu)化:通過mount掛載時添加-o noatime參數(shù)實現(xiàn),提升讀取輸入數(shù)據性能。在HAPS運行過程中,多個進程讀同一個文件的場景,即為多個進程并發(fā)讀取同一個文件的atime的場景。對atime的修改成為數(shù)據讀取的瓶頸,因此在文件系統(tǒng)掛載時添加-o noatime參數(shù)關閉。
3)文件鎖優(yōu)化:設置文件系統(tǒng)內部一次I/O的塊大小chunksize為HAPS 1 km算例輸出文件I/O塊大小,針對不同的業(yè)務,文件系統(tǒng)可以設置不同的chunksize,確保各種大小文件的I/O性能達到最優(yōu);避免浪費網絡及磁盤資源,提升讀寫效率。
HAPS模式調用MPI庫讀寫數(shù)據的場景,文件系統(tǒng)通過提升鎖服務線程個數(shù)并且在客戶端開啟鎖緩存的方式提升加鎖性能。通過專門的鎖服務處理線程提升服務端鎖服務處理能力,并且降低對其他請求的影響。客戶端增加鎖緩存,進一步降低服務端服務壓力。
4)緩存命中率優(yōu)化: 該文件系統(tǒng)利用SSD盤對隨機小文件讀取速度快的特點,將SSD盤組成介于HDD與內存之間的二級緩存池。在存儲系統(tǒng)的數(shù)據節(jié)點上配置一塊或多塊的SSD,通過配置參數(shù)設定作為緩存資源的SSD容量。SSD只能加速所在節(jié)點上的數(shù)據訪問,SSD故障后不影響數(shù)據正確性,拔掉SSD緩存盤后再插入,其上的緩存數(shù)據會自動被清除。
通過智能算法將訪問頻度高的隨機小文件熱點數(shù)據存放到SSD上,應用程序再次訪問該數(shù)據時,可以直接從SSD上獲取。由于SSD盤的數(shù)據讀取速度遠遠高于機械硬盤,因此可以顯著縮短熱點數(shù)據的響應時間,提高緩存命中率,提高系統(tǒng)I/O的性能。
3.4.1 驗證方案
1)HAPS使用串行I/O輸出方式,統(tǒng)計I/O時間及整個模式的墻鐘時間;
2)HAPS使用串行I/O輸出方式,對并行文件系統(tǒng)進行調優(yōu),統(tǒng)計I/O時間及整個模式的墻鐘時間
3)HAPS使用MPI-IO輸出方式,統(tǒng)計I/O時間及整個模式的墻鐘時間;
4)HAPS使用MPI-IO輸出方式,同時對并行文件系統(tǒng)進行調優(yōu),統(tǒng)計I/O時間及整個模式的墻鐘時間。
通過以上四種運行方式的對比,驗證提出的并行I/O優(yōu)化技術的效果。
3.4.2 驗證步驟
編譯NETCDF 庫、PNETCDF庫、及HAPS應用,生成haps.exe可執(zhí)行文件。
編寫運行驗證運行腳本haps.sh:
#!/bin/bash
#SBATCH -J HAPS
#SBATCH --comment=HAPS
#SBATCH -p normal
#SBATCH -o log.%j
#SBATCH -e log.%j
#SBATCH -t 12:00:00
#SBATCH -N 50
#SBATCH -n 1500
#SBATCH --exclusive
module load compiler/intel/composer_xe_2017.2.174
module load mpi/intelmpi/2017.2.174
export I_MPI_FABRICS=shm:dapl
export I_MPI_DAPL_UD_PROVIDER=ofa-v2-mlx5_0-1u
export I_MPI_DAPL_PROVIDER=ofa-v2-mlx5_0-1u
export I_MPI_LARGE_SCALE_THRESHOLD=8192
export FORT_BUFFERED=1
echo $(date +%H:%M:%d)
mpirun ./haps.exe
echo $(date +%H:%M:%d)
通過提交sbatch haps.sh腳本進行優(yōu)化驗證。
使用1500個處理器核心數(shù)運行算例,運行結果如圖4所示,其中:輸入時間=讀取初始場文件時間+讀取邊界場文件時間,輸出時間=wrfout文件輸出時間的總和,計算時間=墻鐘時間-輸入時間-輸出時間。
圖4 墻鐘時間分解
運行HAPS 1 km時使用串行I/O方式,由于輸出文件數(shù)據量較大,I/O時間占總墻鐘運行時間的61%。I/O成為整個模式的性能瓶頸。因此應用并行I/O技術并對并行文件系統(tǒng)底層軟件進行優(yōu)化,首先HAPS仍使用串行I/O輸出方式,對分布式文件系統(tǒng)進行調優(yōu),I/O時間由61%降低為 57%;其次單獨應用MPI-IO技術后進行測試,實現(xiàn)并行輸出氣象要素,I/O時間占比由61%降低為16%;最后測試對分布式文件系統(tǒng)進行調優(yōu)并應用MPI-IO技術,I/O時間占比由16%降低為12.2%,由于輸入文件大小僅為1.549 G,因此讀入部分耗時占比較低。該試驗結果表明,通過該方法可顯著提高模式整體運行性能。
本文針對深圳市氣象局數(shù)值計算時普遍遇到的I/O性能瓶頸問題,開展提高氣象數(shù)值模式計算性能的并行I/O優(yōu)化技術研究。一方面,在HAPS應用中支持PNETCDF庫,驅動底層MPI-IO,獲得持續(xù)的并行訪問性能;另一方面,針對業(yè)務特性,開展并行文件系統(tǒng)參數(shù)優(yōu)化,通過調優(yōu)分布式鎖,提升MPI-IO優(yōu)化技術在實際應用中的性能。通過實驗驗證表明,該優(yōu)化方法可顯著提升HAPS 1 km的整體I/O性能。
深入閱讀
Gropp W, Lusk E, Doss N, et al, 1996. A high-performance, portable implementation of the MPI message passing interface standard.Parallel Computing, 22(6): 789828.
Gropp W, Lusk E, Thakur R, 1999. Using MPI-2: Advanced features of the message passing interface. Cambridge: MIT Press.
Thakur R, Gropp W, Lusk E, 1999. On implementing MPI-IO portably and with high performance. In Proceedings of the Workshop on Input/Output in Parallel and Distributed Systems.
Advances in Meteorological Science and Technology2019年3期