Torque(PBS)와 Maui 스케줄러 환경 구축하기
### Torque(PBS)와 Maui 스케줄러 환경 구축하기
작성일 : 2016년 3월 12일
작성자 : 서진우 (alang@clunix.com)
1. Torque 패키지 제작
아래 사이트에서 설치하고자 하는 Torque 를 다운 받는다.
torque-6.0.1.tar.gz
torque-5.1.2.tar.gz
해당 소스를 통해 rpm 을 build 한다.
기본적으로 tar.gz source 파일로 rpm 을 build 하는 방법은 rpmbuild -ta 옵션을 사용하면
된다.
# rpmbuild -ta torque-6.0.1.tar.gz
rpm 생성 시 기본 prefix 가 /usr 로 지정이 되는데, 원하는 곳에 설치하기 위해 spec 파일을
수정하도록 한다.
아래는 제가 선호하는 형태로 rpm 을 만들수 있게 spec 파일을 수정한 것이다.
– 5.x 대 rpm 생성
# vi torque-clx-5.spec
.
.
### Autoconf macro expansion 항목 하단에 _unitdir, _prefix 변수 추가
.
%define _unitdir /etc/rc.d/init.d
%define _prefix /engrid/enpbs
### Macro variables 항목의 torque_home 부분의 %{_var} 을 %{_prefix} 로 변경
%{!?torque_home:%global torque_home %{_var}/spool/%{name}}
을
%{!?torque_home:%global torque_home %{_prefix}/spool/%{name}}
으로 변경
### Handle logic for snapshots 항목의 release 에 원하는 버전 추가 (여기서는 clx 추가)
%define release 1.clx%{?dist}
/root/rpmbuild/SOURCES 경로에 torque-5.1.2.tar.gz 파일을 복사
/root/rpmbuild/SPEC 경로에 torque-clx-5.spec 복사
# cd /root/rpmbuild/SPEC
# rpmbuild -bb torque-clx-5.spec
/root/rpmbuild/RPMS/x86_64 에 아래와 같은 rpm 패키지가 생성된다.
torque-5.1.2-1.clx.el6.x86_64.rpm
torque-client-5.1.2-1.clx.el6.x86_64.rpm
torque-debuginfo-5.1.2-1.clx.el6.x86_64.rpm
torque-devel-5.1.2-1.clx.el6.x86_64.rpm
torque-scheduler-5.1.2-1.clx.el6.x86_64.rpm
torque-server-5.1.2-1.clx.el6.x86_64.rpm
– 6.x 대 rpm 생성
# vi torque-clx-6.spec
각 항목의 값을 아래와 수정
.
%define _prefix /engrid/enpbs
.
%{!?torque_home:%global torque_home %{_prefix}/spool/%{name}}
.
%define release 1.clx%{?dist}
# rpmbuild -bb torque-clx-6.spec
/root/rpmbuild/RPMS/x86_64 에 아래와 같은 rpm 패키지가 생성된다.
torque-6.0.1-1.clx.el6.x86_64.rpm
torque-client-6.0.1-1.clx.el6.x86_64.rpm
torque-debuginfo-6.0.1-1.clx.el6.x86_64.rpm
torque-devel-6.0.1-1.clx.el6.x86_64.rpm
torque-scheduler-6.0.1-1.clx.el6.x86_64.rpm
torque-server-6.0.1-1.clx.el6.x86_64.rpm
– xpbs, xpbsmon 기능 반영
xgui 기반 스케줄러 모니터링 기능으로 추가하기 위해서는 spec 파일 상단의
%bcond_with gui
행을 삭제을 추가한다.
%bcond_without gui
rpmbuild 를 하기 전에 tcl-devel tk-devel tclx 패키지를 사전에 설치해 두어야 한다.
2. Torque 설치
Torque 는 server 와 client 로 역할이 나누어진다. 일단 server, client 에 해당하는
모든 서버에 아래 기본 rpm 을 설치해 둔다.
# yum install libxml2-devel openssl-devel gcc gcc-c++ boost-devel
– Server 설치 및 설정
# rpm -ivh torque-5.1.2-1.clx.el6.x86_64.rpm \
torque-devel-5.1.2-1.clx.el6.x86_64.rpm \
torque-client-5.1.2-1.clx.el6.x86_64.rpm \
torque-scheduler-5.1.2-1.clx.el6.x86_64.rpm \
torque-server-5.1.2-1.clx.el6.x86_64.rpm
# vi /etc/profile.d/enpbs.sh
——————————————————–
#!/bin/sh
export PBS_HOME=/engrid/enpbs
export PBS_SERVER_HOME=/engrid/enpbs/spool/torque
export PATH=/engrid/enpbs/bin:/engrid/enpbs/sbin:/engrid/enmaui/bin:$PATH
——————————————————–
# vi /engrid/enpbs/spool/torque/server_name
<SERVER_HOST_NAME>
# vi /engrid/enpbs/spool/torque/default_server
<SERVER_HOST_NAME>
# vi /engrid/enpbs/spool/torque/server_priv/nodes
//<SERVER_HOST_NAME> np=<core_num>
TEST01 np=4
TEST02 np=4
TEST03 np=4
Torque Server 가 Client 역할도 수행해야할 경우 ..
# vi /engrid/enpbs/spool/torque/mom_priv/config
//$pbsserver <<SERVER_HOST_NAME>
$pbsserver TEST01
$logevent 255
# /etc/rc.d/init.d/pbs_server restart
# /etc/rc.d/init.d/pbs_mom restart
# /etc/rc.d/init.d/trqauthd restart
실제 스케줄링 역할은 pbs 자체 스케줄러 데몬을 이용하지 않고 maui 를 이용할 계획이기
때문에 pbs_sched 은 반드시 중지 시켜둔다.
# /etc/rc.d/init.d/pbs_sched stop
# chkconfig –del pbs_sched
– Client 설치 및 설정
# rpm -ivh torque-5.1.2-1.clx.el6.x86_64.rpm \
torque-devel-5.1.2-1.clx.el6.x86_64.rpm \
torque-client-5.1.2-1.clx.el6.x86_64.rpm
설정은 서버와 동일하다. 서버의 설정파일을 복사해 주어도 된다.
# vi /etc/profile.d/enpbs.sh
——————————————————–
#!/bin/sh
export PBS_HOME=/engrid/enpbs
export PBS_SERVER_HOME=/engrid/enpbs/spool/torque
export PATH=/engrid/enpbs/bin:/engrid/enpbs/sbin:/engrid/enmaui/bin:$PATH
——————————————————–
# vi /engrid/enpbs/spool/torque/server_name
<SERVER_HOST_NAME>
# vi /engrid/enpbs/spool/torque/default_server
<SERVER_HOST_NAME>
# vi /engrid/enpbs/spool/torque/server_priv/nodes
//<SERVER_HOST_NAME> np=<core_num>
TEST01 np=4
TEST02 np=4
TEST03 np=4
Torque Server 가 Client 역할도 수행해야할 경우 ..
# vi /engrid/enpbs/spool/torque/mom_priv/config
//$pbsserver <<SERVER_HOST_NAME>
$pbsserver TEST01
$logevent 255
# /etc/rc.d/init.d/pbs_mom restart
# /etc/rc.d/init.d/trqauthd restart
– Torque 설치 경로
PBS_HOME=/engrid/enpbs
PBS_SERVER_HOME=/engrid/enpbs/spool/torque
3. Maui 패키지 제작 및 설치
maui 를 설치하기 위해서는 사전에 torque 가 설치가 되어 있어야 한다. rpm 패키지 작업을
하기 위해서도 torque 를 먼저 설치하도록 한다.
우선 maui 를 다운 받는다.
해당사이트에서 우선 회원가입을 한 후
에서 다운로드 가능
혹은..maui-3.3.1.tar.gz 을 직접 받을려고 하면..
# wget http://www.adaptivecomputing.com/download/mauischeduler/maui-3.3.1.tar.gz
# tar xzvf maui-3.3.1.tar.gz
# ./configure –prefix=/engrid/enmaui –with-pbs=/engrid/enpbs \
–with-spooldir=/engrid/enmaui/spool
# make
# sed -i’.bkp’ ‘s/\$(INST_DIR)/\$(DESTDIR)\/\$(INST_DIR)/g’ src/*/Makefile
# sed -i” ‘s/\$(MSCHED_HOME)/\$(DESTDIR)\/\$(MSCHED_HOME)/g’ src/*/Makefile
# DESTDIR=/root/rpmbuild/BUILDROOT/maui-clx-3.3.1-1.x86_64 make install
# mkdir /root/rpmbuild/BUILDROOT/maui-clx-3.3.1-1.x86_64/etc/profile.d -p
# mkdir /root/rpmbuild/BUILDROOT/maui-clx-3.3.1-1.x86_64/etc/init.d -p
# cp etc/maui.d /root/rpmbuild/BUILDROOT/maui-clx-3.3.1-1.x86_64/etc/init.d/
# cp etc/maui.{csh,sh} /root/rpmbuild/BUILDROOT/maui-clx-3.3.1-1.x86_64/etc/profile.d/
# vi /root/rpmbuild/SPECS/maui-clx.spec
—————————————————————–
# RPM Spec file for EnPBS package
Summary: Maui Daemon for Clunix gridcenter(TM)
Name: maui-clx
Version: 3.3.1
Release: 1
License: commercial
URL: http://www.clunix.com
Distribution: None
Vendor: Clunix, Inc.
Group: Applications
Packager: Jinwoo Seo <alang@clunix.com>
%description
Maui for Clunix gridcenter(TM)
%prep
%files
/engrid/enmaui
/etc/init.d/maui.d
/etc/profile.d/maui.sh
/etc/profile.d/maui.csh
%clean
%post
chkconfig –add maui.d
chkconfig –level 345 maui.d on
%changelog
* Tue Jun 12 2016 Jinwoo Seo <alang@clunix.com>
– null
——————————————————————
# rpmbuild -bb maui-clx.spec
# cd /root/rpmbuild/RPMS/x86_64
# rpm -ivh maui-clx-3.3.1-1.x86_64.rpm
init scripts 에 MAUI 설치 경로가 DEFAULT로 되어 있는데 실제 설치된 위치로
변경하도록 한다.
# vi /etc/rc.d/init.d/maui.d
MAUI_PREFIX=/engrid/enmaui
# vi /engrid/enmaui/spool/maui.cfg
SERVERHOST <SERVER_HOST>
# /etc/rc.d/init.d/maui.d restart
# chkconfig –add maui.d
Maui 를 설치하고 서비스 데몬을 시작하면 자동으로 Torque 의 스케줄러 역할을
수행한다.
다른 계산 서버에서도 모니터링에 사용하는 명령을 이용하기 위해 /engrid/enmaui
디렉토리를 동기화 시킨다.
# pua /engrid/enmaui
– 설치 경로
MAUI_HOME=/engrid/enmaui
MAUI_SERVER_HOME=/engrid/enmaui/spool
4. Torque 서버 정책 및 큐 생성
Torque 의 정책 설정은 qmgr 명령을 이용한다.
qmgr 명령 형식은 다음과 같다.
[ command ] [ object ] [ obj_name ] [ attribute ]
[ command ] 에는 다음과 같은 명령이 있다.
active(a) : 객체를 활성화 한다.
create(c) : 객체를 생성한다.
delete(d) : 객체를 삭제한다.
set(s) : 객체에 속성을 지정한다.
unset(u) : 객체의 속성을 제거 한다.
print : 객체의 설정 값을 출력한다.
list : 객체의 속성 값을 출력한다.
[ object ] 에는 다음과 같은 객체가 있다.
server
queue
node
[ name ] 은 실제 객체에 대한 이름이다. node 의 경우는 node_name 이 될것이고
queue 의 경우에는 앞서 큐잉 설정 파일에 create queue 로 생성한 queue 의 이름
이 될것이다.
[ attribute ] 는 실제 해당 객체의 세부 속성이다.
– 기본 생성
source /etc/profile.d/enpbs.sh
qmgr -c “create queue gridcenter queue_type=execution”
qmgr -c “set queue gridcenter started=true” // 작업이 제출 되었을때 바로 실행
qmgr -c “set queue gridcenter enabled=true” // 스케줄링 서비스 시작
qmgr -c “set server scheduling=true”
qmgr -c “set server default_queue=gridcenter”
– 추가 설정
// 관리자 메일 설정
qmgr -c “set server mail_from = admin@clunix.com”
// 작업 실행 시 완료까지 대기 시간, 무한대는 0
qmgr -c “set server keep_completed = 0”
// root 로 qsub 실행하기
qmgr -c “set server acl_roots+=root”
// root 이외의 사용자에게 qmgr 권한 주기
qmgr -c “set server managers=clunix@*”
// qsub 시 기본 nodes 수 지정
qmgr -c “set queue gridcenter resources_default.nodes=4”
// 작업 실행 시간 제한
qmgr -c “set queue gridcenter resources_default.walltime=3600”
// qsub 시 기본 ncpus 지정
qmgr -c “set queue gridcenter resources_default.ncpus = 1”
qmgr -c “set queue gridcenter resources_default.nodect = 1”
// 대개 resources 제한 시에는 max 값만 지정해 주는 것이 효율적
qmgr -c “set queue gridcenter max_running = 4” // 작업수
qmgr -c “set queue gridcenter resources_max.ncpus = 4” // OpenMP,SMP 시 Multi Threads 수
qmgr -c “set queue gridcenter resources_max.nodes = 2” // MPI 시 Multi node 수
qmgr -c “set server resources_max.walltime=1:20:00”
// SMP 노드에서 한노드에 하나의 작업만 실행시키기
qmgr -c “set server node_pack = {true,false }”
// qsub 를 실행할 수 있는 노드 지정. 모든 클러스터 노드에서 submit
// 가능하도록 하기 위해서는 *
qmgr -c “set server acl_hosts = TEST01”
추가 설정은 굳이 하지 않아도 된다. 필요한 경우 상황에 맞게 설정하도록 한다.
– 동작 확인
일반 계정으로 접속
$ echo “sleep 50; echo ‘pbs testing..'” | qsub
$ qstat
Job ID Name User Time Use S Queue
————————- —————- ————— ——– – —–
0.PBSNODE01 STDIN alang 00:00:00 R gridcenter
1.PBSNODE01 STDIN alang 00:00:00 R gridcenter
2.PBSNODE01 STDIN alang 00:00:00 R gridcenter
3.PBSNODE01 STDIN alang 00:00:00 R gridcenter
4.PBSNODE01 STDIN alang 00:00:00 R gridcenter
$ pbsnodes -a
$ showq -r
$ cat STDIN.o0
pbs testing..
– 설정 백업
qmgr -c ‘p s’ > pbs_config.bak
– 설정 복구
qmgr < pbs_config.bak
5. PBS 작업 제출 스크립트
아래 정도 알고 있으면 일반적인 사용에 무리가 없을듯 ..
– 스크립트 예제
#PBS -N PBS_JOB_TEST
#PBS -l nodes=4:ppn=4
#PBS -l naccesspolicy=SINGLEUSER -n
#PBS -l naccesspolicy=SINGLEJOB -n
#PBS -l naccesspolicy=UNIQUEUSER
#PBS -l walltime=0:10:00
#PBS -S /bin/sh
#PBS -q gridcenter
#PBS -M alang@clunix.com
# Send mail at begin, end, abort, or never (b, e, a, n). Default is “a”.
#PBS -m abe
#PBS -q gridcenter
#PBS -j oe
#PBS -o test.out
#PBS -d /home/alang/PBS_JOB_TEST
#PBS -A account
#PBs -p 1000
#PBS -V
cd $PBS_O_WORKDIR
echo $PBS_NODEFILE
pwd
sleep 30
mpirun -np $PBS_NP -machinefile $PBS_NODEFILE <exe_binary>
– HPL 실행 작업 스크립트 예제
#PBS -N HPL_JOB_TEST1
#PBS -l nodes=3:ppn=2
#PBS -S /bin/sh
#PBS -q gridcenter
#PBS -m abe
#PBS -q gridcenter
#PBS -j oe
#PBS -o HPL_JOB_TEST1.out
#PBS -d /home/alang/PBS_JOB_TEST1
#PBS -V
#PBS -v IMPI_HOME=/APP/enhpc/compiler/intel/v15/impi/5.0.3.048
cd $PBS_O_WORKDIR
${IMPI_HOME}/bin64/mpirun -np $PBS_NP -machinefile $PBS_NODEFILE ./xhpl
– PBS 스크립트 주요 변수
“HOME”,
“LOGNAME”,
“PBS_JOBNAME”,
“PBS_JOBID”,
“PBS_QUEUE”,
“SHELL”,
“USER”,
“PBS_JOBCOOKIE”,
“PBS_NODENUM”,
“PBS_TASKNUM”,
“PBS_MOMPORT”,
“PBS_NODEFILE”,
“PBS_NNODES”, /* number of nodes specified by size */
“TMPDIR”,
“PBS_VERSION”,
“PBS_NUM_NODES”, /* number of nodes specified by nodes string */
“PBS_NUM_PPN”, /* ppn value specified by nodes string */
“PBS_GPUFILE”, /* file containing which GPUs to access */
“PBS_NP”, /* number of processors requested */
“PBS_WALLTIME”, /* requested or default walltime */
$PBS_O_HOME value of the HOME variable in the environment in which qsub was executed
$PBS_O_LANG value of the LANG variable in the environment in which qsub was executed
$PBS_O_LOGNAME value of the LOGNAME variable in the environment in which qsub was executed
$PBS_O_PATH value of the PATH variable in the environment in which qsub was executed
$PBS_O_MAIL value of the MAIL variable in the environment in which qsub was executed
$PBS_O_SHELL value of the SHELL variable in the environment in which qsub was executed
$PBS_O_TZ value of the TZ variable in the environment in which qsub was executed
$PBS_O_HOST the name of the host upon which the qsub command is running
$PBS_O_QUEUE the name of the original queue to which the job was submitted
$PBS_O_WORKDIR the absolute path of the current working directory of the qsub command
vi pbs_env_value.sh
#PBS -N PBS_ENVVAR
#PBS -S /bin/sh
#PBS -j oe
#PBS -o PBS_ENVVAR.out
#PBS -V
echo “HOME : $HOME”
echo “LOGNAME : $LOGNAME”
echo “PBS_JOBNAME : $PBS_JOBNAME”
echo “PBS_JOBID : $PBS_JOBID”
echo “PBS_QUEUE : $PBS_QUEUE”
echo “SHELL : $SHELL”
echo “USER : $USER”
echo “PBS_JOBCOOKIE : $PBS_JOBCOOKIE”
echo “PBS_NODENUM : $PBS_NODENUM”
echo “PBS_TASKNUM : $PBS_TASKNUM”
echo “PBS_MOMPORT : $PBS_MOMPORT”
echo “PBS_NODEFILE : $PBS_NODEFILE”
echo “PBS_NNODES : $PBS_NNODES”
echo “TMPDIR : $TMPDIR”
echo “PBS_VERSION : $PBS_VERSION”
echo “PBS_NUM_NODES : $PBS_NUM_NODES”
echo “PBS_NUM_PPN : $PBS_NUM_PPN”
echo “PBS_GPUFILE : $PBS_GPUFILE”
echo “PBS_NP : $PBS_NP “
echo “PBS_WALLTIME : $PBS_WALLTIME”
echo “PBS_O_HOME : $PBS_O_HOME “
echo “PBS_O_LANG : $PBS_O_LANG “
echo “PBS_O_LOGNAME : $PBS_O_LOGNAME”
echo “PBS_O_PATH : $PBS_O_PATH “
echo “PBS_O_MAIL : $PBS_O_MAIL “
echo “PBS_O_SHELL : $PBS_O_SHELL”
echo “PBS_O_TZ : $PBS_O_TZ “
echo “PBS_O_HOST : $PBS_O_HOST”
echo “PBS_O_QUEUE : $PBS_O_QUEUE “
echo “PBS_O_WORKDIR : $PBS_O_WORKDIR”
qsub pbs_env_value.sh
cat PBS_ENVVAR.out
HOME : /root
LOGNAME : root
PBS_JOBNAME : PBS_ENVVAR
PBS_JOBID : 688.PBSN000
PBS_QUEUE : gridcenter
SHELL : /bin/sh
USER : root
PBS_JOBCOOKIE : 0000000023DCBB0E000000006C3089EE
PBS_NODENUM : 0
PBS_TASKNUM : 1
PBS_MOMPORT : 15003
PBS_NODEFILE : /var/spool/pbs/aux/688.PBSN000
PBS_NNODES :
TMPDIR : /var/tmp/pbs.688.PBSN000
PBS_VERSION :
PBS_NUM_NODES :
PBS_NUM_PPN :
PBS_GPUFILE :
PBS_NP :
PBS_WALLTIME :
PBS_O_HOME : /root
PBS_O_LANG : ko_KR.utf8
PBS_O_LOGNAME : root
PBS_O_PATH : /engrid/enpbs/bin:/engrid/enpbs/sbin:/usr/lib64/qt-3.3/bin:/root/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/engrid/enmcs/bin
PBS_O_MAIL : /var/spool/mail/root
PBS_O_SHELL : /bin/bash
PBS_O_TZ :
PBS_O_HOST : pbsn003
PBS_O_QUEUE : gridcenter
PBS_O_WORKDIR : /root
6. 스케줄러 및 작업 모니터링
$ qstat
Job ID Name User Time Use S Queue
————————- —————- ————— ——– – —–
524.TEST01 HPL_JOB_TEST1 alang 0 Q gridcenter
525.TEST01 HPL_JOB_TEST1 alang 0 Q gridcenter
526.TEST01 HPL_JOB_TEST1 alang 0 Q gridcenter
527.TEST01 HPL_JOB_TEST1 alang 0 Q gridcenter
528.TEST01 HPL_JOB_TEST1 alang 0 Q gridcenter
$ qstat -u alang
TEST01:
Req’d Req’d Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
———————– ———– ——– —————- —— —– —— ——— ——— – ———
524.TEST01 alang gridcent HPL_JOB_TEST1 — — 12 — 00:10:00 Q —
525.TEST01 alang gridcent HPL_JOB_TEST1 — — 12 — 00:10:00 Q —
526.TEST01 alang gridcent HPL_JOB_TEST1 — — 12 — 00:10:00 Q —
527.TEST01 alang gridcent HPL_JOB_TEST1 — — 12 — 00:10:00 Q —
528.TEST01 alang gridcent HPL_JOB_TEST1 — — 12 — 00:10:00 Q —
529.TEST01 alang gridcent HPL_JOB_TEST1 — — 12 — 00:10:00 Q —
$ qstat -f 524
Job Id: 524.TEST01
Job_Name = HPL_JOB_TEST1
Job_Owner = alang@TEST01
job_state = Q
queue = gridcenter
server = TEST01
Checkpoint = u
ctime = Tue Mar 15 18:07:24 2016
Error_Path = TEST01:/home/alang/intel64/HPL_JOB_TEST1.out
.
.
.
euser = alang
egroup = alang
queue_type = E
etime = Tue Mar 15 18:07:24 2016
submit_args = mpi_test.sh
fault_tolerant = False
job_radix = 0
submit_host = TEST01
$ showq
ACTIVE JOBS——————–
JOBNAME USERNAME STATE PROC REMAINING STARTTIME
574 alang Running 6 99:23:59:38 Tue Mar 15 18:14:10
575 alang Running 6 99:23:59:56 Tue Mar 15 18:14:28
2 Active Jobs 12 of 12 Processors Active (100.00%)
3 of 3 Nodes Active (100.00%)
IDLE JOBS———————-
JOBNAME USERNAME STATE PROC WCLIMIT QUEUETIME
576 alang Idle 6 99:23:59:59 Tue Mar 15 18:14:28
577 alang Idle 6 99:23:59:59 Tue Mar 15 18:14:28
578 alang Idle 6 99:23:59:59 Tue Mar 15 18:14:29
579 alang Idle 6 99:23:59:59 Tue Mar 15 18:14:29
580 alang Idle 6 99:23:59:59 Tue Mar 15 18:14:29
581 alang Idle 6 99:23:59:59 Tue Mar 15 18:14:30
582 alang Idle 6 00:00:00 Tue Mar 15 18:14:30
583 alang Idle 6 00:00:00 Tue Mar 15 18:14:30
8 Idle Jobs
BLOCKED JOBS—————-
JOBNAME USERNAME STATE PROC WCLIMIT QUEUETIME
Total Jobs: 10 Active Jobs: 2 Idle Jobs: 8 Blocked Jobs: 0
# showq -r
JobName S Par Effic XFactor Q User Group MHost Procs Remaining StartTime
78 R DEF 97.75 1.0 DE alang gridcenter PBSNODE02 1 99:23:59:40 Fri Mar 18 16:35:57
79 R DEF 97.75 1.0 DE alang gridcenter PBSNODE02 1 99:23:59:40 Fri Mar 18 16:35:57
80 R DEF 97.75 1.0 DE alang gridcenter PBSNODE01 1 99:23:59:40 Fri Mar 18 16:35:57
81 R DEF 92.94 1.0 DE alang gridcenter PBSNODE01 1 99:23:59:40 Fri Mar 18 16:35:58
82 R DEF 92.94 1.0 DE alang gridcenter PBSNODE01 1 99:23:59:40 Fri Mar 18 16:35:58
83 R DEF 94.93 1.0 DE alang gridcenter PBSNODE01 1 99:23:59:40 Fri Mar 18 16:35:59
84 R DEF —— 1.0 DE alang gridcenter PBSNODE03 1 99:23:59:59 Fri Mar 18 16:36:19
85 R DEF —— 1.0 DE alang gridcenter PBSNODE03 1 99:23:59:59 Fri Mar 18 16:36:19
86 R DEF —— 1.0 DE alang gridcenter PBSNODE03 1 99:23:59:59 Fri Mar 18 16:36:19
87 R DEF —— 1.0 DE alang gridcenter PBSNODE03 1 99:23:59:59 Fri Mar 18 16:36:19
88 R DEF —— 1.0 DE alang gridcenter PBSNODE02 1 99:23:59:59 Fri Mar 18 16:36:19
89 R DEF —— 1.0 DE alang gridcenter PBSNODE02 1 99:23:59:59 Fri Mar 18 16:36:19
# showstate
cluster state summary for Tue Mar 15 18:15:52
JobName S User Group Procs Remaining StartTime
—————— – ——— ——– —– ———– ——————-
(A) 577 R alang alang 6 99:23:59:26 Tue Mar 15 18:15:19
(B) 578 R alang alang 6 99:23:59:59 Tue Mar 15 18:15:52
usage summary: 2 active jobs 6 active nodes
[0]
[1]
Frame 01: [B]
Key: [?]:Unknown [*]:Down w/Job [#]:Down [ ]:Idle [@] Busy w/No Job [!] Drained
# showstats
maui active for 00:19:50 stats initialized on Thu Jan 1 09:00:00
Eligible/Idle Jobs: 3/7 (42.857%)
Active Jobs: 2
Successful/Completed Jobs: 477/477 (100.000%)
Avg/Max QTime (Hours): 0.01/0.15
Avg/Max XFactor: 0.00/1.00
Dedicated/Total ProcHours: 12.75/301.54 (4.227%)
Current Active/Total Procs: 12/12 (100.000%)
Avg WallClock Accuracy: 1.857%
Avg Job Proc Efficiency: 180.719%
Est/Avg Backlog (Hours): -1581.07/0.00
# checknode TEST01
checking node TEST01
State: Running (in current state for 00:00:00)
Expected State: Busy SyncDeadline: Tue Mar 15 18:27:01
Configured Resources: PROCS: 4 MEM: 3729M SWAP: 27G DISK: 1M
Utilized Resources: PROCS: 2 SWAP: 1603M
Dedicated Resources: PROCS: 4
Opsys: linux Arch: [NONE]
Speed: 1.00 Load: 5.260
Network: [DEFAULT]
Features: [NONE]
Attributes: [Batch]
Classes: [gridcenter 0:4]
Total Time: 1:01:07:21 Up: 1:01:06:21 (99.93%) Active: 00:51:59 (3.45%)
Reservations:
Job ‘580’(x2) -00:00:18 -> 99:23:59:41 (99:23:59:59)
Job ‘581’(x2) 00:00:00 -> 99:23:59:59 (99:23:59:59)
Job ‘582’(x2) 99:23:59:41 -> INFINITY (99:23:59:59)
JobList: 580,581
# checkjob 581
checking job 581
State: Running
Creds: user:alang group:alang class:gridcenter qos:DEFAULT
WallTime: 00:00:33 of 99:23:59:59
SubmitTime: Tue Mar 15 18:14:30
(Time Queued Total: 00:02:31 Eligible: 00:02:31)
StartTime: Tue Mar 15 18:17:01
Total Tasks: 6
Req[0] TaskCount: 6 Partition: DEFAULT
Network: [NONE] Memory >= 0 Disk >= 0 Swap >= 0
Opsys: [NONE] Arch: [NONE] Features: [NONE]
Allocated Nodes:
[TEST03:2][TEST02:2][TEST01:2]
IWD: [NONE] Executable: [NONE]
Bypass: 0 StartCount: 1
PartitionMask: [ALL]
Flags: RESTARTABLE
Reservation ‘581’ (-00:00:33 -> 99:23:59:26 Duration: 99:23:59:59)
PE: 6.00 StartPriority: 2
# pbsnodes -a
TEST01
state = job-exclusive
power_state = Running
np = 4
ntype = cluster
jobs = 0-1/582.TEST01,2-3/583.TEST01
status = rectime=1458033470,macaddr=ba:26:b2:17:8e:f2,cpuclock=Fixed,varattr=,jobs=581.TEST01 582.TEST01,state=free,netload=136984893427,gres=,loadave=3.78,ncpus=4,physmem=3818716kb,availmem=27568836kb,totmem=29212884kb,idletime=7669,nusers=1,nsessions=2,sessions=15119 15387,uname=Linux TEST01 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64,opsys=linux
mom_service_port = 15002
mom_manager_port = 15003
TEST02
state = job-exclusive
power_state = Running
np = 4
ntype = cluster
jobs = 0-1/582.TEST01,2-3/583.TEST01
status = rectime=1458033471,macaddr=8a:fb:bc:ca:6c:40,cpuclock=Fixed,varattr=,jobs=581.TEST01 582.TEST01,state=free,netload=189325955996,gres=,loadave=3.87,ncpus=4,physmem=3818716kb,availmem=27667040kb,totmem=29212884kb,idletime=87291,nusers=1,nsessions=2,sessions=30493 30640,uname=Linux TEST02 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64,opsys=linux
mom_service_port = 15002
mom_manager_port = 15003
TEST03
state = job-exclusive
power_state = Running
np = 4
ntype = cluster
jobs = 0-1/582.TEST01,2-3/583.TEST01
status = rectime=1458033472,macaddr=ae:31:51:95:56:43,cpuclock=Fixed,varattr=,jobs=582.TEST01(cput=32,energy_used=0,mem=731172kb,vmem=1341536kb,walltime=17,session_id=28626),state=free,netload=125898394730,gres=,loadave=3.80,ncpus=4,physmem=3818716kb,availmem=28341740kb,totmem=29212884kb,idletime=55034,nusers=1,nsessions=1,sessions=28626,uname=Linux TEST03 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64,opsys=linux
mom_service_port = 15002
mom_manager_port = 15003
# qstat -Q
Queue Max Tot Ena Str Que Run Hld Wat Trn Ext T Cpt
—————- — —- — — — — — — — — – —
gridcenter 0 9 yes yes 7 2 0 0 0 0 E 0
# qstat -B
Server Max Tot Que Run Hld Wat Trn Ext Com Status
—————- — — — — — — — — — ———-
TEST01 0 9 7 2 0 0 0 0 0 Active
7. PBS 사용자 명령
* qsub : 작업을 사용자가 큐에 제출하는 명령어다. OpenPBS 에서는 작업내용을 PBS Scripts 에 배치
하고, qsub 를 통해 PBS scripts 를 실행하게 된다. 하지만 EnPBS 에서는 enrun 이란 명령어를 제공
하여 일반적인 작업 command 를 별도의 PBS Scripts 를 만들지 않고 바로 실행이 가능하다.
EnPBS 에서는 사용되지 않지만 PBS 에서 주로 사용하는 명령이다.
$ qsub <pbs_job_scripts>
$ qdel <job_id>
* job_id 는 qsub 실행시 출력되는 8.otn03 같은 형태의 메세지의 숫자에 해당하는 부
분이다.
* qstat : 현재 queue 에 진행되는 작업 상태를 확인하는 명령어 이다.
주요 옵션은
-Q : 큐의 상태 확인
-B : 서버의 상태 확인
-f : Job_queue 의 Detail 한 정보 확인
* qalter : batch 작업의 속성을 변경
* qrls : qrls 명령은 qhold 명령으로 인해 hold 된 job 을 다시 풀어 놓는 명령이다.
* qdel : 큐에 있는 작업을 삭제함
* qhold : 작업에 스케줄 되어 실행 되지 않도록 함
* qmove : 작업을 다른 큐로 이동함
* qmsg : 실행 중인 작업의 기본 출력 다음에 임의의 메세지를 추가함
qmsg [-E] [-O] <message_string> <job_id>
qmsg 는 Job 의 처리가 완료될 경우 생성되는 error 출력파일과 output 출력파일에 >사용자의
임의의 메세지를 남기게 된다.
$ qmsg -E -O ‘Alang Job End’ 9
이와 같이 명령을 수행하면 9 번 job 이 완료된 후에 생성되는 출력파일에 Alang Job End
라는 메세지가 추가 되게 된다.
-E 옵션은 error 출력 파일에 사용자 메세지 추가
-O 옵션은 output 출력 파일에 사용자 메세지 추가
만일 아무런 옵션이 없을 경우는 표준 error 파일에 메세지가 추가 된다.
* qrerun : 실행 중인 작업을 장제 종료하고, 다시 큐로 돌려보냄
8. PBS 모니터링 도구 설치
– pbstop
# rpm -ivh pbstop-5.02-1.sdl6.x86_64.rpm \
perl-Curses-1.28-1.el6.rf.x86_64.rpm \
perl-PBS-0.35-1.sdl6.x86_64.rpm
# pbstop
age Totals: 6/12 Procs, 3/3 Nodes, 2/13 Jobs Running 18:53:32
Node States: 3 job-exclusive
Visible CPUs: 0,1,2,3
1 2 3
————–
TEST01 @A@a @A@a @A@a
————–
[.] idle [@] busy [*] down [%] offline [!] other [?] unknown
Job# Username Queue Jobname CPUs/Nodes S Elapsed/Requested
A = 593 alang gridcent HPL_JOB_TEST1 6/3 R 00:00:00/–
a = 594 alang gridcent HPL_JOB_TEST1 6/3 R 00:00:00/–
595 alang gridcent HPL_JOB_TEST1 6/3 Q –/–
596 alang gridcent HPL_JOB_TEST1 6/3 Q –/–
597 alang gridcent HPL_JOB_TEST1 6/3 Q –/–
# pbstop -s 2 -m 1
Usage Totals: 6/12 Procs, 3/3 Nodes, 2/13 Jobs Running 18:53:56
Node States: 3 job-exclusive
1
———-
TEST01 @A@a
———-
1
———-
TEST02 @A@a
———-
1
———-
TEST03 @A@a
———-
[.] idle [@] busy [*] down [%] offline [!] other [?] unknown
Job# Username Queue Jobname CPUs/Nodes S Elapsed/Requested
A = 593 alang gridcent HPL_JOB_TEST1 6/3 R 00:00:00/–
a = 594 alang gridcent HPL_JOB_TEST1 6/3 R 00:00:00/–
595 alang gridcent HPL_JOB_TEST1 6/3 Q –/–
596 alang gridcent HPL_JOB_TEST1 6/3 Q –/–
597 alang gridcent HPL_JOB_TEST1 6/3 Q –/–
9. GridCenter28.Light 버전 연동
Torque 와 Maui 가 설치되기 위해서는 기본적으로 HPC 기본 설정이 모두 완료되어 있어야 한다.
그렇기 때문에 실제 GridCenter28-LT 버전과 연동을 목적으로 할 경우 GridCenter 를 먼저 설치
해야 한다.
– GridCenter28.Light 버전 설치
./gc2_install.sh -I 192.168.201.111 -P root/// -F nodelist -L license.key -X
./gc2_init.sh -a
<- 3
– ensh 환경 설정 적용
# vi /etc/profile.d/ensh.sh
.
ENPBS_HOME=/engrid/enpbs
ENMAUI_HOME=/engrid/enmaui
.
– local_default.inc 설정
# vi /engrid/enman/htdocs/inc/local_default.inc
$GL_LIGHT_VER=true;
if ($GL_LIGHT_VER) {
$UI_DEV_USE=true; /*개발시스템 */
$UI_SUPPORT_SCHEDULING=true; /* 스케쥴러 제공 */
$UI_CAP_USE=false; /*해석시스템 (라이선스 사용)*/
$UI_HPC_USE=false; /*HPC 작업 (CAP 모듈 필수)*/
} else {
$UI_DEV_USE=false; /*개발시스템 */
$UI_SUPPORT_SCHEDULING=true; /* 스케쥴러 제공 */
$UI_CAP_USE=true; /*해석시스템 (라이선스 사용)*/
$UI_HPC_USE=true; /*HPC 작업 (CAP 모듈 필수)*/
}
// sge, pbs
$GL_SCHED_TYPE = “pbs”;
– gridcenter 웹 포털에서..
자원그룹설정에서 queue 명이 기본적으로 all.q 로 되어 있는데 이부분을
생성한 큐이름으로(gridcenter) 변경한다.