孫新華 ,張 程 ,楊廣文
1.清華大學 計算機科學與技術系,北京 100084
2.清華大學 地球系統(tǒng)科學研究中心 地球系統(tǒng)數(shù)值模擬教育部重點實驗室,北京 100084
近年來,全球氣候正在經歷一場顯著的變化,其以全球變暖為主要特征,伴隨著冰川融化退縮、海平面上升、土地沙漠化不斷加劇,對地球的生態(tài)和環(huán)境產生了嚴重的影響。隨之而來的各種極端天氣與氣候事件諸如暴雨、干旱、高溫天氣的頻發(fā)也社會各界的廣泛關注。如何有效地對氣候進行預測分析成為擺在地球系統(tǒng)科學研究人員的難題,而地球系統(tǒng)模式作為地球系統(tǒng)科學走向定量化的標志得到了越來越多研究人員的青睞,成為研究氣候變化的重要科學工具之一[1]。由于在低分辨率下地球系統(tǒng)模式無法模擬中小尺度下的過程,比如海洋模式中尺度漩渦過程,大氣模式中的云演變過程,并且在面對復雜地形時難以達到精度要求,研究者越來越傾向于使用高分辨率格點網絡進行數(shù)值模擬,高分辨率成為了地球系統(tǒng)模式發(fā)展的一個顯著趨勢。
隨著分辨率的提高,模式程序需要對更多格點網格進行計算,在需要更多計算資源的同時也對運行平臺的I/O能力提出了更高的要求。有數(shù)據(jù)顯示,因為模式分辨率的提高,模式程序輸出數(shù)據(jù)的規(guī)模呈現(xiàn)出幾何級的增長速度[2]。然而高性能計算機的I/O能力與計算能力的差距卻在逐漸拉大,這一方面是由于單機計算能力的增長速度遵循摩爾定律,遠遠高于磁盤帶寬的增長速度;另一方面是由于并行計算技術的發(fā)展和異構加速器的引入,例如在科學應用程序中廣泛使用的MPI和OpenMP技術,可以讓科學計算程序運行在成千乃至上萬個計算節(jié)點上,充分釋放了高性能計算集群的計算能力;同時GPGPU和FPGA的引入為科學計算提供了更廣闊的平臺。I/O能力的相對不足嚴重影響了地球系統(tǒng)模式在高性能計算平臺上的運行效率,地球系統(tǒng)模式的運行過程可以分為兩個階段,即計算階段和I/O階段,在傳統(tǒng)的I/O方法下等待數(shù)據(jù)輸出的過程中,模式無法繼續(xù)進行計算只能等待I/O過程完成,因此模式的總體運行時間為I/O時間與計算時間之和。隨著高分辨率地球系統(tǒng)模式輸出數(shù)據(jù)規(guī)模的增大,I/O過程的時間越來越長,I/O問題愈發(fā)成為模式運行中的性能瓶頸。
為了解決這一問題,研究人員結合地球系統(tǒng)模式的I/O特征并基于I/O轉發(fā)技術開發(fā)了一個面向地球系統(tǒng)模式的應用層并行I/O庫CFIO(Climate Fast I/O Library)[3],利用I/O過程和計算過程的重疊來減少I/O過程對于模式整體運行性能的影響。CFIO將運行模式的進程劃分為計算進程和I/O進程兩類,計算進程只負責模式的計算過程,它將程序的I/O請求轉發(fā)到I/O進程并緩存在I/O進程的緩沖區(qū)中,而由I/O過程負責完成模式數(shù)據(jù)的實際輸出,這樣就將I/O進程與計算進程自動重疊從而實現(xiàn)對程序整體的加速。在實際的使用過程中發(fā)現(xiàn),在給定進程數(shù)的情況下,如何劃分計算進程與I/O進程的比例以及I/O進程中內存緩沖區(qū)的大小會對模式程序整體運行產生極大的影響:若I/O進程過少,由于I/O能力不足會造成I/O進程緩沖區(qū)堵塞,計算進程被迫停下等待緩沖區(qū)的部分I/O請求完成才能繼續(xù),這樣就會拉長模式程序整體運行時間;若I/O進程過多,將會造成I/O能力過剩,會浪費有限的計算資源。地學研究人員作為CFIO庫的使用者,并不一定具備底層系統(tǒng)層面的知識幫助他們完成CFIO庫相關參數(shù)的設置,所以現(xiàn)有的經驗式的參數(shù)指定方式使得CFIO庫在面對不同平臺不同地球系統(tǒng)模式時并不能發(fā)揮最好的效能。
現(xiàn)有的與CFIO庫設計思路類似的并行I/O庫PIO[4]和DART[5]均沒有解決這一問題。PIO是CESM(Community Earth System Model)[6]的開發(fā)者結合地球系統(tǒng)模式中I/O特征專門為CESM開發(fā)的應用層并行I/O庫,其并行I/O功能由更底層的并行I/O庫支持。目前PIO底層使用的 I/O 庫有 MPI-IO[7]、netCDF[8]和 PnetCDF[9],用戶可以根據(jù)自己的需要靈活選擇底層的I/O庫。PIO定義了兩種數(shù)據(jù)在進程間的劃分方式即計算劃分和I/O劃分并提供了一個數(shù)據(jù)重劃分的功能接口。所謂計算劃分是指針對計算網格進行的劃分,數(shù)據(jù)的產生是隨著計算任務按照計算劃分分布在進程間的,但是這樣的分布方式并不一定適合底層I/O庫的I/O任務。用戶可以使用PIO提供的接口重新定義數(shù)據(jù)在進程間的劃分方式即I/O劃分,經過通信數(shù)據(jù)會在進程間按I/O劃分重新分布以獲得更好的性能。與CFIO不同,PIO并沒有采取計算階段和通信階段重疊的方法,而是按照傳統(tǒng)的方式將計算與通信串聯(lián)進行,數(shù)據(jù)按照計算劃分產生后先緩存,然后再按照I/O劃分的方式進行通信、寫入。在重劃分過程中,用戶可以指定參與I/O劃分的進程數(shù)以適應不同的I/O需求,其進程數(shù)指定方式主要依靠用戶的經驗式指定。DART是由美國橡樹嶺國家實驗室開發(fā)的利用RDMA[10]作為通信方式的并行I/O轉發(fā)架構,與CFIO類似,DART系統(tǒng)中也存在DARTClient與DARTServer數(shù)目比例確定的問題。Ciprian Docan等[5]提到了自適應地根據(jù)運行平臺和程序的不同調整比例的重要性,但是并沒有付諸實踐。
針對并行I/O庫經驗式的進程管理和緩沖區(qū)管理方法所帶來的性能損失,基于CFIO結合地球系統(tǒng)模式中的I/O特征設計并實現(xiàn)了一套參數(shù)自動選擇的解決方案。通過目標模式程序的預執(zhí)行收集I/O痕跡(I/O Trace)并統(tǒng)計其I/O特征信息,使用這套程序可以讓CFIO在不同平臺不同地球分量模式上既發(fā)揮CFIO最好的性能又不浪費資源。
本文首先介紹了CFIO的軟件結構,之后分析了不同地球系統(tǒng)分量模式中的I/O請求到達規(guī)律和參數(shù)自動選擇程序設計實現(xiàn)思路;最后,列出了具體實驗結果。
CFIO是一個適用于高分辨率地球系統(tǒng)模式的應用層并行I/O庫。模式的運行過程是由計算過程和I/O過程兩部分交替進行,在使用同步I/O接口時模式需要阻塞等待I/O過程的完成,即計算過程和I/O過程串行執(zhí)行,模式運行時間也就是計算時間和I/O時間之和。由于高分辨率地球系統(tǒng)模式輸出數(shù)據(jù)規(guī)模的急劇增加,越來越長的I/O時間對模式的整體運行性能造成了極大的影響。而通過分析地球系統(tǒng)模式I/O特征可以發(fā)現(xiàn),模式的I/O過程總是跟隨在計算過程之后且頻率固定,同時模式的運行過程中只涉及簡單的追加寫輸出,不會再次讀入寫出的數(shù)據(jù)。因此CFIO利用這種規(guī)律通過I/O轉發(fā)技術實現(xiàn)了計算過程與I/O過程的重疊。在原來的應用場景中當一個模式啟動時,所有的進程既負責計算過程又負責I/O過程,在CFIO中,在原有進程的基礎上,額外地啟動部分進程專門負責I/O過程,即I/O轉發(fā)。如圖1所示,所有進程被劃分為兩類進程:一是計算進程,負責地球系統(tǒng)模式中的計算任務,計算進程在執(zhí)行I/O過程時并不直接在本地調用底層I/O接口執(zhí)行I/O請求,而是通過網絡將I/O請求轉發(fā)到I/O進程中;二是I/O進程,負責地球系統(tǒng)模式中的I/O任務,I/O進程從計算進程接收I/O請求并調用PnetCDF為計算進程實際執(zhí)行I/O請求。這樣計算進程在完成I/O轉發(fā)之后,并不需要等待計算過程的實際完成,而是繼續(xù)進行下一個時間步的計算,而與此同時I/O過程也在I/O進程上并發(fā)地執(zhí)行,從而實現(xiàn)了I/O過程與計算過程的重疊,隱藏了I/O時間,縮短了模式整體運行的時間。
圖1 CFIO中I/O轉發(fā)結構圖
具體分析CFIO的軟件結構,如圖2所示。運行在I/O進程上的CFIO服務器從運行在計算進程上的CFIO客戶端接收I/O請求并緩存在緩沖區(qū)中,之后通過調用PnetCDF庫按照先到先服務的原則處理I/O請求,將數(shù)據(jù)輸出到文件系統(tǒng)中。CFIO服務器處理I/O請求的流程:當有新的I/O請求到達時,程序會檢查現(xiàn)有緩沖區(qū)容量是否可以容納最新到達的I/O請求,如果可以,服務器會正常接收轉發(fā)而來的I/O請求;若由于到達的I/O請求過多導致I/O請求的大小超過了緩沖區(qū)大小,CFIO服務器則不會再接收I/O請求進入阻塞狀態(tài),需要處理并執(zhí)行部分的I/O請求釋放出部分的緩沖區(qū)空間,直到緩沖區(qū)有足夠的空間來緩存下一條I/O請求,服務器才會由阻塞狀態(tài)轉變回接收者狀態(tài),繼續(xù)接收數(shù)據(jù)。
圖2 CFIO結構細節(jié)圖
一旦進入CFIO服務器進入阻塞狀態(tài),CFIO客戶端的計算過程也必須停止等待I/O過程,這樣計算過程與I/O過程隱藏效果就會變差,如圖3(b)所示,阻塞會讓CFIO客戶端的轉發(fā)等待時間變長,從而增加程序整體運行時間。服務器端的堵塞是由于后端PnetCDF數(shù)據(jù)處理的能力不足,根本原因是初始階段分配的I/O進程太少;若分配的I/O進程過多則會造成I/O處理能力的過剩,如圖3(a)所示,造成計算資源的浪費。只有在計算時間恰好等于I/O時間即如圖3(c)所示的情況下,才既能保證模式程序運行性能又不浪費計算資源,實現(xiàn)I/O過程與計算過程的完美隱藏。同時,在計算進程數(shù)目一定的情況下,I/O進程數(shù)目的不同會影響到每一個I/O進程對應的計算進程的數(shù)目,因此每一個I/O進程需要處理的I/O請求數(shù)目也會不同,進而會影響CFIO服務器端緩沖區(qū)的使用量。
圖3 計算過程與I/O過程的重疊
在地球系統(tǒng)模式中,模式的運行過程是有規(guī)律性的。由于地球系統(tǒng)模式中主要的計算過程均為動量方程組的迭代求解,在某些迭代步的計算之后會輸出一些信息用于記錄模式運行狀況或者用于從程序崩潰中重新啟動,所以地球系統(tǒng)模式的運行會出現(xiàn)周期性的特征:計算過程和I/O過程交替運行,計算過程是固定時間的一步或者幾步迭代,I/O過程是以某一固定頻率出現(xiàn)在計算過程之后的記錄信息輸出。因此,對于單個計算進程來說,其I/O請求在時間分布上是有周期性的,由一個個突發(fā)性的波峰和波峰之后長時間的無I/O的時間段構成。而且每一個周期內也有不同數(shù)量的I/O請求到達高峰,這是由于不同輸出文件輸出頻率不同造成的。而經過對于海洋模式POP(Parallel Ocean Program)[11]、海冰模式CICE[12]兩種常用地球分量模式中I/O請求在CFIO服務器端的到達分布情況的測試,可以發(fā)現(xiàn)多個計算進程的I/O請求在I/O進程聚合之后仍然呈現(xiàn)出于計算進程一樣的周期性,且與計算進程發(fā)起I/O請求時的分布一致。這說明運行在不同節(jié)點上的CFIO客戶端上計算過程是基本同步的,造成這種情況有兩點原因,一是因為在大部分高性能集群中各個物理節(jié)點的配置狀況相同或類似,二是因為在地球系統(tǒng)模式中,每一個時間步的最后會有全局的gather求和等需要全局通信的操作,因此相當于每一個時間步各個計算進程都需要同步一次。
此外,對于每個I/O請求塊的大小進行分析可以發(fā)現(xiàn),在同一個模式程序中I/O請求塊大小是完全相同或者分段相同的。這是由于模式程序的輸出通常情況下是嵌套在for循環(huán)中按照維度循環(huán)輸出的,因此每次調用CFIO寫入函數(shù)發(fā)起的I/O請求大小會相同;對于分段相同的情況發(fā)現(xiàn)是由于寫入數(shù)據(jù)類型的變化,整個寫入過程仍然嵌套在for循環(huán)中。
根據(jù)第2章節(jié)對CFIO軟件結構的分析,可以將CFIO服務器端對于I/O請求的處理看做一個排隊系統(tǒng)。根據(jù)上文的分析,該排隊系統(tǒng)到達分布為確定性的平均到達,服務規(guī)則為“先到達先服務”,其服務端分布即PnetCDF庫的處理也可以看作是確定性的平均分布,服務臺的個數(shù)為1,所以進程管理和緩沖區(qū)管理的問題可以轉化為對于該排隊系統(tǒng)中顧客源個數(shù)以及排隊長度的計算問題。根據(jù)排隊論可知,排隊系統(tǒng)達到穩(wěn)定的條件為:在概率上,一段時間內到達的顧客總量等于可以被服務的顧客總量。CFIO服務器端的I/O到達有周期性的特點,因為該系統(tǒng)達到穩(wěn)定的條件是每一個周期內到達的所有I/O請求都恰好能在該周期內被PnetCDF完全處理,即
其中,Si代表一個周期內各個I/O請求塊的大小,n為I/O進程的數(shù)目,Throughput(n)代表了n個I/O進程時PnetCDF的總體寫入帶寬。對于I/O進程數(shù),必須是計算進程數(shù)約數(shù)這一點需要解釋,是由于CFIO設計過程中為了保證負載均衡和輸出數(shù)據(jù)的局部性,規(guī)定I/O劃分必須為計算劃分的整數(shù)倍,即I/O進程數(shù)必須為計算進程數(shù)的約數(shù)。
而由于I/O請求到達時間集中,在I/O到達階段每一個I/O請求到達時間間隔為1~4 ms,且CFIO服務器處理機制為一旦有I/O請求達到則立即判斷緩沖區(qū)空間是否充裕,以確定是否將I/O請求加入隊列中,能夠調用PnetCDF庫處理I/O請求的時間極少。因此,可以認為緩沖區(qū)的大小需要容納I/O請求最高峰時所有I/O請求,即
其中,Si代表I/O請求數(shù)量最高峰時到達的各個I/O請求的大小,n為I/O進程的數(shù)目,N為預執(zhí)行時I/O進程的數(shù)目;乘N/n表示正式運行時每一個I/O進行需要接收N/n倍的I/O請求。
根據(jù)式(1)、(2)可知,為了確定I/O進程數(shù)目n的大小,需要兩方面的信息:一是目標模式程序的相關I/O特征,包括周期的時間長度、I/O請求塊的大小、一個周期內I/O請求塊的數(shù)目;二是運行平臺相關信息,即不同I/O進程數(shù)目下PnetCDF庫的寫入帶寬。因此,為了解決該問題設計了如圖4所示的解決方案。
圖4 參數(shù)自動選擇過程圖
通過目標地球系統(tǒng)模式程序的預運行利用CFIO庫收集其I/O請求的痕跡信息,即Trace文件;然后用Trace分析子程序得到目標模式程序的I/O特征信息并寫入到配置文件中。同時,對于每一個不同的運行平臺,需要用帶寬測試子程序測試不同I/O進程數(shù)目下PnetCDF的聚合寫入帶寬,并將測試結果寫入I/O速度記錄文件中。之后,利用配置文件中目標模式相關信息和I/O速度記錄文件中的平臺相關信息,通過參數(shù)計算子程序根據(jù)式(1)、(2)進行計算,得出最后需要的I/O進程數(shù)目和緩沖區(qū)大小并打印到屏幕上。最后,可以根據(jù)所得到的參數(shù)對CFIO進行設置,正式執(zhí)行目標模式程序。在此過程中,用戶僅需要通過命令行依次調用帶寬測試、Trace分析和參數(shù)計算三個子程序,即可自動地得到適合于當前運行平臺和目標地球系統(tǒng)模式的合適參數(shù)。
帶寬測試子程序負責針對不同的運行平臺測試不同I/O進程數(shù)目下的PnetCDF庫總體寫入帶寬,在同一個平臺上帶寬測試子程序只需要運行一次。該子程序輸入為一個2的冪的正整數(shù)X,輸出為I/O速度記錄文件。
帶寬測試子程序的核心是一個MPI測試程序,該程序調用PnetCDF庫進行數(shù)據(jù)輸出,生成500個變量,每個變量為一個二維雙精度浮點數(shù)數(shù)組,數(shù)組大小為4 096×2 048。所有的變量都輸出到同一個NetCDF文件中,最終文件大小為32 GB,程序的輸出為32 GB除以程序運行時間,即為當前進程數(shù)目下的PnetCDF庫的寫入總帶寬。帶寬測試子程序用腳本從1開始以2的倍增直至X的進程數(shù)目調用MPI測試程序,并將I/O進程數(shù)目和相應的I/O寫入帶寬結果寫入I/O速度記錄文件中。
在實際CFIO使用過程中,I/O進程的數(shù)目可以為不大于計算進程數(shù)的任意正整數(shù),出于效率和成本的考慮,在帶寬測試子程序中不能夠對于每個I/O進程數(shù)目的PnetCDF寫入帶寬進行測試。僅對2的正整數(shù)次冪數(shù)目的I/O進程I/O帶寬測試,如果在后續(xù)的參數(shù)選擇子程序計算中需要用到的I/O進程數(shù)目恰好在測試過的列表中,將會直接將測試結果返回;如果用到帶寬測試子程序并沒有實際測試過的I/O進程數(shù)目下的總體寫入帶寬,則需要利用已有的數(shù)據(jù)進行估計。Li等人在對PnetCDF庫吞吐量的測試后發(fā)現(xiàn)[9],其吞吐量的變化趨勢為先隨著進程數(shù)增加而增加,到達峰值之后再隨著進程數(shù)的增加略有回落,實際測試的結果也是如此。這是由于PnetCDF庫后端調用了MPI-IO,而MPI-IO的聚合I/O采用兩階段I/O實現(xiàn)。以讀操作為例,進程間通過互相通信交換各自需要讀取的數(shù)據(jù)段進而得到一個全局的I/O視圖,MPI-IO的一個實現(xiàn)ROMIO[13]會根據(jù)全局視圖重新確定每個進程需要讀取的數(shù)據(jù)段,然后執(zhí)行兩階段I/O:第一階段為I/O階段,每個進程分別讀取自己負責的數(shù)據(jù)段;第二階段為通信階段,進程間通過通信從其他進程獲取自己原本應該讀取的數(shù)據(jù)段。當I/O進程較少時,PnetCDF獲益于進程增加帶來的并行寫入效率的增加,因此總體吞吐量隨之增加;而受限于底層并行文件系統(tǒng)的寫入帶寬限制,PnetCDF庫的吞吐量會達到峰值;之后隨著進程數(shù)的進一步增加,兩階段I/O中的通信階段代價會隨之增大,因此總體的吞吐量會略有下降。
為了擬合這種先增加后減小的變化趨勢,采用三次樣條插值算法來對未知吞吐量數(shù)值進行估計。三次樣條插值算法[14]是一種常見的插值算法,被廣泛應用于各種理論研究和實際問題中,例如圖形圖像領域、數(shù)據(jù)同化領域[15-16]等等。相較于雙線性等算法,三次樣條算法能獲得光滑連續(xù)的插值結果,更能滿足PnetCDF吞吐量連續(xù)變化的數(shù)據(jù)特點,而且可以保證插值后的曲線仍滿足PnetCDF庫吞吐量先增大后減少的特征。具體的擬合效果將在后續(xù)實驗部分呈現(xiàn)。
Trace分析子程序負責根據(jù)I/O Trace文件統(tǒng)計目標地球系統(tǒng)模式程序的I/O特征信息,包括周期時間長度、一個周期內I/O請求數(shù)目、I/O平均請求大小等信息,其輸入是目標模式程序的I/O Trace文件,輸出為配置文件。
模式的I/O Trace文件是預執(zhí)行階段產生的,重新編寫了CFIO庫的兩個函數(shù),其名稱和功能如表1所示。
表1 函數(shù)名稱及功能
cfio_init函數(shù)是CFIO在PnetCDF接口的基礎上新增加的一個函數(shù),其主要作用是對CFIO的客戶端、服務器進行初始化設置。對于cfio_init函數(shù),加了一個標志位參數(shù)flag,用flag參數(shù)的值來表示是否需要進行I/O Trace輸出,若flag值為0,表示正式運行程序,無需進行I/O Trace輸出,在cfio_init函數(shù)中將全局變量tracing_flag設置為0;若flag值為1,表示模式程序處于預執(zhí)行階段,需要進行I/O Trace的輸出,將全局變量tracing_flag設置為1。cfio_recv函數(shù)是CFIO服務器用于接收I/O請求并判斷是否將其放入緩沖區(qū)的函數(shù),在cfio_recv函數(shù)中先進行判斷tracing_flag的值,如果tracing_flag值為0,則進行之前的操作;如果tracing_flag的值為1,則在將I/O請求加入緩沖區(qū)之前,按照維度遍歷各個維度上count數(shù)組,即維度數(shù)據(jù)大小記錄數(shù)組,將各個維度大小相乘得到此次I/O請求的數(shù)據(jù)塊大小并同I/O請求到達時刻一起輸出到屏幕上,在程序預執(zhí)行的過程中將打印到屏幕的信息重定向到I/O Trace文件中。
在Trace分析子程序中,先對I/O Trace文件中I/O請求塊大小信息和時間信息分開進行處理。根據(jù)3.1節(jié)對于地球系統(tǒng)模式中I/O特征的分析可知,I/O請求大小是分段一致的,為了保證在所有的周期內均不發(fā)生堵塞,需要統(tǒng)計出I/O請求塊的最大值MaxSize并統(tǒng)計出I/O請求的總數(shù)量SumCount,這些操作僅需要對Trace中的塊大小信息進行一次遍歷即可獲得。而對于周期的確定則相對復雜,首先要對Trace中的原始時間信息進行處理,CFIO中輸出的時間是CFIO客戶端啟動之后的相對時間,單位為ms。為了便于后續(xù)操作,第一遍遍歷以第一次I/O請求發(fā)出時間為基準計算出每一個I/O請求到達的相對時間,同時以秒為單位對相對時間進行向下取整;之后,第二次遍歷時間信息,統(tǒng)計從第0到最后每一秒到達的I/O請求數(shù)目;第三次遍歷是為了確定整個I/O過程的中各個I/O階段請求個數(shù)最大值信息,記為MaxBlkNum;第四次遍歷是記錄I/O請求個數(shù)最大值出現(xiàn)的次數(shù)PeriodCount以及峰值第一次出現(xiàn)的時刻T1和最后一次出現(xiàn)的時刻Tend,則最后周期時間長度:
即用I/O請求個數(shù)最大值出現(xiàn)的次數(shù)表示在整個運行過程中的周期個數(shù)PeriodCount,而Tend與T1之間間隔了(PeriodCount-1)個完整的周期,兩者相除即可得到每一個周期的時間長度。最后Trace分析子程序會將得到信息:I/O請求塊大小的最大值MaxSize、I/O請求的總數(shù)量SumCount、周期個數(shù)PeriodCount以及周期時間長度T以文本的形式寫入配置文件中輸出。
參數(shù)自動選擇程序負責根據(jù)記錄在I/O速度記錄文件中的平臺相關信息和記錄在配置文件中的目標模式相關I/O特征信息,計算出合適的CFIO庫I/O進程數(shù)目和緩沖區(qū)大小。其輸入為帶寬測試子程序和Trace分析子程序的輸出文件即I/O速度記錄文件和配置文件還有預執(zhí)行時計算進程的數(shù)目M,預執(zhí)行時I/O進程數(shù)N,輸出為合適的I/O進程數(shù)n和CFIO服務器端緩沖區(qū)大小BufferSize,并將結果打印到屏幕上。
整個計算過程的偽代碼如圖5所示,在整個參數(shù)選擇計算過程中,先根據(jù)I/O Trace文件中的信息計算出要保證在一個周期內寫入所有I/O請求所需要的PnetCDF寫入帶寬Threshold,即用Trace中I/O請求數(shù)量之和SumCount與周期數(shù)PeriodCount相除得到每個周期I/O請求的數(shù)量,乘I/O請求塊大小的最大值MaxSize即為每一個周期最多處理的數(shù)據(jù)總量,再與周期時長T相除就可以得到所需要的寫入帶寬。之后,遍歷I/O速度記錄文件,得到S1、S2、S3和P1、P2、P3六個參數(shù),其中S1表示I/O處理速度的峰值,S2表示在I/O速度上升階段第二大的值,S3表示在I/O速度下降階段第二大的值,而P1、P2、P3表示其各自對應的I/O進程數(shù)。接著,對多種情況展開討論,如果Threshold大于S1,則表明可能的取值會在(P2,P3)區(qū)間內,對區(qū)間內所有可以整除計算進程數(shù)量M的值從小到大進行遍歷,如果在I/O記錄文件中存在則直接與Threshold值比較,如果不存在則進行插值比較,若存在大于Threshold的值則跳出循環(huán)。如果Threshold小于S1,需要找到其所在的速度區(qū)間的最小值S4和最大值S5及其對應的I/O進程數(shù)目P4和P5,其中S5有可能與S1、S2重合。之后從小到大遍歷[S4,S5]區(qū)間,對于每一個可以被M整除的值對應的總體寫入帶寬進行插值操作,如果出現(xiàn)大于Threshold的值將直接跳出循環(huán)。
圖5 參數(shù)選擇程序偽代碼
對于CFIO服務器端緩沖區(qū)的大小,根據(jù)公式(2)可知,BufferSize=MaxBlkNum×MaxSize,即I/O請求數(shù)目的峰值與I/O請求塊大小的最大值相乘,可以根據(jù)Trace信息得到結果。
如果經過上述過程沒有得到合適的I/O進程參數(shù)即找不到大于Threshold的值,說明該目標模式程序的寫入數(shù)量超過了目前平臺的寫入處理能力,必然會出現(xiàn)堵塞,需要在寫入速度峰值之前選擇盡量多的I/O進程;如果找到了合適的I/O進程數(shù)n,將會連同BufferSize一起打印到屏幕上。
在清華大學“探索100”百萬億次集群系統(tǒng)上,以海洋模式POP為目標程序,對該參數(shù)自動選擇程序進行了測試?!疤剿?00”集群的每個計算節(jié)點采用兩個Intel Xeon X5670六核處理器,每個處理器主頻為2.39 GHz,配有12 MB Cache;每個節(jié)點內存為32 GB,所有節(jié)點通過InfiniBand QDR通信網絡實現(xiàn)高速通信,理論帶寬為40 GB/s;使用Lusture并行文件系統(tǒng)作為其底層文件系統(tǒng),配置為1個元數(shù)據(jù)服務器(MDS)和40個對象存儲目標(OST),實測寫帶寬為4 GB/s;計算節(jié)點運行的操作系統(tǒng)為RedHat Enterprise Linux 5.5,所有程序使用Intel編譯器v11.1編譯,MPI版本為Intel MPIv4.0.2。
在“探索100”上運行帶寬測試子程序,指定的最大進程數(shù)為256,得到的結果如表2所示。
表2 不同進程數(shù)目下PnetCDF寫入帶寬
為了驗證插值算法的有效性,額外測試了當I/O進程數(shù)目為12、24、48、96和144時PnetCDF庫的總體寫入帶寬的數(shù)值。如圖6所示,其中藍色圓圈代表帶寬測試子程序中測量的寫入帶寬值,綠色曲線代表根據(jù)測量值插值獲得的曲線,而紅色折線代表了相應I/O進程數(shù)目時真實的寫入帶寬。根據(jù)結果可以發(fā)現(xiàn),立方插值的結果反映了PnetCDF庫總體寫入帶寬先增長后下降的趨勢。同時在I/O進程數(shù)值較小時,擬合結果與實測值差距較小,隨著I/O進程增大測量密度的降低,誤差稍有增大,總體效果在可以接受的范圍內。
圖6 三次樣條插值效果
POP是美國洛斯阿拉莫斯國家實驗室(Los Alamos National Laboratory)開發(fā)的海洋數(shù)值預報模式,利用POP模式可以推進10年期和大尺度氣候預測科學的發(fā)展,現(xiàn)在已經成為許多氣候模擬器中的標準模塊。
在本次實驗中,將POP的重啟動文件輸出頻率設置為每10步一輸出,映像文件和歷史文件設置為每2步一輸出,程序共運行40步,計算進程數(shù)M為120,在預執(zhí)行階段采用120個I/O進程,CFIO服務器端緩沖區(qū)大小設置為3 GB。
利用Trace分析子程序可以得到模式I/O特征信息為:I/O請求塊最大值MaxSize為0.55 MB,I/O請求總數(shù)量SumCount為3 064個,周期個數(shù)PeriodCount為4,周期時長T為110 s。得出的滿足條件的最小寫入帶寬為:
Threshold=120×3 064×0.55/4×110=459.6 MB/s
利用參數(shù)自動選擇程序得到I/O進程數(shù)目為24,緩沖區(qū)大小為 1 141.25 MB,其中Throughput(24)擬合的結果為469.876 MB/s,大于Threshold值。
為了驗證參數(shù)自動選擇程序的正確性,在計算進程數(shù)目固定為120的情況下,分別用I/O進程數(shù)為20和24運行原有的POP程序,同時在CFIO服務器端cfio_recv函數(shù)中,在每一個請求加入緩沖區(qū)之間輸出已用緩沖區(qū)大小信息和時間信息,并測量POP的整體運行時間。
如圖7所示,當I/O進程為20個時,在340 s左右由于緩沖區(qū)已滿,CFIO服務器堵塞不接受新的I/O請求,直到后端PnetCDF庫處理讓緩沖區(qū)有了新的空間,才會讓新的I/O請求進入緩沖區(qū),所以造成了I/O請求的時間分布被拉長,且在340 s處出現(xiàn)了每秒只有50個左右的I/O請求進入緩沖區(qū),進而影響了模式程序的整體運行時間。當I/O進程為20個時,POP運行40步需要524.133 s;當I/O進程為24時,POP運行40步僅需要434.038 s。
而對于已用緩沖區(qū)信息,以秒為單位統(tǒng)計每秒內緩沖區(qū)使用大小最大值,結果如圖8所示。
圖7 POP計算進程120,計算進程20和24對比
圖8 CFIO服務器端緩沖區(qū)使用情況
緩沖區(qū)使用數(shù)量即圖8中藍色線在程序運行過程中始終沒有超過本文通過參數(shù)選擇子程序確定的1 141.25 MB的橫線,即圖中的紅色線。
由以上分析可以認為,這套參數(shù)自動選擇程序確實為海洋模式POP選擇了在現(xiàn)有平臺上的最優(yōu)參數(shù),既滿足了性能的需求又避免了資源的浪費。
面向高分辨率地球系統(tǒng)模式的并行I/O庫CFIO的出現(xiàn),通過I/O轉發(fā)技術實現(xiàn)了I/O過程與計算過程的重疊,提高了模式的整體性能。但是,對于緩沖區(qū)大小和進程數(shù)目的管理僅僅依靠過去經驗式的參數(shù)指定方式會因為I/O過程與計算過程無法完美重疊而造成性能損失或者資源浪費,基于CFIO開發(fā)了一套參數(shù)自動選擇程序,CFIO的使用者僅需要通過命令行的方式運行三個子程序就可以自動地獲得針對當前平臺當前應用的CFIO最佳參數(shù)。通過目標模式的預執(zhí)行在CFIO的服務器端搜集模式I/O相關信息,并利用Trace分析子程序得出I/O塊大小、數(shù)目等統(tǒng)計信息,結合帶寬測試子程序得到的平臺吞吐量相關信息,可以得到將I/O過程完美隱藏在計算過程中的參數(shù)設置。
對這套參數(shù)自動選擇程序在POP和CICE兩種分量模式上進行了測試。根據(jù)其提供的結果對CFIO進行設置可以發(fā)現(xiàn),在相應參數(shù)下,POP和CICE都可以在使用盡量少的計算資源的情況下取得理論上最好的加速效果,可以讓地學研究人員在模式中更加方便地使用CFIO。
[1]王斌,周天軍,俞永強.地球系統(tǒng)模式發(fā)展展望[J].氣象學報,2008,66(6):857-869.
[2]Strand G.Community earth system model data management:policies and challenges[J].Procedia Computer Science,2011,4:558-566.
[3]Huang X M,Wang W C,F(xiàn)u H H,et al.A fast input/output library for high-resolution climate models[J].Geoscientific Model Development,2014,7(1):93-103.
[4]Dennis J M,Edwards J,Loy R,et al.An application-level parallel I/O library for Earth system models[J].International Journal of High Performance Computing Applications,2012,26(1):43-53.
[5]Docan C,Parashar M,Klasky S.Enabling high speed asynchronousdataextraction and transferusing DART[J].Concurrency and Computation:Practice and Experience,2010,22(9):1181-1204.
[6]Lawrence D,Yang L,Oleson K,et al.Community earth system model[Z].2010-10.
[7]Corbett P,F(xiàn)eitelson D,F(xiàn)ineberg S,et al.Overview of the MPI-IO parallel I/O interface[M]//Input/Output in Parallel and Distributed Computer Systems.[S.l.]:Springer US,1996:127-146.
[8]Rew R,Davis G.NetCDF:an interface for scientific data access[J].Computer Graphics and Applications,1990,10(4):76-82.
[9]Li J,Liao W,Choudhary A,et al.Parallel netCDF:a highperformance scientific I/O interface[C]//Supercomputing,2003 ACM/IEEE Conference.[S.l.]:IEEE,2003.
[10]Recio R,Culley P,Garcia D,et al.An RDMA protocol specification,IETF Internet-draft draft-ietf-rddp-rdmap-03.txt(work in progress)[R].2005.
[11]Smith R D,Gent P R.Reference manual for the Parallel Ocean Program(POP),ocean component of the Community Climate System Model(CCSM2.0 and 3.0),TechnicalReportLA-UR-02-2484[R].Los AlamosNational Laboratory,2002.
[12]Hunke E C,Lipscomb W H.CICE:the Los Alamos sea ice model documentation and software user’s manual,Tech Rep LA-CC-06012[R].Los Alamos National Laboratory,2004.
[13]Thakur R,Gropp W,Lusk E.Data sieving and collective I/O in ROMIO[C]//Proceedingsofthe 7th Symposium on Frontiers of Massively Parallel Computation(Frontiers’99).[S.l.]:IEEE,1999:182-189.
[14]李慶揚,王能超,易大義.數(shù)值分析[M].5版.北京:清華大學出版社,2008:41-44.
[15]Endr?di G.Multidimensional spline integration of scattered data[J].Computer Physics Communications,2011(6):1307-1314.
[16]Fahmy M F,F(xiàn)ahmy G,F(xiàn)ahmy O F.B-spline wavelets for signal denoising and image compression[J].Signal,Image and Video Processing,2011,5(2):141-153.