文章時間:2019年10月前
會議/期刊:ToC 2020
作者背景: 浙江大學
筆記時間:2022年01月17日周一
論文地址:https://ieeexplore.ieee.org/document/8862852
Abstract
隨著處理器和存儲設備之間的性能差距不斷擴大,I/O性能成為現代高性能計算系統的關鍵瓶頸。在本文中,我們提出了一種模式導向和布局感知的數據復制設計,名為PDLA,以提高并行I/O系統的性能。PDLA包括基于hdd的方案H-PDLA和基于ssd的方案S-PDLA。對于I/O并發性相對較低的應用程序,H-PDLA識別應用程序的訪問模式,并通過優化的數據布局為基于hdd的服務器上的每個訪問模式重新組織數據副本。此外,為了適應具有高I/O并發性的應用程序,S-PDLA復制了可以在基于ssd的服務器或基于hdd和基于ssd的服務器上帶來性能優勢的關鍵訪問模式。我們已經在OrangeFS文件系統之上的MPICH2庫下實現了建議的復制方案。實驗結果表明,H-PDLA能夠顯著提高原并行I/O系統的性能,并證明了S-PDLA相對H-PDLA的優勢。
第一章 Intro
在未來的十年里,超級計算機將從千萬億級向百億億級發展。雖然半導體技術的快速發展使處理器的速度在過去的十年里呈指數級增長,但數據輸入/輸出(I/O)系統和存儲設備的發展未能跟上計算能力的發展。這種處理器和存儲設備之間不平衡的技術進步導致了所謂的I/O-wall問題[1]。
與此同時,高性能計算(HPC)域中的應用程序對數據的需求越來越大,給已經飽和的I/O系統帶來了更大的壓力。例如,在天文學中,大型射電望遠鏡會將觀測圖像連續存儲到存儲系統中,以供進一步分析。望遠鏡可以以每秒幾千兆字節甚至每秒十億字節的速度產生數據。
為了滿足科學應用對海量數據的需求,高性能計算中心廣泛部署并行I/O系統來提供數據服務。通過使用更多的文件服務器擴展存儲系統,超級計算機可以實現可伸縮的I/O帶寬和存儲容量。不幸的是,雖然并行I/O系統為許多數據訪問模式(如大型I/O請求)提供了良好的峰值性能,但對于特定的訪問模式(如非連續的小I/O請求[1]、[4]),它們的性能卻不佳。
為了提高I/O系統性能,開發了許多I/O優化技術,例如數據篩選[5]、List I/O[6]、DataType I/O[7]和Collective I/O[5]。然而,優化I/O性能是一項容易出錯且耗時的任務,特別是對于具有復雜I/O行為的應用程序。I/O性能取決于應用程序,一般的I/O系統需要根據不同的應用程序[8],[9]進行調整。這提高了我們提出的解決方案的預期屬性:I/O優化應該考慮應用程序和系統的特性,并適應不同的應用程序。
在本文中,我們提出了一種模式導向和布局感知的數據復制方法,名為PDLA,以提高基于hdd的并行I/O系統的性能,目前這仍然是HPC應用程序的主要存儲平臺。“模式”指的是應用程序如何訪問文件,“布局”指的是文件數據如何跨多個文件服務器分布。PDLA的動機是三個觀察結果。首先,科學應用程序通常表現出數據訪問模式。利用應用程序的模式信息進行I/O優化是有價值和可行的。其次,對于硬盤驅動器(hdd)和固態硬盤(ssd)來說,連續的數據訪問通常可以獲得更高的I/O性能。第三,并行文件系統中的數據布局會很大程度上影響I/O系統的性能。
基于這三個事實,我們首先提出了一個基于hdd的模式導向和布局感知的復制方案H-PDLA,以提高基于hdd的服務器(HServers)上的并行I/O系統性能。H-PDLA包括兩個主要的優化。在“模式導向”(PD)復制策略中,系統為應用程序的每個確定的數據訪問模式創建一個重新組織的數據副本。因此,復制空間中的邏輯數據將按照應用程序訪問它們的順序重新組織。在確定重組后,在“布局感知”(LA)副本放置策略中,系統根據對數據訪問時間成本的定量分析結果,將生成的具有優化數據布局的副本存儲在HServers上的同一個PFS中。一旦副本準備好,I/O系統就能夠以友好的訪問模式為副本上的未來數據請求提供服務。
此外,由于跨多個hserver進行數據復制可能仍然不足以滿足具有高I/O并發性的應用程序,我們提出了一種基于ssd的PDLA復制方案,即S-PDLA,它利用基于ssd的服務器(SServers)來存儲副本文件,以提高I/O性能。由于在所有訪問模式下,sserver的性能并不總是優于HServers,而且在某些訪問模式下,所有的服務器協同工作可能會優于單獨的sserver,因此S-PDLA選擇可以帶來性能優勢的關鍵模式,在sserver或HServers+ sserver上進行經濟有效的數據復制。S-PDLA利用SSD的更高的I/O性能和選擇性的數據復制策略,可以有效地利用SSD的空間,并在處理大量進程的應用中最大化I/O系統性能。
具體而言,本研究做出了以下貢獻。
我們提出了一種基于hdd的PDLA數據復制方案,H-PDLA,它可以發現應用程序的訪問模式,并根據訪問成本分析,通過優化數據布局將副本放在多個hserver上。
我們提出了一種基于ssd的PDLA數據復制方案,即S-PDLA,它能夠識別關鍵的訪問模式,并有選擇地將其副本存儲在SServers或所有HServers+ sserver上,并進行優化布局,以進一步提高I/O系統的性能。
我們在OrangeFS之上的MPICH2中實現H-PDLA和S-PDLA。典型基準測試和實際應用的實驗結果表明,H-PDLA能夠顯著提高并行I/O系統的性能,并證明了S-PDLA相對于H-PDLA的性能優勢。
本文的其余部分組織如下。第2節給出了H-PDLA和S-PDLA的動機。第3節和第4節分別描述了H-PDLA和S-PDLA的設計和實現。第5節給出了評價結果。第6節介紹了相關工作。最后,第七節總結了本文。
第二章 動機
2.1 H-PDLA的動機
應用程序展示了I/O訪問模式。許多HPC應用程序以特定的方式讀寫數據。換句話說,它們的I/O行為顯示了訪問模式。例如,由于程序代碼的迭代循環結構,一些單獨或一組數據訪問可能在特定的請求距離下重復多次[10]。由于這些HPC應用程序經常運行多次來生成和分析數據,因此在不同的運行[11]、[12]中,可以在相同的執行環境和配置中識別出相同的模式。因此,收集和利用這些信息來指導數據復制是可行的。
首選連續訪問。傳統的hdd是現代并行I/O系統中的主要存儲媒體。由于非連續數據訪問通常涉及耗時的磁頭查找,因此比非連續數據請求具有更高的I/O性能。此外,雖然ssd具有與hdd不同的存儲特性,但它們對于連續的I/O請求[13]也表現出更好的性能。因此,通過數據復制產生更多連續的I/O請求,可以提高I/O系統的性能。
數據布局影響I/O性能。并行文件系統支持多種數據布局,這決定了文件數據如何分布在多個文件服務器上。典型的方法可以將數據分布在一臺服務器、一組服務器和所有服務器上。正如前面的工作[8]、[14]、[15]所示,并行文件系統中的數據布局可以顯著影響I/O系統性能,因為對于給定的I/O請求,它涉及不同的網絡和存儲活動。對于數據訪問行為不同的應用,優化后的數據布局也不同。為了最大限度地提高I/O系統的性能,理想的數據布局方案應該根據應用程序的數據訪問特性選擇優化的數據布局。
2.2 S-PDLA的動機
H-PDLA只適用于I/O并發性相對較低的應用程序。這是因為優化后的數據布局只有在每個服務器處理少量進程時才能很好地執行。但是,在大規模的HPC系統中,當進程數量明顯大于HServer數量時,每個HServer仍然需要頻繁地在多個進程之間切換,導致I/O效率非常低。由于基于閃存的ssd具有更高的I/O性能,并且比hdd對隨機訪問更不敏感,因此提出S-PDLA是很自然的,它可以在系統中添加額外的sserver來優化數據復制。然而,由于以下的觀察結果,這樣做并不容易。
首先,在sserver上復制所有訪問模式的數據并不總是能提高I/O系統性能。雖然SSD的性能通常優于HDD,但SServers是否優于原來的HServers就變得不確定了。這是因為聚合的I/O帶寬依賴于多個因素,如服務器數量、數據布局和數據訪問模式[8]、[16]。因此,S-PDLA需要進行選擇性模式復制,以確保性能優勢。
其次,所有服務器(HServers+SServers)一起工作可能比單獨HServers或sserver提供更好的I/O性能。之前的工作已經表明,如果使用優化的數據布局,所有服務器可能會提高某些訪問模式(例如,大請求)的I/O性能,因為它們有更高的I/O并行度[17]。因此,盡管在SServers上存儲副本數據是很自然的,但是S-PDLA的另一種替代方法是在所有HServers+ sserver上存儲它們,這樣做是有益的。
第三章 H-PDLA設計
3.1 H-PDLA概述
圖1為H-PDLA復制方案的系統概述,該方案位于MPI-I/O庫中,按時間順序分為三個階段。在第一階段,即應用程序首次執行期間,模式識別模塊識別并保存數據訪問模式。在第二階段,系統根據識別的數據訪問模式直接創建副本。與原始數據文件相比,副本文件按照訪問數據的順序表示數據。在第三階段,系統自動將同一個應用程序以后運行時的I/O請求轉發給副本文件,以獲得更好的性能。
3.2 數據存取模式識別
3.2.1跟蹤收集器
這個模塊負責捕獲MPI標準中的MPI- io調用。它是一個I/O中間件庫,可以鏈接到我們想要跟蹤的任何應用程序。除了這個鏈接步驟之外,不需要修改程序。在執行期間,應用程序被鏈接到這個I/O庫,每個進程生成一個包含其所有I/O操作的跟蹤文件。對于每個文件操作,跟蹤收集器收集以下信息:1)MPI級別和進程ID;2)文件ID;3)文件偏移量和請求大小;4) I/O操作的名稱;5)運行的啟動時間;6)操作結束時間。跟蹤收集器還記錄唯一文件ID和文件路徑之間的映射。
3.2.2訪問模式定義
許多應用程序的數據訪問遵循特定的模式。在本研究中,我們從五個方面定義了I/O訪問模式:空間局部性、請求大小、時間信息、迭代行為和I/O操作。空間局部性表示連續訪問之間的字節順序距離。它們可以是連續的、非連續的或它們的組合。請求大小可以是小的、中的或大的。小的I/O請求在發送到磁盤時,通常會導致I/O瓶頸。時間信息根據數據訪問的間隔進行分類,可以是固定的(I/O周期性發生),也可以是隨機的。迭代行為指的是I/O請求的重復次數,可以是重復的,也可以是非重復的(即,只有一次)。I/O操作分為只讀、只讀、讀和寫。
我們將數據訪問模式分為兩種類型:局部的和全局的。本地訪問模式表示進程的I/O行為,該進程是應用程序的一部分。然而,在某些情況下,局部模式不能反映整個應用程序的真實情況。例如,當一個應用程序進行所有進程都參與的集體I/O操作時,每個進程的操作不再是分離的行為。通過共同分析本地I/O訪問模式,可以獲得應用程序的全局訪問模式。關于訪問模式定義的更多細節可以在我們之前的工作[11],[12]中找到。
雖然模式可能包括其他屬性,但在本研究中,我們只關注空間模式,因為它們會極大地影響I/O性能[5]、[6]、[12]。我們將基于其他模式的復制優化作為未來的工作。
3.2.3采集訪問模式
跟蹤分析器識別數據訪問模式。這是一個脫機程序。通過將收集到的跟蹤文件作為輸入,分析器執行分析以獲得數據訪問模式。本模塊的詳細實現將在章節3.6中描述。獲得數據訪問模式后,系統將其存儲在模式數據庫中,以指導以下數據復制操作。
3.3模式導向復制策略
3.3.1副本創建策略
提出的方案為原始數據之外的每個識別的訪問模式創建一個副本。每個副本包含一個數據對象,而不是整個文件。它只包含在數據訪問模式中訪問的數據,如圖2所示。未被訪問或不屬于任何數據訪問模式的數據將不會被復制,而只存在于原始文件中。此外,副本中的數據會根據相應的訪問模式按照訪問順序重新組織。每個副本都作為新文件存儲在同一個文件系統中。與簡單的數據復制相比,這種策略可以更有效地利用存儲空間。
通常,副本的數量在數據可用性和性能方面起著關鍵作用。雖然分布式文件系統HDFS默認將該參數設置為3[18],但由于以下原因,我們在并行文件系統中為每個識別的訪問模式創建一個副本。首先,一個副本提供的性能與HPC域中的n(n>1)個副本相當,在HPC域中,多個進程很少并發地讀取相同的數據。即使發生這種情況,由于應用程序通常采用集體I/ o訪問數據,從存儲節點讀取數據的進程也更少。其次,該策略可以更有效地節省存儲空間。第三,很容易維護副本和原始數據之間的數據一致性。
由于應用程序可能同時具有局部模式和全局模式,因此該方案首先為所有全局模式創建副本,然后為局部模式創建副本。這可以減少數據副本的數量,并保持數據布局優化的靈活性。如圖3所示,局部模式0和1被合并,因此它們的數據在同一個文件中-副本0。局部模式2不屬于任何全局模式,它的數據是獨立的。
3.3.2何時創建副本
副本的創建是一個脫機過程。也就是說,建議的方案不會與正在運行的應用程序同時創建副本。在應用程序的第一次執行期間,該方案發現所有數據訪問模式,然后將它們添加到I/O系統的模式數據庫中。然后,系統開始根據新添加的模式隊列進行復制。這些操作只能在有空閑計算資源和I/O帶寬的情況下進行,不會影響正常任務的執行。在我們未來的工作中,系統可能允許用戶將定制的模式添加到隊列中。在這種情況下,應用程序的未來運行將使用指定的模式訪問其他數據,從而提高系統的I/O性能。
3.3.3副本存儲位置
我們將復制文件存儲在應用程序運行的同一并行文件系統中。副本文件只對I/O中間件可見,該中間件將應用程序I/O請求從原始文件重定向到副本。所有的副本都放在一些特殊命名的目錄中,只要系統的元數據保持副本的文件路徑,任何命名規則都可以工作。由于現代并行文件系統通過設置文件目錄的屬性來支持文件數據布局的調整,因此將副本文件存儲在分離的目錄中為布局感知的副本布局提供了方便。
與幾乎所有其他復制方案一樣,面向模式的復制策略會消耗額外的存儲空間。這是數據訪問性能和存儲容量之間的權衡。但是,對于許多應用來說,從節能的角度來看,這是一個很好的權衡。減少數據訪問時間將減少能源消耗。此外,由于副本是原始數據的一小部分活動數據,因此原始數據可以存儲在慢旋轉磁盤甚至磁帶上。對于這類應用程序,空間的權衡變得模糊,I/O性能和能源消耗的增加變得明顯。本研究不探討節能問題,主要關注I/O優化。
3.4感知布局的副本放置策略
3.4.1并行文件系統中的數據布局
在本研究中,我們將流行的數據布局方案分為三種類型:一維水平(1-DH)、一維垂直(1-DV)和二維(2-D)數據布局。如圖4所示,1-DH將每個進程的數據放置在所有可用的存儲節點上。1-DV將每個進程的數據分布在一個存儲節點上,而2-D將每個進程的數據分布在一組存儲節點上。
在這些方案中,1-DH是應用最廣泛的一種,因為它可以在許多情況下提供良好的I/O性能。它是OrangeFS中默認的數據布局方法,即“簡單條帶化”。然而,在某些情況下,它的性能很差。例如,當進程數遠遠大于存儲節點數時,每個存儲節點都需要同時處理來自所有進程[4]的并發請求,因此每次I/O請求都會有很大的延遲。在這種情況下,1-DV比1-DH提供更高的I/O性能,因為每個節點需要服務更少的進程。這個示例表明,對于不同的數據訪問模式,我們應該選擇不同的數據布局,以產生最佳的I/O系統性能。
3.4.2 hdd服務器成本模型
由模式導向復制方案創建的副本在存儲之前是邏輯文件。在將它們存儲到并行文件系統中時,感知布局的數據存儲優化首先需要識別出它們的優化數據布局。為此,我們利用一個數學模型來評估計算環境中的數據訪問成本。關鍵參數如表1所示。假設T1VH、T1HH和T2DH分別表示基于hdd的文件系統在1-DV、1-DH和2- d布局下的數據訪問時間,則成本模型如表2所示。該模型是有效的,并在一個實際的并行I/O系統中得到了全面的驗證。更多關于模型構建和驗證的細節可以在我們之前的研究[8]中找到。
我們可以從模型中得出一些簡單的指導方針。1)當p < n和s很大,1-DH政策三個政策之間的成本最低。
2)當p≈n, s為中值時,二維布局策略產生的帶寬比其他兩種策略大。3)當p>n和s相對較小時,1-DV布局策略為最佳選擇。
3.4.3布局感知副本放置
基于所提出的成本模型,基于布局感知的副本布局方案工作如下。首先,對于給定訪問模式中的每個請求,成本模型會估計在這三種數據布局下的訪問成本。然后將所有請求的開銷加在一起,得到整個模式的訪問開銷。此外,對于每個數據布局,模型生成一個成本結果。自然,產生最低成本的數據布局是優化的選擇,該方案將在并行文件系統中采用這種優化的布局來進行相應的副本布局。
3.5 I / O重定向
I/O重定向模塊將原始的I/O請求重定向到新創建的副本。通常,應用程序用三個參數發出I/O請求:原始文件的標識符、數據偏移量和請求大小。根據這三個參數、運行時信息(表1中列出的參數)和副本目錄中的元數據定位副本文件后,重定向模塊在原始文件和副本文件之間轉換文件名和偏移量,并使用副本文件完成請求。
3.6實現
我們在OrangeFS上實現了H-PDLA復制方案的原型及其在MPICH2下的運行時系統。該實現在默認的并行I/O系統中添加了一些組件。下面我們將詳細解釋每個組件。
3.6.1跟蹤采集器和分析器
雖然有幾種工具可以用于收集跟蹤和分析模式,但我們選擇IOSIG[11],因為它可以捕獲我們方案所需的信息,而且只會帶來較低的開銷。IOSIG是MPI-IO層的一個可插拔庫。通過使用Profiling MPI接口,它收集所有文件I/O操作的數據訪問信息。應用程序的所有文件操作都記錄在跟蹤文件中,每個文件針對一個單獨的進程。除了MPI-IO接口外,IOSIG還支持用于便攜部署的標準POSIX IO接口。
跟蹤分析器是用Python實現的,用于進行脫機跟蹤分析。它利用一種“模板匹配”方法來識別數據訪問模式,這些模式以我們之前的工作[12]中定義的I/O簽名的形式表示。通過在每個跟蹤文件中用游標標記分析進度,分析器從第一個記錄開始,并向前移動游標以掃描所有記錄,直到到達最后。在掃描過程中,分析器總是選擇一個預定義的訪問模式作為模板,以檢查它是否與游標周圍的記錄匹配。一旦找到匹配,光標將沿著跟蹤中的相同模式向前移動,直到匹配不保持。如果第一個模板沒有匹配,分析器切換到其他模板并再次嘗試。如果不能為所有模板找到匹配,則跳過當前記錄,向前移動光標,并從新位置開始匹配。分析器通過分析每個跟蹤文件生成所有的局部模式。然后,它檢查所有的局部模式,并將相對模式合并成全局模式。跟蹤分析器將獲得的模式插入到模式數據庫中。
3.6.2模式數據庫
數據復制器和I/O重定向模塊都需要檢索應用程序的數據訪問模式。我們將此元數據信息保存在“模式數據庫”中。它保存了應用程序與其數據訪問模式之間的映射關系,包括:1)模式屬于哪個應用程序;2)模式所依賴的文件類型;3)這一過程屬于模式的秩;4)全局訪問模式中包含哪個本地訪問模式。Pattern Database還保存所有者應用程序的運行時環境中的元數據,主要包括系統的參數,這些參數將用于確定生成的復制文件的優化數據布局。
我們使用Berkeley DB來實現模式數據庫。Berkeley DB是一個哈希表,它的每條記錄都是一個鍵值對。這個鍵是一個“patternID”,它由以下信息編碼:應用程序的執行命令,進程數,進程的等級,和原始文件名;該值包含數據訪問模式和運行時信息。代碼中的值表示是一個結構定義(在C語言中),它包括幾個固定的成員變量和各種類型的數據訪問模式的聯合(也是在C語言中)。、
3.6.3數據復制器
數據復制器是一個輕量級守護程序,它監視包含需要復制的所有數據訪問模式的隊列。當跟蹤分析器將一個新的訪問模式插入模式數據庫時,它也將相同的模式插入到這個全局隊列中。當隊列不為空時,復制器將取消訪問模式的隊列,并開始根據它們進行復制,一次一個。同時,數據復制器使用運行時信息(表1中列出的參數)和成本模型來找到優化的數據布局。然后,它只是從原始文件讀取數據,并將它們寫入具有優化的數據布局的副本文件。我們使用Berkeley DB內置的隊列訪問模式來實現這樣一個隊列。要配置數據布局,數據復制器只需在OrangeFS中設置一個具有優化數據布局的目錄,然后將副本存儲到該目錄中。OrangeFS提供了一個配置目錄數據布局策略的工具。
數據復制器也像復制掃描器一樣工作。它定期掃描模式數據庫,一旦發現缺少模式的原始文件,就會刪除相應的數據副本和相關的元數據。
3.6.4復制目錄
副本目錄存儲副本的元數據。它管理數據副本、原始文件和數據訪問模式之間的關系。元數據包括1)副本的數據來自哪個原始文件,2)副本是基于哪個訪問模式創建的。它的實現也使用Berkeley DB配置為哈希表;鍵是patternID(與Pattern Database中的鍵相同),值是基于相應數據訪問模式的副本文件路徑。
3.6.5 I / O重定向
該模塊根據請求的具體情況將I/O請求重定向到原始文件或副本文件。通常,應用程序用三個參數發出I/O請求:原始文件的標識符、數據偏移量和請求大小。根據這三個參數、運行時信息和副本目錄中的元數據定位副本文件后,重定向模塊在原始文件和副本之間轉換文件名和偏移量,并使用副本完成請求。
我們對MPI-IO標準函數進行了以下修改,以基于請求細節重定向I/O請求。
MPI_File_open:當打開一個文件時,該方法嘗試打開相應的副本文件,而不是打開原始文件。
MPI_File_read/MPI_File_write(和其他讀/寫格式,如MPI_File_read_at,等等):對于每次I/O讀或寫,這個函數使用副本文件的文件句柄,并檢查訪問模式是否改變,或者打開的文件是否包含請求的內容。如果應用程序仍然遵循相同的模式,模塊計算正確的數據偏移量,并使用新的偏移量和文件句柄發出請求。如果模式發生了更改,則模塊會發現新的模式,打開新的復制文件,并向它們發出請求。
MPI_File_close:關閉打開的復制文件。
MPI_File_seek:它計算偏移量,并在必要時在副本中執行查找操作。
當請求的數據不屬于任何數據訪問模式,也沒有副本時,系統的行為與默認的MPI-IO實現相同。
第四章 S-PDLA設計
在前一節中,我們描述了基于hdd的并行I/O系統的H-PDLA復制方案。正如第2.2節所討論的,H-PDLA對于具有高I/O并發性的應用程序來說是低效的。為了解決這個問題,我們提出了一種新的基于ssd的復制方案,S-PDLA來進一步提高I/O系統的性能。
4.1 S-PDLA的思想
S-PDLA的基本思想是利用SServers作為原始文件系統的復制空間。(1)以來SServers并不總是執行比HServers所有訪問模式和(2)所有服務器可能比純SServers訪問模式,S-PDLA只有選擇關鍵模式可以帶來顯著的性能好處進行成本效益數據復制SServers或HServers + SServers。
圖5顯示了S-PDLA方案的思想。當原始HServers上的數據副本效率低下時,它會復制SServers上的一些已識別的訪問模式,以及HServers+SServers上的其他訪問模式。在何處存儲模式的副本由復制效益分析決定。在隨后的I/O服務階段,S-PDLA根據請求的具體情況,自適應地將I/O請求重定向到SServers或HServers+SServers。與SServers上不加區別地復制所有訪問模式的數據的簡單方案不同,S-PDLA通過選擇性的數據復制,既節省SSD空間,又最大限度地提高I/O系統性能。S-PDLA通過優化的數據布局將副本數據分布在sserver上,因為它們也會影響基于ssd的I/O性能[1],[4]。為了簡單起見,S-PDLA只在HServers+SServers上存儲副本數據,并且采用1-DH布局。另外兩種類型的數據布局也可以應用于S-PDLA[4]、[9];我們將在未來的工作中將其整合到S-PDLA中。
4.2 sserver和HServers+ sserver成本模型
為了實現經濟有效的數據復制,我們提出了兩種成本模型來評估不同類型服務器上的文件請求的數據訪問時間。
4.2.1 sserver成本模型
對于sserver,模型中的相關參數如表3所示,成本模型如表4所示。與3.4.2節中的前一個模型相似,該模型有三個不同點。首先,sserver的數量可以不同于hdd模型中的hserver。其次,sserver的讀寫性能是不同的,因為在SSD上寫操作通常會涉及后臺活動(如垃圾收集和均衡磨損),而讀操作則不會。第三,由于ssd硬盤具有更高的I/O性能,因此ssd硬盤的啟動時間和單位數據訪問時間要比hdd硬盤小得多。通過考慮這些配置和設備的差異,該模型可以有效地評估服務器上的請求性能
4.2.2 HServers+ sserver的成本模型
為簡單起見,我們只考慮1-DH數據布局。由于HServers和SServers具有異構性能,我們假設數據分布在HServers和SServers上,文件條帶大小分別為sh和ss,以緩解服務器之間的負載不平衡。我們假設每個文件請求都由所有的nh+ns服務器處理,即nh?sh+ns?ss=s。為了實現負載均衡,通常ss要大于sh。在極端情況下,如果有可能提高性能,sh可以為零(這意味著文件數據只分布在SServers上)。基于這些假設,相應的成本模型如表5所示。
注意,模型中的數據訪問時間是兩個變量的函數,對于給定的文件請求,sh和ss。它由線性不等式和未知變量不等式組成(最大表達式可以描述為多個線性不等式)。因此,我們可以使用線性規劃(LP)優化技術或迭代算法來找到給定假設下的優化條帶大小。由于線性規劃僅用兩個未知變量表示,搜索空間非常小,求解該規劃需要可接受的離線時間開銷。關于構造模型和為給定訪問查找優化的條帶大小的更多細節可以在[4]中找到。
4.3關鍵接入模式識別
利用所提出的成本模型,S-PDLA可以得到不同數據布局下HServers、SServers或HServers+SServers上每個請求ri的數據訪問成本。對于給定的訪問模式,假設n是模式中的請求數,我們可以得到該模式在三個潛在副本空間上優化后的數據訪問時間如下:(公式略)
B為正值意味著,與在HServers上復制模式數據相比,在SServers或HServers+SServers上復制預期的數據將進一步提高I/O系統性能。B的值越大,復制帶來的好處就越大。然而,由于sserver在所有系統配置和訪問模式上并不總是優于hserver,因此預期的復制并不總是有利可圖。例如,當系統有大量的hserver和少量的sserver時,hserver可能比sserver有更好的I/O聚合帶寬,因為它們提供更高的I/O并行性。在這種情況下,從HServers(原始的I/O系統)上的副本提供所需的數據有助于提高系統性能,而不需要在SServers上復制這些數據。我們將在第5.2節中對此進行說明。
為了最大化系統性能,S-PDLA將B值大于預定義閾值的訪問模式視為關鍵模式,然后將其復制到SServers或HServers+ sserver上。副本的存儲位置由副本空間決定,這樣可以帶來最大的性能效益。為了指導下面的實際數據復制,S-PDLA使用一個關鍵模式表(CPT)來存儲模式信息、性能優勢、副本空間和相應的優化數據布局。
4.4關鍵模式的副本創建和放置
一旦獲得關鍵的訪問模式,S-PDLA將在SServers或HServers+SServers上復制它們,并優化了數據布局。算法1展示了副本的創建和放置過程。為了節省成本,它首先按照性能優勢降序對所有關鍵模式進行排序,然后對它們進行迭代,以便將可能的數據復制從高效益模式復制到低成本模式。具有更高效益的模式有更高的優先級要復制。對于每種訪問模式,算法會檢查系統是否有足夠的空間來容納優化后的數據布局所涉及的數據。如果是,算法將在相應的副本空間(SServers或HServers+SServers)中為給定模式創建一個副本文件。然后,它根據原始文件中的訪問順序,不斷地將請求的數據從原始文件復制到副本文件。為了保持副本位置和布局信息,當將新數據追加到副本文件時,該算法在副本映射表RMT中添加一個條目。否則,由于空間不足,將無法復制該訪問模式。
注意,該算法是一個選擇性策略,它只復制關鍵訪問模式,而不是全部。此外,它是布局感知的,因為它將每個副本存儲在SServers或HServers+SServers上,使用優化的數據布局,而不是固定的1-DH數據布局。這樣可以有效地利用服務器有限的空間。
4.5實現
CPT和RMT是S-PDLA記錄關鍵模式和副本映射信息的兩個關鍵數據結構。我們使用Berkeley DB[19]來實現它們,每個都作為SServers上并行文件系統中的數據庫文件。對于CPT,鍵是用應用程序名稱、進程數量、進程的等級、原始文件名和訪問模式編碼的PatternID;包含性能增益、副本空間和優化后的數據布局。對于RMT,鍵是PatternID,值包含數據訪問信息。此外,我們在內存中使用列表來維護兩個表中最頻繁訪問的條目,以加快查找速度。
我們修改MPI庫,使SServers或HServers+SServers上的副本位置信息用MPI_Init()加載,用MPI_Finalize()卸載。我們還修改了MPI_File_open/read/write/seek/close()函數(以及它們的其他變體),以將I/O請求自動轉發到相應的復制空間。
第五部分評價
我們在一個64節點的Sun Fire Linux集群上進行了實驗。每個節點有兩個Opteron四核處理器,8gb內存和一個250gb 7200RPM SATA-II硬盤(HDD)。我們使用8個節點作為由OrangeFS管理的存儲節點,所有其他節點作為計算節點。計算節點和I/O節點(文件服務器)之間沒有重疊,因此應用程序和文件系統之間的所有數據訪問都是遠程訪問。
我們使用三個流行的微基準測試,IOR[20]、PIO-Bench[21]、MPI-Tile-IO[22]和一個實際的應用程序[23]來評估系統性能。我們對系統的性能進行了五次測試,并選擇了平均值作為結果。
5.1 H-PDLA方案評價
本小節的評估是為了展示基于hdd的模式導向(PD)和感知布局(LA)的數據復制方案的有效性。為了進行比較,我們在沒有數據復制的情況下測試了原始的基于hdd的并行I/O系統(original)的性能。為了確保改進僅來自于應用PD復制策略,我們首先在這些測試中禁用LA放置。因此,副本和原始文件使用相同的數據布局。數據布局是1-DH (OrangeFS中的“簡單條帶”分布),條帶大小為64kb。
然后,為了驗證優化數據放置副本的需求,我們通過啟用PD和LA (PD+LA,即H-PDLA)來測量系統性能。我們以兩種不同的方式存儲副本,一組副本存儲在OrangeFS的默認數據布局(1-DH)中,另一組副本存儲在優化后的數據布局中,這是由3.4節中的副本布局方案決定的。這兩組副本彼此相同,所以所有的性能差異都是由它們的數據布局差異造成的。
5.1.1 IOR基準
各種進程數。圖6顯示了不同進程數量下IOR的I/O性能。我們使用8、32、128和512個進程運行IOR。每個進程以固定步長方式訪問512mb的數據,請求大小為256kb。不同的進程訪問各自的原始文件區域,這樣就不會有進程的數據與其他進程的數據共存。我們可以看到PD和H-PDLA都可以改善原有I/O系統的性能。與原始系統相比,PD策略的讀性能提高了970%,寫性能提高了307%。原因是在原來的I/O系統中,存在許多非連續的I/O請求,降低了I/O效率。但是,通過使用PD策略,這些請求被轉換為副本空間中的順序請求,從而極大地提高了I/O帶寬。與PD策略相比,LA復制放置策略可以為讀帶來高達10%的額外性能改進,為寫帶來5%的額外性能改進。這是因為PD只應用一個固定的數據布局用于復制布局,而LA可以從三個候選布局中選擇成本最低的最佳布局。從這些結果中,我們可以看到為副本優化的數據放置可以進一步提高I/O系統性能。
我們還注意到,隨著進程數量的增加,IOR的帶寬會降低,因為每個存儲節點需要服務更多的進程,導致存儲節點上的爭用更加嚴重。但是PD和H-PDLA的帶寬下降速率都比原始情況低。這表明,所提出的數據復制方案可以顯著提高系統的可伸縮性,以滿足更多的并發請求。
各種尺寸要求。圖7顯示了不同請求大小(16kb、256kb和4mb)下IOR的帶寬。我們將進程數設置為64。與前面的測試類似,PD和H-PDLA方案都可以獲得相對于原始I/O系統的性能改進。與沒有數據復制的原始I/O系統相比,PD復制將I/O帶寬提高了80%至926%,將I/O帶寬提高了47%至521%。隨著請求大小越來越小,IOR的帶寬也越來越低。這是因為每個存儲節點都需要處理大量的不連續的小數據請求,因此磁盤查找的頻率更高。圖7還顯示了應用PD復制的另一個改進:當請求大小減小時,PD降低帶寬的速率比原始情況下要低得多。換句話說,PD可以顯著提高I/O系統處理大量小請求的能力。
當啟用LA放置策略時,如圖7所示,可以進一步提高PD復制策略獲得的I/O性能,說明LA是有用的,也是必要的。與原來的I/O系統相比,當同時啟用PD策略和LA策略時,I/O系統讀性能提高84% ~ 970%,寫性能提高16% ~ 208%。
5.1.2 PIO-Bench基準
PIO-Bench基準測試可以測試在實際應用程序的典型工作負載中出現的幾種I/O訪問模式。這些模式包括順序、簡單跨步、嵌套跨步、隨機跨步、分段訪問和平鋪的模式。我們使用嵌套跨步訪問模式運行PIO-Bench。進程數為64,請求大小為4kb、16kb、64kb、256kb和1mb。我們記錄程序的執行時間,并用它除以總的數據訪問大小,得到聚合的I/O帶寬。
圖8顯示了PD給PIO-Bench帶來的性能改進。與原來的I/O系統相比,我們可以看到PD在讀方面的性能提高了8%到27%,在寫方面的性能提高了10%到39%。圖8還顯示LA優化可以比PD策略單獨獲得額外的性能優勢:讀性能提高了9%到22%,寫性能提高了5%到41%。這些結果表明,H-PDLA用于PIO-Bench是有效的。
如上所述,PIO-Bench的數據訪問模式是嵌套的。這意味著每個進程都有固定步長訪問模式。但是多個本地訪問模式是相互嵌套的,并且可以組合成全局訪問模式。因此,與我們用于IOR測試的固定跨距數據訪問模式相比,嵌套跨距模式可以產生更好的數據局域性。因此,PIO-Bench的性能改進不如IOR,但仍然是顯著的。這進一步證實了H-PDLA的適應性:當應用程序的數據訪問性能較差(由于連續訪問之間的數據局部性較差)時,它從H-PDLA獲得了更多的好處。
5.1.3 MPI-Tile-IO基準
然后,我們使用默認的訪問模式運行MPI-Tile-IO。MPI-Tile-IO將整個數據文件視為一個2d矩陣,并將其分成n×n個tiles (n行n列)。給定n2個進程,每個進程使用固定步長訪問模式訪問一個tile中的數據。每個進程根據每個tile的大小和每個元素的大小訪問一個數據塊。將同一行中n個tile的數據嵌套在一起。因此,MPI-Tile-IO的數據訪問模式也是嵌套的。
在這個測試中,我們運行帶有64個進程和各種請求大小的MPI-Tile-IO。請求大小分別為4kb、16kb、64kb、256kb和1mb。圖9顯示了PD為MPI-Tile-IO在原始I/O系統上帶來的性能改進。對于讀操作,聚合帶寬增加了39%到91%,對于寫操作,聚合帶寬增加了30%到86%。圖9也說明了H-PDLA對MPI-Tile-IO比PD方案帶來的性能改進:I/O聚合帶寬對讀請求提高了6 - 15%,對寫請求提高了4 - 14%,這意味著LA方案對MPI-Tile-IO是有效的。
與PIO-Bench測試類似,MPI-Tile-IO的性能提高是顯著的,但沒有IOR的性能提高大。原因是MPI-Tile-IO中使用的嵌套跨距模式比IOR中使用的固定跨距數據訪問模式具有強的數據局域性。
5.2 S-PDLA方案評價
以上結果證實了H-PDLA在某些情況下的有效性。在本小節中,我們將進行實驗,以證明當I/O并發顯著大于服務器數量時,增強的S-PDLA方案可以進一步提高應用程序的I/O性能。
我們將S-PDLA與其他三種方案進行比較:H-PDLA、S-ORIG和NS-PDLA。如前所述,H-PDLA復制HServers上所有確定的訪問模式。S-ORIG在沒有PDLA的情況下將原始文件存儲在SServers上。NS-PDLA是一種非選擇性策略,它不加區分地復制sserver上所有模式的數據,而不考慮復制的好處。相比之下,S-PDLA只復制能夠在SServers或HServers+SServers上帶來性能優勢的模式。通過這些比較,我們將清楚地了解選擇性策略在S-PDLA中的必要性及其在提高I/O系統性能方面的效率。
我們將原始的I/O系統部署在8個hserver上。此外,我們在四個sserver上建立了一個附加的系統,用于存儲S-ORIG中的原始文件和S-PDLA中的副本文件。
5.2.1 IOR基準
為了模擬每個服務器都面臨高I/O并發的場景,我們對128、256和512個進程運行IOR。我們修改了IOR,以便在文件的不同部分生成不同大小的請求,以便使用不同的I/O模式訪問數據。每個進程使用跨步I/O請求訪問數據。在文件的不同部分,我們在16kb、256kb和4mb之間改變請求大小。對于每個進程,總訪問數據大小為512 MB。
圖10顯示了不同進程數量下IOR的聚合帶寬。我們發現S-PDLA的性能優于H-PDLA:讀性能提高了128到183%,寫性能提高了252到279%。這是因為S-PDLA利用高性能ssd和優化的數據布局來提高系統性能。S-PDLA也比S-ORIG更好:它的讀取速度可達86%,寫入速度可達98%。這種改善有兩個原因。(1) S-PDLA存儲經過優化的數據布局的副本,S-ORIG存儲采用默認布局。(2) S-PDLA將某些模式的副本存儲在HServers+SServers上,而S-ORIG只存儲在SServers上,這種模式的I/O并行度較低。
另一個觀察結果是,S-PDLA優于NS-PDLA,因為S-PDLA進行的是低成本的復制,而NS-PDLA進行的是不加區別的數據復制。為了證實這一點,我們根據S-PDLA對請求地點進行了分析。S-PDLA將小于4MB的請求下發給SServers, 4MB的請求下發給HServers+SServers。對于小的請求,SServer比HServer快得多,S-PDLA只在SServer上復制模式更有益,因為它可以有效地利用SServer的性能。但當請求大小為4 MB時,異構服務器之間的性能差距顯著減小。在這種情況下,hserver比sserver提供更好的I/O帶寬,因為它們有更高的I/O并行性。然而,在HServers+SServers上復制數據可以進一步提高I/O性能,因為它可以最大限度地利用所有節點的I/O并行性。
我們還注意到,隨著流程數量的增加,S-PDLA帶來的性能改進逐漸減少。原因是當服務于大量進程時,ssd也會降低I/O性能。但由于ssd具有較高的I/O性能,且對隨機訪問的敏感性較低,因此S-PDLA比H-PDLA具有更好的性能和可伸縮性。
5.2.2 PIO-Bench基準
我們使用嵌套跨步訪問模式運行PIO-Bench。進程數為128個,請求大小從4 KB到1 MB。我們用總的數據訪問大小除以程序的執行時間來計算總的I/O帶寬。圖11為PIO-Bench在不同請求大小下的I/O帶寬。當請求大小等于或小于256kb時,S-PDLA在讀方面比H-PDLA提高了153%的I/O性能,在寫方面提高了89%。在這些情況下,S-PDLA將I/O請求發送到SServers。當請求大小為1mb時,S-PDLA獲得更高的I/O帶寬,因為在此場景中,HServers的性能優于SServers,并且S-PDLA在HServers+SServers上復制模式。與之前的測試結果類似,S-PDLA優于S-ORIG和NS-PDLA。S-PDLA改進的原因是,它可以基于復制效益分析,以優化的數據布局,智能地復制SServers或HServers+SServers上某些模式的數據。相比之下,S-ORIG只將數據以默認布局存儲在sserver上,而NS-PDLA則不加區別地將數據復制到sserver上,即使hserver具有更好的I/O性能。
5.2.3 MPI-Tile-IO基準
我們使用默認的訪問模式運行MPI-Tile-IO。進程數為256個,請求大小為4kb、16kb、64kb和256kb。圖12顯示了與H-PDLA、S-ORIG和NS-PDLA復制方案相比,S-PDLA為MPI-Tile-IO帶來的性能改進。我們可以看到,與H-PDLA相比,S-PDLA可以進一步增加聚合帶寬,讀請求增加21%至60%,寫請求增加31%至57%。此外,由于請求大小相對較小,S-PDLA獲得與NS-PDLA相同的性能,因為它們都將所有已識別模式中的請求重定向到SServers。
5.2.4真實的應用程序中
上述基于基準的評估說明了S-PDLA的有效性。在本小節中,我們使用一個名為“匿名LANL App 2”[23]的實際應用程序測試S-PDLA的性能。我們選擇這個應用程序是因為它具有復雜的訪問模式,可以評估我們提出的方法的通用性。
在這個應用程序中,每個進程在運行時用不同的訪問模式在共享文件的不同部分發出I/O請求。我們可以根據請求大小將文件劃分為三個典型的部分。對于第一部分,請求大小相對較小(幾個KBs)。第二部分的請求大小中等(幾十個KBs)。在最后一部分中,請求大小在一個大的(數百個KBs)和另一個大的(數百個KBs)之間迭代變化。為了模擬相同的訪問場景,我們根據I/O跟蹤重播應用程序的數據訪問。
圖13a顯示了應用程序在4種復制策略下對應的I/O性能。與前面的測試類似,雖然S-ORIG、S-PDLA和NS-PDLA分別優于H-PDLA,但S-PDLA為應用程序的高度變化的工作負載帶來了最佳性能。原因是S-PDLA在適當的服務器上復制不同的模式,使用基于性能效益分析的優化的數據布局,而S-ORIG將數據放在SServers上,使用默認的數據布局,而NS-PDLA總是不加區別地將它們復制到sserver上。這一結果表明,S-PDLA對于具有復雜I/O模式的應用程序也是有效的。
5.3系統開銷
如圖1所示,我們將一些組件集成到默認的并行I/O系統中,使PDLA自動工作。這些模塊會導致額外的系統開銷。
5.3.1跟蹤收集開銷
我們在應用程序第一次執行時收集I/O跟蹤。這只會發生一次。為了度量跟蹤收集器的運行時開銷,我們測試IOR和MPI-Tile-IO在連接跟蹤庫和不連接跟蹤庫的情況下的執行時間之間的差異。對于IOR基準測試,開銷低于2%,而對于MPI-TILE-IO基準測試,開銷低于6%。這些結果表明跟蹤收集器引入的開銷是可以接受的。
5.3.2模式識別開銷
在后臺進行離線模式識別。因此,它不會影響用戶應用程序的執行。分析器的執行時間與跟蹤記錄的數量成正比。即其時間復雜度為O(n)。為了顯示開銷,我們在一個客戶機節點的單個核上運行一個帶有5296條記錄的PIO-Bench跟蹤文件的分析器。結果表明,完成分析僅需不到2秒。如果需要,我們可以將分析過程并行化,以減少執行時間。例如,我們可以使用shell腳本在多個跟蹤文件上同時啟動多個分析程序。
5.3.3 I/O重定向開銷
對于某些具有識別數據訪問模式和副本文件的應用程序,系統可以提高整體I/O性能。然而,有些應用程序沒有常規的數據訪問模式,因此不能從訪問PDLA副本文件中獲益。在這種情況下,可能會存在開銷,如果在容量上存在明顯的開銷,則可能會降低性能。
在本小節中,我們只評估運行時系統中以下兩個可能的開銷來源。
在“文件打開”期間,I/O重定向模塊需要在模式數據庫中查找數據訪問模式。
在“文件讀寫”過程中,模塊需要檢查打開的文件是否為副本,從而決定是否進行偏移量計算。
為了計算運行時中的開銷,我們使用連續數據訪問模式運行IOR,并在數據庫中不放置相關模式,也不進行數據復制。所以系統只訪問原始文件。我們使用8、64和512個進程運行IOR,每個進程都有100 MB的數據,請求大小為256 KB。圖13b顯示了啟用H-PDLA后與原始I/O系統相比,執行時間的變化百分比。可以看出,H-PDLA的開銷是可以接受的。對于S-PDLA來說,由于與H-PDLA相同的原因,也會帶來性能開銷。由于這種開銷與H-PDLA的開銷相當,為了便于說明,我們在圖13b中省略了它。
第六章 相關工作
數據復制。利用數據復制改進I/O系統性能的努力有很多。InterferenceRemoval[24]將可能涉及干擾的文件段復制到各自指定的I/O節點上,這樣可以大大降低每個節點上的干擾程度。IR+[25]使用ssd為異構存儲系統中的數據副本創建硬盤友好的布局。與這些工作不同的是,PDLA基于數據訪問模式創建副本,因此選擇要復制的數據的規則很簡單。PDLA還根據訪問順序重新組織數據,從而將非連續訪問轉換為連續訪問。
為了提高非連續請求的I/O效率,HDFS[18]和GPFS-SNC[26]為每個文件創建多個副本,可以將I/O請求重定向到最近的位置,從而降低數據訪問成本。在集群或網格系統[27],[28]中也采用了類似的方法。與這些工作相反,PDLA只復制訪問模式,因此它可以節省存儲空間。[29]和[30]中也執行了基于模式的數據復制,它們選擇一般的訪問模式并使用更有組織的布局復制它們。CEDA[31]考慮了文件請求的物理數據布局,并執行經濟有效的數據復制。然而,所有這些研究都使用了原始I/O系統中相同類型的設備來復制數據,這對于具有高I/O并發性的應用程序來說可能仍然存在性能限制。與之相反,S-PDLA利用新的存儲介質ssd來提高I/O性能。
此外,一些并行文件系統,如Ceph、Lustre和GPFS,提供內置的數據復制功能以增強容錯能力。類似的冗余數據放置方法[32]和[33]旨在提高系統可用性。與這些努力相反,本研究打算通過數據復制來提高系統性能,這一領域直到最近才引起了[8]的注意。
數據組織。AILS[34]、FS2[35]和BORG[36]會自動重組選定的磁盤塊,以減少磁盤查找開銷。這些技術對于單個磁盤和磁盤陣列是有效的,但是需要在磁盤設備驅動程序和本地文件系統中進行復雜的實現。PDLA復制方案在I/O中間件中實現簡單,很好地適應了當今大規模HPC系統,具有較好的模式識別能力。
為了提高讀性能,SOGP[37]存儲在一個更高效的組織中經常訪問的數據副本。SOGP的目標是彌合OrangeFS和本地存儲之間的差距,而PDLA則專注于彌合應用程序和物理數據之間的差距。He等人提出了一種根據訪問模式進行文件重組的方法,通過在MPI-IO層[38],[39]中對文件進行重映射來增加連續性。相比之下,PDLA消耗的存儲資源更少,對進一步的數據布局優化更具靈活性。更重要的是,PDLA是一種結合了復制、重組和優化數據布局的系統方法,共同工作以獲得最佳性能。
為了進行寫優化,PLFS[40]將非連續寫的數據存儲在一組重新組織的日志文件中。雖然極大地提高了寫性能,但當從這些文件中回讀時,由于不可避免的數據重構,可能會降低讀性能。在PDLA方案中,讀和寫訪問模式是分開處理的,以實現它們的最佳性能。
第七節的結論
PDLA是一種新的數據復制方案,旨在根據特定應用程序的I/O特性優化并行I/O性能。它包括一個基于hdd的方案H-PDLA和一個基于ssd的方案S-PDLA。對于I/O并發性相對較低的應用程序,H-PDLA識別應用程序的訪問模式,并通過優化的數據布局為基于hdd的服務器上的每個訪問模式重新組織數據副本。對于具有高I/O并發性的應用程序,S-PDLA識別關鍵的訪問模式,并在基于ssd的服務器或所有基于hdd和基于ssd的服務器上使用優化的布局將其復制。實驗結果表明(1)H-PDLA可以顯著提高原有I/O系統的性能,(2)S-PDLA可以進一步提高H-PDLA在大量流程應用中的系統性能。
在未來的工作中,我們計劃利用更多的應用訪問模式,使存儲系統更智能、更高效。我們還打算用更多的應用程序從性能和能耗的角度測試我們提出的復制方案。