0. 一些基本概念
- 計算機集群:高性能集群(High Performance Computing,簡稱HPC)是一組松散或緊密連接在一起工作的計算機。由於這些計算機協同工作,在許多方面它們可以被視為單個系統。集群可以利用多個計算機進行並行計算從而獲得很高的計算速度,也可以用多個計算機做備份,從而使得任何一個機器壞了整個系統還是能正常運行。與網格計算機不同,計算機集群將每個節點設置為執行相同的任務,由軟件控制和調度。
關於集群與分布式的區別有一段話總結得很好:集群是個物理形態,分布式是個工作方式。只要是一堆機器,就可以叫集群,他們是不是一起協作着干活,這個誰也不知道;一個程序或系統,只要運行在不同的機器上,就可以叫分布式,C/S架構也可以叫分布式。集群一般是物理集中、統一管理的,而分布式系統則不強調這一點。所以,集群可能運行着一個或多個分布式系統,也可能根本沒有運行分布式系統;分布式系統可能運行在一個集群上,也可能運行在不屬於一個集群的多台(2台也算多台)機器上。
- 節點是集群中的控制器。它通過專有的管理集群網絡連接到集群中的其他節點。每個集群均包含節點,也就是管理數據和執行維護任務的計算單元。
1. 常見的幾種資源管理和調度系統
-
SGE(Sun Grid Engine):Sun網格引擎是一種來自於SUN Microsystem的分布式資源管理和調度系統,它用來在基於UNIX的計算環境中優化軟件和硬件資源的使用。SGE能用於查找資源池內的閑置資源並利用這些資源;它同樣用於通常的一些事務中,例如管理和調度作業到可用資源中。
-
PBS(Portable Batch System):便攜式批處理系統接受批處理作業(具有控制屬性的shell腳本),保留和保護作業直到它開始運行。因為一個批處理作業是一個無需用戶干預的,在計算機系統后台運行的程序,在批處理作業運行過程中,用戶無法實時地得到作業運行結果,所以PBS只能在作業執行后,將作業結果返回給提交者。目前,PBS包含開源免費的OpenPBS、商業付費的PBS Pro、Torque三種分支。
-
Condor來自Wisconsin-Madison大學的研究項目。充分利用工作站的空閑時間是Condor的最顯著特征。Condor管理的機群由網絡中的工作站組成,工作站可以自願加入或退出。Condor監測網絡中所有工作站的狀態,一旦某台計算機被認為空閑,便把它納入到資源池中。在資源池中的工作站被用來執行作業。
-
LSF(Load Sharing Facility):負載共享設施是由加拿大平台計算公司研制與開發的,由Toronto大學開發的Utopia系統發展而來。在使用范圍上,LSF不僅用於科學計算,也用於企業的事務處理。功能上,除了一般的作業管理特性外,它還在負載平衡、系統容錯、檢查點操作、進程遷移等方面作了很好的努力,並力圖使之實用化。
2. SGE常見指令
2.1 提交任務
qsub參數:
$ qsub -help
SGE 8.1.9
usage: qsub [options]
[-a date_time] request a start time
[-ac context_list] add context variable(s)
[-Ap fname] add a new parallel environment from file
[-astnode node_shares_list] add sharetree node(s)
[-at thread_name] add/start qmaster thread
[-A account_string] account string in accounting record
[-b y[es]|n[o]] handle command as binary
[-binding [env|pe|set] exp|lin|str] binds job to processor cores
[-c ckpt_selector] define type of checkpointing for job
[-cwd] use current working directory
[-C directive_prefix] define command prefix for job script
[-dc simple_context_list] delete context variable(s)
[-dul listname_list] delete userset list(s) completely
[-e path_list] specify standard error stream path(s)
[-h] place user hold on job
[-hard] consider following requests "hard"
[-he y[es]|n[o]] enable/disable hard error handling
[-help] print this help
[-hold_jid job_identifier_list] define jobnet interdependencies
[-hold_jid_ad job_identifier_list] define jobnet array interdependencies
[-i file_list] specify standard input stream file(s)
[-j y[es]|n[o]] merge stdout and stderr stream of job
[-js job_share] share tree or functional job share
[-jsv jsv_url] job submission verification script to be used
[-l resource_list] request the given resources
[-M mail_list] notify these e-mail addresses
[-m mail_options] define mail notification events
[-masterq wc_queue_list] bind master task to queue(s)
[-mattr obj_nm attr_nm val obj_id_list] modify an attribute (or element in a sublist) of an object
[-N name] specify job name
[-notify] notify job before killing/suspending it
[-now y[es]|n[o]] start job immediately or not at all
[-o path_list] specify standard output stream path(s)
[-ot tickets] set jobs override tickets
[-P project_name] set jobs project
[-p priority] define jobs relative priority
[-pe wc_pe_name slot_range] request slot range for parallel jobs
[-q wc_queue_list] bind job to queue(s)
[-r y[es]|n[o]] define job as (not) restartable
[-sc context_list] set job context (replaces old context)
[-shell y[es]|n[o]] start command with or without wrapping <loginshell> -c
[-soft] consider following requests as soft
[-srqs [rqs_list]] show resource quota set(s)
[-sync y[es]|n[o]] wait for job to end and return exit code
[-S path_list] command interpreter to be used
[-t task_id_range] create a job-array with these tasks
[-v variable_list] export these environment variables
[-verify] do not submit, just verify
[-V] export all environment variables
[-wd working_directory] use working_directory
[-@ file] read commandline input from file
[{command|-} [command_args]]
最常用參數:
- cwd #使用當前工作目錄
- binding #將作業綁定到處理器核心
- p #定義工作的相對優先級,-1023 到 1024 , 默認值0
- P #定義項目名稱,前提是存在該項目
- q #將作業綁定到隊列
- l #請求給定的計算資,如-l arch=solaris64,h_vmem=750M,permas=1
示例qsub -cwd -l vf=2g,p=1 -q queuename.q -P projectname -binding linear:2 test.sh
:
qsub
-cwd
-l vf=2g,p=1 #vf內存簡寫,p線程數簡寫;
#資源可分開寫,可寫全稱,單位可大小寫,如-l virtual_free=2G -l num_proc=1。
#關於資源限制域可通過 qconf -sc命令查看
-q queueName.q
-P ProjectName
-binding linear:2 #處理器核心數 linear
test.sh
2.2 查看任務
qstat命令
qstat -j jobid #某個任務詳細信息
qstat -u username #某用戶的任務
qstat -u \* #所有用戶任務
qstat -q all.q -u \* #查看某個隊列下所有任務
qstat -q all.q@node1 -u \* #查看某個隊列的某一節點下所有任務
qstat -f #查看用戶自己在每個節點的任務情況,沒啥用
任務的狀態:
qw #等待狀態
hqw #任務掛起等待中,待依賴的任務完成后執行
Eqw #投遞任務出錯
r #任務正在運行
s #暫時掛起
dr #節點掛了之后,刪除任務就會出現這個狀態,只有節點重啟之后,任務才會消失
2.3 刪除任務
qdel命令
qdel jobid #可同時刪除多個,如qdel jobid1 jodid2
qdel -u username #刪除某用戶所有任務
2.4 掛起/恢復任務
qhold命令:掛起qw的任務
qhold jobid
qhold -u \*
qrls jobid #恢復
qmod命令:掛起running中的任務
qmod -sj jobid
qmod -usj jobid #恢復
如果未提交到SGE系統,直接運行的命令用kill -STOP pid
掛起,用kill -CONT pid
恢復。
2.5 更改任務屬性
qalter命令修改已提交但正處於暫掛狀態的作業的屬性
參數和qsub一樣。