[개발] 그리드센터 SGE 환경 구축하기

SgGun Grid Engine 5.3 – 6.x 대 설치 및 이용하기

작성일 : 2006년 3월 3일

작성자 : 시스존/서진우 (alang@syszone.co.kr)

1. Sun Grid Engine(SGE) 이란

Sun Grid Engine 소프트웨어는 여러노드의 분산된 컴퓨팅 자원을 사용자 입장에서

자원 요청 시 효율적으로 자원을 분배 시켜 주는 역활의 프로그램이다.

흔히 OpenPBS, PBSPro, LSF 와 같은 Job 스케줄러와 같은 역활의 프로그램이다.

sge 는 sun open source project에서 공개로 제공하는 소프트웨어이지만 같은

공개인 open pbs 에 비해 보다 안정적이며, 많은 기능을 제공하고, 사용자 편이

에 가까운 프로그램이라 할 수 있다.

기본적으로 OpenPBS에서 제공하는 시스템 자원 분배 기능과 작업 대기열 기능을

기본 제공하며, 상용 프로그램에서 제공하는 보다 세부적인 컴플렉스 정의 및

라이센스 제어, 병렬 프로그램 제어등의 기능을 제공하고 있다.

흔히 EDA,ASIC 관련 연구 분야에 많이 사용되는 Synopsys 와 같은 프로그램에서

디자인 모듈 컴파일등에서 분산 컴파일이 가능함으로 작업 처리 능력을 향상시

킬 수 있는 방안으로 사용되며, 고가의 라이센스로 작동하는 프로그램의 경우

프로그램 별 라이센스 수로 자원 정의를 한 후 라이센스 관리를 하는 역활로도

사용이 가능하다.

본 테스트는 리눅스 커널 2.4.x 와 2.6.x에서 테스트 되었고, Solaris 8에서도

테스트가 완료되었다.

현재 제공되는 5.3 대 버전과 6.x 대 버전에 대한 테스트가 완료되었고일반적인

사용방법은 동일 하나 병렬 분산 make 등의 기능에서 6.x 대의 방식이 보다 더

안정함을 확인 할 수 있어 설치 이외의 다른 사용 방법에 대한것은 6.x대을 기준

으로 설명 하도록 할 것이다.

SGE 설치에 앞서 기본적인 rsh, rlogin 서비스 설정은 해두도록 한다.

2. Sun Grid Engine 설치 하기

SGE 소프트웨어 다운로드는 http://gridengine.sunsource.net 사이트에서 가능

하며 현재 5.3 대 버전과 6.0대 버전이 제공 되고 있다.

설치 가능한 플랫폼은 Linux Kernel 2.4.x ~ 2.6.x(x86/amd64) 와 Solaris 7.8.9

(32bit/64bit) 버전대에서 가능하며 각 플랫폼별로 실행 바이너리 패키지와 설정

관련 common 패키지로 제공 되고 있으며 두개의 패키지 모두를 다운 받아야 한다.

– sge 5.3 설치 하기

필요 패키지 리스트 :

sge-5.3p7-bin-glinux.tar.gz

sge-5.3p7-common.tar.gz

SGE 는 SGE를 관리할 root 이외의 관리자 계정이 필요하기 때문에 먼저 SGE관리자

계정을 만들도록 한다.

[root@ora01 ~]# adduser sgeadmin

[root@ora01 ~]# passwd sgeadmin

SGE 가 설치될 디렉토리를 생성하도록 한다.

[root@ora01 ~]# mkdir -p /usr/clx/sge

[root@ora01 ~]# chown sgeadmin. /usr/clx/sge

[root@ora01 ~]# chmod 755 /usr/clx/sge

/etc/services 에 sge 가 서로 통신을 할 수 있게 해당 포트와 서비스 명을 정의 한다.

[root@ora01 ~]# vi /etc/services

—————————————————————————

.

sge_commd       535/tcp

.

—————————————————————————

sge-5.3p7-common.tar.gz / sge-5.3p7-bin-glinux.tar.gz 두개의 패키지를 /usr/clx/sge

에 옮겨 놓고 압축을 푼다.

[root@ora01 ~]# mv sge-5.3p7-bin-glinux.tar.gz /usr/clx/sge

[root@ora01 ~]# mv sge-5.3p7-common.tar.gz /usr/clx/sge

[root@ora01 ~]# cd /usr/clx/sge/

[root@ora01 sge]# tar xzvf sge-5.3p7-common.tar.gz

[root@ora01 sge]# tar xzvf sge-5.3p7-bin-glinux.tar.gz

administrator 서버 (관리서버)에서는install_qmaster 실행 파일을, 일반 제출 서버에서는

install_execd 파일을 실행 한다.

[root@ora01 sge]# ./install_qmaster

—————————————————————————-

설치 진행 과정 : 대부분 defaults 설정으로 [enter]를 쳐서 넘어가면 된고, 특정 설정이

필요한 곳은 아래 진행과정 중간에 첨부된 설명에 맞게 진행하도록 한다.

Welcome to the Grid Engine installation

—————————————

Grid Engine qmaster host installation

————————————-

Before you continue with the installation please read these hints:

– Your terminal window should have a size of at least

80×24 characters

– The INTR character is often bound to the key Ctrl-C.

The term >Ctrl-C< is used during the installation if you

have the possibility to abort the installation

The qmaster installation procedure will take approximately 5-10 minutes.

Hit <RETURN> to continue >>  <—[ Enter ]

Confirm Grid Engine default installation settings

————————————————-

The following default settings can be used for an accelerated

installation procedure:

$SGE_ROOT          = /usr/clx/sge

service            = sge_commd

admin user account = sgeadmin

Do you want to use these configuration parameters (y/n) [y] >>

Verifying and setting file permissions

————————————–

Did you install this version with >pkgadd< or did you already

verify and set the file permissions of your distribution (y/n) [y] >>

We do not verify file permissions. Hit <RETURN> to continue >>

Making directories

——————

creating directory: default

creating directory: default/common

creating directory: default/common/history

creating directory: default/common/local_conf

creating directory: /usr/clx/sge/default/spool/qmaster

creating directory: /usr/clx/sge/default/spool/qmaster/admin_hosts

creating directory: /usr/clx/sge/default/spool/qmaster/ckpt

creating directory: /usr/clx/sge/default/spool/qmaster/complexes

creating directory: /usr/clx/sge/default/spool/qmaster/exec_hosts

creating directory: /usr/clx/sge/default/spool/qmaster/job_scripts

creating directory: /usr/clx/sge/default/spool/qmaster/jobs

creating directory: /usr/clx/sge/default/spool/qmaster/pe

creating directory: /usr/clx/sge/default/spool/qmaster/queues

creating directory: /usr/clx/sge/default/spool/qmaster/submit_hosts

creating directory: /usr/clx/sge/default/spool/qmaster/usersets

Hit <RETURN> to continue >>

Select default Grid Engine hostname resolving method

—————————————————-

Are all hosts of your cluster in one DNS domain? If this is

the case the hostnames

>hostA< and >hostA.foo.com<

would be treated as equal, because the DNS domain name >foo.com<

is ignored when comparing hostnames.

Are all hosts of your cluster in a single DNS domain (y/n) [y] >>

Ignoring domainname when comparing hostnames.

Hit <RETURN> to continue >>

Grid Engine group id range

————————–

When jobs are started under the control of Grid Engine an additional group id

is set on platforms which do not support jobs.

This additional UNIX group id range must be unused group id’s in your system.

The range must be big enough to provide enough numbers for the maximum number

of Grid Engine jobs running at a single moment on a single host. E.g. a range

like >20000-20100< means, that Grid Engine will use the group id’s from

20000-20100 and thus provides a range for 101 jobs running at the same time

on a single host.

You can change at any time the group id range in your cluster configuration.

Please enter a range >> 20000-20200     <– 20000-20200 입력

이는 sge에서 job을 관리한때 job gid 를 부여하게 되는데 동시에 부여할수 있는

gid 의 범위와 개수이다. 즉 동시에 큐잉에 job을 대기 시킬 수 있는 작업 수라

보면 되겠다.

Using >20000-20200< as gid range. Hit <RETURN> to continue >>

Creating local configuration

—————————-

Creating >act_qmaster< file

Adding default complexes >host< and >queue<

Adding default parallel environment (PE) for >qmake<

Adding >sge_aliases< path aliases file

Adding >qtask< qtcsh sample default request file

Adding >sge_request< default submit options file

Creating settings files for >.profile/.cshrc<

Hit <RETURN> to continue >>

Grid Engine startup script

————————–

Your Grid Engine cluster wide startup script is installed as:

/usr/clx/sge/default/common/rcsge<

Hit <RETURN> to continue >>

Grid Engine startup script

————————–

We can install the startup script that

Grid Engine is started at machine boot (y/n) [y] >>

Installing startup script /etc/rc.d/rc3.d/S95rcsge

Installing startup script also in /etc/rc.d/rc5.d/S95rcsge

Hit <RETURN> to continue >>

Grid Engine qmaster and scheduler startup

—————————————–

Starting qmaster and scheduler daemon. Please wait …

starting sge_qmaster

starting program: /usr/clx/sge/bin/glinux/sge_commd

using service “sge_commd”

bound to port 535

Reading in complexes:

Complex “host”.

Complex “queue”.

Reading in parallel environments:

PE “make”.

Reading in scheduler configuration

starting sge_schedd

Hit <RETURN> to continue >>

Adding Grid Engine hosts

————————

Please now add the list of hosts, where you will later install your execution

daemons. These hosts will be also added as valid submit hosts.

Please enter a blank separated list of your execution hosts. You may

press <RETURN> if the line is getting too long. Once you are finished

simply press <RETURN> without entering a name.

You also may prepare a file with the hostnames of the machines where you plan

to install Grid Engine. This may be convenient if you are installing Grid

Engine on many hosts.

Do you want to use a file which contains the list of hosts (y/n) [n] >>

<- 이는 sge 의 제출 서버에 포함된 서버 리스트를 정의 하는 곳이다. 만일 제출서버

의 호스트네임리스트가 정의된 파일이 있으면 “y”, 없이 직접 입력 하기 위해서는

그냥 [enter]를 입력한다.

Adding admin and submit hosts

—————————–

Please enter a blank seperated list of hosts.

Stop by entering <RETURN>. You may repeat this step until you are

entering an empty list. You will see messages from Grid Engine

when the hosts are added.

Host(s): ora01 < – 해당 호스트 네임 입력

Adding admin and submit hosts

—————————–

Please enter a blank seperated list of hosts.

Stop by entering <RETURN>. You may repeat this step until you are

entering an empty list. You will see messages from Grid Engine

when the hosts are added.

Host(s): ora02 < – 해당 호스트 네임 입력

ora02 added to administrative host list

ora02 added to submit host list

Hit <RETURN> to continue >>

.

Finished adding hosts. Hit <RETURN> to continue >>

Using Grid Engine

—————–

You should now enter the command:

source /usr/clx/sge/default/common/settings.csh

if you are a csh/tcsh user or

# . /usr/clx/sge/default/common/settings.sh

if you are a sh/ksh user.

This will set or expand the following environment variables:

– $SGE_ROOT    (always necessary)

– $SGE_CELL    (if you are using a cell other than >default<)

– $COMMD_PORT   (if you haven’t added the service >sge_commd<)

– $PATH/$path (to find the Grid Engine binaries)

– $MANPATH     (to access the manual pages)

Hit <RETURN> to see where Grid Engine logs messages >>

<- SGE 기본 환경 설정 파일이다. 설치가 완료 후 ..

/usr/clx/sge/default/common/settings.sh 을 적용한 후 해당 파일을 /etc/profile.d

밑에 복사해 두도록 한다.

Grid Engine messages

——————–

Grid Engine messages can be found at:

/tmp/qmaster_messages (during qmaster startup)

/tmp/execd_messages   (during execution daemon startup)

After startup the daemons log thier messages in their spool directories.

Qmaster:     /usr/clx/sge/default/spool/qmaster/messages

Exec daemon: <execd_spool_dir>/<hostname>/messages

Do you want to see previous screen about using Grid Engine again (y/n) [n] >>

Your Grid Engine qmaster installation is now completed

——————————————————

Please now login to all hosts where you want to run an execution daemon

and start the execution host installation procedure.

If you want to run an execution daemon on this host, please do not forget

to make the execution host installation in this host as well.

All execution hosts must be administrative hosts during the installation.

All hosts which you added to the list of administrative hosts during this

installation procedure can now be installed.

You may verify your administrative hosts with the command

# qconf -sh

and you may add new administrative hosts with the command

# qconf -ah <hostname>

—————————————————————————————-

이것으로 SGE 의 master 서버 설치가 완료 되었다.

일반 job 실행 서버 설치는 ./install_execd 를 실행하도록 한다.

[root@ora01 sge]# ./install_execd

—————————————————————————————-

Welcome to the Grid Engine execution host installation

——————————————————

If you haven’t installed the Grid Engine qmaster host yet, you must execute

this step (with >install_qmaster<) prior the execution host installation.

For a sucessfull installation you need a running Grid Engine qmaster. It is

also neccesary that this host is an administrative host.

You can verify your current list of administrative hosts with

the command:

# qconf -sh

You can add an administrative host with the command:

# qconf -ah <hostname>

The execution host installation will take approximately 5 minutes.

Hit <RETURN> to continue >>

Confirm Grid Engine default installation settings

————————————————-

The following default settings can be used for an accelerated

installation procedure:

$SGE_ROOT          = /usr/clx/sge

service            = sge_commd

admin user account = sgeadmin

Do you want to use these configuration parameters (y/n) [y] >>

Creating local configuration

—————————-

Creating local configuration for host >ora01<

root@ora01 modified “ora01” in configuration list

Local configuration for host >ora01< created.

Hit <RETURN> to continue >>

Grid Engine startup script

————————–

We can install the startup script that

Grid Engine is started at machine boot (y/n) [y] >>

Grid Engine startup script

————————–

We can install the startup script that

Grid Engine is started at machine boot (y/n) [y] >>

Installing startup script /etc/rc.d/rc3.d/S95rcsge

Installing startup script also in /etc/rc.d/rc5.d/S95rcsge

Hit <RETURN> to continue >>

Grid Engine execution daemon startup

————————————

Starting execution daemon daemon. Please wait …

starting sge_execd

Hit <RETURN> to continue >>

Adding a default Grid Engine queue for this host

————————————————

We can now add a sample queue for this host with following attributes:

– the queue has the name >ora01.q<

– the queue provides 2 slot(s) for jobs

– the queue provides access for any user with an account on this machine

– the queue has no Unix resource limits

You do not need to add a queue now, but before running jobs on this host

need to add a queue with >qconf< or the GUI >qmon<.

Do you want to add a default queue for this host (y/n) [y] >>

root@ora01 added “ora01.q” to queue list

Hit <RETURN> to continue >>

Using Grid Engine

—————–

You should now enter the command:

source /usr/clx/sge/default/common/settings.csh

if you are a csh/tcsh user or

# . /usr/clx/sge/default/common/settings.sh

if you are a sh/ksh user.

This will set or expand the following environment variables:

– $SGE_ROOT    (always necessary)

– $SGE_CELL    (if you are using a cell other than >default<)

– $COMMD_PORT   (if you haven’t added the service >sge_commd<)

– $PATH/$path (to find the Grid Engine binaries)

– $MANPATH     (to access the manual pages)

Hit <RETURN> to see where Grid Engine logs messages >>

Grid Engine messages

——————–

Grid Engine messages can be found at:

/tmp/qmaster_messages (during qmaster startup)

/tmp/execd_messages   (during execution daemon startup)

After startup the daemons log thier messages in their spool directories.

Qmaster:     /usr/clx/sge/default/spool/qmaster/messages

Exec daemon: <execd_spool_dir>/<hostname>/messages

Do you want to see previous screen about using Grid Engine again (y/n) [n] >>

———————————————————————————–

이것으로 실행 서버의 설치가 완료되었다. 실행 서버는 SGE 클러스터 구성의 모든 서버

에서 진행해도록 한다. 설치가 완료되면 간단한 테스트를 해보도록 한다.

* 제출  호스트 확인

[root@ora01 sge]# qconf -ss

ora01

ora02

* 관리 호스트 확인

[root@ora01 sge]# qconf -sh

ora01

ora02

* 큐 등록 확인

[root@ora01 sge]# qstat -f

queuename            qtype used/tot. load_avg arch       states

—————————————————————————-

ora01.q              BIP   0/2       0.00     glinux

—————————————————————————-

ora02.q              BIP   0/2       0.00     glinux

참고로 SGE 가 NFS상에 설치 되지 않은 경우 qmaster 가 설치 되지 않는 호스트에서 execd

를 설치 하면 ..

Checking cell directory

———————–

Cannot find required files. The following error was returned:

>common directory not found: default/common<

와 같은 메세지를 보이면서 진행이 중단 된다.

이때는 qmaster 서버가 설치 된 노드에서 /usr/clx/sge/default 이하 폴더를 execd 가 설치

될 노드에 모두 복제를 시킨 후 진행하도록 한다.

[root@ora01 sge]# ensync default

[root@ora02 sge]# ./install_execd

..

설치 가 완료되면 위에서 언급 했듯이 default/common/settings.sh 파일을 /etc/profile.d

밑에 복사하도록 한다.

[root@ora01 sge]# cp default/common/settings.sh /etc/profile.d

[root@ora02 sge]# cp default/common/settings.sh /etc/profile.d

SGE 실행 제어 스크립터는 다음과 같다.

[root@ora01 sge]# /etc/rc.d/init.d/rcsge start | stop | restart

– sge 6.x 설치 하기

sge 6.0 대 설치는 5.3 대와 다소 차이가 있다. 설치 진행 과정에서의 차이는 크게 없지만

설치 준비에서 /etc/services 의 등록 시 서비스네임이 변경된 부분이 존재 한다.

* 필요 패키지 리스트

sge-6.0u7_1-bin-lx24-x86.tar.gz

sge-6.0u7-common.tar.gz

sge 관리 계정과 설치 디렉토리 관련 준비 과정은 5.3대와 동일 하다.

[root@ora01 ~]# adduser sgeadmin

[root@ora01 ~]# passwd sgeadmin

[root@ora01 ~]# mkdir -p /usr/clx/sge

[root@ora01 ~]# chown sgeadmin. /usr/clx/sge

[root@ora01 ~]# chmod 755 /usr/clx/sge

/etc/services 에서는 5.3 에서는 sge_commd 를 등록 했는데 6.0 대에서는 sge_qmaster,

sge_execd 로 정의 해야 한다.

[root@ora01 sge]# vi /etc/services

——————————————————————————-

.

sge_qmaster      536/tcp

sge_execd        537/tcp

.

——————————————————————————-

압축을 푼다.

[root@ora01 sge]# tar xzvf sge-6.0u7-common.tar.gz

[root@ora01 sge]# tar xzvf sge-6.0u7_1-bin-lx24-x86.tar.gz

설치 전 SGE_ROOT에 대한 환경 설정을 적용한다.

[root@ora01 sge]# export SGE_ROOT=/usr/clx/sge

master 서버에서는 qmaster 서버 설치 스크립터를, 실행 서버에서는 execd 서버 설치

스크립터를 실행한다.

[root@ora01 sge]# ./install_qmaster

——————————————————————————–

Welcome to the Grid Engine installation

—————————————

Grid Engine qmaster host installation

————————————-

Before you continue with the installation please read these hints:

– Your terminal window should have a size of at least

80×24 characters

– The INTR character is often bound to the key Ctrl-C.

The term >Ctrl-C< is used during the installation if you

have the possibility to abort the installation

The qmaster installation procedure will take approximately 5-10 minutes.

Hit <RETURN> to continue >>

Grid Engine admin user account

——————————

The current directory

/usr/clx/sge

is owned by user

sgeadmin

If user >root< does not have write permissions in this directory on *all*

of the machines where Grid Engine will be installed (NFS partitions not

exported for user >root< with read/write permissions) it is recommended to

install Grid Engine that all spool files will be created under the user id

of user >clunix<.

IMPORTANT NOTE: The daemons still have to be started by user >root<.

Do you want to install Grid Engine as admin user >sgeadmin< (y/n) [y] >>

Installing Grid Engine as admin user >sgeadmin<

Hit <RETURN> to continue >>

Checking $SGE_ROOT directory

—————————-

The Grid Engine root directory is:

$SGE_ROOT = /usr/clx/sge

If this directory is not correct (e.g. it may contain an automounter

prefix) enter the correct path to this directory or hit <RETURN>

to use default [/usr/clx/sge] >>

Hit <RETURN> to continue >>

Grid Engine TCP/IP service >sge_qmaster<

—————————————-

Using the service

sge_qmaster

for communication with Grid Engine.

Hit <RETURN> to continue >>

Grid Engine cells

—————–

Grid Engine supports multiple cells.

If you are not planning to run multiple Grid Engine clusters or if you don’t

know yet what is a Grid Engine cell it is safe to keep the default cell name

default

If you want to install multiple cells you can enter a cell name now.

The environment variable

$SGE_CELL=<your_cell_name>

will be set for all further Grid Engine commands.

Enter cell name [default] >>

Using cell >default<.

Hit <RETURN> to continue >>

Grid Engine qmaster spool directory

———————————–

The qmaster spool directory is the place where the qmaster daemon stores

the configuration and the state of the queuing system.

The admin user >clunix< must have read/write access

to the qmaster spool directory.

If you will install shadow master hosts or if you want to be able to start

the qmaster daemon on other hosts (see the corresponding section in the

Grid Engine Installation and Administration Manual for details) the account

on the shadow master hosts also needs read/write access to this directory.

The following directory

[/usr/clx/sge/default/spool/qmaster]

will be used as qmaster spool directory by default!

Do you want to select another qmaster spool directory (y/n) [n] >>

Windows Execution Host Support

——————————

Are you going to install Windows Execution Hosts? (y/n) [n] >>

Verifying and setting file permissions

————————————–

Did you install this version with >pkgadd< or did you already

verify and set the file permissions of your distribution (y/n) [y] >>

We do not verify file permissions. Hit <RETURN> to continue >>

Select default Grid Engine hostname resolving method

—————————————————-

Are all hosts of your cluster in one DNS domain? If this is

the case the hostnames

>hostA< and >hostA.foo.com<

would be treated as equal, because the DNS domain name >foo.com<

is ignored when comparing hostnames.

Are all hosts of your cluster in a single DNS domain (y/n) [y] >>

Ignoring domainname when comparing hostnames.

Hit <RETURN> to continue >>

Making directories

——————

creating directory: default

creating directory: default/common

creating directory: /usr/clx/sge/default/spool/qmaster

creating directory: /usr/clx/sge/default/spool/qmaster/job_scripts

Hit <RETURN> to continue >>

Setup spooling

————–

Your SGE binaries are compiled to link the spooling libraries

during runtime (dynamically). So you can choose between Berkeley DB

spooling and Classic spooling method.

Please choose a spooling method (berkeleydb|classic) [berkeleydb] >>

The Berkeley DB spooling method provides two configurations!

Local spooling:

The Berkeley DB spools into a local directory on this host (qmaster host)

This setup is faster, but you can’t setup a shadow master host

Berkeley DB Spooling Server:

If you want to setup a shadow master host, you need to use

Berkeley DB Spooling Server!

In this case you have to choose a host with a configured RPC service.

The qmaster host connects via RPC to the Berkeley DB. This setup is more

failsafe, but results in a clear potential security hole. RPC communication

(as used by Berkeley DB) can be easily compromised. Please only use this

alternative if your site is secure or if you are not concerned about

security. Check the installation guide for further advice on how to achieve

failsafety without compromising security.

Do you want to use a Berkeley DB Spooling Server? (y/n) [n] >>

Hit <RETURN> to continue >>

Berkeley Database spooling parameters

————————————-

Please enter the Database Directory now, even if you want to spool locally,

it is necessary to enter this Database Directory.

Default: [/usr/clx/sge/default/spool/spooldb] >>

creating directory: /usr/clx/sge/default/spool/spooldb

Dumping bootstrapping information

Initializing spooling database

Hit <RETURN> to continue >>

Grid Engine group id range

————————–

When jobs are started under the control of Grid Engine an additional group id

is set on platforms which do not support jobs. This is done to provide maximum

control for Grid Engine jobs.

This additional UNIX group id range must be unused group id’s in your system.

Each job will be assigned a unique id during the time it is running.

Therefore you need to provide a range of id’s which will be assigned

dynamically for jobs.

The range must be big enough to provide enough numbers for the maximum number

of Grid Engine jobs running at a single moment on a single host. E.g. a range

like >20000-20100< means, that Grid Engine will use the group ids from

20000-20100 and provides a range for 100 Grid Engine jobs at the same time

on a single host.

You can change at any time the group id range in your cluster configuration.

Please enter a range >> 20000-20200

Using >20000-20200< as gid range. Hit <RETURN> to continue >>

Grid Engine cluster configuration

———————————

Please give the basic configuration parameters of your Grid Engine

installation:

<execd_spool_dir>

The pathname of the spool directory of the execution hosts. User >clunix<

must have the right to create this directory and to write into it.

Default: [/usr/clx/sge/default/spool] >>

Grid Engine cluster configuration (continued)

———————————————

<administrator_mail>

The email address of the administrator to whom problem reports are sent.

It’s is recommended to configure this parameter. You may use >none<

if you do not wish to receive administrator mail.

Please enter an email address in the form >user@foo.com<.

Default: [none] >>

The following parameters for the cluster configuration were configured:

execd_spool_dir        /usr/clx/sge/default/spool

administrator_mail     none

Do you want to change the configuration parameters (y/n) [n] >>

Creating local configuration

—————————-

Creating >act_qmaster< file

Adding default complex attributes

Reading in complex attributes.

Adding default parallel environments (PE)

Reading in parallel environments:

PE “make.sge_pqs_api”.

Adding SGE default usersets

Reading in usersets:

Userset “defaultdepartment”.

Userset “deadlineusers”.

Adding >sge_aliases< path aliases file

Adding >qtask< qtcsh sample default request file

Adding >sge_request< default submit options file

Creating >sgemaster< script

Creating >sgeexecd< script

Creating settings files for >.profile/.cshrc<

Hit <RETURN> to continue >>

qmaster/scheduler startup script

——————————–

We can install the startup script that will

start qmaster/scheduler at machine boot (y/n) [y] >>

cp /usr/clx/sge/default/common/sgemaster /etc/init.d/sgemaster

/usr/lib/lsb/install_initd /etc/init.d/sgemaster

Hit <RETURN> to continue >>

Grid Engine qmaster and scheduler startup

—————————————–

Starting qmaster and scheduler daemon. Please wait …

starting sge_qmaster

starting sge_schedd

Hit <RETURN> to continue >>

Adding Grid Engine hosts

————————

Please now add the list of hosts, where you will later install your execution

daemons. These hosts will be also added as valid submit hosts.

Please enter a blank separated list of your execution hosts. You may

press <RETURN> if the line is getting too long. Once you are finished

simply press <RETURN> without entering a name.

You also may prepare a file with the hostnames of the machines where you plan

to install Grid Engine. This may be convenient if you are installing Grid

Engine on many hosts.

Do you want to use a file which contains the list of hosts (y/n) [n] >>

Adding admin and submit hosts

—————————–

Please enter a blank seperated list of hosts.

Stop by entering <RETURN>. You may repeat this step until you are

entering an empty list. You will see messages from Grid Engine

when the hosts are added.

Host(s): ora01

adminhost “ora01” already exists

ora01 added to submit host list

Hit <RETURN> to continue >>

Adding admin and submit hosts

—————————–

Please enter a blank seperated list of hosts.

Stop by entering <RETURN>. You may repeat this step until you are

entering an empty list. You will see messages from Grid Engine

when the hosts are added.

Host(s): ora02

ora02 added to administrative host list

ora02 added to submit host list

Hit <RETURN> to continue >>

Finished adding hosts. Hit <RETURN> to continue >>

If you want to use a shadow host, it is recommended to add this host

to the list of administrative hosts.

If you are not sure, it is also possible to add or remove hosts after the

installation with <qconf -ah hostname> for adding and <qconf -dh hostname>

for removing this host

Attention: This is not the shadow host installationprocedure.

You still have to install the shadow host separately

Do you want to add your shadow host(s) now? (y/n) [y] >>

Adding Grid Engine shadow hosts

——————————-

Please now add the list of hosts, where you will later install your shadow

daemon.

Please enter a blank separated list of your execution hosts. You may

press <RETURN> if the line is getting too long. Once you are finished

simply press <RETURN> without entering a name.

You also may prepare a file with the hostnames of the machines where you plan

to install Grid Engine. This may be convenient if you are installing Grid

Engine on many hosts.

Do you want to use a file which contains the list of hosts (y/n) [n] >>

Adding admin hosts

——————

Please enter a blank seperated list of hosts.

Stop by entering <RETURN>. You may repeat this step until you are

entering an empty list. You will see messages from Grid Engine

when the hosts are added.

Host(s): ora01

Creating the default <all.q> queue and <allhosts> hostgroup

———————————————————–

root@ora01 added “@allhosts” to host group list

root@ora01 added “all.q” to cluster queue list

Hit <RETURN> to continue >>

Scheduler Tuning

—————-

The details on the different options are described in the manual.

Configurations

————–

1) Normal

Fixed interval scheduling, report scheduling information,

actual + assumed load

2) High

Fixed interval scheduling, report limited scheduling information,

actual load

3) Max

Immediate Scheduling, report no scheduling information,

actual load

Enter the number of your prefered configuration and hit <RETURN>!

Default configuration is [1] >>

We’re configuring the scheduler with >Normal< settings!

Do you agree? (y/n) [y] >>

Using Grid Engine

—————–

You should now enter the command:

source /usr/clx/sge/default/common/settings.csh

if you are a csh/tcsh user or

# . /usr/clx/sge/default/common/settings.sh

if you are a sh/ksh user.

This will set or expand the following environment variables:

– $SGE_ROOT         (always necessary)

– $SGE_CELL         (if you are using a cell other than >default<)

– $SGE_QMASTER_PORT (if you haven’t added the service >sge_qmaster<)

– $SGE_EXECD_PORT   (if you haven’t added the service >sge_execd<)

– $PATH/$path       (to find the Grid Engine binaries)

– $MANPATH          (to access the manual pages)

Hit <RETURN> to see where Grid Engine logs messages >>

Grid Engine messages

——————–

Grid Engine messages can be found at:

/tmp/qmaster_messages (during qmaster startup)

/tmp/execd_messages   (during execution daemon startup)

After startup the daemons log their messages in their spool directories.

Qmaster:     /usr/clx/sge/default/spool/qmaster/messages

Exec daemon: <execd_spool_dir>/<hostname>/messages

Grid Engine startup scripts

—————————

Grid Engine startup scripts can be found at:

/usr/clx/sge/default/common/sgemaster (qmaster and scheduler)

/usr/clx/sge/default/common/sgeexecd (execd)

Do you want to see previous screen about using Grid Engine again (y/n) [n] >>

Your Grid Engine qmaster installation is now completed

——————————————————

Please now login to all hosts where you want to run an execution daemon

and start the execution host installation procedure.

If you want to run an execution daemon on this host, please do not forget

to make the execution host installation in this host as well.

All execution hosts must be administrative hosts during the installation.

All hosts which you added to the list of administrative hosts during this

installation procedure can now be installed.

You may verify your administrative hosts with the command

# qconf -sh

and you may add new administrative hosts with the command

# qconf -ah <hostname>

Please hit <RETURN> >>

————————————————————————————-

설치가 완료되었다. SGE 환경 설정 파일을 /etc/profile.d 밑에 복사하고 적용한다.

[root@ora01 sge]# cp default/common/settings.sh /etc/profile.d/

[root@ora01 sge]# source /etc/profile.d/settings.sh

간단한 확인을 한다.

[root@ora01 sge]# qconf -sh

ora01

ora02

[root@ora01 sge]# qconf -ss

ora01

ora02

이제 실행 호스트 프로그램을 설치 하고 설정 한다.

[root@ora01 sge]# ./install_execd

————————————————————————————-

Welcome to the Grid Engine execution host installation

——————————————————

If you haven’t installed the Grid Engine qmaster host yet, you must execute

this step (with >install_qmaster<) prior the execution host installation.

For a sucessfull installation you need a running Grid Engine qmaster. It is

also neccesary that this host is an administrative host.

You can verify your current list of administrative hosts with

the command:

# qconf -sh

You can add an administrative host with the command:

# qconf -ah <hostname>

The execution host installation will take approximately 5 minutes.

Hit <RETURN> to continue >>

Checking $SGE_ROOT directory

—————————-

The Grid Engine root directory is:

$SGE_ROOT = /usr/clx/sge

If this directory is not correct (e.g. it may contain an automounter

prefix) enter the correct path to this directory or hit <RETURN>

to use default [/usr/clx/sge] >>

Your $SGE_ROOT directory: /usr/clx/sge

Hit <RETURN> to continue >>

Grid Engine cells

—————–

Please enter cell name which you used for the qmaster

installation or press <RETURN> to use [default] >>

Using cell: >default<

Hit <RETURN> to continue >>

Checking hostname resolving

—————————

This hostname is known at qmaster as an administrative host.

Hit <RETURN> to continue >>

Local execd spool directory configuration

—————————————–

During the qmaster installation you’ve already entered a global

execd spool directory. This is used, if no local spool directory is configured.

Now you can enter a local spool directory for this host.

Do you want to configure a local spool directory

for this host (y/n) [n] >>

Creating local configuration

—————————-

clunix@ora01 modified “ora01” in configuration list

Local configuration for host >ora01< created.

Hit <RETURN> to continue >>

execd startup script

——————–

We can install the startup script that will

start execd at machine boot (y/n) [y] >>

cp /usr/clx/sge/default/common/sgeexecd /etc/init.d/sgeexecd

/usr/lib/lsb/install_initd /etc/init.d/sgeexecd

Hit <RETURN> to continue >>

Grid Engine execution daemon startup

————————————

Starting execution daemon. Please wait …

starting sge_execd

Hit <RETURN> to continue >>

Adding a queue for this host

—————————-

We can now add a queue instance for this host:

– it is added to the >allhosts< hostgroup

– the queue provides 2 slot(s) for jobs in all queues

referencing the >allhosts< hostgroup

You do not need to add this host now, but before running jobs on this host

it must be added to at least one queue.

Do you want to add a default queue instance for this host (y/n) [y] >>

root@ora01 modified “@allhosts” in host group list

root@ora01 modified “all.q” in cluster queue list

Hit <RETURN> to continue >>

Using Grid Engine

—————–

You should now enter the command:

source /usr/clx/sge/default/common/settings.csh

if you are a csh/tcsh user or

# . /usr/clx/sge/default/common/settings.sh

if you are a sh/ksh user.

This will set or expand the following environment variables:

– $SGE_ROOT         (always necessary)

– $SGE_CELL         (if you are using a cell other than >default<)

– $SGE_QMASTER_PORT (if you haven’t added the service >sge_qmaster<)

– $SGE_EXECD_PORT   (if you haven’t added the service >sge_execd<)

– $PATH/$path       (to find the Grid Engine binaries)

– $MANPATH          (to access the manual pages)

Hit <RETURN> to see where Grid Engine logs messages >>

Grid Engine messages

——————–

Grid Engine messages can be found at:

/tmp/qmaster_messages (during qmaster startup)

/tmp/execd_messages   (during execution daemon startup)

After startup the daemons log their messages in their spool directories.

Qmaster:     /usr/clx/sge/default/spool/qmaster/messages

Exec daemon: <execd_spool_dir>/<hostname>/messages

Grid Engine startup scripts

—————————

Grid Engine startup scripts can be found at:

/usr/clx/sge/default/common/sgemaster (qmaster and scheduler)

/usr/clx/sge/default/common/sgeexecd (execd)

Do you want to see previous screen about using Grid Engine again (y/n) [n] >>

Your execution daemon installation is now completed.

———————————————————————————-

5.3 대와 같이 NFS 상에 SGE 가 설치되는 경우가 아니라면 다른 노드에는 qmaster 서버의

default 디렉토리를 복제해 준뒤 install_execd 를 실행해서 설치 하도록 한다.

[root@ora01 sge]# ensync default

[root@ora02 sge]# ./install_execd

.

.

모든 실행 호스트에 프로그램 설치가 완료 되면 전체 호스트가 재대로 등록 되었는지 확인한다.

[root@ora01 sge]# qstat -f

queuename                      qtype used/tot. load_avg arch          states

—————————————————————————-

all.q@ora01                    BIP   0/2       0.00     lx24-x86

—————————————————————————-

all.q@ora02                    BIP   0/2       0.00     lx24-x86

이것으로 SGE 의 설치 관련 설명을 마치도록 하겠다. 다음에는 SGE의 사용 시 필요한 주요

명령어 설명 및 사용방법에 대해 알아보도록 한다.

3. Sun Grid Engine Command 사용 하기

SGE의 가장 기본적인 용도는 역시 PBS 와 같은 작업 큐잉을 통한 배치작업 관리 부분이다.

이는 다른 큐잉 시스템과 같이 qsub 란 명령을 통해 관리가 가능한다.

PBS 의 경우는 작업을 대기열에 제출하기 위해 PBS 전용 스크립터를 제작해야 하는데 SGE

은 일반적인 sh, csh 스크립터를 바로 적용 시킬 수 있다.

아래에서는 qsub 와 같은 sge 의 사용자 명령어와 SGE 시스템의 구성을 제어하는 관리자

명령어에 대해 알아보도록 한다.

– 주요 사용자 Command

– qsub :

작업을 SGE 에 제출 할때 사용되는 명령어 이다. 사용방법은 아래와 같다.

ex> qsub  <submit scripts>

[root@ora01 sge]# qsub examples/jobs/simple.sh

Your job 1 (“simple.sh”) has been submitted.

* 작업 제출 확인

[root@ora01 sge]# qstat -f

queuename                      qtype used/tot. load_avg arch          states

—————————————————————————-

all.q@ora01                    BIP   1/2       0.00     lx24-x86

1 0.55500 simple.sh  root         r     03/03/2006 13:18:01     1

—————————————————————————-

all.q@ora02                    BIP   2/2       0.00     lx24-x86

2 0.55500 simple.sh  root         r     03/03/2006 13:18:01     1

3 0.55500 simple.sh  root         r     03/03/2006 13:18:01     1

– qmod :

qmod 는 작업 대겨열을 제어 하는 명령이다. 특정 대기열에서 동작하는 모든 작업

을 제어할 수 있다.

참고로 대겨열은 qstat -f 로 확인 가능하다. all.q@ora01,all.q@ora02 이 모두 대기열

에 해당한다.

ex > qmod <option> 대기열

qmod -s 대기열 이름 : 해당 대기열의 작업을 일시 중단한다.

qmod -us 대기열 이름 : 중단된 대기열 상태를 해제한다.

qmod -d 대기열 이름 : 해당 대기열에 모든 실행 권한을 중단한다.

qmod -e 대기열 이름 : 중단된 실행 권한을 해제한다.

qmod -c 대기열 이름 : 작업 중 E 가 발생하여 holding 된 대기열의 상태를 정상으로복구한다.

– qacct :

SGE 사용 리소스에 대한 회계 정보를 보여 주는 명령어 이다.

qdel :

제출된 job 을 대기열에서 제거하는 명령이다.

[root@ora01 sge]# qstat

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID

—————————————————————————————————————–

16 0.55500 simple.sh  root         r     03/03/2006 13:29:46 all.q@ora01                        1

18 0.55500 simple.sh  root         r     03/03/2006 13:29:46 all.q@ora01                        1

15 0.55500 simple.sh  root         r     03/03/2006 13:29:46 all.q@ora02                        1

17 0.55500 simple.sh  root         r     03/03/2006 13:29:46 all.q@ora02                        1

19 0.55500 simple.sh  root         qw    03/03/2006 13:29:44                                    1

20 0.55500 simple.sh  root         qw    03/03/2006 13:29:44                                    1

21 0.55500 simple.sh  root         qw    03/03/2006 13:29:45                                    1

22 0.55500 simple.sh  root         qw    03/03/2006 13:29:45                                    1

23 0.55500 simple.sh  root         qw    03/03/2006 13:29:45                                    1

24 0.55500 simple.sh  root         qw    03/03/2006 13:29:45                                    1

25 0.00000 simple.sh  root         qw    03/03/2006 13:29:46                                    1

[root@ora01 sge]# qdel 25

root has deleted job 25

[root@ora01 sge]# qstat

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID

—————————————————————————————————————–

16 0.55500 simple.sh  root         r     03/03/2006 13:29:46 all.q@ora01                        1

18 0.55500 simple.sh  root         r     03/03/2006 13:29:46 all.q@ora01                        1

15 0.55500 simple.sh  root         r     03/03/2006 13:29:46 all.q@ora02                        1

17 0.55500 simple.sh  root         r     03/03/2006 13:29:46 all.q@ora02                        1

19 0.55500 simple.sh  root         qw    03/03/2006 13:29:44                                    1

20 0.55500 simple.sh  root         qw    03/03/2006 13:29:44                                    1

21 0.55500 simple.sh  root         qw    03/03/2006 13:29:45                                    1

22 0.55500 simple.sh  root         qw    03/03/2006 13:29:45                                    1

23 0.55500 simple.sh  root         qw    03/03/2006 13:29:45                                    1

24 0.55500 simple.sh  root         qw    03/03/2006 13:29:45                                    1

[root@ora01 sge]# qdel -u root

// root 사용자로 실행 된 모든 job 이 큐잉에서 제거 된다.

– qhold :

큐잉을 구성하는 SGE상의 대기열에서 사용자/관리자/시스템/작업등의 요소를 큐잉 시스템에서

배재 시키는 명령어이다. qhold 에서 holding 된 리소스는 SGE 에서 작업을 실행 모드로 제출

하지 않고 대기 시키게 된다.

ex> qhold  < -u 사용자 -o 운영자  -s 호스트 >  작업ID

[root@ora01 sge]# qstat

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID

—————————————————————————————————————–

27 0.55500 simple.sh  root         r     03/03/2006 13:32:01 all.q@ora01                        1

29 0.55500 simple.sh  root         r     03/03/2006 13:32:01 all.q@ora01                        1

26 0.55500 simple.sh  root         r     03/03/2006 13:32:01 all.q@ora02                        1

28 0.55500 simple.sh  root         r     03/03/2006 13:32:01 all.q@ora02                        1

30 0.55500 simple.sh  root         qw    03/03/2006 13:31:58                                    1

31 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

32 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

33 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

34 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

35 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

36 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

37 0.55500 simple.sh  root         qw    03/03/2006 13:32:00                                    1

38 0.55500 simple.sh  root         qw    03/03/2006 13:32:00                                    1

39 0.55500 simple.sh  root         qw    03/03/2006 13:32:00                                    1

[root@ora01 sge]# qhold 39

modified hold of job 39

[root@ora01 sge]# qstat

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID

—————————————————————————————————————–

27 0.55500 simple.sh  root         r     03/03/2006 13:32:01 all.q@ora01                        1

29 0.55500 simple.sh  root         r     03/03/2006 13:32:01 all.q@ora01                        1

26 0.55500 simple.sh  root         r     03/03/2006 13:32:01 all.q@ora02                        1

28 0.55500 simple.sh  root         r     03/03/2006 13:32:01 all.q@ora02                        1

30 0.55500 simple.sh  root         qw    03/03/2006 13:31:58                                    1

31 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

32 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

33 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

34 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

35 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

36 0.55500 simple.sh  root         qw    03/03/2006 13:31:59                                    1

37 0.55500 simple.sh  root         qw    03/03/2006 13:32:00                                    1

38 0.55500 simple.sh  root         qw    03/03/2006 13:32:00                                    1

39 0.55500 simple.sh  root         hqw   03/03/2006 13:32:00                                    1

[root@ora01 sge]# qhold -u root

modified hold of job 40

modified hold of job 41

modified hold of job 42

modified hold of job 43

modified hold of job 44

modified hold of job 45

modified hold of job 46

modified hold of job 47

modified hold of job 48

[root@ora01 sge]# qstat

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID

—————————————————————————————————————–

40 0.55500 simple.sh  root         hr    03/03/2006 13:38:16 all.q@ora01                        1

41 0.55500 simple.sh  root         hr    03/03/2006 13:38:16 all.q@ora02                        1

42 0.55500 simple.sh  root         hr    03/03/2006 13:38:16 all.q@ora02                        1

39 0.00000 simple.sh  root         hqw   03/03/2006 13:32:00                                    1

43 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

44 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

45 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

46 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

47 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

qhold로 holding 한 작업은 qrls 혹은 qalter 로 해재 할 수 있다.

– qhost :

SGE 시스템의 큐잉 시스템을 구성하는 호스트에 대한 리소스 상태를 보여주는 명령어 이다.

ex> qhost -u <사용자> -h <호스트>

[root@ora01 sge]# qhost

HOSTNAME                ARCH         NCPU  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS

——————————————————————————-

global                  –               –     –       –       –       –       –

ora01                   lx24-x86        2  0.01    2.0G  165.2M    4.0G     0.0

ora02                   lx24-x86        2  0.00    2.0G  142.0M    4.0G  160.0K

[root@ora01 sge]# qhost -h ora01

HOSTNAME                ARCH         NCPU  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS

——————————————————————————-

global                  –               –     –       –       –       –       –

ora01                   lx24-x86        2  0.00    2.0G  164.3M    4.0G     0.0

[root@ora01 sge]# qhost -u root

HOSTNAME                ARCH         NCPU  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS

——————————————————————————-

global                  –               –     –       –       –       –       –

ora01                   lx24-x86        2  0.00    2.0G  164.3M    4.0G     0.0

ora02                   lx24-x86        2  0.00    2.0G  141.3M    4.0G  160.0K

-qrls :

qhost 로 holding 된 자원의 상태를 풀어 주는 명령어 이다.

[root@ora01 sge]# qstat

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID

—————————————————————————————————————–

43 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

44 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

45 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

46 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

47 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

48 0.00000 simple.sh  root         hqw   03/03/2006 13:38:17                                    1

49 0.00000 simple.sh  root         hqw   03/03/2006 13:38:17                                    1

[root@ora01 sge]# qrls 43

modified hold of job 43

[root@ora01 sge]# qstat

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID

—————————————————————————————————————–

43 0.00000 simple.sh  root         qw    03/03/2006 13:38:16                                    1

44 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

45 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

46 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

47 0.00000 simple.sh  root         hqw   03/03/2006 13:38:16                                    1

48 0.00000 simple.sh  root         hqw   03/03/2006 13:38:17                                    1

49 0.00000 simple.sh  root         hqw   03/03/2006 13:38:17                                    1

– qconf :

SGE 의 구성을 제어하는 기본 관리 명령어 이다. qconf를 통해 sge 구성 요소들을 확인, 추가, 삭제

할수 있다.

[root@ora01 sge]# qconf -sconf     // sge 시스템 설정 구성 정보

global:

execd_spool_dir              /usr/clx/sge/default/spool

mailer                       /bin/mail

xterm                        /usr/bin/X11/xterm

load_sensor                  none

prolog                       none

epilog                       none

shell_start_mode             posix_compliant

login_shells                 sh,ksh,csh,tcsh

min_uid                      0

min_gid                      0

user_lists                   none

xuser_lists                  none

projects                     none

xprojects                    none

enforce_project              false

enforce_user                 auto

load_report_time             00:00:40

max_unheard                  00:05:00

reschedule_unknown           00:00:00

loglevel                     log_warning

administrator_mail           none

set_token_cmd                none

pag_cmd                      none

token_extend_time            none

shepherd_cmd                 none

qmaster_params               none

execd_params                 none

reporting_params             accounting=true reporting=false \\

flush_time=00:00:15 joblog=false sharelog=00:00:00

finished_jobs                100

gid_range                    20000-20200

qlogin_command               telnet

qlogin_daemon                /usr/sbin/in.telnetd

rlogin_daemon                /usr/sbin/in.rlogind

max_aj_instances             2000

max_aj_tasks                 75000

max_u_jobs                   0

max_jobs                     0

auto_user_oticket            0

auto_user_fshare             0

auto_user_default_project    none

auto_user_delete_time        86400

delegated_file_staging       false

reprioritize                 0

[root@ora01 sge]# qconf -sh   /// adminitrative host 리스트 확인

[root@ora01 sge]# qconf -ah <hostname>  /// adminitrative host 추가 하기

[root@ora01 sge]# qconf -dh <hostname> /// adminitrative host 삭제 하기

[root@ora01 sge]# qconf -ss             /// submit host 리스트 확인

[root@ora01 sge]# qconf -as <hostname>  /// submit host 리스트 추가

[root@ora01 sge]# qconf -ds <hostname>  /// submit host 리스트 삭제

[root@ora01 sge]# qconf -se <hostname>  /// 실행 호스트의 세부 목록 확인

[root@ora01 sge]# qconf -se ora01

hostname              ora01

load_scaling          NONE

complex_values        NONE

load_values           load_avg=0.020000,load_short=0.000000, \\

load_medium=0.020000,load_long=0.000000,arch=lx24-x86, \\

num_proc=2,mem_free=1862.238281M,swap_free=4094.621094M, \\

virtual_free=5956.859375M,mem_total=2026.257812M, \\

swap_total=4094.621094M,virtual_total=6120.878906M, \\

mem_used=164.019531M,swap_used=0.000000M, \\

virtual_used=164.019531M,cpu=0.200000, \\

np_load_avg=0.010000,np_load_short=0.000000, \\

np_load_medium=0.010000,np_load_long=0.000000

processors            2

user_lists            NONE

xuser_lists           NONE

projects              NONE

xprojects             NONE

usage_scaling         NONE

report_variables      NONE

[root@ora01 sge]# qconf -sc   /// 요청 가능한 콤플렉스 속성 확인

#name               shortcut   type        relop requestable consumable default  urgency

#—————————————————————————————-

arch                a          RESTRING    ==    YES         NO         NONE     0

calendar            c          RESTRING    ==    YES         NO         NONE     0

cpu                 cpu        DOUBLE      >=    YES         NO         0        0

h_core              h_core     MEMORY      <=    YES         NO         0        0

h_cpu               h_cpu      TIME        <=    YES         NO         0:0:0    0

h_data              h_data     MEMORY      <=    YES         NO         0        0

h_fsize             h_fsize    MEMORY      <=    YES         NO         0        0

h_rss               h_rss      MEMORY      <=    YES         NO         0        0

h_rt                h_rt       TIME        <=    YES         NO         0:0:0    0

h_stack             h_stack    MEMORY      <=    YES         NO         0        0

h_vmem              h_vmem     MEMORY      <=    YES         NO         0        0

hostname            h          HOST        ==    YES         NO         NONE     0

load_avg            la         DOUBLE      >=    NO          NO         0        0

load_long           ll         DOUBLE      >=    NO          NO         0        0

load_medium         lm         DOUBLE      >=    NO          NO         0        0

load_short          ls         DOUBLE      >=    NO          NO         0        0

mem_free            mf         MEMORY      <=    YES         NO         0        0

mem_total           mt         MEMORY      <=    YES         NO         0        0

mem_used            mu         MEMORY      >=    YES         NO         0        0

min_cpu_interval    mci        TIME        <=    NO          NO         0:0:0    0

np_load_avg         nla        DOUBLE      >=    NO          NO         0        0

np_load_long        nll        DOUBLE      >=    NO          NO         0        0

np_load_medium      nlm        DOUBLE      >=    NO          NO         0        0

np_load_short       nls        DOUBLE      >=    NO          NO         0        0

num_proc            p          INT         ==    YES         NO         0        0

qname               q          RESTRING    ==    YES         NO         NONE     0

rerun               re         BOOL        ==    NO          NO         0        0

s_core              s_core     MEMORY      <=    YES         NO         0        0

s_cpu               s_cpu      TIME        <=    YES         NO         0:0:0    0

s_data              s_data     MEMORY      <=    YES         NO         0        0

s_fsize             s_fsize    MEMORY      <=    YES         NO         0        0

s_rss               s_rss      MEMORY      <=    YES         NO         0        0

s_rt                s_rt       TIME        <=    YES         NO         0:0:0    0

s_stack             s_stack    MEMORY      <=    YES         NO         0        0

s_vmem              s_vmem     MEMORY      <=    YES         NO         0        0

seq_no              seq        INT         ==    NO          NO         0        0

slots               s          INT         <=    YES         YES        1        1000

swap_free           sf         MEMORY      <=    YES         NO         0        0

swap_rate           sr         MEMORY      >=    YES         NO         0        0

swap_rsvd           srsv       MEMORY      >=    YES         NO         0        0

swap_total          st         MEMORY      <=    YES         NO         0        0

swap_used           su         MEMORY      >=    YES         NO         0        0

tmpdir              tmp        RESTRING    ==    NO          NO         NONE     0

virtual_free        vf         MEMORY      <=    YES         NO         0        0

virtual_total       vt         MEMORY      <=    YES         NO         0        0

virtual_used        vu         MEMORY      >=    YES         NO         0        0

– qstat :

SGE 상에 대기열 상태 확인

[root@ora01 sge]# qstat -f

queuename                      qtype used/tot. load_avg arch          states

—————————————————————————-

all.q@ora01                    BIP   2/2       0.02     lx24-x86

45 0.55500 simple.sh  root         r     03/03/2006 13:57:16     1

47 0.55500 simple.sh  root         r     03/03/2006 13:57:16     1

—————————————————————————-

all.q@ora02                    BIP   2/2       0.00     lx24-x86

44 0.55500 simple.sh  root         r     03/03/2006 13:57:16     1

46 0.55500 simple.sh  root         r     03/03/2006 13:57:16     1

############################################################################

– PENDING JOBS – PENDING JOBS – PENDING JOBS – PENDING JOBS – PENDING JOBS

############################################################################

48 0.55500 simple.sh  root         qw    03/03/2006 13:38:17     1

49 0.55500 simple.sh  root         qw    03/03/2006 13:38:17     1

– qmon :

SGE GUI 명령어이다. qmon 을 실행하면 GUI 상에서 시스템 관리 부터 작업 제출까지 모든것이

가능하다.

– qrsh :

대화형 작업 제출 시 사용하는 명령이다.

[root@ora01 sge]# qrsh

Last login: Fri Mar  3 10:08:02 from 192.168.123.2

[root@ora02 ~]# qrsh

Last login: Fri Mar  3 10:09:05 from 192.168.123.2

[root@ora01 ~]# qstat

job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID

—————————————————————————————————————–

51 0.55500 QRLOGIN    root         r     03/03/2006 13:58:51 all.q@ora01                        1

50 0.55500 QRLOGIN    root         r     03/03/2006 13:58:48 all.q@ora02                        1

[root@ora01 ~]# qrsh uname -a

Linux ora02 2.6.9-22.ELsmp #1 SMP Mon Sep 19 18:32:14 EDT 2005 i686 i686 i386 GNU/Linux

4. Sun Grid Engine UI (qmon) 이용하기

qmon 명령어로 Grid Engine Gui를 실행 하도록 한다.

SGE GUI를 이용하면 복잡한 command 와 option을 사용하지 않아도 쉽게 SGE 정책을

재구성하거나 Job 상태를 관리 할 수 있다.

5. Sung Grid Engine 의 Parallel distributed make (qmake) 적용하기

SGE 에는 qmake 라는 parallal distributed make 명령어가 존재 한다.

이 명령어를 이용하여 Makefile을 통한 Compiling 작업을 여러 노드로 분산해서 동시에

처리가 가능하다. 이 기능을 이용하면 EDA 계열의 회로 디자인 모듈 설계 프로그램계열에서

모듈을 분산해서 컴파일링 하는 작업등에 효율적으로 이용이 가능하다.

단 이는 컴파일 대상 데이터가 모두 NFS 상에 존재해야 한다.

간단한 테스트를 해보도록 하자.

[root@n001 sgeadmin]# tar xzvf php-5.1.2.tar.gz

[root@n001 sgeadmin]# cd php-5.1.2

[root@n001 php-5.1.2]# ./configure

[root@n001 php-5.1.2]# qmake -cwd -v PATH -l arch=lx24-x86 — -j 24

—————————————————————————————–

dynamic mode

/bin/sh /home/sgeadmin/php-5.1.2/libtool –silent –preserve-dup-deps –mode=compile gcc  -Iext/ctype/ -I/home/sgeadmin/php-5.1.2/ext/ctype/ -DPHP_ATOM_INC -I/home/sgeadmin/php-5.1.2/include -I/home/sgeadmin/php-5.1.2/main -I/home/sgeadmin/php-5.1.2 -I/usr/include/libxml2 -I/home/sgeadmin/php-5.1.2/ext/date/lib -I/home/sgeadmin/php-5.1.2/TSRM -I/home/sgeadmin/php-5.1.2/Zend    -I/usr/include -g -O2  -c /home/sgeadmin/php-5.1.2/ext/ctype/ctype.c -o ext/ctype/ctype.lo

—————————————————————————————–

Compile 진행 중에 다른 노드에서 qstat -f 로 상태를 확인해 보자

[root@n001 php-5.1.2]# qstat -f

—————————————————————————————–

queuename                      qtype used/tot. load_avg arch          states

—————————————————————————-

all.q@n001                     BIP   3/8       0.35     lx24-x86

2865 0.55500 sh         root         r     03/03/2006 14:04:58     1

2876 0.55500 sh         root         r     03/03/2006 14:04:58     1

2877 0.55500 sh         root         r     03/03/2006 14:04:58     1

—————————————————————————-

all.q@n002                     BIP   6/8       0.11     lx24-x86

2807 0.55500 qmake      root         r     03/03/2006 14:03:58     1

2868 0.55500 sh         root         r     03/03/2006 14:04:58     1

2875 0.55500 sh         root         r     03/03/2006 14:04:58     1

2878 0.55500 sh         root         r     03/03/2006 14:04:58     1

2880 0.55500 sh         root         r     03/03/2006 14:04:58     1

2881 0.55500 sh         root         r     03/03/2006 14:04:58     1

—————————————————————————-

all.q@n003                     BIP   4/8       0.12     lx24-x86

2866 0.55500 sh         root         r     03/03/2006 14:04:58     1

2873 0.55500 sh         root         r     03/03/2006 14:04:58     1

2879 0.55500 sh         root         r     03/03/2006 14:04:58     1

2882 0.55500 sh         root         r     03/03/2006 14:04:58     1

############################################################################

– PENDING JOBS – PENDING JOBS – PENDING JOBS – PENDING JOBS – PENDING JOBS

############################################################################

2883 0.55500 sh         root         qw    03/03/2006 14:04:46     1

2884 0.55500 sh         root         qw    03/03/2006 14:04:46     1

2885 0.55500 sh         root         qw    03/03/2006 14:04:46     1

2886 0.55500 sh         root         qw    03/03/2006 14:04:46     1

2887 0.55500 sh         root         qw    03/03/2006 14:04:46     1

2888 0.55500 sh         root         qw    03/03/2006 14:04:46     1

2889 0.00000 sh         root         qw    03/03/2006 14:04:59     1

2890 0.00000 sh         root         qw    03/03/2006 14:04:59     1

2891 0.00000 sh         root         qw    03/03/2006 14:04:59     1

2892 0.00000 sh         root         qw    03/03/2006 14:05:00     1

2893 0.00000 sh         root         qw    03/03/2006 14:05:00     1

2894 0.00000 sh         root         qw    03/03/2006 14:05:00     1

2895 0.00000 sh         root         qw    03/03/2006 14:05:00     1

2896 0.00000 sh         root         qw    03/03/2006 14:05:00     1

2897 0.00000 sh         root         qw    03/03/2006 14:05:00     1

2898 0.00000 sh         root         qw    03/03/2006 14:05:00     1

——————————————————————————————

그럼 위와 같이 Makefile 상에 나열된 Compiling batch 작업을 SGE 시스템에서 허용할 수

있는 작업 수 만큼 대기열에 대기 시켰다가 각 노드별로 작업을 분산 시켜 compiling 을

하게 한다.

주의 ) qmake 의 경우 모든 Compiling 작업에서 효과를 볼 수 있는 것은 아니다.

실제 개별 Object Compile 의 작업 크기가 작은 경우는 오히려 SGE 큐에 아주 작은 개별

작업을 등록해서 큐잉 시스템의 정책에 의해 재 분배 되어 처리 된다고 하면 오히려

단일 노드의 프로세스에서 쉬지 않고 순차적으로 처리하는것 보다 SGE 상에서 큐잉 제어

하는 시간이 더 많이 걸릴 수도 있다. qmake 가 효율적으로 이용가능한 경우는 하나의

object 의 compiling 시간이 아주 긴 경우 (1분이상)에는 단일 노드에서는 매 obj 마다

1분씩 소요되면서 순차적으로 처리하는데 qmake 를 이용하면 수십노드에서 수십개의 obj

를 동시에 compiling 하기 때문에 전체 작업 시간을 단축 시킬 수 있을 것이다.

qmake 사용 시 “-cwd -v PATH -l arch=lx24-x86 –” 같은 옵션을 붙여 주는데 이는 병렬

컴파일로 작업을 진행 할때 사용되는 옵션이다.

“qmake -cwd -v PATH -l arch=lx24-x86 –” 뒤에 일반 GNU make 의 옵션을 붙여 사용하면

병렬로 컴파일링이 가능하다.

만일 Synopsys와 같이 Application을 구동하기 위해 별도의 환경 설정이 필요한 경우엔

사용자의 bashrc 에 환경 설정을 적용해도 분산 환경에서 -cmd -v PATH 만으로는 환경

설정 까지 위임 시키지 않으므로 문제가 발생할 수 있다. 이때는 qmake 에 -V 옵션을

추가 함으로 해결이 가능하다.

Synopsys Compile 시 qmake 사용 옵션

“qmake -V -cwd -v PATH -l arch=lx24-x86 — -f pass0/Makefile -j 16”

이밖에 Synopsys의 경우 초기 db 데이터를 로딩해서 로딩된 db파일을 재 구성하게 되는데

이때 NFS방식에서 많은 노드가 동시에 초기 db를 로딩함으로 해서 일부 로딩이 정상적으로

완료되지 않은 상태에서 Synopsys가 다음 단계로 넘어감으로 해서 문제가 발생 할 수 있다.

이때는 dc_shell-t 초기 로딩 시 약간의 time gap 를 추가하여 문제를 해결 할 수 있다.

6. SGE 의 Complex 관리 기능을 이용한 라이센스 관리 하기

1. SGE를 통한 License Management 기능 이용하기

SGE 의 Complex 기능을 이용하면 사용자가 작업의 속성을 정의하고 이 속성의 활성

유무를 통해 SGE 큐에서 전체 시스템에서 사용자 속성에 해당하는 작업의 수를 큐

에서 관리 할 수가 있다.

이는 고가의 라이센스를 취득해야 사용이 가능한 어플리케이션의 라이센스를 관리

하는데 유용하게 사용할 수 있다.예를 들면..

작업을 실행 할 수 있는 시스템의 수는 10대이고 Synopsys라는 프로그램의 동시

사용 가능 라이센스 수는 5개이다.

Synopsys의 경우 별도의 라이센스 서버가 있어 10대의 작업 서버에서 Synopsys

프로그램이 구동이 되면 라이센스 서버에서 1개의 라이센스가 발급되고 실행된

Synopsys의 작동이 완료되면 1개의 라이센스를 반납하게 된다.

만일 Synopsys를 사용해야 하는 사용자 수가 30명이면 이 중 5명의 사용자가 먼저

Synopsys를 사용하면 뒤에 Synopsys를 실행하는 사용자는 라이센스가 없다하여

사용이 금지될 것이다.

그럼 30명의 사용자는 서로가 서로에게 어플리케이션을 현재 사용하는지를 수동으로

체크해야 하고 서로가 순서를 정해 작업을 해야 하는 번거로움이 생긴다.

이런 문제를 SGE의 라이센스 관리기능을 이용하면 사용자는 평소와 같이 Synopsys

실행을 SGE의 큐에 등록하는 방식으로 실행하고 SGE에서 Synopsys 속성을 추가하여

동시에 5개의 실행 권한을 주면 SGE를 통해 실행한 Synopsys는 SGE에서 동시에 5개

씩 사용이 가능토록 관리를 해주게 된다.

설정 방법은 단순하다.

SGE의 관리 서버 중 하나로 접속하여 관리 UI인 qmon 을 실행한다. 그런후..

[Complex Configuration] 메뉴를 선택한다.

상위에 Attributes 추가 폼에

——————————————————————————-

Name    Shortcut  Type  Relation  Requestable  Consumable  Default  Urgency

——————————————————————————-

[Synopsys]  [sp]    [INT]    [<=]       [YES]       [YES]       [0]      [0]

——————————————————————————-

와 같이 입력 하고 [Add] 버턴을 누른다. 그런 후 [Commit] 버턴을 눌려서 설정을

적용한다.

그런후 [Host Configuration] 메뉴를 선택하여 [Execution Host]로 들어가면 아래에

Host list 에 global 항목을 선택하고 [Modify] 메뉴를 선택한다.

그럼 Add/Modify Executtion 창이 뜨게 된다.

그럼 [Consumables/Fixed Attribute] 탭으로 가서 [Name] 메뉴를 누르면 [select an item]

이란 창이 뜨는데..Available attribute 리스트에서 Synopsys 를 찾아 클릭하면 추가가 된다.

그런 후 Synopsys 항목의 Values 값을 입력할 수 있게 되는데 여기에 보유 라이센스 개수를

적어 주면 된다.

이제 이것으로 SGE의 어플리케이션 라이센스 설정이 완료되었다.

이제 터미널에서 qsub 를 이용해서 작업을 실행하면 되는데 이때 -l 옵션을 이용하여

sp=1 (sp 는 Synopsys의 shortcut)이란 속성을 전달 하면 SGE에서 이를 받아 들여

관리하게 된다.

SGE로 구성된 여러대의 제출 서버에서 아래와 같이 작업을 실행한다.

[root@uni04 sge]# qsub -l sp=1 examples/jobs/simple.sh

그런 후 qstat -f 로 큐 사태를 확인하면..

# qstat -f

—————————————————————————-

queuename                      qtype used/tot. load_avg arch          states

—————————————————————————-

all.q@uni01                    BIP   1/2       0.00     lx24-amd64

111 0.55500 simple.sh  root         r     03/16/2006 19:28:00     1

—————————————————————————-

all.q@uni02                    BIP   1/2       0.00     lx24-amd64

110 0.55500 simple.sh  root         r     03/16/2006 19:28:00     1

—————————————————————————-

all.q@uni03                    BIP   1/2       0.00     lx24-amd64

112 0.55500 simple.sh  root         r     03/16/2006 19:28:00     1

—————————————————————————-

all.q@uni04                    BIP   0/2       0.00     lx24-amd64

############################################################################

– PENDING JOBS – PENDING JOBS – PENDING JOBS – PENDING JOBS – PENDING JOBS

############################################################################

113 0.55500 simple.sh  root         qw    03/16/2006 19:27:50     1

114 0.55500 simple.sh  root         qw    03/16/2006 19:27:51     1

115 0.55500 simple.sh  root         qw    03/16/2006 19:27:51     1

116 0.55500 simple.sh  root         qw    03/16/2006 19:27:51     1

117 0.55500 simple.sh  root         qw    03/16/2006 19:27:52     1

118 0.55500 simple.sh  root         qw    03/16/2006 19:27:52     1

—————————————————————————

위와 같이 SGE 의 synopsys complex에 정해진 수 (여기서는 3개) 만큼만 실행을 하고

나머지는 모두 큐에 대기 상태로 남아 있게 된다.

앞서 실행 되던 작업이 하나 씩 완료가되면 완료되는 대로 다음 순의 작업의 하나씩

실행 되게 되는 것이다.

이 같은 방식으로 여러개의 어플리케이션의 라이센스를 효율적으로 관리 할 수가 있다.

7. SGE와 MPICH, LAMMPI 통합하기

SGE 는 MPICH 와 함께 연동되어 MPICH에서 호출되는 프로세스를 스케줄링 하여 MPICH

의 Parall Processing 작업을 큐잉 시스템으로 제어할 수 있게 한다.

이는 소규모 MPP 시스템 환경에서는 필요하지 않으나 대규모의 시스템을 여러명의

사용자가 동시에 사용할 때는 반드시 필요한 기능이다.

예를 들면 40개의 processor 를 가진 MPP 환경에서 한 유저가 10개의 processor로 작업

을 실행 했다고 하자. 그 후 또 다른 유저가 10개의 프로세서로 작업을 실행 할때..

이 사용자는 MPI 시스템의 전체 서버에 각각 접속하여 앞에 사용자가 실행한 작업에

사용되는 프로세스를 확인 한 후 현재 유휴중인 프로세스만으로 machines 파일을 만들고

mpirun 구동 시 -machinefile 옵션을 이용하여 작업을 실행해야 할것이다.

위와 같이 원론적으로 작업을 하는 거 역시 사용자 수가 많으면 거의 불가능한 일이라

볼 수 있다.

여기서 mpirun 을 구동하는 구문을 sge 의 qsub 를 통해 실행하면 알아서 스케줄링이

되지 않냐는 의문을 제기 할 수 있다.

SGE 와 MPICH 가 곧 아래에 설명할 방법으로 연동이 되어 있지 않는 경우 qsub로 실행

을 시켰을때  mpirun 의 master processor 만을 SGE 프로세스 관리 엔진에서 인식하게

된다.

즉 mpirun 에서 10개의 CPU를 이용하여 작업을 전달하더라도 SGE에서는 1개의 작업으로

인식하게 되는 것이다.

이 같이 계속 SGE를 이용하여 작업을 전달 할때 40개의 CPU를 가진 시스템일 경우

40개의 mpi 작업이 동시에 실행되고 각 mpi 작업 별로 10개의 CPU를 호출했을 경우

전체 400개의 프로세스가 동시에 사용되게 되는 것이다.

만일 10개의 CPU를 가진 MPP 시스템이 있을 있고, 작업이 무조건 10개의 CPU를 모두

사용해야 할 경우라면  앞서 설명한 SGE의 라이센스 관리 방법을 이용하여 이 문제를

해결 할 수 있으나 보유한 CPU 수 보다 작은 CPU를 이용하여 여러개의 작업을 동시에

해야 할 경우엔 반드시 MPICH 와 SGE 의 연동이 필요하게 될것이다.

그럼 연동 방법에 대해 알아 보도록 하자.

먼저 ..SGE 에서 mpich 에 대한 parallel environment 환경을 설정해야 한다.

이는 qmon 을 이용하여 설정이 가능하다.

# qmon

-> parallel environment 메뉴로 간다.

-> Add 버턴을 이용하여 새로운 PE 를 생성한다.

설정 내용은 아래와 같다.

pe_name           mpich

slots             9

user_lists        NONE

xuser_lists       NONE

start_proc_args   /engrid/ensge/mpi/startmpi.sh -catch_rsh $pe_hostfile

stop_proc_args    /engrid/ensge/mpi/stopmpi.sh

allocation_rule   $fill_up

control_slaves    TRUE

job_is_first_task FALSE

urgency_slots     min

저장하고 나온다.

start_proc_args 와 stop_proc_args 에서 호출되는 startmpi.sh, stopmpi.sh 스크립터

는 현재 설치된 SGE 경로와 맞게 입력하면 된다.

이제 사용되어지는 queue 에 새로 생성된 PE 를 입력한다.

현재 큐을 확인 하는 방법은 아래와 같다.

# qconf -sql

all.q

큐의 설정 내용을 확인 및 수정하는 방법은 아래와 같다.

# qconf -mq all.q

————————————————————————————-

qname                 all.q

hostlist              @allhosts

seq_no                0

load_thresholds       np_load_avg=1.75

suspend_thresholds    NONE

nsuspend              1

suspend_interval      00:05:00

priority              0

min_cpu_interval      00:05:00

processors            UNDEFINED

qtype                 BATCH INTERACTIVE

ckpt_list             NONE

pe_list               make mpich <- 추가

rerun                 FALSE

slots                 1,[node03=4],[node04=4],[node05=1]

.

.

———————————————————————————–

위 설정에서 pe_list 에 새로 추가한 mpich 를 포함하도록 한다.

이제 SGE의 작업 제출 환경을 수정하도록 한다.

# vi $SGE_ROOT/default/common/sge_request

————————————————————–

.

-v MPICH_PROCESS_GROUP=no

————————————————————–

# vi $SGE_ROOT/mpi/rsh

————————————————————–

echo $SGE_ROOT/bin/$ARC/qrsh -inherit -nostdin $rhost $cmd

exec $SGE_ROOT/bin/$ARC/qrsh -inherit -nostdin $rhost $cmd

else

echo $SGE_ROOT/bin/$ARC/qrsh -inherit $rhost $cmd

exec $SGE_ROOT/bin/$ARC/qrsh -inherit $rhost $cmd

to ..

echo $SGE_ROOT/bin/$ARC/qrsh -V -inherit -nostdin $rhost $cmd

exec $SGE_ROOT/bin/$ARC/qrsh -V -inherit -nostdin $rhost $cmd

else

echo $SGE_ROOT/bin/$ARC/qrsh -V -inherit $rhost $cmd

exec $SGE_ROOT/bin/$ARC/qrsh -V -inherit $rhost $cmd

—————————————————————

이제 qsub 에 제출 할 sge_scripts 를 생성하도록 한다.

# vi sge_mpi_run.sh

——————————————————————

#!/bin/sh

#$ -N mpitest

#$ -cwd

#$ -v -V

#$ -v MPIHOME=/usr/local/mpich-gcc

$MPIHOME/bin/mpirun -np $NSLOTS -machinefile $TMPDIR/machines $MPIHOME/examples/cpi

——————————————————————

qsub 명령을 이용하여 작업을 제출 한다.

# qsub -pe mpich <cpu_num> sge_mpi_run.sh

아래는 PE를 제어할 수 있는 간단한 명령 구문이다.

[root@node05 ensge]# qconf -spl

mpich

-> 현재 설정된 PE를 확인한다.

[root@node05 ensge]# qconf -sp mpich

pe_name           mpich

slots             9

user_lists        NONE

xuser_lists       NONE

start_proc_args   /engrid/ensge/mpi/startmpi.sh -catch_rsh $pe_hostfile

stop_proc_args    /engrid/ensge/mpi/stopmpi.sh

allocation_rule   $fill_up

control_slaves    TRUE

job_is_first_task FALSE

urgency_slots     min

-> 해당 PE 의 설정값을 확인한다.

[root@node05 ensge]# qconf -ap mpi

——————————————————————

pe_name           mpi

slots             0

user_lists        NONE

xuser_lists       NONE

start_proc_args   /bin/true

stop_proc_args    /bin/true

allocation_rule   $pe_slots

control_slaves    FALSE

job_is_first_task TRUE

urgency_slots     min

-> qmon 을 이용하지 않고 특정 PE를 추가한다. 해당 설정을 변경 후 wq 로 저장하면

된다.

[root@node05 ensge]# qconf -sql

all.q

-> 현재 존재하는 queue 를 확인하다.

[root@node05 ensge]# qconf -sq all.q

-> 해당 queue의 설정 값을 확인한다.

[root@node05 ensge]# qconf -mq all.q

-> 해당 queue의 설정 값을 변경한다.

다음 장에서는  SGE Scripts 생성하기를 이용하여 보다 더 세밀한 작업 제출 스크립터를

만들어 보자.

8. SGE Scripts 생성하기

### sample scripts

아래는 povray 를 sge 에 제출하는 스크립터이다.

——————————————————————————-

#!/bin/sh

#$ -cwd

#$ -V

#$ -S /bin/bash

#$ -N povray

#$ -v MPIHOME=/engrid/enhpc/mpich/gcc

#$ -l povray=2

#$ -pe mpich 10

#$ -o $HOME/log/result_log.out

#$ -e $HOME/log/result_log.err

export DISPLAY=192.168.123.2:0.0

$MPIHOME/bin/mpirun -np $NSLOTS -machinefile $TMPDIR/machines  \\

/usr/local/bin/mpi-x-povray \\

+i/engrid/enhpc/bench/povray/pvm/pvmpov3_1g_2/povray31/scenes/advanced/chess2.pov \\

+h768 +w1024 +FT +v100 -q9 -mv2.0 -b1000 -nw32 -nh32 -nt16 \\

-L/engrid/enhpc/bench/povray/pvm/pvmpov3_1g_2/povray31/include +v +D

——————————————————————————-

### SGE 변수 정의 설명

-cwd : 현재 작업이 수행되는 경로를 다른 노드에서 유지 시킨다.

-v : 현재 작업이 수행되는 환경의 특정 환경 변수를 다른 노드에도 유지 시킨다.

-S : 해당 스크립터가 수행될 SHELL 환경을 정의한다.

-N : 해당 작업의 작업 이름 ( qstat -f ) 로 큐잉 상태를 확인 할때 표기된다.

-l : SGE complex 에서 정의된 특정 리소스의 값을 정의한다.

-pe : PE 에 정의된 설정을 반영한다.

-o : 작업 수행 시 콘솔에 출력되는 output message 를 저장한다.

-e : 작업 수행 시 콘솔에 출력되는 error message 를 저장한다.

-o, -e 에 저장되는 log 파일은 tail -f 를 이용하여 작업 진행 상태를 확인 할수

있다.

#### 설치 후 주로 발생 하는 문제

1. 일반 계정으로 qrsh 실행 시 ..

rcmd: socket: Permission denied

같은 오류 발생 ..

해결방법 :

$SGE_ROOT/utilbin/arch/ 밑에 있는 rsh, rlogin 의 퍼미션을 setuid 로 변경해줌

# chown root rsh

# chown root rlogin

# chmod 4511 rsh

# chmod 4511 rlogin

2. Warning: no access to tty (잘못된 파일 기술자).

Thus no job control in this shell.

해결 방법 qsub 에 제풀할 스크립터에

#$ -S /bin/sh

를 추가한다.

3. SGE Scripts 주요 옵션

-j y  : output, error log merged

-m be

-M alang@clunix.com

-o test

-pe mpich 4

-S /bin/sh

-v MPICH_PROCESS_GROUP=no,__SGE_PREFIX__O_WORKDIR=/engrid/ensge

4. IP Multipathing 환경에서의 host_aliases 설정

Network Interface 가 여러개인 환경에서 SGE 는 실제 system 의 호스트네임에 해당하는 hostname

만을 인식하게 된다.

하지만 클러스터 시스템 구축 시 성능등의 문제로 여러개의 네트워크 채널을 나누는 경우가 대부분

인데 이때 실제 시스템 호스트네임이 적용된 NIC 가 아닌 다른 NIC를 통해 SGE를 구축하고자 할때

host_aliases 설정을 이용하여 여러개의 호스트를 하나의 호스트 처럼 사용이 가능하다.

예 ) /etc/hosts 설정 내용 ..

192.168.123.71                waveform

192.168.10.1                node01

위 두개의 호스트는 같은 서버에 장착된 NIC에 각각 부여된 호스트네임이다.

기본적으로 waveform 이 시스템의 호스트네임으로 잡혀 있지만 SGE의 경우 node01 을 통해 동작 시키고

싶다. 이런 경우 ..

$SGE_ROOT/default/common/host_aliases 파일 생성 후

vi host_aliases

——————————————————————————-

node01                waveform

과 같이 설정하면 된다. 그런 후 반드시 sge_qmaster 데몬과 sge_execd 데몬 재시작.

이 밖에 IP의 변동은 없지만 실제 셋팅 당시의 지정한 호스트네임을 사이트 구축 시 변경하고자

할때 동일한 방식으로 처리 하면 된다.

vi /etc/hosts

——————————————————————————-

192.168.123.71                waveform        node01

5. Fluent 연동

# fluent 3d -i fluent_jou -sge -sgepe mpich 6

# qsub -cwd -pe mpich 6 -v FLUENT_INC=/usr/local/fluent/Fluent.Inc,DISPLAY=192.168.123.2:0.0 -N alang_test -j y -o alang_test.log /usr/local/fluent/Fluent.Inc/bin/fluent 3d -pnmpi -i fluent_jou

fluent 6.2.x 대에서는 정상적으로 제출이 되지만 6.3.x 에서 멀티노드를 이용한 MPI

작업 제출 시에는

SGE 의 작업 노드 선정 단계에서 sgemaster 에 연결할 수 없다는 메세지와 함께

노드 선출이 되지 않는 경우가 발생한다. 이때는 아래와 같이 pe 를 재구성한다.

# qconf -ap fluent_pe

——————————————————————————-

pe_name           fluent_pe

slots             22

user_lists        NONE

xuser_lists       NONE

start_proc_args   /engrid/ensge/mpi/startmpi.sh $pe_hostfile

stop_proc_args    /engrid/ensge/mpi/stopmpi.sh

allocation_rule   $fill_up

control_slaves    TRUE

job_is_first_task FALSE

urgency_slots     min

——————————————————————————-

만일 작업 수행 제일 마지막에 아래와 같은  에러가 로그가 발생하면..

rm: cannot remove `/tmp/113.1.all.q/rsh’: No such file or directory

stop_proc_args를 /bin/true 로 변경하면 된다.

6. 특정 노드에 작업 전달 하기

– 특정 큐에 작업 전달하기

qsub -q all.q@grid00,all.q@grid01  job_scripts

– MPI 작업 시 특정 노드를 마스트로 작업 전달 하기

qsub -masterq all.q@grid00 -pe mpich 6 job_scripts

7. DISPLAY 를 이용한 원격 UI 작업을 실행 시.

qsub 로 작업 전달 시 ..-masterq 를 이용하여 작업의 마스터 노드를 지정하고

-v DISPLAY 설정으로 GUI를 띄울 클라이언트를 지정한다.

클라이언트 머신에서는 masterq 로 지정된 서버로 ssh -X 혹은 xmanager와 같은

도구로 masterq 에 접속을 하여 x-forward 상태로 만들어 놓는다.

qsub 를 이용하여 작업을 전달 하면 된다.

8. NFS로 $SGE_ROOT/default 연결 시 권장 mount 방식

# vi /etc/exports

—————————————————————————

/engrid/ensge   *(rw,no_root_squash)

# vi /etc/fstab

————————————————————————–

grid000:/engrid/ensge   /engrid/ensge   nfs     rw,intr,soft,bg    1 0

9. PE 구성 시 CPU 할당 방법 종료

$fill_up : CPU 자원 할당 시 같은 노드에서 우선 할당 하도록 구성 할 때 ..

( 2core+2cpu = 4core 시스템 2대에  4개 프로세스를 이용한 작업 전달 시 1대 노드에서 4core 할당 )

$round_robin : 가용할 수 있는 노드에 균등하게 분배하여 할당함.

( 2core+2cpu = 4core 시스템 2대에 4개 프로세스를 이용한 작업 전달 시 1대 노드에 2core, 다른 1대 노드에 2core 할당)

10. 특정 작업의 대한 의존성 부여

(특정 작업이 종료하기 전에 작업 수행 안함.)

-hold_jid <jobid>

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.