摘 要: 介紹了對網(wǎng)格并行計算任務(wù)實施遠程監(jiān)控的一種解決方案,從并行計算任務(wù)的進程分布特點、監(jiān)控模式、遠程跨平臺通信的實現(xiàn)以及多線程連接幾方面作了分析闡述。
關(guān)鍵詞: 網(wǎng)格計算 并行計算 遠程監(jiān)控 Socket WinSock
發(fā)展高性能計算是解決不斷增長的計算需求問題的根本途徑。高性能計算的物質(zhì)基礎(chǔ)是高性能計算機,如SIMD、PVP、SMP、MPP、COW和分布式計算機。如何把分散的計算資源集中起來協(xié)同解決問題是高性能計算領(lǐng)域研究的熱點。
網(wǎng)格是一個集成的計算與資源環(huán)境,是一個高性能計算資源池。網(wǎng)格能夠充分吸納各種計算資源,并將它們轉(zhuǎn)化為一種隨處可得的、可靠的、標準的同時還是經(jīng)濟的計算能力。MPI(Message Passing Interface)是消息傳遞并行編程模型的一種具體實現(xiàn)和主要代表,MPI在并行計算領(lǐng)域已廣為普及并成為事實上的標準。MPICH-G2是一個用于網(wǎng)格計算環(huán)境的MPI實現(xiàn),符合MPI1.1標準。通過使用Globus服務(wù),MPICH-G2可以把不同體系結(jié)構(gòu)的計算結(jié)點聯(lián)合起來進行并行計算。
成都理工大學校園計算網(wǎng)格模型已設(shè)計完成,這是網(wǎng)格管理系統(tǒng)的主要開發(fā)工作。通過網(wǎng)格管理系統(tǒng)中的用戶控制臺,用戶可向網(wǎng)格提交Single Task、Co-allocation Task、MPICH Task。為了能夠監(jiān)控網(wǎng)格環(huán)境下的并行計算任務(wù)的運行狀態(tài),作者在原來設(shè)計的PC機群監(jiān)控平臺的基礎(chǔ)上,進一步設(shè)計了用于監(jiān)控網(wǎng)格并行計算任務(wù)的監(jiān)控平臺。該平臺能實時顯示網(wǎng)格并行計算任務(wù)所在網(wǎng)格節(jié)點的狀態(tài),具有跨平臺和遠程監(jiān)控的特點,使用戶能夠監(jiān)控遠程計算任務(wù)。
1 系統(tǒng)結(jié)構(gòu)和監(jiān)控模式
1.1 系統(tǒng)總體結(jié)構(gòu)
圖1為系統(tǒng)總體結(jié)構(gòu)圖。系統(tǒng)由網(wǎng)格資源、網(wǎng)格控制臺、用戶控制臺、監(jiān)控平臺四個部分組成。其中網(wǎng)格資源主要由若干高性能計算機和PC機群構(gòu)成。PC機群由n臺PC機作為節(jié)點機構(gòu)成。操作系統(tǒng)為Linux,網(wǎng)格支撐系統(tǒng)采用美國Argonne國家實驗室的GT3.2.1,軟件并行支撐環(huán)境采用可移植消息傳遞標準MPI的一個實現(xiàn)MPICH-G2。監(jiān)控平臺運行Windows操作系統(tǒng),通信采用TCP/IP協(xié)議。
1.2 并行計算任務(wù)的進程分布特點
MPICH-G2根據(jù)RSL資源描述文件給出的網(wǎng)格資源名順序,依次按要求分配和啟動進程,直到滿足指定的進程數(shù)為止。計算任務(wù)由若干個進程并行完成,這些進程可能分布于不同的節(jié)點機上,也可能有一些分布在同一臺節(jié)點機上,其運行狀況如何,MPICH-G2無法了解。若某臺節(jié)點機出現(xiàn)故障,將導致運行其上的計算進程中止,致使整個并行計算結(jié)果無效。用戶必須實時監(jiān)控所有計算進程,出現(xiàn)問題要能立即發(fā)現(xiàn),以便進行適當處理。
1.3監(jiān)控模式
為實現(xiàn)監(jiān)控,采用客戶機/服務(wù)器模型。監(jiān)控平臺處于服務(wù)器端,收集所有計算進程發(fā)來的狀態(tài)信息,計算進程處于客戶端,每隔一定時間向監(jiān)控平臺報告當前狀態(tài)。為了不影響并行計算效率,客戶端的狀態(tài)報告進程由計算進程創(chuàng)建并和計算進程運行于同一臺節(jié)點機上。計算進程個數(shù)與狀態(tài)報告進程個數(shù)相同,它們之間一一對應。狀態(tài)報告進程僅向監(jiān)控平臺報告創(chuàng)建它的計算進程的狀態(tài)信息。計算進程的主要狀態(tài)信息如表1所示。
服務(wù)器端實時接收每一狀態(tài)報告進程發(fā)來的信息,為實現(xiàn)可靠連接,采用阻塞式接收和發(fā)送。為此,監(jiān)控平臺運行于多線程模式,某一線程僅與某一狀態(tài)報告進程聯(lián)絡(luò),所獲得的信息存儲在公共信息區(qū),供監(jiān)控平臺實時顯示。
2 關(guān)鍵技術(shù)分析
2.1 遠程通信的實現(xiàn)
隨著Linux操作系統(tǒng)的發(fā)展,Socket已成為Linux平臺上最流行的網(wǎng)絡(luò)通信應用程序接口(API),Linux C全面支持Socket編程。在TCP/IP協(xié)議族中,Socket接口與網(wǎng)絡(luò)協(xié)議的關(guān)系如圖2所示。
Windows Socket(WinSock)是由Microsoft、SUN等公司在Berkeley Socket基礎(chǔ)上開發(fā)的Windows平臺網(wǎng)絡(luò)應用系統(tǒng)編程接口。Windows以動態(tài)鏈接庫(DLL)的方式支持WinSock運行,在需要時,DLL將被實時地連接到應用程序上。16位DLL名為WinSock.DLL,32位DLL名為WSock32.DLL。Microsoft Visual C++ 6.0已經(jīng)具有完善的WinSock開發(fā)環(huán)境,提供了開發(fā)WinSock所需的所有頭文件和庫文件。
上述兩種套接口用于監(jiān)控平臺服務(wù)器進程與計算節(jié)點狀態(tài)報告進程間的通信,從而實現(xiàn)了Linux應用程序與Windows應用程序間的遠程通信。
2.2 計算進程與狀態(tài)報告進程的關(guān)系
計算進程分布于不同的網(wǎng)格節(jié)點機上,狀態(tài)報告進程是計算進程創(chuàng)建的子進程。下面介紹它們的邏輯關(guān)系。
(1)通過用戶控制臺向網(wǎng)格透明提交并行計算任務(wù)
網(wǎng)格資源對用戶是透明的。從用戶角度看,網(wǎng)格是一臺虛擬的超級計算機,提供足夠用戶使用的計算能力。作者設(shè)計的網(wǎng)格用戶控制臺就實現(xiàn)了這樣的功能,如圖3所示。
通過用戶控制臺,用戶只需填寫并行程序名、輸入/輸出數(shù)據(jù)文件名及對網(wǎng)格節(jié)點的基本硬件要求等簡單信息,就可以向計算網(wǎng)格透明提交計算任務(wù)。用戶控制臺與網(wǎng)格控制臺進行聯(lián)絡(luò),得到經(jīng)過優(yōu)化選擇的物理資源使用權(quán),并行計算任務(wù)就在這些資源上進行運算。在圖3所示的任務(wù)信息中,要求這一任務(wù)運行在20個網(wǎng)格節(jié)點上,由120個計算進程協(xié)同完成運算,要求節(jié)點機至少有512MB內(nèi)存,1024MB空閑磁盤。這20個網(wǎng)格節(jié)點屬于哪些計算機,以及這120個進程的分布情況對用戶是完全透明的。
(2)計算進程創(chuàng)建狀態(tài)報告進程
分布于不同網(wǎng)格節(jié)點的計算進程分別創(chuàng)建它們各自的狀態(tài)報告進程。若有120個計算進程,就會有120個狀態(tài)報告進程,它們之間一一對應,但又相互獨立。
計算進程占用大量CPU時間,高效完成計算任務(wù)。狀態(tài)報告進程只是在向監(jiān)控平臺發(fā)送信息時占用少量CPU時間,不會對系統(tǒng)的計算任務(wù)產(chǎn)生大的影響,可以滿足監(jiān)控系統(tǒng)的要求。
2.3 并行計算程序的流程控制
為了達到監(jiān)控目的,并行計算程序需遵守圖4所示的流程控制要求。
程序的主要偽代碼如下:
MPI_Init(&argc,&argv);//初始化MPI環(huán)境
MPI_Comm_size(MPI_COMM_WORLD,&numproc);
//取計算進程個數(shù)
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
//取本進程標識
MPI_Get_processor_name(name,&i);//取節(jié)點機名
fd=fork( );//創(chuàng)建計算進程的狀態(tài)報告子進程
if (fd !=0)//是計算進程嗎?
{//是計算進程(父進程)
DO_MPI_WORK;//完成并行計算任務(wù),占用大量CPU時間
kill(fd,SIGKILL);//終止狀態(tài)報告進程
}
else
{//是狀態(tài)報告進程(子進程)
sprintf(CmdStr,″vmstat -n 1 > NodeCpuInfo%-2d&″,myid);
system(CmdStr);
//啟動后臺運行程序vmstat,實時獲得CPU狀態(tài)信息
sockfd=socket(AF_INET,SOCK_STREAM,0);
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr(″監(jiān)控平臺IP地址″);
address.sin_port=htons(4000);
connect(sockfd,(struct sockaddr?鄢)&address,sizeof(address));
while(1){
sleep(1);//每隔一秒向監(jiān)控平臺報告計算進程狀態(tài)信息
write(sockfd,StatusInfo,strlen(StatusInfo) +1);
//StatusInfo是狀態(tài)信息字符串
}
close(sockfd);//關(guān)閉套接口
MPI_Finalize( );//退出MPI環(huán)境
}
2.4 服務(wù)器端監(jiān)控平臺的實現(xiàn)
服務(wù)器端運行于Windows平臺,開發(fā)工具選用Visual C++ 6.0。監(jiān)控平臺的主要功能是接受所有狀態(tài)報告進程的連接請求,實時接收計算進程狀態(tài)信息,并能根據(jù)用戶的選擇顯示某一進程及節(jié)點機的狀態(tài)。接受狀態(tài)報告進程連接請求和接收狀態(tài)信息的部分偽代碼如下:
{
serv.sin_family=AF_INET;//使用互聯(lián)網(wǎng)協(xié)議族
serv.sin_port=htons(4000);//設(shè)定連接端口號為4000
serv.sin_addr.s_addr=htonl(INADDR_ANY);//綁定通配地址
sock=socket(AF_INET,SOCK_STREAM,0);//建立流式套接口
bind(sock,(sockaddr*)&serv,sizeof(serv))//綁定套接口
listen(sock,32);//監(jiān)聽連接
AfxBeginThread(&mythread,0);//創(chuàng)建一個線程,等待連接請求
}
UINT mythread(LPVOID p)//線程函數(shù)
{ //接受連接,得到新的套接字,存入SockList數(shù)組
SockList[count]=accept(sock,(sockaddr*)&serv,&addrlen);
AfxBeginThread(&mythread,0);//啟動另一線程,等待
//新連接請求
while(s !=SOCKET_ERROR)
{ //循環(huán)接收數(shù)據(jù)
s=recv(SockList[count],buff,100,0);
//若客戶端關(guān)閉了套接口,則recv( )什么都不做,立即返回
if(strlen(buff)==0) break;
解析buff中的數(shù)據(jù),存入公共信息區(qū),供監(jiān)控平臺顯示
}
AfxEndThread(0);//終止線程
}
3 監(jiān)控平臺運行效果
監(jiān)控平臺運行界面如圖5所示,界面上的計算機圖標是運行時動態(tài)創(chuàng)建的,代表一個并行計算任務(wù)正在運行。圖中的12個計算機圖標表示本次計算任務(wù)有12個進程在并行處理。如果某計算進程結(jié)束或出現(xiàn)異常中止,則圖標下的ACTIVE將變?yōu)镮DLE,用戶可立即發(fā)現(xiàn)并采取相應處理措施。列表框里顯示節(jié)點機狀態(tài)報告進程發(fā)來的心跳信息,表示計算進程仍然存活。編輯框和消息發(fā)送按鈕用來向狀態(tài)報告進程發(fā)送操作信息,作為以后系統(tǒng)的擴展備用接口,這一功能接口對于遠程操作特別有用。
如果要了解節(jié)點進程的詳細信息,可單擊相應的計算機圖標,系統(tǒng)給出的信息如圖6所示,信息名稱和意義已在表1中作了說明。為了形象地表示進程所在節(jié)點機的CPU狀態(tài),監(jiān)控平臺用柱狀圖動態(tài)顯示用戶占用的CPU時間、系統(tǒng)占用的CPU時間及空閑CPU時間。從圖6可以看出,系統(tǒng)占用的CPU時間較少,用戶占用的CPU時間呈現(xiàn)周期性變化。造成這種結(jié)果的原因是在進行測試時作者有意安排了sleep函數(shù)。
4 結(jié)束語
對網(wǎng)格資源的發(fā)現(xiàn)與監(jiān)測是進行網(wǎng)格計算的前提?,F(xiàn)在有很多關(guān)于這方面的研究,也已取得了較多的成果。但這些監(jiān)測都是對物理資源的監(jiān)測,沒有涉及到計算進程,更沒有對并行計算進程進行監(jiān)測,而并行計算涉及的節(jié)點機多,計算任務(wù)龐大,對并行計算任務(wù)計算進程狀態(tài)實施監(jiān)控是十分必要的。本文給出的監(jiān)控模式及監(jiān)控軟件是對網(wǎng)格資源發(fā)現(xiàn)與監(jiān)測的重要補充,具有較強的實際應用價值。
參考文獻
1 Foster L,Kesselman C.Computational Grids:Blueprint for a New Computing Infrastructure.USA:Morgan Kaufmann Publishers,1999
2 Foster L,Kesselman C,Tueeke S.The Anatormy of the Grid:Enabling Scalable Virtual Organizations.International J Supercomputer Application,2001;15
3 Foster L,Kesselman C.The Grid:Blueprint for a Future Computing Infrastructure.USA:Morgan Kaufmmann Publishers,1999
4 都志輝,陳渝,劉鵬.網(wǎng)格計算.北京:清華大學出版社,2001
5 羅省賢,何大可.基于MPI的網(wǎng)絡(luò)并行計算環(huán)境及應用.成都:西南交通大學出版社,2001
6 徐志偉,馮百明,李偉.網(wǎng)格計算技術(shù).北京:電子工業(yè)出版社,2004
7 任永錚.Linux C程序員指南.北京:國防工業(yè)出版社,2000
8 周明天,汪文勇.TCP/IP網(wǎng)絡(luò)原理與技術(shù).北京:清華大學出版社,1993
9 汪曉平,鐘軍.Visual C++網(wǎng)絡(luò)通信協(xié)議分析與應用實現(xiàn).北京:人民郵電出版社,2003
10 樊富有,羅省賢,李錄明.對PC cluster實施遠程跨平臺監(jiān)控的研究與實現(xiàn).四川師范大學學報,2004;27