李惠歡 楊 敏 吳汝明
(中山大學網絡與信息技術中心 廣東 廣州 510275)
?
基于TORQUE的高性能計算平臺記賬系統
李惠歡楊敏吳汝明
(中山大學網絡與信息技術中心廣東 廣州 510275)
高性能計算已成為繼理論研究和實驗科學之后的第三種科研方法。如何高效地利用高性能計算平臺上眾多的設備為科研提供有效服務是管理者需要面對的主要問題。主要介紹基于開源軟件TORQUE的高性能計算平臺記賬系統的設計與實現,包括計算算法、系統架構、主要功能模塊、數據設計及代碼實現。通過歸納法分析TORQUE日志記錄模式,給出從作業角度和資源角度進行資源使用率的計算方法。該記賬系統架構劃分為五層,系統具有很好的靈活性和開放性,可以很容易地移植到其他平臺或者其他類型的作業調度系統上。該系統更著重于當前資源的使用情況、用戶資源使用情況、任務等待時間,而非簡單的費用計算和賬單打印,所以它更能為管理者和決策者提供有效且強大的數據支撐。
TORQUE記賬系統高性能計算平臺資源利用率
隨著科學技術的高速發展,無論是計算平臺還是科學計算的應用軟件都得到迅速發展。為了滿足各學科科學計算的需求,集中式的高性能計算(HPC)平臺、GPU平臺在高等學校如雨后春筍般出現。高性能計算機系統是一套由多個計算節點、管理節點和存儲節點組成的計算機系統,節點間通過網絡有序協同工作,目前計算力可達到每秒億億次的水平。HPC被廣泛應用于高性能計算中心、國家實驗室和各種領域。
通觀我國目前在高性能計算平臺上記賬和計費系統的研究情況,有基于PBS系統記賬信息設計的計費系統[7,9],也有基于PBS系統并重新設計記賬信息收集器和分析器的;有基于其他作業管理軟件設計的(如通過采集LSF系統作業調度及資源分配信息設計的預付費系統[3]、基于LSF的計算配額系統[5]、對神威4000A系統和IBM系統設計的統一資源管理系統[1]),也有進行了校園網格系統和計費系統整體結構及模塊設計的研究[10]。但系統設計往往缺乏對高性能計算平臺整體系統的通盤考慮,缺少對計算平臺的環境監控管理系統、集群負荷管理系統、Web作業提交系統、作業記賬計費系統、門戶系統、決策分析系統等整個生態系統的統籌規劃,系統缺少可擴展性和靈活性。
目前中山大學高性能計算服務平臺共有4套系統,包括3套HPC平臺和1套GPU平臺,使用團隊已超過170多個,涉及化工、環境、物理、海洋、生物等多個學科領域。隨著用戶數量的增加,如何充分利用現有資源為用戶和高性能中心帶來最大的效率和效益,是HPC平臺管理者必須面對的問題。為此我們希望通過利用HPC平臺的TORQUE日志信息開發一個記賬系統。鑒于當前我校免費使用、院校共建、資方優先、統一管理的政策,系統關注點主要是系統資源是如何使用,哪些資源是短缺的,哪些資源沒有被充分利用,哪些資源被哪些應用長期占用等;并非關注用戶使用了哪些資源及他們需要付多少費,因而它為領導決策、平臺擴展和升級、用戶使用指引提供了有效有力的數據依據。
PBS是一個批處理作業和計算機系統資源管理的軟件包,是功能最全、歷史最久、支持最廣的本地集群調度器之一。PBS包括OpenPBS、PBS Pro和TORQUE三個主要分支,TORQUE是Adaptive Computing公司基于OpenPBS給予后續支持的一個開源版本。TORQUE和Maui一起進行資源調度和作業管理,對批量作業和分布式計算節點提供控制。
1.1TORQUE工作模式
TORQUE由一個頭節點和多個計算節點構成,在頭節點上運行pbs_server守護進程,在各計算節點上運行的是pbs_mom進程。提交和管理作業的客戶端命令(作業的啟動、取消、監控)可以在任何主機上安裝,包括沒有運行pbs_server或 pbs_mom進程的主機[6],如圖1所示。

圖1 TORQUE結構圖
頭節點同時還運行了一個調度進程pbs_sched,此調度器與pbs_server進程一起,提供資源使用決策并為作業分配節點。TORQUE提供了包括啟動、保留、取消和監控作業的一系列底層方法,調度器借此實施作業控制。在TORQUE的分發包中提供了簡單的FIFO先入先出調度器以及高級的編程式調度器兩個選擇,但大部分的TORQUE用戶選擇使用打包的第三方調度器,如Maui或Moab。
作業整個生命周期可以分為創建、提交、執行和結束四個階段。用戶首先要編寫作業腳本,在腳本中定義作業各種參數,包括作業應運行多長時間(walltime)、哪些資源是必要的以及作業執行內容。然后使用qsub命令向pbs_server進程發送作業提交請求。TORQUE將依據管理員預先定義的策略規則設定作業優先級,并同時開始啟動作業執行。pbs_server接收到一個新作業后通知調度器。當調度器為作業找到所需資源后,就向pbs_server發送指令,把可分配給作業的節點列表信息發送給pbs_server進程。緊接著pbs_server將新作業發送到節點列表的第一個節點上,并命令它啟動作業。此節點被指定為執行主機,稱為Mother Superior,作業中的其他節點稱為sister moms。
1.2TORQUE日志記錄分析
TORQUE把批量作業的日志記錄存放在$TORQUEROOT/server_priv/accounting/
Timestamp;EventMarker;JobNum;EventDetail
日志記錄有八種不同的事件標記EventMarker,包括A(系統放棄執行作業)、C(作業已設置檢查點并保留)、D(作業已被刪除)、E(作業已退出,可能是作業計算完畢退出或者中途出錯而退出)、Q(作業已遞交或者排隊中)、R(試圖返回作業)、S(試圖開始一個新作業)、T(試圖從檢查點重啟作業)。如果平臺可用資源未能滿足作業需求而導致作業未能啟動,將產生多個作業試圖啟動事件,也就會記錄多個S日志記錄。
不同事件的事件詳情EventDetail不盡相同。在事件S和事件E中,詳細記錄了作業的申請用戶user、用戶組group、作業名稱jobname、作業所在隊列queue、作業提交時間ctime、啟動時間start、實際運行節點exec_host、作業請求資源情況(作業運行所需節點、節點數量、運行所需時間)。事件E中還記錄了作業結束時間end、退出狀態Exit_status、資源使用情況(CPU內核使用時間的最大值resources_used.cput、內存使用量的最大值resources_used.mem、虛擬內存使用量最大值resources_used.vmem以及作業實際運行時間最大值resources_used.walltime)。
我們從日志記錄文件中抽取了10 000多個記錄進行分析,從分析結果歸納出三種TORQUE日志記錄模型(如圖2所示)。通常情況下,用戶用qsub命令發出作業請求后,TORQUE將作業請求放到作業隊列中,同時生成事件Q日志。然后通知調度器為新作業搜索所需資源,同時產生事件S日志。如果當前可用資源不能完全滿足作業要求,TORQUE將不斷重復輪詢,也就是事件S。當可用資源已能滿足作業所需時,系統將分配資源給新作業并開始計算,直到作業正確執行完成或者中途出錯退出,TORQUE將記錄事件E日志。在場景2中,在已啟動作業或者請求資源還未成功時,用戶執行qdel命令主動刪除了作業的,系統進行作業刪除操作釋放資源并生成事件D日志記錄,刪除成功后再生成事件E日志記錄。

圖2 TORQUE日志記錄模型
對于某些VIP用戶,可以把作業遞交給多個作業隊列進行資源輪詢,此時可能出現R事件標記。在這些特殊場景中,也就是場景3中,即使作業進入E退出狀態后,仍可以發生事件R,并可再次引發事件S重新試圖啟動作業。這樣將產生多個E事件記錄,在計算作業實際運行耗時時需額外考慮。
本記賬系統是基于TORQUE日志記錄的,高性能計算集群采用曙光5000A系統,集群平臺在2010年擴容后理論計算峰值達3.5萬億次,平臺日常負載在60%~70%。操作系統使用Rocks 5.1和CentOS 5.3,科學計算軟件有MM5、WRF、Material Studio、Gaussian、CASTEP等,可支持氣象、環境、海洋、物理、化學、材料、生物等相關領域的科學計算。為能適應TORQUE日志記錄模式的特性,為便于移植到其他平臺(如GPU平臺)作業調度系統上,本記賬系統的體系結構設計體現開放性和靈活性的特點,系統模塊設計充分考慮原子性和擴展性。
2.1使用率計算算法
高性能計算集群系統主要包括CPU、內存、虛擬內存、硬盤空間、帶寬等資源類型。對所有資源按“集群+節點類型+資源類型”方式進行資源分類,節點類型包括計算節點、管理節點、胖節點、存儲節點等。定義HPC系統整體可用資源集為:V={V1,V2,…,VM},假設按上述資源分類方式共有K種資源分類情況。
(1) 從作業角度計算用戶應付費用或使用資源情況
對于不同的資源分類定義其單價,如5000A系統上胖節點的CPU單價為p1,GPU系統上計算節點的GPU單價為p2等,則定義單價集合為:P={p1,p2,…,pK}。
假設某用戶在集群上運行了N個作業,定義作業集為:S={s1,s2,…,sN}。設其中某個作業si(1≤i≤N)運行實際耗時為ti,作業運行期間共使用了Li個資源,則其使用的資源集為:Ri={rij|rij∈V且j=1,2,…,Li},資源rij的使用數量記為aij,資源使用量集合可以表示為:Ai={aij|j=1,2,…,Li}。根據以上資源分類方式,統計資源使用量得到各類資源使用量匯總集:

此套公式同樣地可用于計算資源使用情況,只要把單價集合P看作各資源分類的使用比重則可。可見,費用與所使用資源的類型、資源的提供能力、使用資源時長有關,為增加系統可擴展性增加了用戶組級別和作業級別的影響因子。
(2) 從資源角度計算資源使用情況



(3) 其他需考慮因素
對于內存、虛擬內存、帶寬等系統資源而言,資源使用數量是動態的,只能估算時間段內資源使用均值,從而計算資源使用率。在實際應用中往往以CPU利用率作為節點/集群使用率計算標準。例如某個計算節點有8個內核,如果某作業占用了該節點全部8個內核,無論其他資源的使用情況如何,可以認為節點的全部資源都已分配給該作業,其他作業不能同時使用此節點。
作業往往會出現跨天、跨周、跨月運行的情況,統計時間顆粒度越小則可能性越大。對于這些情況,通常記賬信息中只有事件S的日志記錄,記錄了作業運行的節點和CPU內核情況。對于從作業角度進行用戶資源使用情況統計的,應以作業運行完畢并釋放資源才能進行統計。對于從資源角度進行資源使用情況統計的,應考慮作業跨越統計時間段的問題,考慮統計時間段之前就已經開始執行的作業以及在統計時間段后才結束的作業。這樣的話,對于CPU內核資源使用情況的統計結果才是準確的。
2.2系統結構
參考數字化校務管理系統的設計,記賬系統采用自上而下的設計方法,系統架構分為5層(如圖3所示),包括用戶界面層、業務層、應用組件層、應用接口層以及基礎平臺層。技術規范、信息標準和系統安全保障橫跨各個層面。每層為上層提供服務,同時從下層接口中獲得相應的服務。

圖3 記賬系統架構
在最頂層為用戶界面層,直接面向最終用戶服務,使用普通瀏覽器作為客戶端,用戶無需額外安裝客戶端軟件包。用戶界面層為所有用戶提供了統一登陸入口,系統掛載在高性能計算門戶系統下,門戶系統與校園SSO單點登陸系統對接實現了NetID登錄,用戶只需輸入NetID賬號密碼就可以進入記賬系統。系統根據用戶所在的用戶組為其展現個性化界面,安全模塊中的授權管理模塊可為各用戶組設定不同的功能菜單項。將用戶界面作為單獨一層,可以把系統外觀設計獨立出來,使系統更具柔韌性。
第二層為業務層,也是記賬系統的功能模型集合。該層包含每月資源使用率計算、每月賬單打印查詢、各種類統計報表表格生成以及決策支持等功能。這層以服務接口的方式為用戶界面層提供服務,同時從下層的應用組件層的相應引擎中獲取服務。
第三層為應用組件層,從記賬系統業務中分析抽象出來的引擎組件,為上層提供通用的應用組件以構成業務功能塊。通用組件包括對TORQUE原始日志記錄進行分析的數據分析引擎、實現日志文件訪問的文件處理引擎、實現統計報表管理的報表引擎、記錄用戶操作的日志引擎等。應用組件層的設計遵守以下原則:
① 支持未來發展,使用規則引擎避免重復編碼;
② 使組件盡量單一化,以實現代碼重用和業務功能重構;
③ 通過組件聚合使得組件更易于維護和擴展。
應用接口層由各類適配器構成,負責與基礎平臺層進行對接和通信,為應用組件層提供服務,使其不必依賴于基礎平臺。這層主要包括文件讀寫接口、數據庫存取接口等。
最底層的基礎平臺層是記賬系統的基礎,包括高性能計算平臺上的各種基礎部件(如集群的操作系統和文件系統、作業管理調度系統)、數據庫、Java虛擬機等。
2.3系統功能
系統服務對象包括普通使用者、集群管理員以及決策層領導等三大類用戶群體,不同類型用戶的權限將不盡相同,系統為不同用戶組的用戶提供差異化服務。系統包括五大模塊,分別是基礎信息管理、使用情況查詢、費用和賬單、統計報表和安全管理等。
基礎信息管理是對系統基礎數據的維護,包括集群、節點、各類資源、集群用戶等。
在使用情況查詢模塊中,普通用戶可以獲知每個作業使用資源的詳細情況,包括運行所使用的節點、CPU內核、內存和存儲的情況(對于未完成作業不可查詢)。管理員可以查看某個用戶的資源使用情況,也可以查看所有用戶的使用情況詳情和單獨查看某個設備的使用情況。
在費用和賬單模塊中,普通用戶可以查看他們每月需付費用,自行打印賬單以及賬單明細項目。對于管理員則可以進行每月賬單的計算和適量調整,可以進行計費標準的設置,而且還可以按月打印所有用戶的賬單。
統計報表模塊為管理員和決策領導提供每周、每月和每年的各類資源使用報告(包括CPU內核、內存以及虛擬內存),提供作業等待時間的統計,對用戶使用資源的統計,對緊缺資源的統計,還提供統計結果圖形方式展示。圖4是資源使用情況統計報告的用例圖,模塊中除了含有公用的報表打印用例外,還包括對每周、每月和每年統計報表的查看。利用統計報表模塊,管理員可以摸索出各種資源使用規律,可以給集群用戶提供準確的使用建議以充分發揮計算平臺性能。通過統計報表模塊,決策者可以獲知平臺是否使用恰當,是否能滿足用戶需要,資源是否緊缺,從而為平臺擴展升級作出準確的判斷和決策。

圖4 統計報表模塊用例圖
安全模塊包含了用戶管理、用戶組管理和用戶認證授權等。用戶授權是面向用戶組的,實現功能菜單級授權,不同用戶組可查看的業務功能不盡相同,同一用戶只能指定唯一的用戶組。
2.4系統概要設計
記賬系統使用單獨的服務器安裝部署,每天晚上進行日志文件的同步。通過DAWNING 5000A系統中的定時任務,以scp方式把TORQUE前一天的日志文件傳送到記賬系統上。在計算平臺DAWNING 5000A的管理節點上,定義定時任務腳本upload.sh,由于scp會出現詢問用戶密碼和確認傳送的交互過程,因此借助系統的Expect工具實行自動化控制。另一方面,記賬系統中也需定義每晚的定時任務,通過整合Quartz到Spring架構中就可以實現。處理過程大致為:首先檢查新日志文件是否已傳送過來,如果文件沒找到則發郵件給管理員,否則進行日志文件數據分析,生成每天日志記錄、作業、資源使用情況等信息存到數據庫中。
記賬系統采用Java作為開發語言,采用Struts+Spring+Hibernate架構搭建基于MySQL數據庫的B/S應用。依據用戶需求,系統分日志記錄、基礎數據、費用賬單、用戶管理等業務包,核心的日志記錄部分的類圖如圖5所示。日志記錄包覆蓋了TORQUE原始日志信息(基于作業事件)、數據分析后產生的作業詳情(基于每個作業)、節點和CPU內核占用情況(從資源角度);基礎數據包用于記錄平臺各類資源(節點、內核、存儲、內存);費用帳單包記錄了每個用戶每月使用各類資源的小計、費用以及收費標準等;用戶管理包括用戶、用戶組、菜單資源和資源分配關系等類。

圖5 日志記錄部分的類圖
圖6為經過分析原始日志記錄后生成的作業信息的查詢界面,可以查看每個作業的狀態(事件)路徑歷程,與1.2節中日志記錄模型相吻合。圖7為通過分析原始日志記錄,得到作業執行節點和內核信息后,統計出的節點使用率,可以進行每天、每周、每月三種粒度的使用率統計。

圖6 作業信息詳情查詢頁面

圖7 節點使用率統計頁面
記帳系統的數據分析過程包括如下步驟:
1) 每天晚上定時獲得TORQUE日志記錄文件;
2) 分析每天日志文件,對每行記錄日志進行分析并存儲在accounting日志記錄表中;如果是新作業則新建作業信息到job作業表中,否則更新job表的舊作業;
3) 對于已完成計算的作業,根據作業計算實際使用的內核信息,生成每天內核上運行作業的占用時間和比率,并存儲到coreOccupation內核占用情況表中;
4) 根據內核占用情況,統計每天節點的占用時間和比率均值,并存儲在nodeOccupation節點占用情況表;
5) 對于已完成計算的作業,計算用戶運行該作業所使用各類資源總和(內核總時數、內存及虛擬內存最大使用量)。
下面給出處理日志記錄文件部分的代碼:
/** 讀取并分析pathname路徑下文件 **/
private boolean readFile(String pathname) {
int rowCount=0; String line = ″″;
try {
File filename = new File(pathname);
InputStreamReader reader = new InputStreamReader(new FileInputStream(filename));
BufferedReader br = new BufferedReader(reader);
line = br.readLine();
//一次讀入一行數據
while (line != null) {
analysisOneLine(line);
rowCount++;
line = br.readLine();
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
/** 分析某一行數據 **/
private void analysisOneLine(String line) {
Map
//用于存儲某行的日志信息
List
//用于存儲該作業的實際執行節點和內核
if (null != line && line.length() > 0) {
//每行數據用分號分隔并記錄日志的時間截、事件標志、
//作業號、詳細信息
String[] lineCell = line.split(″;″);
if(lineCell.length==3 || lineCell.length==4){
acclog.put(″logTimestamp″, lineCell[0]);
acclog.put(″status″, lineCell[1]);
acclog.put(″jobid″, lineCell[2]);
//有詳細信息的,要進行詳細信息處理
if(lineCell.length==4){
acclog.put(″detail″, lineCell[3]);
analysisDetail(lineCell[3], acclog, hosts);
}
//存儲日志信息到數據庫中
addDb(acclog,hosts);
}
}
}
本文提出的記賬系統適用于所有基于TORQUE的作業管理計算平臺,系統設計充分考慮靈活性和可擴展性,易于維護管理,易于移植到其他工作調度系統或其他平臺的調度系統上。下一步將不斷豐富系統功能,增強系統健壯性,并將系統擴展應用到GPU平臺上。
鑒于我校免費使用的政策,目前系統只提供用戶的資源使用情況,還沒有做用戶費用計算。當前系統數據分析完全依賴于TORQUE的日志記錄,但日志記錄只能反映單個作業對資源的整體使用情況,對于節點的真實使用情況無法獲得,因此目前系統只提供CPU資源的使用情況。
后續可以進一步改進,在節點上做操作系統層的資源使用情況日志記錄,并結合TORQUE日志則可以知道具體作業在節點上的詳盡資源使用情況。可以跟蹤用戶所使用計算軟件,掌握計算軟件的資源使用特性,為以后設備采購起指導性作用。
[1] 沈瑜,李娟,常飚,等.高性能計算機統一資源管理系統的設計與實現[J].計算技術與自動化,2014,33(1):83-90.
[2] 顧群.基于Torque的異構集群平臺調度算法的設計與實現[D].西安電子科技大學,2013.
[3] 林皎,張武生,徐偉平,等.高性能計算平臺預付費管理系統的研制與應用[J].實驗技術與管理,2012,29(12):104-105.
[4] 楊敏.廣東省教育科研網格門戶系統構建[J].武漢大學學報:理學版,2012,58(S1):371-375.
[5] 牛鐵,朱鵬,趙毅,等.超級計算環境計算配額系統設計和實現[J].計算機應用,2010,30(S2):8-9,39.
[6] Adaptive Computing.TORQUE Resource Manager Administrator Guide version 4.2.1[M].Adaptive Computing Enterprises Inc,2012.
[7] 陳振婭,楊英,陳麗娟,等.基于OpenPBS的高性能計算平臺計費系統[J].山東科學,2009,22(5):98-102.
[8] 辛小霞,吳汝明.一種基于SOA的校務管理系統框架模型[J].中山大學學報:自然科學版,2009,48(S1):264-266.
[9] 王偉,楊利,劉建鋒.一種高性能計算環境中的計費系統[J].計算機工程與科學,2008,30(1):148-150.
[10] 劉明良.基于校園網格系統計費方案研究[J].計算機系統應用,2008,17(3):60-63,91.
[11] Radulescu A,Van Gemund A J C.Low-cost task scheduling for distributed-memory machines[J].IEEE Transactions on Parallel and Distributed Systems,2002,13(6):648-658.
[12] Jianhua Adu.An New Accounting and Billing System for HPC Cluster[C]//Advanced Materials Research,2010,108-111:884-887.
TORQUE-BASED ACCOUNTING SYSTEM FOR HIGH-PERFORMANCE COMPUTING PLATFORM
Li HuihuanYang MinWu Ruming
(NetworkandInformationTechnologyCenter,SunYat-senUniversity,Guangzhou510275,Guangdong,China)
High-performance computing has become the third scientific research method following the theoretical research and experimental science. How to efficiently utilise numerous devices on high-performance computing platform to provide effective services for scientific researches is a major problem faced by the managers. This paper mainly introduces the design and implementation of a TORQUE-based accounting system for high-performance computing platform, which includes the computational algorithm, the system architecture, the main functional modules, the data design and the code implementation. Through analysing the logging mode of TORQUE with induction it presents the calculation method of resource utilisation from the prospective of jobs and resources. The architecture of accounting system is divided into five levels and the system has good flexibility and openness, which can be easily ported to other platforms and other kinds of job scheduling systems. The system focuses more on the usage of current resources, user’s resource utilisation and task waiting time rather than the cost calculation and bill printing, so it can provide more effective and powerful data support for administrators and decision-makers.
TORQUEAccounting systemHigh-performance computing platformResource utilisation
2014-11-01。李惠歡,工程師,主研領域:計算機軟件和應用,網絡信息技術,高性能計算軟件。楊敏,工程師。吳汝明,高工。
TP315
A
10.3969/j.issn.1000-386x.2016.08.028