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