Openlava是什么:
Openlava脫胎於IBM的lsf(兩者命令和用法基本相同),是一個免費、開源的工作負載調度程序,支持HPC(高性能計算),是IC應用環境下主流的任務分發和調度工具。
Openlava術語:
使用openlava我們需要了解如下基本概念:
- Job
任務,用戶工作的一個抽象,對應着一條任務指令。
- Host
機器,任務分發和任務執行的機器。
- Queue
隊列,多個Host(機器)組成一個隊列,用於為指定類型的任務(Job)提供一組資源池。
其中Host分為如下三類:
- Execution Host
計算節點,用於接收並執行任務。
- Submission Host
任務分發節點,一般和Execution Host是分開的,僅用於分發任務,不接收和執行任務。
- Master Host
主控節點,一般和Execution Host及Submission Host都是分開的,僅用於收集負載和狀態信息,管理任務。
Openlava命令:
常用基本命令
基本命令 |
用法 |
bsub |
提交任務到openlava |
bjobs |
查看任務狀態和基本信息 |
bkill |
殺死未完成的任務 |
bqueues |
查看隊列狀態和基本信息 |
bhosts |
查看機器狀態及基本信息 |
lshosts |
查看機器資源狀態 |
lsload |
查看機器負載狀態 |
- bsub
%bsub -q [queueName] : 指定隊列,如果不指定,則任務會提交到默認隊列(一般是normal)。
%bsub -m [hostName] : 指定機器,任務將會被提交到指定的機器上運行(需要確保機器在當前隊列中)。
%bsub -P [projectName] : 指定項目,一般用於標識和統計。
%bsub -Is : 投遞任務的時候用shell模式啟動一個終端,並將任務投遞到上面以交互式運行。這種模式一般用於啟動帶圖形界面的工具,啟動需要交互式的工具,將標准輸出打印到當前窗口,或者為了阻塞式運行任務(任務運行期間bsub不退出)。
%bsub -o [fileName] : 保存任務的標准輸出到指定的文件,這個模式和”-Is”相沖突,但是可以和”-e”疊加使用。
%bsub -e [fileName] : 保存任務的標准錯誤到指定的文件,這個模式和”-Is”相沖突,但是可以和”-o”疊加使用。
%bsub -n [number] : 指定為當前任務保留多少cpu處理器。
%bsub -R [resourceString] : 指定為當前任務的資源需求。
示例:
* 當前任務為virtuoso(圖形界面), 任務投遞到隊列GUI,所屬項目為ABC,預計需要4個cpu核(在同一台機器)和10G內存,則任務投遞方式為:
bsub -q GUI -P ABC -Is -n 4 -R “span[hosts=1] rusage[mem=10240]” “virtuoso”
* 當前任務為liberate,任務投遞到默認隊列,所屬項目為ABC,需要保存標准輸出和標准錯誤,預計1個cpu核足夠, 要求投遞的機器剩余內存大於100G,剩余swap大於100G,剩余tmp空間大於30G,則任務投遞方式為:
bsub -P ABC -o lsf.log -e lsf.log -R “select[mem>=102400 && swap>=102400 && tmp>=30720]” “liberate liberate.tcl”
- bjobs
%bjobs : 查看當前用戶所有的未完成job。
%bjobs -a : 查看當前用戶在一段時間內所有的job,包括已完成和未完成的job。
%bjobs -UF [jobId] : 查看指定job的詳細信息。
- bkill
%bkill 0 : 殺死當前用戶所有的job。
%bkill -r [jobId] : 強制殺死指定的job。
- bqueues
%bqueues : 查看所有隊列的job狀態。
- bhosts
%bhosts : 查看所有機器的job狀態。
- lshosts
%lshosts : 查看所有機器的資源狀況。
- lsload
%lsload : 查看所有機器的負載狀況。
擴展知識
1. 從隊列詳細信息我們能夠到什么
MAX : 隊列的理論最大slots可用數目,此隊列最多可以占用60 slots。
JL/U : 隊列個人slots限制,每個人在這個隊列中最多可以占用5 slots。
NJOBS/PEND/RUN/SSUSP/USUSP/RSV : 當前隊列上的作業情況。
RUNLIMIT : 隊列的運行時間限制,10080 min即7天,隊列上的任務運行時間達到7天會被kill掉。
USERS : 哪些用戶或者用戶組可以使用這個隊列。
HOSTS : 哪些機器或者機器組在這個隊列中。
2. 從任務詳細信息中我們可以得到什么
對於RUN/DONE/EXIT狀態的job,我們可以從job的詳細信息中獲取:
任務的分發參數,包括Project, Queue, Command, Processors Requested, Requested Resources等。
機器信息,包括投遞機器(Submitted from)和執行機器(Dispatched to)。
時間信息,包括投遞時間和執行時間。
用戶信息(User)。
目錄信息(CWD)。
有些job還可以看到資源用量信息,包括CPU time, MEM, SWAP等。
對於PEND狀態的job,我們則可以額外獲取“PENDING REASONS”這一重要信息。
Openlava的用戶經常有這種困惑,為什么我的job投遞出去,但是總是PEND的狀態跑不起來?一般而言常見的PEND原因無非以下幾種:
- Limits on the number of job slots that are configured for a queue, a host, or a user
運行job的數目達到了queue設置的上限。
- AvAIlability of the specified resources
沒有機器滿足指定的資源條件。
- Job dependency and pre-execution conditions
Job的依賴關系不被滿足。
- Relative priority to other users and jobs
優先級低。
- Start time that is specified by the user when the job is submitted
用戶指定了job開始時間(開始時間之前都是PEND的狀態)
- Load conditions on qualified hosts
不滿足機器上的載入條件。
- Dispatch windows during which the queue can dispatch and qualified hosts can accept jobs
queue設置了調度時間窗口,調度窗口之內job都是PEND的狀態。
- Run windows during which jobs from the queue can run
queue設置了運行時間窗口,時間窗口之外job都是PEND的狀態。
References:
https://www.huaweicloud.com/articles/557544cc47d713b2acfb5cfb0f04c87f.html