《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 一種跨平臺(tái)監(jiān)控網(wǎng)格并行計(jì)算任務(wù)的解決方案
一種跨平臺(tái)監(jiān)控網(wǎng)格并行計(jì)算任務(wù)的解決方案
樊富有1,肖尚輝2
1.宜賓學(xué)院 計(jì)科系,四川 宜賓644007; 2.宜賓學(xué)院 電信系,四川 宜賓644007
摘要: 介紹了對(duì)網(wǎng)格并行計(jì)算任務(wù)實(shí)施遠(yuǎn)程監(jiān)控的一種解決方案,從并行計(jì)算任務(wù)的進(jìn)程分布特點(diǎn)、監(jiān)控模式、遠(yuǎn)程跨平臺(tái)通信的實(shí)現(xiàn)以及多線程連接幾方面作了分析闡述。
Abstract:
Key words :

摘   要: 介紹了對(duì)網(wǎng)格并行計(jì)算任務(wù)實(shí)施遠(yuǎn)程監(jiān)控的一種解決方案,從并行計(jì)算任務(wù)的進(jìn)程分布特點(diǎn)、監(jiān)控模式、遠(yuǎn)程跨平臺(tái)通信的實(shí)現(xiàn)以及多線程連接幾方面作了分析闡述。
關(guān)鍵詞: 網(wǎng)格計(jì)算  并行計(jì)算  遠(yuǎn)程監(jiān)控  Socket  WinSock

  發(fā)展高性能計(jì)算是解決不斷增長(zhǎng)的計(jì)算需求問(wèn)題的根本途徑。高性能計(jì)算的物質(zhì)基礎(chǔ)是高性能計(jì)算機(jī),如SIMD、PVP、SMP、MPP、COW和分布式計(jì)算機(jī)。如何把分散的計(jì)算資源集中起來(lái)協(xié)同解決問(wèn)題是高性能計(jì)算領(lǐng)域研究的熱點(diǎn)。
  網(wǎng)格是一個(gè)集成的計(jì)算與資源環(huán)境,是一個(gè)高性能計(jì)算資源池。網(wǎng)格能夠充分吸納各種計(jì)算資源,并將它們轉(zhuǎn)化為一種隨處可得的、可靠的、標(biāo)準(zhǔn)的同時(shí)還是經(jīng)濟(jì)的計(jì)算能力。MPI(Message Passing Interface)是消息傳遞并行編程模型的一種具體實(shí)現(xiàn)和主要代表,MPI在并行計(jì)算領(lǐng)域已廣為普及并成為事實(shí)上的標(biāo)準(zhǔn)。MPICH-G2是一個(gè)用于網(wǎng)格計(jì)算環(huán)境的MPI實(shí)現(xiàn),符合MPI1.1標(biāo)準(zhǔn)。通過(guò)使用Globus服務(wù),MPICH-G2可以把不同體系結(jié)構(gòu)的計(jì)算結(jié)點(diǎn)聯(lián)合起來(lái)進(jìn)行并行計(jì)算。
  成都理工大學(xué)校園計(jì)算網(wǎng)格模型已設(shè)計(jì)完成,這是網(wǎng)格管理系統(tǒng)的主要開(kāi)發(fā)工作。通過(guò)網(wǎng)格管理系統(tǒng)中的用戶控制臺(tái),用戶可向網(wǎng)格提交Single Task、Co-allocation Task、MPICH Task。為了能夠監(jiān)控網(wǎng)格環(huán)境下的并行計(jì)算任務(wù)的運(yùn)行狀態(tài),作者在原來(lái)設(shè)計(jì)的PC機(jī)群監(jiān)控平臺(tái)的基礎(chǔ)上,進(jìn)一步設(shè)計(jì)了用于監(jiān)控網(wǎng)格并行計(jì)算任務(wù)的監(jiān)控平臺(tái)。該平臺(tái)能實(shí)時(shí)顯示網(wǎng)格并行計(jì)算任務(wù)所在網(wǎng)格節(jié)點(diǎn)的狀態(tài),具有跨平臺(tái)和遠(yuǎn)程監(jiān)控的特點(diǎn),使用戶能夠監(jiān)控遠(yuǎn)程計(jì)算任務(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)格控制臺(tái)、用戶控制臺(tái)、監(jiān)控平臺(tái)四個(gè)部分組成。其中網(wǎng)格資源主要由若干高性能計(jì)算機(jī)和PC機(jī)群構(gòu)成。PC機(jī)群由n臺(tái)PC機(jī)作為節(jié)點(diǎn)機(jī)構(gòu)成。操作系統(tǒng)為L(zhǎng)inux,網(wǎng)格支撐系統(tǒng)采用美國(guó)Argonne國(guó)家實(shí)驗(yàn)室的GT3.2.1,軟件并行支撐環(huán)境采用可移植消息傳遞標(biāo)準(zhǔn)MPI的一個(gè)實(shí)現(xiàn)MPICH-G2。監(jiān)控平臺(tái)運(yùn)行Windows操作系統(tǒng),通信采用TCP/IP協(xié)議。

1.2 并行計(jì)算任務(wù)的進(jìn)程分布特點(diǎn)
  MPICH-G2根據(jù)RSL資源描述文件給出的網(wǎng)格資源名順序,依次按要求分配和啟動(dòng)進(jìn)程,直到滿足指定的進(jìn)程數(shù)為止。計(jì)算任務(wù)由若干個(gè)進(jìn)程并行完成,這些進(jìn)程可能分布于不同的節(jié)點(diǎn)機(jī)上,也可能有一些分布在同一臺(tái)節(jié)點(diǎn)機(jī)上,其運(yùn)行狀況如何,MPICH-G2無(wú)法了解。若某臺(tái)節(jié)點(diǎn)機(jī)出現(xiàn)故障,將導(dǎo)致運(yùn)行其上的計(jì)算進(jìn)程中止,致使整個(gè)并行計(jì)算結(jié)果無(wú)效。用戶必須實(shí)時(shí)監(jiān)控所有計(jì)算進(jìn)程,出現(xiàn)問(wèn)題要能立即發(fā)現(xiàn),以便進(jìn)行適當(dāng)處理。
1.3監(jiān)控模式
  為實(shí)現(xiàn)監(jiān)控,采用客戶機(jī)/服務(wù)器模型。監(jiān)控平臺(tái)處于服務(wù)器端,收集所有計(jì)算進(jìn)程發(fā)來(lái)的狀態(tài)信息,計(jì)算進(jìn)程處于客戶端,每隔一定時(shí)間向監(jiān)控平臺(tái)報(bào)告當(dāng)前狀態(tài)。為了不影響并行計(jì)算效率,客戶端的狀態(tài)報(bào)告進(jìn)程由計(jì)算進(jìn)程創(chuàng)建并和計(jì)算進(jìn)程運(yùn)行于同一臺(tái)節(jié)點(diǎn)機(jī)上。計(jì)算進(jìn)程個(gè)數(shù)與狀態(tài)報(bào)告進(jìn)程個(gè)數(shù)相同,它們之間一一對(duì)應(yīng)。狀態(tài)報(bào)告進(jìn)程僅向監(jiān)控平臺(tái)報(bào)告創(chuàng)建它的計(jì)算進(jìn)程的狀態(tài)信息。計(jì)算進(jìn)程的主要狀態(tài)信息如表1所示。


  服務(wù)器端實(shí)時(shí)接收每一狀態(tài)報(bào)告進(jìn)程發(fā)來(lái)的信息,為實(shí)現(xiàn)可靠連接,采用阻塞式接收和發(fā)送。為此,監(jiān)控平臺(tái)運(yùn)行于多線程模式,某一線程僅與某一狀態(tài)報(bào)告進(jìn)程聯(lián)絡(luò),所獲得的信息存儲(chǔ)在公共信息區(qū),供監(jiān)控平臺(tái)實(shí)時(shí)顯示。
2  關(guān)鍵技術(shù)分析
2.1 遠(yuǎn)程通信的實(shí)現(xiàn)
  隨著Linux操作系統(tǒng)的發(fā)展,Socket已成為L(zhǎng)inux平臺(tái)上最流行的網(wǎng)絡(luò)通信應(yīng)用程序接口(API),Linux C全面支持Socket編程。在TCP/IP協(xié)議族中,Socket接口與網(wǎng)絡(luò)協(xié)議的關(guān)系如圖2所示。

  Windows Socket(WinSock)是由Microsoft、SUN等公司在Berkeley Socket基礎(chǔ)上開(kāi)發(fā)的Windows平臺(tái)網(wǎng)絡(luò)應(yīng)用系統(tǒng)編程接口。Windows以動(dòng)態(tài)鏈接庫(kù)(DLL)的方式支持WinSock運(yùn)行,在需要時(shí),DLL將被實(shí)時(shí)地連接到應(yīng)用程序上。16位DLL名為WinSock.DLL,32位DLL名為WSock32.DLL。Microsoft Visual C++ 6.0已經(jīng)具有完善的WinSock開(kāi)發(fā)環(huán)境,提供了開(kāi)發(fā)WinSock所需的所有頭文件和庫(kù)文件。
  上述兩種套接口用于監(jiān)控平臺(tái)服務(wù)器進(jìn)程與計(jì)算節(jié)點(diǎn)狀態(tài)報(bào)告進(jìn)程間的通信,從而實(shí)現(xiàn)了Linux應(yīng)用程序與Windows應(yīng)用程序間的遠(yuǎn)程通信。
2.2 計(jì)算進(jìn)程與狀態(tài)報(bào)告進(jìn)程的關(guān)系
  計(jì)算進(jìn)程分布于不同的網(wǎng)格節(jié)點(diǎn)機(jī)上,狀態(tài)報(bào)告進(jìn)程是計(jì)算進(jìn)程創(chuàng)建的子進(jìn)程。下面介紹它們的邏輯關(guān)系。
  (1)通過(guò)用戶控制臺(tái)向網(wǎng)格透明提交并行計(jì)算任務(wù)
  網(wǎng)格資源對(duì)用戶是透明的。從用戶角度看,網(wǎng)格是一臺(tái)虛擬的超級(jí)計(jì)算機(jī),提供足夠用戶使用的計(jì)算能力。作者設(shè)計(jì)的網(wǎng)格用戶控制臺(tái)就實(shí)現(xiàn)了這樣的功能,如圖3所示。

  通過(guò)用戶控制臺(tái),用戶只需填寫并行程序名、輸入/輸出數(shù)據(jù)文件名及對(duì)網(wǎng)格節(jié)點(diǎn)的基本硬件要求等簡(jiǎn)單信息,就可以向計(jì)算網(wǎng)格透明提交計(jì)算任務(wù)。用戶控制臺(tái)與網(wǎng)格控制臺(tái)進(jìn)行聯(lián)絡(luò),得到經(jīng)過(guò)優(yōu)化選擇的物理資源使用權(quán),并行計(jì)算任務(wù)就在這些資源上進(jìn)行運(yùn)算。在圖3所示的任務(wù)信息中,要求這一任務(wù)運(yùn)行在20個(gè)網(wǎng)格節(jié)點(diǎn)上,由120個(gè)計(jì)算進(jìn)程協(xié)同完成運(yùn)算,要求節(jié)點(diǎn)機(jī)至少有512MB內(nèi)存,1024MB空閑磁盤。這20個(gè)網(wǎng)格節(jié)點(diǎn)屬于哪些計(jì)算機(jī),以及這120個(gè)進(jìn)程的分布情況對(duì)用戶是完全透明的。
  (2)計(jì)算進(jìn)程創(chuàng)建狀態(tài)報(bào)告進(jìn)程
  分布于不同網(wǎng)格節(jié)點(diǎn)的計(jì)算進(jìn)程分別創(chuàng)建它們各自的狀態(tài)報(bào)告進(jìn)程。若有120個(gè)計(jì)算進(jìn)程,就會(huì)有120個(gè)狀態(tài)報(bào)告進(jìn)程,它們之間一一對(duì)應(yīng),但又相互獨(dú)立。
  計(jì)算進(jìn)程占用大量CPU時(shí)間,高效完成計(jì)算任務(wù)。狀態(tài)報(bào)告進(jìn)程只是在向監(jiān)控平臺(tái)發(fā)送信息時(shí)占用少量CPU時(shí)間,不會(huì)對(duì)系統(tǒng)的計(jì)算任務(wù)產(chǎn)生大的影響,可以滿足監(jiān)控系統(tǒng)的要求。
2.3 并行計(jì)算程序的流程控制
  為了達(dá)到監(jiān)控目的,并行計(jì)算程序需遵守圖4所示的流程控制要求。

  程序的主要偽代碼如下:
  MPI_Init(&argc,&argv);//初始化MPI環(huán)境
  MPI_Comm_size(MPI_COMM_WORLD,&numproc);
                    //取計(jì)算進(jìn)程個(gè)數(shù)
  MPI_Comm_rank(MPI_COMM_WORLD,&myid);
                     //取本進(jìn)程標(biāo)識(shí)
  MPI_Get_processor_name(name,&i);//取節(jié)點(diǎn)機(jī)名
  fd=fork( );//創(chuàng)建計(jì)算進(jìn)程的狀態(tài)報(bào)告子進(jìn)程
  if (fd !=0)//是計(jì)算進(jìn)程嗎?
  {//是計(jì)算進(jìn)程(父進(jìn)程)
  DO_MPI_WORK;//完成并行計(jì)算任務(wù),占用大量CPU時(shí)間
  kill(fd,SIGKILL);//終止?fàn)顟B(tài)報(bào)告進(jìn)程
  }
  else
  {//是狀態(tài)報(bào)告進(jìn)程(子進(jìn)程)
  sprintf(CmdStr,″vmstat -n 1 > NodeCpuInfo%-2d&″,myid);
  system(CmdStr);
         //啟動(dòng)后臺(tái)運(yùn)行程序vmstat,實(shí)時(shí)獲得CPU狀態(tài)信息
  sockfd=socket(AF_INET,SOCK_STREAM,0); 
  address.sin_family=AF_INET;
  address.sin_addr.s_addr=inet_addr(″監(jiān)控平臺(tái)IP地址″);
  address.sin_port=htons(4000);
  connect(sockfd,(struct sockaddr?鄢)&address,sizeof(address));
       while(1){
  sleep(1);//每隔一秒向監(jiān)控平臺(tái)報(bào)告計(jì)算進(jì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)控平臺(tái)的實(shí)現(xiàn)
  服務(wù)器端運(yùn)行于Windows平臺(tái),開(kāi)發(fā)工具選用Visual C++ 6.0。監(jiān)控平臺(tái)的主要功能是接受所有狀態(tài)報(bào)告進(jìn)程的連接請(qǐng)求,實(shí)時(shí)接收計(jì)算進(jìn)程狀態(tài)信息,并能根據(jù)用戶的選擇顯示某一進(jìn)程及節(jié)點(diǎn)機(jī)的狀態(tài)。接受狀態(tài)報(bào)告進(jìn)程連接請(qǐng)求和接收狀態(tài)信息的部分偽代碼如下:
{
   serv.sin_family=AF_INET;//使用互聯(lián)網(wǎng)協(xié)議族
   serv.sin_port=htons(4000);//設(shè)定連接端口號(hào)為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)聽(tīng)連接
   AfxBeginThread(&mythread,0);//創(chuàng)建一個(gè)線程,等待連接請(qǐng)求
}
UINT mythread(LPVOID p)//線程函數(shù)
{ //接受連接,得到新的套接字,存入SockList數(shù)組
   SockList[count]=accept(sock,(sockaddr*)&serv,&addrlen);
   AfxBeginThread(&mythread,0);//啟動(dòng)另一線程,等待
//新連接請(qǐng)求
   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)控平臺(tái)顯示
   }
   AfxEndThread(0);//終止線程
}
3  監(jiān)控平臺(tái)運(yùn)行效果
  監(jiān)控平臺(tái)運(yùn)行界面如圖5所示,界面上的計(jì)算機(jī)圖標(biāo)是運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建的,代表一個(gè)并行計(jì)算任務(wù)正在運(yùn)行。圖中的12個(gè)計(jì)算機(jī)圖標(biāo)表示本次計(jì)算任務(wù)有12個(gè)進(jìn)程在并行處理。如果某計(jì)算進(jìn)程結(jié)束或出現(xiàn)異常中止,則圖標(biāo)下的ACTIVE將變?yōu)镮DLE,用戶可立即發(fā)現(xiàn)并采取相應(yīng)處理措施。列表框里顯示節(jié)點(diǎn)機(jī)狀態(tài)報(bào)告進(jìn)程發(fā)來(lái)的心跳信息,表示計(jì)算進(jìn)程仍然存活。編輯框和消息發(fā)送按鈕用來(lái)向狀態(tài)報(bào)告進(jìn)程發(fā)送操作信息,作為以后系統(tǒng)的擴(kuò)展備用接口,這一功能接口對(duì)于遠(yuǎn)程操作特別有用。

  如果要了解節(jié)點(diǎn)進(jìn)程的詳細(xì)信息,可單擊相應(yīng)的計(jì)算機(jī)圖標(biāo),系統(tǒng)給出的信息如圖6所示,信息名稱和意義已在表1中作了說(shuō)明。為了形象地表示進(jìn)程所在節(jié)點(diǎn)機(jī)的CPU狀態(tài),監(jiān)控平臺(tái)用柱狀圖動(dòng)態(tài)顯示用戶占用的CPU時(shí)間、系統(tǒng)占用的CPU時(shí)間及空閑CPU時(shí)間。從圖6可以看出,系統(tǒng)占用的CPU時(shí)間較少,用戶占用的CPU時(shí)間呈現(xiàn)周期性變化。造成這種結(jié)果的原因是在進(jìn)行測(cè)試時(shí)作者有意安排了sleep函數(shù)。

4  結(jié)束語(yǔ)
  對(duì)網(wǎng)格資源的發(fā)現(xiàn)與監(jiān)測(cè)是進(jìn)行網(wǎng)格計(jì)算的前提?,F(xiàn)在有很多關(guān)于這方面的研究,也已取得了較多的成果。但這些監(jiān)測(cè)都是對(duì)物理資源的監(jiān)測(cè),沒(méi)有涉及到計(jì)算進(jìn)程,更沒(méi)有對(duì)并行計(jì)算進(jìn)程進(jìn)行監(jiān)測(cè),而并行計(jì)算涉及的節(jié)點(diǎn)機(jī)多,計(jì)算任務(wù)龐大,對(duì)并行計(jì)算任務(wù)計(jì)算進(jìn)程狀態(tài)實(shí)施監(jiān)控是十分必要的。本文給出的監(jiān)控模式及監(jiān)控軟件是對(duì)網(wǎng)格資源發(fā)現(xiàn)與監(jiān)測(cè)的重要補(bǔ)充,具有較強(qiáng)的實(shí)際應(yīng)用價(jià)值。
參考文獻(xià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)格計(jì)算.北京:清華大學(xué)出版社,2001
5   羅省賢,何大可.基于MPI的網(wǎng)絡(luò)并行計(jì)算環(huán)境及應(yīng)用.成都:西南交通大學(xué)出版社,2001
6   徐志偉,馮百明,李偉.網(wǎng)格計(jì)算技術(shù).北京:電子工業(yè)出版社,2004
7   任永錚.Linux C程序員指南.北京:國(guó)防工業(yè)出版社,2000
8   周明天,汪文勇.TCP/IP網(wǎng)絡(luò)原理與技術(shù).北京:清華大學(xué)出版社,1993
9   汪曉平,鐘軍.Visual C++網(wǎng)絡(luò)通信協(xié)議分析與應(yīng)用實(shí)現(xiàn).北京:人民郵電出版社,2003
10  樊富有,羅省賢,李錄明.對(duì)PC cluster實(shí)施遠(yuǎn)程跨平臺(tái)監(jiān)控的研究與實(shí)現(xiàn).四川師范大學(xué)學(xué)報(bào),2004;27

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。