陸 藝
隨著各個領域對于計算機運算速度和存儲容量需求的日益提高。無論是企業(yè)還是個人都需要數(shù)據(jù)處理能力更強大的計算機。于是,一種造價低廉(相對超級計算機)而數(shù)據(jù)處理能力超強的計算模式出現(xiàn)了,那就是網(wǎng)格計算。它正逐漸成為科學和商業(yè)領域高性能計算的主流方法。
網(wǎng)格計算(Grid Computing)是一種整合電腦資源的新手段,它依靠互聯(lián)網(wǎng)共享強大的計算能力和數(shù)據(jù)儲存能力。它是一種虛擬化的計算資源, 可以共享異構資源(跨平臺,跨硬件/軟件體系架構),不受地理位置限制,它使用公開標準的網(wǎng)絡上的資源(如閑置 CPU,磁盤存儲空間,數(shù)據(jù),軟件程序等)。
網(wǎng)格環(huán)境的最終目的是從簡單的資源集中發(fā)展到數(shù)據(jù)共享,最后發(fā)展到協(xié)作。當前網(wǎng)格計算不僅受到需要大型科學計算的國家級部門,如航天、氣象部門的關注,目前很多大公司也開始追捧這種計算模式,并開始有了相關“動作”[1]。
本文結合作者系統(tǒng)集成的實際工作經(jīng)驗,研究企業(yè)內部如何通過網(wǎng)格計算來實現(xiàn)計算能力最大化,高效地進行跨平臺,跨架構系統(tǒng)集成。以此提出可供其他企業(yè)或組織參考的系統(tǒng)集成的解決方案。
虛擬的數(shù)據(jù)網(wǎng)格應當能夠分配、存儲、計算網(wǎng)絡資源來滿足請求的全局和局部策略資源。全局策略包括“全社區(qū)”策略的管理,比如資源如何致力于一個優(yōu)先級可調,資源可再分配的任務[8]。局部策略是特定場合的限制管理,規(guī)定外部用戶何時,如何使用局部資源。并且設定局部用戶在什么情況下相對于遠程用戶有優(yōu)先權。一旦執(zhí)行的計劃任務與全局或者局部的策略沖突,這將會導致計劃任務的失敗。
計劃和調度的目的就是在給出的全局和局部策略限制下,優(yōu)化虛擬數(shù)據(jù)請求的響應[5]。不同的優(yōu)化處理主要是為了滿足:最小的執(zhí)行時間,最大的可靠性,最小的特定資源使用等需求。
網(wǎng)格資源動態(tài)的特性,結合復雜多變的全局或局部策略,引起了如何高效分配資源的探討。用戶的需求有時不僅包括虛擬數(shù)據(jù)的請求,而且還包括優(yōu)化策略例如,使用盡可能少的時間或者資源。所以調度和計劃網(wǎng)格計算成為值得研究和具有挑戰(zhàn)性的議題。
我們定義了一個中間件調度機制:基于策略的 ESG,它能夠高效地重新設定任務。假如一個或者多個站點關機或者響應時間慢,它能夠通過從監(jiān)測系統(tǒng)獲得的信息,改善應用總的執(zhí)行時間;同時,能夠通過管理策略限制來限制資源的使用。
在系統(tǒng)集成時,采用基于策略的調度技術,可以在資源使用策略限制下,給應用分配網(wǎng)格資源。能對各種資源進行優(yōu)化調度。并且用ESG調度中間件追蹤任務的執(zhí)行,來提高工作流的完成時間。
基于策略的調度能夠實現(xiàn)全局和局部的資源分配的優(yōu)化,通過以下架構模塊來實現(xiàn):
1) 通過調整資源使用帳戶和請求優(yōu)先級來控制網(wǎng)格資源的請求分配。這個模塊可以平衡網(wǎng)格中跨資源的工作負載,從而實現(xiàn)總體較高的利用率和較短的周轉時間。
2) 支持預留基礎網(wǎng)格資源的分配。這個模塊要求出現(xiàn)在調度中的資源能夠允許以預留資源和指定的時間來被執(zhí)行。能夠以預留的資源執(zhí)行完請求。
3) 允許按照用戶、組等各種類別的請求來設定質量服務。一個請求的提交者能按照被分派的權力來指定質量服務請求。資源分配要實現(xiàn)質量服務在提交者和調度程序間的交互,以便彼此能調整質量服務需求。
資源提供器給預期的資源用戶分配限額的使用資源,調度程序通過跟蹤限額的改變情況來監(jiān)控資源的使用。它分配更多的請求給閑置的資源,同時減少給過高負荷的資源再分派請求。
中間件ESG被用來在動態(tài)變化和異構的資源池中調度資源。它是高效系統(tǒng)集成的關鍵環(huán)節(jié),它的主要架構,如圖1所示:
圖1 ESG 調度系統(tǒng)架構
ESG的服務器端是其主要的組件。它需要實現(xiàn)如下幾個功能模塊。首先,它決定如何分配資源池中的資源來完成請求。其次,它還要維護數(shù)據(jù)列表,保證可執(zhí)行性和可復制性。并且,它要評估通過可獲取資源完成請求的時間。最后,它要實時監(jiān)控所擁有的資源狀態(tài)。通過改變請求的狀態(tài)、控制模塊調用服務模塊來處理請求的資源分配。這個控制器會檢測在調度程序中的任務的狀態(tài),按照它的狀態(tài)調用指定的服務模塊來處理這個任務。它的接口模塊用來維護數(shù)據(jù)庫表以存儲輸入,輸出信息。另外,它要維護目前已連接的客服端列表,用來確保各個客服端之間有效的I/O。服務器端中數(shù)據(jù)服務模塊提供的可復制管理,包括可重現(xiàn)的任務運行信息和服務索引。網(wǎng)格監(jiān)控模塊用來跟蹤CPU復制、磁盤、帶寬等資源使用情況。
ESG的客服端同服務器端進行交互,用戶向客服端傳遞執(zhí)行請求來開始一個調度流程??头税l(fā)送調度請求以及自己的客服端信息給服務器。從服務器端收到資源分配決定后,服務器端依據(jù)這個反饋,創(chuàng)建適當?shù)奶峤徽埱笕蝿?,并提交到資源池中[2]。客服端的跟蹤模塊對提交任務的執(zhí)行狀態(tài)的保持跟蹤。如果執(zhí)行被阻塞或者任務被殺,那么客服端給服務器發(fā)送狀態(tài)改變的報告,并且請求服務器重新計劃調度被阻塞或者被殺的任務。
由ESG結合網(wǎng)格計算,可以大大提高軟件系統(tǒng)集成的效率。如果再配合使用一些其他的輔助技術,就可以使得系統(tǒng)集成更加高效和靈活。
這里要引入一個中間件RW(regression wrapper),它的打包算法可以高效地打包回歸測試用例,然后再以任務的方式提交到網(wǎng)格資源池中,交由ESG進行調度。同時介紹一個提供移動工作環(huán)境的工具 Citrix,介紹它在目前工作中的輔助效用。
軟件系統(tǒng)集成時,比較重要的,同時消耗大量資源(時間,機器)的是進行編譯和回歸測試[6]。尤其是大型軟件的回歸測試,將耗費大量時間和系統(tǒng)資源。
開發(fā)人員在白天完成開發(fā)每天的開發(fā)工作,通過配置管理工作提交代碼。然后系統(tǒng)集成工程師會在每天晚上進行的編譯和回歸測試。這樣就可以獲得在代碼開發(fā)過程中的實時代碼質量報告,以及測試用例的狀態(tài)。這樣,開發(fā)人員第二天就可以進行有針對性的開發(fā),如添加功能,進一步完善測試用例,修復新發(fā)現(xiàn)的bug等。
通常大項目的回歸測試用例可能是幾千甚至上萬個,如何以較快的時間和較小的硬件資源代價跑完測試用例,是提高回歸測試效率的關鍵。
在使用ESG和網(wǎng)格資源后,可以把所有回歸測試用例以任務的方式提交給資源池進行運行。等所有的測試用例都運行完之后,生成最終的質量報告。但是這里僅僅依靠 ESG還是不夠的。假設有海量的回歸測試的測試用例提交到網(wǎng)格的資源池,如果有的測試用例占有大量資源和時間,而有的則非??炜梢赃\行完且占有的資源又很少。這時如果僅僅提交任務由 ESG來調度。那么可能造成大量的小任務都完成了,而只有一個占有大資源,耗時大的測試用例還在等待資源去運行。
那么,這樣的回歸測試用例就成為了系統(tǒng)集成的瓶頸。另外有的性能測試用例本身需要占有的時間和硬件資源巨大,如果再把它和其他的測試用例打包成一個任務,必然導致這單個任務耗費時間久,占有資源多,并且容易被中斷導致這個任務里的部分測試用例沒有被運行到。這個任務將影響整個回歸測試,使得質量報告不能及時生產(chǎn)以供開發(fā)者查看。在降低系統(tǒng)集成效率的同時影響了開發(fā)進度。
所以在這里要引入一個小型中間件 RW(regression wrapper),在提交任務給網(wǎng)格資源池時,能均衡任務的負載,使完成整個回歸測試的耗時更少,占用硬件資源更小。
具體的實現(xiàn)方法是,首先通過數(shù)據(jù)庫記錄下最近一定時間周期內每個回歸測試用例需要的運行時間、資源消耗的情況。然后,計算出每個測試用例在最近這個周期內所需的平均 CPU時間。再對這些測試用例的耗時進行從大到小的排序。再根據(jù)開發(fā)者的經(jīng)驗,設置可接受的時間閥值和資源閥值。
如果測試用例超過設定的時間或者資源閥值,那么它將被作為一個任務單獨優(yōu)先被提交到資源池,由ESG進行后續(xù)的調度和運行。這樣就保證了平均耗時最長的測試用例首先被提交。從而優(yōu)化了每次系統(tǒng)集成,回歸測試占用的時間總長度。
由于硬件資源和運行槽(slots)的限制,顯然不可能將每個測試用例都單獨只打包成一個任務(job)提交到資源池中。所以,要依據(jù)以往每個回歸測試用例的運行日志,用RW進行打包。如果資源占用和時間占有少于設定的閥值的,從排序后的列表兩頭選取測試用例進行任務打包。只要時間和資源占用仍然小于設定的閥值,就繼續(xù)添加列表兩頭剩余的測試用例到該任務。一旦超過設定閥值,則開始打包一個新任務。采用這個算法,遞歸地將所用測試用例打包到一定數(shù)量的任務中。
如此把所有的測試用例都打包成單個任務后,時間和資源的占用都是相對接近設定的時間和資源閥值的。達到了每個任務負載相對均衡的目的。把這些任務分布式地提交到資源池后,它們會以均衡的資源占用,相似的運行時間來完成任務(跑完該任務中的回歸測試用例)[7]。這樣就避免了有的測試用例需要過長的運行時間,造成包含它的任務會占有極長的運行時間,而有的任務需要的運行時間極短。早早完成的任務需要在資源池里一直等待耗時最久的任務完成,之后,才能進行后期質量報告的生成。
有些任務可能由于硬件問題,如mount,NFS問題等,從而使任務懸掛(hang)而不能運行完成。這將使得整個回歸測試不能按時完成。因此,中間件RW還添加了根據(jù)用戶的需求來設置任務允許的運行時間的功能。一旦某個任務運行時間長于需求限制,它就將被殺(kill)。留下沒有運行到的測試用例將進入自動再次打包流程,然后提交到資源池再次等待調度運行。這樣就能避免由于意外的硬件問題拉長了整個回歸測試的時間。
所以使用RW這個中間件進行測試用例任務打包時,可以使得所有回歸測試的測試用例被合理得打包成多個任務。這些任務被提交進資源池后,能夠以均衡的時間和資源負載來運行。從而使得系統(tǒng)集成中的耗時最久的回歸測試能以較高的效率完成。
使用ESG和網(wǎng)格計算資源降低了軟硬件的成本,共享了硬件資源,并且只需要維護一個數(shù)據(jù)中心的應用。同時,通過自動地管理閑置系統(tǒng)的電源設置,在非高峰時段減少功耗,拉低整體數(shù)據(jù)中心的運營成本,也秉承當今社會綠色環(huán)保的理念。
通過使用ESG和RW中間件,使公司系統(tǒng)集成自動化,提高系統(tǒng)集成的效率,從而提高產(chǎn)品研發(fā)效率。
在EDA設計公司,系統(tǒng)集成工程師從平均占有25個CPU提高到可以占有180個CPU來進行系統(tǒng)集成的工作(編譯和運行回歸測試)。而且,在主平臺上(通常是amd64),回歸測試的運行時間從10到12小時降低到平均4到5小時左右。
觀察5次在amd64平臺上的回歸測試,如表1所示:
表1 回歸測試資源耗費統(tǒng)計
由上表可見,測試總耗時遠小于CPU的總耗時。并且單個最耗時任務的間是比較接近于整個測試總耗時的。創(chuàng)建的總任務數(shù)也比較穩(wěn)定,大致是總測試用例的1/15。由此證明由RW中間件打包過的測試用例都能比較均衡的被運行。
設想沒有ESG和RW中間件,那么CPU總耗時接近250小時的回歸測試將要運行很久才能得到報告。這將大大影響開發(fā)的進程。而現(xiàn)在幾乎每次回歸測試都能在 5到 6小時左右運行完,并且生成報告。這意味著開發(fā)人員下班后,可以開始系統(tǒng)集成,那么第二天等開發(fā)人員上班時,報告已經(jīng)在他們的郵箱供他們查閱了。
隨著網(wǎng)格計算的發(fā)展,怎么去尋求成本低,大運算能力的方式來實現(xiàn)高效得系統(tǒng)集成,已經(jīng)成為大型企業(yè)關注的焦點[5]。
ESG是一個高效,靈活的解決方案,提高了資源利用率,增加了任務整體吞吐量。同時可以根據(jù)業(yè)務政策和目標來管理資源的使用,添加中間件來提高使用效率。
通過使用ESG和RW中間件,可以為大型企業(yè)帶來更好的系統(tǒng)集成解決方案:
[1]用 gmake[3]并行處理 makefile:節(jié)省了大工程編譯(build)的時間。
[2]多平臺,多架構的回歸測試:節(jié)省軟硬件資源,減少回歸測試的耗時。
當然,計算機技術日新月異,今后肯定會有更新的技術出現(xiàn)在系統(tǒng)集成領域。因此,需要進一步研究如何在企業(yè)中實現(xiàn)更高效的集成,為企業(yè)提供新的系統(tǒng)集成解決方案。從而提高整個產(chǎn)品線的開發(fā)效率,使得產(chǎn)品能夠提前發(fā)布以搶占市場先機。
[1]徐志偉,馮百明,李偉編著,[M]《網(wǎng)格計算技術》,電子工業(yè)出版社,2004.
[2]Eadline, Ph.D., Douglas.The State of Oracle/Sun Grid Engine.[J], Linux Magazine.Retrieved 2011.01.
[3]Robert Mecklenburg, GUN Make《項目管理》[M],2006.
[4]N1 Grid Engine 6 用戶指南 [K], 2005.