摘 要:網格環境下的作業運行支持系統支持用戶在網格資源上遠程提交作業任務,執行科學計算應用程序,并管理運行著的作業任務。作業運行支持系統解決了計算執行環境的準備、狀態監視匯報、運行時操縱和I/O支持等方面的關鍵問題。現有的幾種主要的網格中間件系統均提供了作業執行和管理工具,很好地解決了幾個主要問題,但并不能完全滿足用戶的需要,還需進一步改進與完善。
關鍵詞:作業運行支持系統; 網格環境; 網格資源分配和管理服務; Condor Universe; Legion
中圖法分類號:TP393文獻標識碼:A
文章編號:1001—3695(2007)02—0106—04
1 引言
用戶通過向計算網格提交計算作業來使用共享的計算資源。而網格資源的異構性、分布性和動態性使得網格上的作業管理比本地運行環境復雜許多。所以,任何一個網格運行環境要提供的一個基礎服務就是作業運行支持系統,幫助用戶在網格資源上提交作業、執行程序并且對運行著的作業進行生命期管理。
在網格計算環境下,運行計算所在的節點直到需要計算時才能確定,計算常常在遠離與自己相關的數據文件的計算節點上(輸入數據文件所在和輸出數據文件需要保存的節點)進行;計算也遠離提交計算請求的用戶所在的節點。而且計算所在節點也有自己的本地管理策略,需要協調好網格作業的運行和本地作業管理,以實現站點自治與網格資源共享控制。因此,比起本地作業運行環境,網格作業運行環境的要求更高,實現更難。
本文分析了網格環境下的作業運行支持系統需要解決的幾個關鍵問題,考查研究了當前幾種主要的網格作業運行支持系統GRAM,Condor Universe,Legion等。針對網格作業運行支持系統的幾個焦點問題逐個加以討論,分析已有網格作業運行支持系統的優勢和存在的不足。
2 網格作業運行支持系統的關鍵問題
在網格環境下,作業運行支持系統需要解決以下幾個關鍵問題:程序計算執行環境的準備、提交啟動程序、作業的狀態監視匯報、運行時操縱和I/O支持等。
(1)計算執行環境的準備。在科學計算網格中各種計算作業的主要完成體都是分布在各個計算節點上的科學計算應用程序。網格作業運行環境一定要準備符合計算程序自身要求的計算執行環境。
計算執行環境是針對一個科學計算程序的一次執行而言的,主要指科學計算程序運行之后生成進程的啟動和運行所需要的各種支持環境的總稱??茖W計算程序的正常運行需要一定的計算執行環境,而且這種計算執行環境通常是高性能、可靠,已經經過多年的改進、修訂并穩定了的環境,為一定范圍內的科學工作者用戶所熟悉和掌握,并且使用和配置方式已經約定。目前,科學計算應用程序的計算執行環境可以分為操作系統環境(Linux/UNIX平臺上的FORK-EXEC機制)、計算節點本地批處理資源管理環境(如PBS,LoadLeveler等)和并行運行環境(如MPI)等幾種。科學計算程序的正常運行緊密依賴于其計算執行環境。要使計算作業順利執行,就必須保證為其準備能達到要求的計算執行環境。
(2)狀態監視匯報。作業狀態監視與匯報是指網格上用戶在提交計算請求之后,對于運行著的作業情況非常關心,希望網格的運行環境能夠監測作業的運行狀況,并以適當的形式提供給用戶。
科學計算應用程序的運行既具有共同特點,又具有其各自領域特有的狀態。各種科學計算遺產程序運行時的共同特點描述了計算程序運行時共有的狀態信息,如計算作業的運行生命期、計算進程的退出狀態等。但是,各個科學計算程序又具有其獨有的性質。一個具體的科學計算遺產程序屬于某個科學領域,包含了這個領域的知識和專家技能,解決了這個領域的問題。該遺產程序的算法實現和運行過程包含了自己特有的一些屬性。例如,某些用迭代方程組求解的遺產程序通常會有一個屬性,用以確定是否收斂;某些計算程序有計算進行的階段或進度信息等。
(3)運行時操縱。網格用戶在提交了作業之后,很多情況下會根據了解到的作業運行狀態和自己的實際需要,對作業的運行進行調整控制,如終止、重新運行、暫停計算、保持/釋放保持(Hold/ReleaseHold)等。
(4)文件I/O。科學計算程序在很多情況下需要輸入數據文件,計算完成時會產生輸出數據文件。這些輸入和輸出的數據文件常常是海量的,并且需要的輸入數據文件和希望存儲的輸出文件可能位于作業提交計算機,也可能位于遠處的一個或多個數據存儲節點。所以作業運行支持系統必須支持計算作業訪問、移動位于異地的數據文件[1]。(5)標準I/O。網格上計算作業I/O支持的另一個重要方面就是標準I/O。用戶在運行時希望通過標準出錯/標準輸出的信息來調試他們的程序,獲取對計算進展情況的了解。標準輸入信息可以用來對計算的流程施加影響,對實現計算的交互性具有重要意義。
(6)中間臨時文件。由于科學計算的周期較長,所以科學工作者用戶希望能夠實時跟蹤計算的過程,而計算過程中產生的臨時文件的內容就可以幫助科學家判斷計算執行過程是否正常、進度是否滿意、參數設置是否恰當等。同時,為了在計算過程中實時仿真,計算后對執行過程作分析和總結,以及過程回放,都需要及時獲取計算過程中的中間文件[2]。
對于網格上的工作流或經過服務組裝而成的網格應用來說,如果能夠獲取保存各個子任務產生的中間結果數據,就可在中間環節失敗的情況下,無須從頭開始,只需取來保存好的前一個子任務的計算結果,重新運行失敗了的子任務即可。
3 GRAM
網格界最有影響的中間件系統Globus Toolkit提供了GRAM(Grid Resource Allocation and Management,網格資源分配和管理服務),實現了作業運行支持的功能。它負責處理提交的資源請求以在遠處執行作業任務,分配請求的資源,并管理運行著的作業[3]。
在最新的Globus Toolkit第四版中,GRAM以符合WSRF標準的網格服務形式提供服務,支持在網格計算資源上提交作業,執行程序并在作業運行的整個生命期內進行管理。如圖1所示,GRAM由多個服務模塊構成,包括作業管理服務(GRAM Services)、本地系統適配器(GRAM Adapter)、文件傳輸服務RFT及身份證書管理等。使用GRAM架構提交的作業解決了可靠的操作、有狀態的監視、身份管理和文件傳輸[4]。
作業管理服務表示、監視和控制了作業的整個生命期過程,是GRAM服務架構的核心。它由一組網格服務組成,包括Managed Job Factory服務(MJFS)和Managed Job服務(MJS),并運行在網格服務容器內。
(1)MJFS的功能是為用戶創建作業。它把本地調度器管理的不同計算環境暴露成不同的資源,即Managed Job Factory Resource(MJFR)。MJFR發布了計算資源的特征信息,如處理器、內存、硬盤、GridFTP的URL(用于文件傳輸和流傳輸)、計算機群的大小和配置等信息。MJFS提供了一個操作createManagedJob()用于創建適當類型的ManagedJob資源,以在相應的本地調度器中執行一個作業。
(2)MJS負責管理創建了的作業。它提供作業監視和作業終止接口,可以查看作業的狀況或者結束作業。MJS提供了一個資源Managed Executable Job Resource(MEJR),代表著提交的計算作業,通過查詢MEJR的資源屬性可以了解到作業的當前狀態、標準輸出/出錯位置、作業進程的退出碼等信息。
典型情況下,網格計算資源都在一個本地調度器(如Loadleveler,PBS,LSF等)管理控制下運行,該調度器實現了分配和優先級策略,同時考慮效率和性能,優化了所有提交作業的執行。
GRAM并不是一個資源調度器,而是一個協議引擎,使用一個共同的協議和標準格式的消息與本地資源調度器進行通信。而與各種不同類型的本地調度器之間的通信,則是通過使用不同的本地系統適配器實現的。一個本地系統適配器是一種基于腳本的插件,與某一個具體的本地系統調度器結合,向上提供了共同的接口,供GRAM使用。
GRAM提供了一個作業狀態描述模型JobStateType,包括Unsubmitted,StageIn,Pending,Active,Stageout,Suspended,Done,Failed等狀態。
為了支持作業的執行,GRAM在提交作業的過程中還使用了文件傳輸服務RFT和身份證書管理服務。文件傳輸服務支持把文件傳入和傳出計算節點;身份證書管理服務根據用戶應用程序的需求,在GRAM架構各個分布的模塊中管理權限、代理用戶身份。
GRAM提供了一個最多一次(At Most Once)的作業提交語義,從而避免了由于瞬間通信錯誤而可能多次提交相同的作業。GRAM管理了提交作業的整個生命期,直到運行到自然結束,但也允許用戶在作業生命期的任何一點取消(放棄)它們的作業。
GRAM為作業的執行提供了可靠的文件傳輸和輸出監視支持。它在作業執行之前與之后支持在計算節點和外部安裝了GridFTP服務的數據存儲點之間提供可靠的、高性能的文件傳輸。GRAM采用了使用XML格式的RSL語言作為作業描述語言。
4 Condor Universe
Condor系統中的作業運行支持環境稱為Universe。Condor系統為用戶作業提供了七種Universe:標準(Standard)、香草(Vanilla)、PVM、MPI、Globus/Grid、Java和Scheduler,用于支持不同類型的用戶計算作業[5]??梢栽谟糜谔峤蛔鳂I的提交描述文件中指定Universe類型。默認的作業執行環境是標準類型。
在標準類型Universe環境下,Condor支持檢查點(Checkpointing)和遠程系統調用,提高了作業執行的可靠性,并且提供了統一的資源訪問方式,但是限制了執行作業的程序必須要使用Condor編譯工具與Condor庫重新鏈接。
標準環境下,Condor在固定的間歇檢查點作業。一個檢查點映像(Checkpoint Image)實質上就是一個作業當前狀態的快照(Snapshot)。Condor生成一個檢查點映像,把映像拷貝到新的計算機上,然后從作業停止的地方重啟作業。如果一個計算機在運行作業過程中死機了,Condor能夠在一個新計算機上使用最新的檢查點映像重新啟動作業。
通過Condor陰影技術(Shadow),遠程系統調用使得一個作業運行時的感覺就像在用戶本機上運行一樣,即使作業可能會在生命期內運行于多個不同的遠程計算機上。當一個作業在一個遠程計算機上運行時,陰影進程將會在提交作業的計算機上運行。當作業運行過程中想進行系統調用時,陰影進程將會執行這個系統調用,把結果發送到遠處作業所在的計算機上。例如,如果作業要打開一個存儲在提交計算機上的本地文件時,陰影進程將會找到這個文件,然后把數據發送到作業所在的計算機。
提交作業之前,用戶需要準備一份提交描述文件,說明該作業的相關信息,如執行環境類型、執行體名稱、輸入/輸出數據文件及執行該作業所需的平臺類型等。若想對同一個程序以不同的數據集執行多次,也在此描述文件中說明。
作業提交后,用戶可以查詢作業的狀態進展和資源使用情況。作業的狀態包括R(Running),I(Idle),H(Hold)等。R表示作業正在運行中;如果作業處于閑置(I)狀態,代表作業目前還沒有運行,在等待著有可用的計算機去運行;如果作業處于保持狀態(H),那么作業就不會被調度,直到釋放(ReleaseHold)。
此外,Condor系統還提供了沙箱(Sandbox)機制和檢查點進程遷移(Checkpoint and Migration)技術[6]。
5 Legion
Legion是由美國Virginia大學計算機系從1993年開始開發的一種面向對象的網格操作系統。Legion的作業運行支持系統包括兩個工具:
(1)Legion_run。它用來啟動位于遠程主機上的計算程序的實例,除了要啟動的程序外,還包括幾個選項,可以為遠程執行程序傳遞需要的輸入數據文件和把計算產生的輸出文件傳送到指定的地點。Legion支持兩種模式的作業提交,即阻塞模式和非阻塞模式。默認的模式是阻塞[7]。
(2)Legion_probe_run[7]。它可以用于檢查使用已經啟動的遠處作業的情況,如圖2所示??梢栽谧鳂I啟動后,傳入輸入文件獲取輸出文件,查詢哪一個主機運行程序,檢查作業的狀態,查看有哪些文件在遠程主機作業的當前工作目錄中,殺死作業,在作業結束時清理遠程主機[7]。
對于運行作業的標準I/O,Legion提供了一個TTY對象(legion_tty
6 討論
6.1 計算執行環境的準備
在網格上執行計算作業的一個首要問題就是要為計算作業準備必要的執行環境??茖W計算應用程序的運行緊密地依賴于特定的計算執行環境,跨平臺性差,離開了其計算執行環境將無法正常工作。
Globus Toolkit的GRAM除了本身支持系統FORK和MPI等類型的計算執行環境外,還注意使用本地系統適配器,與各種本地調度管理器(PBS,LoadLevler,LSF等)很好地契合。Condor注意提供了多種作業執行環境Universe,來應對不同程序要求的不同計算運行環境,目前支持了標準、MPI、PVM、Java、Scheduler等多種類型的運行環境。Legion專門提供了強大的Legion_mpi_run工具,用于支持MPI并行程序的運行。
現有的網格作業運行支持系統對幾種主要的計算執行環境提供了不同程度的支持,但是對于使用哪一種計算執行環境來執行作業則一般由用戶指定。例如,Globus Toolkit中提供了RSL作業描述語言,用戶在JobType參數給定計算執行環境類型,Condor中通過用戶在作業描述文件中給定不同的Universe來指定計算執行環境的類型。這種做法要求用戶必須對要運行的具體作業執行的程序和所在計算節點環境有很多的了解。因此,該做法限制了用戶范圍,只能支持一部分具有本地計算運行經驗的網格用戶,其他類型網格用戶無法提交作業。而且還造成了安全問題,無法有效地實現資源共享控制。
6.2 狀態監視匯報
目前,網格中間件的作業運行支持服務都提供了對提交了的作業狀態的監視,并以適當的形式進行匯報。例如,Globus的GRAM管理的作業狀態管理采用了JobStateType類型描述作業的生命期變化,同時通過MEJR有狀態資源發布作業狀態信息,用戶既可以查詢MEJR(Pull方式),也可以訂閱(Push方式)。Condor使用了R(Running)-I(Idle)-H(Hold)模型來表示作業的狀態,同時還能提供作業的資源使用情況、作業進程的退出狀態等信息。Legion使用了Running,Error和Done等三種狀態表示作業狀態,并提供了工具查詢提交的作業狀態。
現有的網格作業運行支持技術注意了各種科學計算遺產程序運行時的共同特點,采用了通用的狀態描述機制,描述了計算程序運行時的共有狀態信息。但是,對于各種科學計算程序領域特有的狀態未能提供足夠的支持。
6.3 運行時操縱
現有的網格作業運行支持系統都提供了一定的運行時控制操作。Condor和GRAM都可以把提交之后的作業置于保持(Hold)狀態或者釋放。處于保持狀態的作業將會持續處于這種狀態,直到被釋放。Condor提供了檢查點機制,會為保持狀態的作業保留檢查點映像,當釋放保持時,將會從最近保存的檢查點映像繼續執行。GRAM中提供狀態保持功能的一個好處就是用戶可以直接訪問作業產生的輸出文件,而無須等待到文件傳出步驟才獲得想要的輸出文件。GRAM,Condor及Legion都可以隨時把提交了的作業終止。
6.4 文件I/O
為了保證計算的順利進行,現有的網格作業運行支持系統都提供了文件I/O方面的支持。在作業運行之前從用戶指定的地點移動輸入數據文件到計算所在地點;在作業運行之后再把輸出結果文件傳送到用戶指定的地點。
GASS技術是Globus開發的針對網格計算環境下文件I/O訪問特點,設計實現的一個數據移動與訪問服務技術。Globus通過對GRAM的API實現進行了擴展,加入對GASS API的調用,即用GASS將一個用URL描述的可執行文件和其他輸入數據文件取到了計算所在地的GASS Cache,同時將計算后的結果文件轉移。
Condor對于有源代碼或對象代碼的遺產程序,通過沙箱技術,在不改變程序源代碼的情況下,通過重新與Condor庫鏈接,將對本地的系統調用替換轉換成RPC,來實現異地I/O。在計算站點上,計算作業不是直接運行在本地作業管理環境下,而是在Condor自己的沙箱Starter內運行,Starter與作業提交計算機上為這次作業提交而啟動的Shadow進程同信呼應,把計算作業內的系統調用通過系統調用陷入(Trapping)技術重定向到作業提交主機上。但是Condor方案也有一定的局限性,它要求必須能夠獲得科學計算遺產程序的源代碼或Obj代碼。另外,Condor沙箱技術解決的文件I/O,局限了計算所需的輸入數據文件所在和輸出文件的存儲地點都必須是用戶提交作業的主機,而不是其他另外的數據存儲節點。
Legion對于文件I/O提供了支持,能夠為計算作業的運行從提交作業主機或上下文空間提取輸入數據文件,或者把輸出數據文件送到提交作業主機或上下文空間。Legion在此方面的優勢在于用戶不僅可在提交作業時指定,還可以在作業提交后確定文件I/O。
6.5 標準I/O
對于標準輸出和標準出錯,現有的網格技術都實現了實時獲取機制。在Legion中,通過一個TTY對象把標準輸出和標準出錯重導向到一個或多個用戶控制臺和(或)多個文件。在GRAM中,標準輸出和出錯被暫時儲存在GASS緩存中,然后傳遞到用戶指定的一個或多個用戶控制臺和(或)多個文件。但在Condor的Universe中,用戶不能得到實時的標準輸出和出錯信息,而只能等到遠程計算結束后才能得到類似日志的磁盤文件。但對于標準輸入,已有的解決方案都局限于把標準輸入視為計算作業提交之前就可以完全確定的,而在計算過程中不會發生任何改變。事實上,標準輸入與普通的輸入數據文件是有區別的,因為用戶通過標準輸入進行的輸入是可能隨著計算任務的進展而發生變化,所以是不可能在計算之前就固定的。把標準輸入等同于一般輸入數據文件處理,將喪失了許多程序的靈活性。
6.6 中間臨時文件
已有的網格作業運行支持系統沒有為中間結果文件的獲取、保存提供足夠的支持。Legion中可以查看運行著的作業的當前工作目錄下的哪些中間臨時文件,但是并沒有提供傳輸獲取機制,需要用戶自己手工獲取。Condor Universe和GRAM均提供了保持狀態,可在此狀態下自行獲取作業產生的輸出文件,但通常是在計算完成后,而無法在計算運行時進入保持狀態(否則,會殺死作業進程)。用戶如果想要獲取中間臨時文件,只能自己去計算作業所在站點手工下載拷貝。這種方式非常不方便,用戶需要自己了解許多信息,解決許多系統應該做的事情,而且在網格環境中不是很可行,因為計算站點都有嚴格的安全和訪問策略,跨域的數據訪問不易實現。
7 結論
基于上述分析,可以看出目前已有的幾種網格技術不同程度地解決了網格上提交運行計算作業涉及到的大部分關鍵問題,如與主要計算執行環境的集成、通用狀態的監視匯報、部分運行干預、文件I/O、標準I/O等。但是,現有的作業運行支持技術只支持有本地運行經驗的用戶,缺乏對領域特有狀態信息、標準輸入及中間過程數據獲取等方面的支持,不能完全滿足網格上運行科學計算程序的需要,還有待進一步改進與完善。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。