Torque 基本框架

背景

 

TORQUE provides administrators the ability to run scripts before and/or after each job executes. With such a
script, a site can prepare systems, perform node health checks, prepend and append text to output and error
log files, cleanup systems, and so forth.
The following table shows which mom runs which script. All scripts must be in the $PBS_HOME/mom_priv/
directory and be available on every compute node. $PBS_HOME by default is /usr/spool/PBS/. Mother
Superior is the pbs_mom on the first node allocated. Sisters refer to all other pbs_moms, although note that
a Mother Superior is also a sister node.

 

rpp.c 中主要是網絡的收包,解包

 

可以看到torque 是通過udp來流通信的。

 

 

 

首先通過add_con 註冊回調函數rpp_request()

 

接下來在

 

do_rqq()

 

通過 proto = disrsi(stream,&ret); 來獲得消息的協議類型,然後去調用相應的協議處理方法

 

case rm_protocol:  資源監控的請求;

 

case im_rpotocol : 任務管理的請求

 

case is_protocol:   內部服務器的請求

 

 

 

im_request(); 對來自於另一個mom rpp 消息 進行處理

 

還是通過disrsi(stream,&ret); 按字節讀取,包體組成爲request(jobid,cookie,command,event,fromtast)

 

然後根據command的值分爲

 

case im_join_job : 主要是來自mother superiorde 的工作消息。

 繼續解析得到包體內容: auxiliary info (nodeid,nodenum,)

 這裏會調用find_job 看看請求的jobid 是否已經存在 如果存在一般是錯誤的情況,需要清理告警

 

接下來會job_alloc 繼續對任務的解析

 

job_nodes 會去解析工作的node

 

同時任務的狀態爲: JOB_STATE_TRANSIT;  表示正在接受新任務

 

在這個時候所有的sister會去執行 mom_priv/prologue.parallel"

 

接下來 mom_do_poll()會去看看該job是否被限制某些資源使用。

 

 

然後第一個switch做完, 系統也做好了一些關於job的準備工作。

 

如果沒有匹配上第一個SWITH reply = 0. 說明下面的消息是需要反饋的。

 

下一個switch開始

 

case IM_KILL_JOB: 一般是qdel  來刪除這個jobid 消息同樣來自mom superior

 

case IM_SPAWN_TASK: 這裏說明某個 mom job需要開始, 這樣大家MOM都要開始幹活

 

做了一些合法行檢查之後 就要pbs_task_create()

接下來 就到了:  start_process() 這就是真正幹活的地方

 

這裏面會產生一個pipe,用於fork之後父進程收集子進程的信息

 

子進程 InitUserEnv() 初始化所有環境變量

然後重定向fd ,設置euid 工作目錄,等工作

 

最後當然就是  execvp(argv[0],argv);

 

 

 

 

 

mother  主要的工作就是

 

         process_request()

                   dispatch_request()

 

                            case PBS_BATCH_Commit:  req_commit();

                              pj->ji_qs.ji_state = JOB_STATE_RUNNING;

                  

                            主要的執行job就是start_exec()

 

                            TMomFinalizeJob1();*

 Used by MOM superior to start the shell process.

                          perform all server level pre-job tasks, collect information

create parent-child pipes

 

                            TMomFinalizeJob2()

                                      子進程執行TMomFinalizeChild(){

                                               經過多次forksisiter類似的準備工作

                                               execve(shell,arg,vtable.v_envp);

}

 

                            TMomCheckJobChild();

 

TMomFinalizeJob3(){ 這裏把JOB的做內部和外部JOB_STATE_RUNNING狀態改爲RUNNING

         如果失敗會

         exec_bail(){

                     send_sisters(pjob,IM_ABORT_JOB); 通知所有sisters

}

 

}

 

 

 

 

 

 Torque的代碼 簡單而醜陋。。。HPC領域可能本來就是注重並行算法,不在意調度這些輔助庫。。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章