網格計算和SGE
從概念上講,網格很簡單。它是執行任務的計算資源的集合。對用戶而言,它就是一個大系統,提供單個切入點,以訪問強大而分散的資源。用戶將網格視作單個計算資源
SGE的工作原理
Sun Grid Engine 軟件爲用戶提供了向Sun Grid Engine 系統提交要求計算的任務的方法,以透明地分配相關的工作負荷。用戶可以向Sun Grid Engine 系統提交批處理作業、交互式作業和並行作業。
Sun Grid Engine用以下方式調解可用資源和作業需求。
通過Sun Grid Engine 系統提交作業的用戶描述出作業需求的概況。此外,系統還要檢索用戶的身份以及他或她與項目或用戶組的從屬關係。用戶提交作業的時間也將存儲起來。
SGE的組成
節點(Hosts)
後臺程序(Daemons)
sge_qmaster – the Master Daemon
sge_schedd – the Scheduler Daemon
sge_execd – the Execution Daemon
sge_commd – the Communication Daemon
隊列(Queues)
隊列
查看所有隊列 # qconf -sql 查看某個隊列的配置 # qconf -sq 隊列名 編輯隊列配置文件 # qconf -mq 隊列名 查看隊列中主機情況 # qselect -q 隊列名 創建隊列 # qconf -aq 對列名
主機組
查看所有主機組 # qconf -shgrpl 查看某個主機組信息 # qconf -shgrp 主機組名 編輯主機組配置 # qconf -mhgrp 主機組名 創建主機組 # qconf -ahgrp 主機組名
用戶組
查看所有用戶組 # qconf -sul 查看某個用戶組信息 # qconf -su 用戶組名 編輯用戶組配置 # qconf -mu 用戶組名 創建用戶組並把用戶添加到用戶組 # qconf -au 用戶名 用戶組名
qstat使用
# qstat -f # qstat -explain # qstat -j jobid
qmod使用
# qmod -cq 隊列名 # qmod -cj job名
修改shell
# qconf -mconf # qconf -mq 隊列名
限制單個計算節點可以使用的資源
# qconf -me 節點名
qsub使用(投遞任務)
qsub –cwd –l vf=1G –q common.q –l h=compute-0-0 test.sh test.sh: #!/bin/bash #$ –S /bin/bash sleep 100;
啓用-l vf參數
查看配置參數 # qconf -sc 修改配置參數 # qconf -mc #name shortcut type relop requestable consumable default urgency #—————————————————————————————- virtual_free vf MEMORY <= YES YES 0 0 #………………………………………………………………………………………………
注意:在管理主節點上進行修改之後最好同步一下,將配置同步到計算節點當中
rocks sync users rocks sync config 同步到其他節點
常用命令
qsub命令用來向SGE提交批處理作業,SGE支持單或多節點作業。
qsh命令用來提交帶xterm交互式作業,在執行主機上開啓X-windows.
qlogin命令與qsh相似也是提交交互式作業到隊列中,只是它不開啓X-windows,而是利用現在的終端傳送I/O,該命令與遠程主機建立telnet連接,使用標準的server-client命令
qrsh命令與qlogin類似,與遠程主機通過rsh連接。
qalter可用來改變處於pending狀態的作業屬性。
qresub命令允許用戶通過拷貝處於pengding或runing狀態的作業來創建新的作業。新建作業與原作業具有相同的屬性,並被分配了新的jobID和hold狀態。該命令可用來先拷貝一個作業再修改其屬性。
qdel 刪除任務
qmod 修改隊列和任務屬性
qstat 查看任務和隊列狀態
qacct –此命令從羣集日誌文件中抽取任意帳戶信息。
qmon –此命令爲羣集和隊列配置提供用戶界面。
qdel –用戶、操作人員或管理人員可使用此命令向作業或其子集發送信號。
qhold –此命令阻止已提交作業的執行。
qhost –此命令顯示Sun Grid Engine 執行主機的狀態信息。
qconf 管理隊列
qsub常用選項
-a date_time 作業開始運行時間
-b y[es]|n[o]判斷作業指定是二進制文件或scripts。y :是 n:scripts
-display 使用X-windows
-dl date_time 定義作業到期時間,在作業到期時間之前,作業的優先級會逐步提高,直到管理員指定的最高級別。
-e 指定輸出error文件的路徑及文件名
-hard 定義作業被調度的硬性要求
-h 作業hold類型。u:表示用戶hold,s:表示系統hold,o:表示被操作員hold,n:取消hold
,U:取消用戶hold,S:取消系統hold,O:取消操作員hold。
-i 定義輸入文件
-V 可以使用。可以使用-v PWD 來代替-cwd
-j y[es]|n[o] 定義作業的標準錯誤輸出是否寫入的輸出文件中
-l resource=value, 表明作業運行所需要的資源。
-m b|e|a|s|n 。定義郵件發送規則。b:作業開始時發送。e:作業結束時發送。a:作業失敗時發送 s:作業掛起時發送。n:不發送
-M user[@host] 定義郵件地址
-notify :定義發送SIGSTOP or SIGKILL信號的延遲時間
-now y[es]|n[o]:立即執行作業
-N 作業名-o [[hostname]:]path :定義輸出文件路徑、文件名
-P project_name:定義項目名稱
-p priority :定義優先級
-pe parallel_environment:定義並行環境
-q wc_queue_list:定義作業運行隊列
-R y[es]|n[o]:定義是否爲作業保留資源。
-r y[es]|n[o]:定義作業失敗後是否重新運行
-soft 定義作業被調度的軟性要求
-u username,只有qlter命令可以使用該參數。修改作業的用戶名
-v variable:定義環境變量
-verbose 使qrsh命令輸出信息
-verify 驗證作業參數時使用
-V 傳遞當前命令的所有環境變量
qconf常用選項
% qconf ¨Csql ¨C 顯示隊列列表
% qconf -sq 隊列名 ¨C 顯示該隊列屬性
qname –所請求的隊列名稱。
hostname –隊列所處的主機。
processors –多處理器系統中此隊列有權訪問的處理器。
qtype –允許在此隊列中運行的作業類型。目前包括批處理作業、交互式作業、點檢查作業、並行作業或它們的任意組合或相互轉換的作業。
slots –可在隊列上同時執行的作業數量。
察看隊列屬性
owner_list –隊列的擁有者。
user_lists –此參數下所列的用戶訪問列表中標識的用戶或組有權訪問此隊列。
xuser_lists –此參數下所列的用戶訪問列表中標識的用戶或組無權訪問此隊列。
complex_list –列於此參數下的屬性組與隊列相關聯,而且這些屬性組中所含的屬性構成此隊列的可請求屬性組。
complex_values –提供給此隊列的某些屬性組屬性的賦值。
察看主控主機
由於主控主機會隨時可能在當前的主控主機和某個影像主控主機之間切換,主控主機的位置對用戶來說應該是透明的。
用文本編輯器,打開
/opt/grid-engineer/default/common/act_qmaster 文件。
此文件中有當前主控主機的名稱。
顯示執行主機
% qconf ¨Csel
顯示當前配置爲執行主機的所有主機的列表。
% qconf -se 主機名稱
顯示指定的執行主機的詳細信息
% qhost
顯示執行主機的狀態和負荷信息
顯示管理主機
% qconf -sh
顯示有管理權限的主機列表
顯示提交主機
% qconf -ss
可請求的屬性
提交一個Sun Grid Engine 作業時,可指定該作業的需求概況。用戶可以指定作業所需的主機或隊列的屬性或特性以保證作業成功運行。Sun Grid Engine 將這些作業需求映射到Sun Grid Engine 羣集的主機和隊列的配置,從而找到適合該作業的主機。
可用的屬性包括隊列特性列表、全局屬性和主機相關屬性的列表,以及管理員定義的屬性。但是,爲方便起見, Sun Grid Engine 管理員通常只將一個所有可用屬性的子集定義爲可請求。
顯示可請求屬性列表
% qconf –scl
顯示已配置的屬性組列表
屬性組包含一組屬性的定義。有三種標準屬性組:
global –針對羣集全局屬性(可選)
host –針對主機特有的屬性
queue –針對隊列特性的屬性
顯示可請求屬性列表
% qconf -sc 屬性組名稱[,...]
顯示某個特定屬性組的屬性
名稱一欄中的顯示與qconf -sq 命令顯示的第一欄基本相同
縮寫名一欄包含可由管理員定義的第一欄中全名的縮寫
可否請求一欄表明是否可將相應的項用於qsub
關係欄定義關係運算以用於計算隊列是否滿足用戶請求
可否使用欄和缺省值欄對管理員極其有用,管理員可以用它們聲明?°可使用資源?±,。用戶可以像請求其它屬性一樣請求可使用資源
用戶訪問權限
獲得當前配置的ACL 列表
% qconf -sul
顯示一個或多個訪問列表中的項
% qconf -su ACL 名稱[,...]
注:ACL 包含用戶帳戶名和UNIX 組名, UNIX 組名用前綴“@”標識出來。這樣即可確定您的帳戶所屬的ACL。
從命令行運行簡單作業
執行任何Sun Grid Engine 命令之前,必須設置適當的可執行搜索路徑和其它環境條件。
% qsub /opt/grid-engineer/examples/jobs/simple.sh
qsub 命令應確認作業已成功提交:您的作業1 ("simple.sh") 已提交
% qstat 命令檢索作業的狀態信息
若qstat 命令沒有產生輸出,則系統實際上無已知作業。結果:simple.sh.o1 和simple.sh.e1。
提交批處理作業
Shell 腳本即批處理作業,主要指集成到一個文件中的一系列命令行指令。chmod命令可使腳本文件變成可執行文件。一旦調用腳本,即可啓動相應的命令解釋器(例如, csh、tcsh、sh 或ksh),解釋每條指令,其結果等同於執行腳本的用戶手動輸入這些指令。您可以在一個shell 腳本內調用任意命令、應用程序和其它shell 腳本。
資源需求定義
實際上要執行主機成功完成作業,大部分作業要求一些先決條件。這些先決條件包括足夠的可用內存、安裝所需軟件或某種操作系統體系結構。而且,羣集管理者也經常對羣集中的機器加上一些使用限制。例如,作業可使用的CPU 時間就常常受到限制。
資源需求示例
% qsub -l arch=solaris64,h_vmem=750M,permas=1 \
permas.sh
要求至少有750 MB 內存的solaris64 主機,且該主機要有可用的permas 許可證。
SGE如何分配資源
資源分配算法
1. 讀入並分析所有缺省的請求文件。
2. 處理腳本文件的內嵌選項。
3. 提交作業時讀取所有腳本的內嵌選項,而不考慮其在腳本文件中的位置。
4. 從命令行讀取和分析所有請求。
SGE如何分配資源
評估請求優先順序
1. 腳本/ 缺省請求文件從左到右
2. 腳本/ 缺省請求文件從上到下
3. 命令行從左到右
SGE如何分配資源
評估請求優先順序
1. 腳本/ 缺省請求文件從左到右
2. 腳本/ 缺省請求文件從上到下
3. 命令行從左到右
SGE如何分配資源
分配所請求的硬性資源。若請求無效,將拒絕提交。若提交時無法滿足一個或多個請求(例如被請求的隊列正忙),作業將假脫機,稍後重新調度。若所有硬性請求都能滿足,將分配這些資源,作業可以運行。
檢查所請求的軟性資源。即使部分或全部請求無法滿足,作業仍可運行。若多個隊列(已滿足硬性資源請求)提供了部分軟性資源列表(重疊或不同), Sun GridEngine 軟件將選擇滿足最多軟性請求的隊列。
提交作業
作業優先級
關於不同作業的調度過程順序,缺省情況下應用先進先出(fifo) 規則。所有暫掛(尚未調度)作業均插入到一個列表中,第一個提交的作業在列表的頭部,接下來是第二項提交的作業,等等。首先嚐試調度先提交的作業。若至少有一個可用的合適隊列,則作業將得到調度。Sun Grid Engine 軟件此後將試圖調度第二項作業,而不論第一項作業是否已分配。暫掛作業中的此優先順序可通過由羣集管理員分配給作業的優先級值覆蓋。實際的優先級值可通過使用qstat 命令顯示(優先級值包含在標題爲P 的暫掛作業顯示的最後一欄)
等份額調度
fifo 規則有時會導致問題,尤其是若用戶試圖同時提交一系列作業的情況下(例如,通過shell 腳本發出一個接一個的提交)。所有後來提交的和指定到同一組隊列的作業均不得不等待很長的時間。等份額調度將已擁有運行作業的用戶的作業排列在優先級列表的結尾,從而避免了這一問題。排序僅在同一優先級值範圍的作業中執行。若Sun Grid Engine 調度程序配置項user_sort 設置爲TRUE (請參考sched_conf 手冊頁以獲得細節),激活等份額調度。
隊列選擇
Sun Grid Engine 系統不分配請求非特定隊列的作業,如果它們不能即時啓動的話。此類作業將在sge_qmaster 中標記爲假脫機,該命令會不時嘗試重新調度它們。於是,作業將分配給下一個可用的合適隊列。與此相反,在請求中指明隊列名的作業將直接進入該隊列,無論它們是否能啓動者處於假脫機狀態。
若作業被調度,並且有多個空閒隊列滿足其資源請求,則在合適的隊列中,通常作業將被分配給負荷最輕的主機上的隊列。羣集管理者可將此依賴於負荷的方案更改爲固定的順序算法。
監視和控制SGE作業
原則上,有三種方法可監視提交的作業。
使用Sun Grid Engine圖形用戶界面QMON
在命令行使用qstat命令
通過電子郵件
用qstat監視作業
% qstat
提供已提交作業的概述
% qstat -f
另外包含了有關當前配置隊列的信息
qstat
job-ID prior name user state submit/start at queue function
231 0 hydra craig r 07/13/96 20:27:15 durin.q MASTER
232 0 compile penny r 07/13/96 20:30:40 durin.q MASTER
230 0 blackhole don r 07/13/96 20:26:10 dwain.q MASTER
233 0 mac elaine r 07/13/96 20:30:40 dwain.q MASTER
234 0 golf shannon r 07/13/96 20:31:44 dwain.q MASTER
236 5 word elaine qw 07/13/96 20:32:07
235 0 andrun penny qw 07/13/96 20:31:43
注:state 欄包含的單個字符代碼含義如下:r 表示正運行,
s 表示已暫停, q 表示已排隊, w 表示在等待
qstat -f
queuename qtype used/free load_avg arch states
dq BIP 0/1 99.99 sun4 au
durin.q BIP 2/2 0.36 sun4
231 0 hydra craig r 07/13/96 20:27:15 MASTER
232 0 compile penny r 07/13/96 20:30:40 MASTER
dwain.q BIP 3/3 0.36 sun4
230 0 blackhole don r 07/13/96 20:26:10 MASTER
233 0 mac elaine r 07/13/96 20:30:40 MASTER
234 0 golf shannon r 07/13/96 20:31:44 MASTER
fq BIP 0/3 0.36 sun4
####################################################
- PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS -
####################################################
236 5 word elaine qw 07/13/96 20:32:07
235 0 andrun penny qw 07/13/96 20:31:43
命令行控製作業
可以使用qdel 命令取消Sun Grid Engine 作業,無論它們是正在運行還是處於假脫機狀態。qmod 命令可以暫停和取消暫停(恢復)已經在運行的作業。
使用這兩個命令都需要知道作業標識號,此標識號可由qsub 命令得到。若忘了標識號,可通過qstat 檢索。
% qdel 作業ID
% qdel -f 作業ID 1, 作業ID 2
% qmod -s 作業ID
% qmod -us -f 作業ID 1, 作業ID 2
% qmod -s 作業ID. 任務ID 範圍
用qmod 控制隊列
% qmod -s 隊列名
% qmod -us -f 隊列名1 、隊列名2
% qmod -d 隊列名
% qmod -e 隊列名1 、隊列名2 、隊列名3
注意:注意–暫停/ 取消暫停和禁用/ 啓用隊列都需要擁有者、Sun Grid Engine 管理人員或操作人員權限
SGE的管理
主控主機¨C 主控主機是一切羣集活動的中心。它運行主控守護程序sge_qmaster。sge_qmaster 控制所有的Sun Grid Engine 組件(如隊列和作業),並維護關於組件狀態和用戶訪問權限之類的表單。主控主機通常運行SGE調度程序sge_schedd。除了在安裝過程中執行的配置外,主控主機不需要進一步配置。
執行主機¨C 執行主機是有權執行Sun Grid Engine 作業的節點。因此,該主機上有Sun Grid Engine 隊列,並運行Sun Grid Engine 執行守護程序sge_execd 。
管理主機¨C 可爲主控主機以外的其它主機賦予權限,以在Sun Grid Engine 中完成任何種類的管理活動。管理主機可用以下命令設置:qconf -ah 主機名
提交主機¨C 提交主機僅允許提交和控制批處理作業。尤其是登錄到提交主機的用戶可通過qsub 提交作業,可通過qstat 或運行Sun Grid Engine 的OSF/1Motif 圖形用戶界面QMON 控製作業狀態。提交主機可用以下命令設置:qconf -as 主機名
常見錯誤處理
sge_qmaster 日誌文件:
/opt/gridengineer//default/spool/qmast/message
qstat -j < 作業ID>
qalter -w v < 作業ID>
問題–作業的輸出文件顯示:Warning: no access to tty; thus no job control in this shell...。
可能原因1–一個或多個登錄文件包含了stty 命令。這些命令僅在存在終端時有用。
可能原因2 –腳本錯誤。
可能的解決方案1–在Sun Grid Engine 5.3 (企業版)批處理作業中,沒有與這些作業關聯的終端。您必須從登錄文件中刪除所有stty 命令,或者用一條在處理前檢查終端的if 語句把它們括起來。
可能的解決方案2–添加“#$ -S /bin/sh”
常見錯誤處理
問題–您可以從命令行運行作業腳本,但通過qsub 命令運行時失敗。
可能原因1–可能對作業設置了進程限制。要測試這一點,寫出執行limit 和limit -h 功能的測試腳本。分別在shell 提示下和通過qsub 命令交互執行兩個腳本,比較結果。
可能原因2–系統同步未完成
可能的解決方案1–確保將配置文件中用於在shell 中設置限制的所有命令刪除。
可能的解決方案2–rocks-user,cluster-fork 411get –all ,作同步。
常見問題處理
問題¨C 執行主機報告負荷爲99.99。
能原因¨C 有三種可能。
1. execd 守護程序未在主機上運行。
2. 未正確指定缺省域。
3. qmaster 主機所見的執行主機名與執行主機自身所見不同。
可能的解決方案¨C
1. 作爲root 用戶,在執行主機上通過運行$SGE_ROOT/default/common/rcsge腳本來啓動execd 守護程序。
2. 作爲Sun Grid Engine (企業版)管理員,運行qconf -mconf 命令並將default_domain 變量更改爲none。
3. 若您正使用DNS 解析運算羣集的主機名,則請配置/etc/hosts 和NIS 以返回完全合格的域名(FQDN) 作爲主要主機名。
常見錯誤處理
報告作業或隊列處於錯誤狀態E
處理方法:$SGE_ROOT/default/spool/qmaster/messages
再就具體問題進行相關處理,一般的問題有:
計算節點未掛載數據盤,出現文件找不到的錯誤。