Sun Grid Engine를 이용한 CAE 통합 HPC 환경 구현-20120521

Sun Grid Engine를 이용한 CAE 통합 HPC 환경 구현

                           
                          작성일 : 2006년 3월 3일
                          수정일 : 2012년 5월 21일
                          작성자 : 시스존/서진우 (
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개) 만큼만 실행을 하고
나머지는 모두 큐에 대기 상태로 남아 있게 된다.
앞서 실행 되던 작업이 하나 씩 완료가되면 완료되는 대로 다음 순의 작업의 하나씩
실행 되게 되는 것이다.

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

complex 의 default 값이 0 일 경우에는 작업 제출에 -l 옵션으로 해당 값을 지정해야 하고,
만일 default 값이 있는 경우에는 -l 옵션이 없다하더라도 작업이 들어가면 해당 값이 차감
된다.

Consumable 값이 NO 이면 해당 -l 옵션을 붙여도 수가 증가되지 않는다. YES면 정의된 값이
증가된다. 만일 PE가 같이 사용되면 정의된 값에 PE수를 곱한값이 증가된다. JOB이면 작업수
마다 default 값이 올라가게 된다.

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

act_qmaster 수정

qconf -mhgrp @allhosts 수정

 

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.1.x 대에서는 정상적으로 제출이 되지만 6.2.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 로 변경하면 된다.

control_slaves    TRUE

로 할경우 qdel 시 바로 스케줄러상에서 작업 종료 상태 적용이 즉각적으로 이루어
지지 않는 문제가 있음

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>

10. 모든 사용자에 대한 모든 작업 정보 보기

qstat -u “*”

11. mpich2 연동 스크립터

#!/bin/bash
#$ -cwd
#$ -S /bin/bash
#$ -j y
export MPICH2_HOME=/share/apps/mpich2/intel
export MPICH2_BIN=$MPICH2_HOME/bin
export MPICH2_CONF=”$HOME/.mpd.conf”
APP=/home/user1/cpi
if [ ! -r $MPICH2_CONF ]; then
        SECRET=`mkpasswd -l 7 -s 0`
        echo “secretword=$SECRET” > $MPICH2_CONF
        chmod 600 $MPICH2_CONF
fi
$MPICH2_BIN/mpdboot -n “$NHOSTS” -f “$TMPDIR/machines”

$MPICH2_BIN/mpiexec -l -machinefile $TMPDIR/machines -n $NSLOTS $APP

jobs=`$MPICH2_BIN/mpdlistjobs`
if [ X”$jobs” = X ]; then
        $MPICH2_BIN/mpdallexit
fi

12. sgemaster, sgeexec 서버 제거하기

cd /engrid/ensge

./inst_sge -um 

./inst_sge -ux -host gcfs001

13. 전체 코어와 남음 코어 확인 하기

#  qstat -g c

CLUSTER QUEUE                   CQLOAD   USED  AVAIL  TOTAL aoACDS  cdsuE 
——————————————————————————-
all.q                             0.06      0     32     32      0      0

14. ABAQUS implicit 연동

abaqus의 경우 implicit 를 무난히 사용하기 위해서는
abaqus_v6.env 설정 내용에 mp_file_system = (SHARED,LOCAL) 설정이 되어야 한다.
그런 후 병렬 처리를 하면 scratch 파일이 LOCAL에 저장되게 된다.

하지만 SGE에서 scratch 파일을 정상적으로 사용하기 위해서는 pe 설정도 변경해야한다.

# qconf -ap abaqus_pe
——————————————————————————-
pe_name           abaqus_pe
slots             22
user_lists        NONE
xuser_lists       NONE
start_proc_args   /engrid/ensge/mpi/startmpi.sh $pe_hostfile
stop_proc_args    /bin/true
allocation_rule   $fill_up
control_slaves    TRUE
job_is_first_task FALSE
urgency_slots     min
——————————————————————————-

15. SGE configure 파일로 자동 설치 하기

# vi sge_auto_install.txt
——————————————————————————-
#————————————————-
# SGE default configuration file
#————————————————-

SGE_ROOT=”/engrid/ensge”
SGE_QMASTER_PORT=”536″
SGE_EXECD_PORT=”537″
CELL_NAME=”default”
ADMIN_USER=”clunix”
QMASTER_SPOOL_DIR=”/engrid/ensge/default/spool/qmaster”
EXECD_SPOOL_DIR=”/engrid/ensge/default/spool”
GID_RANGE=”20000-21000″
SPOOLING_METHOD=”berkeleydb”
DB_SPOOLING_SERVER=”none”
DB_SPOOLING_DIR=”/engrid/ensge/default/spool/spooldb”
ADMIN_HOST_LIST=”super01 super02 super03″
SUBMIT_HOST_LIST=”super01 super02 super03″
EXEC_HOST_LIST=”super01 super02 super03″
HOSTNAME_RESOLVING=”true”
SHELL_NAME=”rsh”
COPY_COMMAND=”rcp”
DEFAULT_DOMAIN=”none”
ADD_TO_RC=”true”
SET_FILE_PERMS=”true”
RESCHEDULE_JOBS=”wait”
SCHEDD_CONF=”1″
REMOVE_RC=”true”
——————————————————————————

cd /engrid/ensge
./inst_sge -m -x -auto /patch/sge_auto_install.txt

;;;

그리드센터에 설치 시에는

ensh 및 기타 클러스터 환경 설정이 모두 완료된 상태에서…

1. 모든 노드에 ensge rpm 설치
2. master 노드의 /engrid/ensge 를 계산노드에서 모두 NFS 마운트 한 후 ..
3. ./inst_sge -m -x -auto /patch/sge_auto_install.txt

모든 노드에 기본 SGE 설정이 완료된다. MPI 연동 설정만 하면 끝..

16. commnad 로 SGE 데몬 강제  종료하기

qconf -kej : 현재 모든 작업을 종료하고, SGE 데몬 종료
qconf -ks : SGE의 스케줄 데몬 종료 (더 이상 스케줄 안됨 )
qconf -km : SGE 마스터 데몬 종료

17. 사용자 정의 클러스터 호스트 구성
클러스터 호스트 구성은 여러대의 작업 호스트의 속성을 공유하기 위해 사용되는 호스트 그룹 설정
방식이다.

# qconf -sconf <cluster_hosts>
기본 클러스터 호스트는 global 이다.

18. 사용자 정의 queue 대기열 구성하기

qconf -sq all.q 의 내용을 복사해 둔다.
qconf -aq <queue_name>.q : 새로운 대기열 생성
qconf -sq all.q 내용을 붙여 넣는다.

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

qname                 test.q
hostlist              @fluenthosts
———————————-
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               fluent_pe make
rerun                 FALSE
slots                 1,[super01=2],[super02=2],[super03=2]
———————————————————–
tmpdir                /tmp
shell                 /bin/csh
prolog                NONE
epilog                NONE
shell_start_mode      posix_compliant
starter_method        NONE
suspend_method        NONE
resume_method         NONE
terminate_method      NONE
notify                00:00:60
owner_list            NONE
user_lists            fluentusers
———————————-
xuser_lists           NONE
subordinate_list      NONE
complex_values        NONE
projects              NONE
xprojects             NONE
calendar              NONE
initial_state         default
s_rt                  INFINITY
h_rt                  INFINITY
s_cpu                 INFINITY
h_cpu                 INFINITY
s_fsize               INFINITY
h_fsize               INFINITY
s_data                INFINITY
h_data                INFINITY
s_stack               INFINITY
h_stack               INFINITY
s_core                INFINITY
h_core                INFINITY
s_rss                 INFINITY
h_rss                 INFINITY
s_vmem                INFINITY
h_vmem                INFINITY
———————————————————————————

위 설정에서 밑줄이 그어진 부분이 해당 대기열에 대한 세부 속성을 변경한 부분이다.

– hostlist 는 해당 대기열 포함된 작업 서버 그룹명이다.

# qconf -shgrpl : 현재 호스트 그룹 리스트 보기
@allhosts
@fluenthosts

# qconf -shgrp @fluenthosts : 해당 호스트 그룹에 포함된 작업 서버 리스트 보기
group_name @fluenthosts
hostlist super01 super02 super03

# qconf -ahgrp @mpihosts : 새로운 호스트 그룹 추가하기
group_name @mpihosts
hostlist NONE

위의 hostlist NONE 에 새로운 작업 서버를 나열한다.

hostlist tst01 tst02 tst03

# qconf -mhgrp @mpihosts : 호스트 리스트 설정 변경

– slot 은 해당 큐에 포함될 slot 수를  지정하는 설정이다.
즉 multi queue 를 가지고 있는 경우 node01 에 코어가 8개 이라고 가정할때..
test1.q 에서 node01의 4개 core를 사용하고, test2.q 에서 4개 core를 사용하길 원할때
각 대기열 설정에서 slot 에 각각 [node01=4] 라고 지정하면 된다.

즉 hostlist 는 해당대기열로 작업 전달 시 작업이 전달될 서버 리스트를 정의하는 것이고,
slot 는 전달된 서버에 몇개 core를 이용할지를 정의하는 것이다.

– user_lists 는 해당 큐를 이용하여 작업을 제출할 수 있는 유저를 지정하는 곳이다.
아래는 qconf 명령어를 이용하여 sge user를 설정, 관리하는 방법들이다.

# qconf : user 관련 주요 옵션
[-au user_list listname_list]            add user(s) to userset list(s)
[-auser]                                 add user
[-du user_list listname_list]            delete user(s) from userset list(s)
[-dul listname_list]                     delete userset list(s) completely
[-duser user_list]                       delete user(s)

# qconf -sul : userset 리스트 보기
deadlineusers
defaultdepartment
fluentusers

# qconf -su fluentusers : fluentusers userset 세부 설정 보기
name    fluentusers
type    ACL
fshare  0
oticket 0
entries admin,alang

# qconf -suserl : sge user 리스트 보기, SGE 사용 시 자동 갱신
admin
alang
user01

# qconf -suser admin : 해당 user 세부 설정 보기
name admin
oticket 0
fshare 0
delete_time 1225248419
default_project NONE

# qconf -auser <userid>
: 실제 시스템 계정이 sge를 통해 작업 제출 시 자동 생성 됨

# qconf -au alang fluentusers : 특정 유저를 특정 userset에 등록하기

: userset 생성 및 수정하기

# vi mpiusers
name    mpiusers
type    ACL
fshare  0
oticket 0
entries NONE

# qconf -Au mpiusers

# qconf -su mpiusers
name    mpiusers
type    ACL
fshare  0
oticket 0
entries NONE

# qconf -mu mpiusers
name    mpiusers
type    ACL
fshare  0
oticket 0
entries alang,user10

이제 위 내용들을 이용하여 새로운 사용자 정의 대기열을 만들어 보자

mpi.q 를 새로 만든다.
큐 속성은 아래와 같다.

작업 전달 서버는 tst01, tst02, tst03
서버 당 사용 core 수는 각 2개씩
해당 큐를 이용할 수 있는 사용자는 alang, user10

* 먼저 userset 를 생성한다.

# vi mpiusers
—————————————————————
name    mpiusers
type    ACL
fshare  0
oticket 0
entries alang,user10
————————————————————–

# qconf -Au mpiusers

# qconf -su mpiusers
————————————————————–
name    mpiusers
type    ACL
fshare  0
oticket 0
entries alang,user10

* 호스트그룹을 생성한다.

# qconf -shgrpl
@allhosts
@fluenthosts

# qconf -ahgrp @mpihosts
group_name @mpihosts
hostlist tst01 tst02 tst03

* 대기열을 생성한다.

# qconf -aq mpi.q
—————————————————————-
qname                 mpi.q
hostlist              @mpihosts
.
slots                 1,[tst01=2],[tst02=2],[tst03=2]
.
user_lists            mpiusers
—————————————————————–

# qstat -f
—————————————————————————-
queuename                      qtype used/tot. load_avg arch          states
—————————————————————————-
all.q@super01                  BIP   0/2       0.24     lx24-amd64   
—————————————————————————-
all.q@super02                  BIP   0/2       0.22     lx24-amd64   
—————————————————————————-
all.q@super03                  BIP   0/2       0.21     lx24-amd64   
—————————————————————————-
all.q@tst01                    BIP   0/4       0.00     lx24-amd64   
—————————————————————————-
all.q@tst02                    BIP   0/4       0.00     lx24-amd64   
—————————————————————————-
all.q@tst03                    BIP   0/4       0.00     lx24-amd64   
—————————————————————————-
mpi.q@tst01                    BIP   0/2       0.00     lx24-amd64   
—————————————————————————-
mpi.q@tst02                    BIP   0/2       0.00     lx24-amd64   
—————————————————————————-
mpi.q@tst03                    BIP   0/2       0.00     lx24-amd64   
—————————————————————————-
test.q@super01                 BIP   0/2       0.24     lx24-amd64   
—————————————————————————-
test.q@super02                 BIP   0/2       0.22     lx24-amd64   
—————————————————————————-
test.q@super03                 BIP   0/2       0.21     lx24-amd64   

19. 대기열 기타 속성 정의

위에서 설명한듯이 대기열 별 작업 환경 속성을 정의 할 수 있다.
위에서는 해당 대기열에서 사용될 서버리스트, core수, 사용자등에 대한 설정에
대해 설명하였다.

아래는 해당 대기열에서 시스템 리소스 사용에 대한 한계 설정을 정의하는
방법에 대해 알아보자.

# qconf -mq mpi.q
————————————————————————
.
.

s_rt                  INFINITY
h_rt                  INFINITY
s_cpu                 INFINITY
h_cpu                 INFINITY
s_fsize               INFINITY
h_fsize               INFINITY
s_data                INFINITY
h_data                INFINITY
s_stack               INFINITY
h_stack               INFINITY
s_core                INFINITY
h_core                INFINITY
s_rss                 INFINITY
h_rss                 INFINITY
s_vmem                INFINITY
h_vmem                INFINITY

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

s_ : soft limit : 한계 초과 시 경고 조치
h_ : hard limit : 한계 초과 시 자동 작업 중지

rt : wall clock time
cpu : cpu time
fsize : file size
data : data size
stack : stack size
core : core file size
rss : resident set size
vmem : memory size

이제 해당 큐의 리소스 제한 설정을 해보도록 하자.

s_rt                  12:00:00
h_rt                  24:00:00
s_cpu                 06:00:00
h_cpu                 08:00:00
.
.
s_vmem                1000M
h_vmem                2000M

위와 같이 지정해 두었다 가정하자.

전체 작업 시간이 12시간이 넘어가면, 경고를 남긴다.
24시간이 넘어가면 자동으로 작업이 중지된다.

작업에 사용되는 메모리가 1000M가 넘어가면 경고를 남긴다.
2000M가 넘어가면 자동으로 작업이 중지된다.

** 의미상으로는 위의 설명과 같은데 실제 테스트를 하니 soft limit 에서도 작업이
중단 된다.

20. 사용자당 작업 수 제한

# qconf -mconf
max_u_jobs : 사용자당 작업 수 강제 제한 ( 실행, 대기 포함한 작업 수 제한)

# qconf -ssconf
maxujobs : 사용자당 실행 작업 수 제한 ( 실행 작업 수 제한 )

– complex를 이용한 유저 당 작업 수 제한 방법

complex 에 사용자별 작업 제한 complex를 추가 한다.

——————————————————————————-
   Name    Shortcut  Type  Relation  Requestable  Consumable  Default  Urgency
——————————————————————————-
[maxjob_alang]  [mj_alang]    [INT]    [<=]       [YES]       [YES]       [0]      [0]
——————————————————————————-

그런 후 host configration 에서 global 설정에서 해당 complex 추가함.
;; 자세한 방법은 6장 참고..

주의 : 위 방식은 single processor job 에 대해서만 적용 가능함. MPI 연동된 pe 설정 호출 시에는
cpu 수가 작업 수가 되는 문제가 있음.

 

– RSQ 를 이용한 방법

# qconf -arqs
{
   name         maxujobs
   description  NONE
   enabled      TRUE
   limit        users alang,alang* hosts
{@mpihosts} to slots=2
   limit        users alang hosts
{@mpihosts} to num_proc=2
}

# qconf -mrqs
{
   name         maxujobs
   description  NONE
   enabled      TRUE
   limit        users alang to slots=2
}

# qconf -mrqs
{
   name         maxujobs
   description  NONE
   enabled      TRUE
   limit        users alang queues mpi.q to slots=2
}

21. SGE and Flexlm License Management Integration
download : qlicserver-1.44.tar.gz
http://gridengine.sunsource.net/servlets/ProjectDocumentList 

# cp qlicserver-1.44.tar.gz /engrid/ensge/qlicserver/
# cd /engrid/ensge/qlicserver
# tar xzvf qlicserver-1.44.tar.gz

# cd flex-grid/site/
# vi qlic
——————————————————————————

    my $admin = “clunix”;
    my $root  = “ensge”;      # sge_root

    $ENV{SGE_ROOT} ||= “/engrid/$root”;    # sge_root
    $ENV{SGE_CELL} ||= “default”;       # sge_cell

.
my $config = {
    -cache  => ( $siteLocation || ” ) . “/engrid/ensge/qlicserver/flex-grid/site/etc/” . “qlicserver.cache”,
    -limits => ( $siteLocation || ” ) . “/engrid/ensge/qlicserver/flex-grid/site/” . “qlicserver.limits”,
};
——————————————————————————-

# vi qlicserver.config
——————————————————————————-
<?xml version=”1.0″?>
<qlicserverConfig>
<parameters type=”overwrite”>
  <param name=”dir”>/engrid/ensge/qlicserver/flex-grid/site/etc</param>
  <param name=”output”>qlicserver.cache</param>
  <param name=”LM_LICENSE_FILE”>27000@grid000:17000@grid000</param>
  <param name=”qhost”>qhost.cache</param>
  <param name=”qstat”>qstat.cache</param>
  <param name=”lmutil”>/usr/abaqus/License/lmutil</param>
  <param name=”limits”>qlicserver.limits</param>
  <param name=”timeout”>5</param>
</parameters>

 <resources>
  <resource name=”foam”/>
  <resource name=”abaqus” served=”explicit” total=”99″/>
  <resource name=”gtpower” served=”GTpowerX” limit=”4″/>
  <resource name=”nastran” served=”nastran” limit=”3″/>
  <resource name=”stars” served=”starsuite” limit=”2″ note=”STAR-CD serial”/>
  <resource name=”thomat” note=”abaqus high temperature modelling”/>
  <resource name=”ansys” served=”ansys” type=”track”/>
 </resources>
</qlicserverConfig>
—————————————————————————–

resource 항목에서 name 은 SGE complex name과 동일해야한다. served 항목은 실제
flexlm 에서 정의하는 라이센스 세부 항목명과 동일해야 한다.

즉 flexlm 에서 표현하는 라이센스 방식이 abaqus의 explicit solver 의 경우 ..

Users of explicit:  (Total of 99 licenses issued;  Total of 0 licenses in use)

같이 explicit 이다. 하지만 사용자의 경우 explicit 라고 하면, 이것이 abaqus explicit 인지 모르는 경우가 발생한다. 그렇기 때문에 resource name을 사용자들이 알수 있는 형태의 이름으로 변경해도 된다. 단 served 는 반드시 flexlm에서 인지하는 이름
으로 해야한다.

그리고 SGE complex 설정에서 resource name 과  동일한 이름으로 항목을 만들어야 한다.
shutcut 이름은 원하는데로 만들면 된다. shutcut name 은 실제 qsub 에서 작업 제출 시 -l 옵션으로 호출하는 대표명이다.

# vi qlicserver.limits
—————————————————————————–
<?xml version=”1.0″?>
<qlicserverLimits>
  <limits>
    <limit name=”abaqus” limit=”99″/>
  </limits>
</qlicserverLimits>
——————————————————————————

# qmon

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

상위에 Attributes 추가 폼에
——————————————————————————-
   Name    Shortcut  Type  Relation  Requestable  Consumable  Default  Urgency
——————————————————————————-
[explicit]  [explicit]    [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 리스트에서 explicit 를 찾아 클릭하면 추가가 된다.
그런 후 explicit 항목의 Values 값을 입력할 수 있게 되는데 여기에 보유 라이센스 개수를
적어 주면 된다.

# ./qlicserver -d

# ./qlic
——————————————————————————
resource      total limit extern intern wait free
——–      —– —– —— —— —- —-
abaqus            ?     .      .      .    .    .
ansys             ?     .      .      *    .    .
explicit         99     .     14      .    .   85
gtise             ?     .      .      *    .    .
gtpower           ?     .      .      .    .    .
hexa              ?     .      .      *    .    .

exlicit 의 경우  SGE와 연동되어 현재 Flexlm 상의 체크되는 라이센스 수를 그대로 반영하게 된다. -> Excution Host 의 complex 항목에서..

lmutil, lmstat 를 시스템 기본 PATH에 등록한다.

extern : flexlm 상에 체크되는 라이센스 수 – 실제 발급 수
intern : sge complex 정의에 지정된 라이센스 수에서 체크되는 수
 -> qlicserver.limits 에서 제한 가능함.

# vi qlicserver.limits
——————————————————————————
<?xml version=”1.0″?>
<qlicserverLimits>
  <limits>
    <limit name=”explicit” limit=”10″/>
    <limit name=”standard” limit=”5″/>
  </limits>
</qlicserverLimits>
——————————————————————————-

만일 flexlm에 등록된 S/W가 아닌 경우 SGE에서만 license를 관리하고자 한다.
상위의 license 관리 방법을 이용하면 되지만, 그 방법 보다 더 세부적인  실제 라이센스 사용 현황을 체크하고 모니터링하고,
사용된 라이센스를 SGE 상에서 소멸 관리하고 싶은 경우 qlicserver와 연동하면 된다.

qlicserver.config

  <resource name=”pamcrash”/>

qlicserver.limits

<?xml version=”1.0″?>
<qlicserverLimits>
  <limits>
    <limit name=”pamcrash” limit=”10″/>
  </limits>
</qlicserverLimits>

qmon 에서 [Consumables/Fixed Attribute] 에 pamcrash 등록. values 안 아무거나 적어도 알아서 limit 에 지정된 값으로 적용된다.

# ./qlic

resource      total limit extern intern wait free
——–      —– —– —— —— —- —-
NASTRAN           ?     .      .      .    .    .
PATRAN            ?     .      .      .    .    .
adams            99     .      .      .    .   99
cae              99     .      .      .    .   99
explicit         99     .      8      .    .   91
pamcrash         10     .      *     10    4    .
standard         99     .      .      .    .   99
viewer           99     .      .      .    .   99

즉 외부 flexlm 라이센스의 실시간 정보를 반영하는 extern 항목이 * 로 비활성화되고,
SGE의 complex 상에서만 관리되는 것을 의미하는 intern 에서 현재 사용되는 라이센스와 대기중인 라이센스 정보가 기록 되어진다.

 

 <resources>
  <resource name=”ANSYS” served=”ansys”/>
  <resource name=”ANSYSHPC” served=”mechhpc”/>
  <resource name=”CFX” served=”acfx_solver”/>
  <resource name=”CFXHPC” served=”acfx_par_proc”/>
 </resources>

22. qtcsh 로 특정 명령어만 원격에서 실행하기 ..

qtcsh 는 사전에 원격에서 실행되어야 하는 명령어 리스트를 지정하고, 해당 명령어를 수행할 경우 자동으로 qrsh를 통해
원격 서버(부하가 없고, CPU count에 여유가 있는)에서 해당 명령이 수행되도록 하는 해주는 기능이다.

먼저 원격에서 실행될 명령어들을 아래 파일에 정의한다.

/engrid/ensge/default/common/qtask -> 관리자에 의해 일괄적으로 관리되는 명령어
~/.qtask -> 개별 사용자가 직접 지정하는 명령어

해당 파일에 원격에서 수행되어야 할 명령어 리스트를 지정한다.

$ vi .qtask
—————————————————————————————————–
hostname
make -cwd -V -v PATH -l sp=1
pwd -cwd -V
fluent -cwd -V -pe fluent_pe 20

원격 실행 명령어 정의 방식은 해당 명령어를 먼저 정의하고, 그 뒤에 SGE상에 명령 옵션을 추가하면 된다.

make -cwd -V -v PATH -l sp=1

위 구문을 보면 ..

make 명령어를 자동으로 유휴 서버에서 원격 실행하데, 실행 위치는 현재 접속된 서버의 경로를 그대로
유지하고(-cwd), 현재 접속된 세션의 모든 환경 설정을 그대로 유지하고(-V), 현재 접속된 환경 설정
중 PATH 설정을 그대로 유지하고 (-v PATH), SGE 자원 정책에 정의된 콤플렉스 중 sp 의 count를 1
증가 시킨다(-l sp=1)

위와 같은 방법으로 qtask 설정을 완료한 후, 해당 기능을 적용할 사용자의 shell 설정을 기본적으로
qtcsh 로 설정한다.

# vi /etc/passwd
alang:x:1001:1001:연구원:/home/alang:/engrid/ensge/bin/lx24-amd64/qtcsh

이제 해당 계정로 로그인을 해 보자
gc001 호스트에 로그인 한 후 qtask에 정의된 명령어를 수행한다.

[alang@gc001 ~]$ hostname
gc002

위와 같이 qtask 에 지정된 hostname 명령은 자동으로 원격 서버에서 수행이 되어 진다.
만일 X-forward를 통한 GUI 호출이 필요한 명령일 경우에는 ..
/etc/csh.login 파일의 제일 하단에 아래 설정을 추가하도록 한다.

setenv DISPLAY ${REMOTEHOST}:0.0

만일 홈디렉토리하단의 .cshrc 에 위 설정을 포함할 경우 ..master 서버 접속 후 다른 서버로
원격 명령 수행 시 $REMOTEHOST 값이 client 의 IP가 아닌 master 서버의 IP로 등록되어, X호출이
안되는 문제가 발생한다.

/etc/csh.login은 bash 환경에서의 .bash_login 과 같은 설정으로 정상적인 로그인 시에만 적용되는
init 설정이다.

– qrsh 를 이용한 GUI 어플리케이션 호출

encmd -ssh alang@clunix.com qrsh -v DISPLAY=192.168.123.90:0.0 fluent 3d

– sge 6.2 이상 부터 slave slot 배분 이상 증세 해결

sge 6.2 부터 pe 를 통한 slot 할당 시 불필요한 slot 분산이 이루어 지는 경우가 많다.
-pe 8 을 수행 시 allocation_rule 이 fill_up 인데도 불필요하게 여러 노드에 걸쳐서
slot 을 나누는 경우가 종종 발생한다. 이를 방지하는 방법은 아래와 같다.

qconf -mp <pe_name>

.
.
job_is_first_task TRUE

job_is_first_task FALSE

로 변경 ..

????

smp 버전의 dyna에서 license account 값 알아내기

cp $PE_HOSTFILE .
dynahost=`cat pe_hostfile | head -n 1 | awk ‘{print $1}’`
nohup ./smp971s_R4.2.exe ncpu=8 i=neon_refined01_30ms.k memory=auto &
echo “
$!@${dynahost}” > bg_switch
wait $!
chown -R admin. .

– queue 별로 작업 투입 자원 제한하기

# 사용자당 CPU 수

RQS 를 이용하여 적용 ..

{
   name         maxslot
   description  NONE
   enabled      TRUE
   limit        users root queues all.q to slots=4
   limit        users alang queues all.q to slots=8
}

 

# 사용자당 작업 수

complex 생성

maxjob                    maxjob     INT         <=    YES         JOB        1        0

RQS 설정

{
   name         maxjob
   description  NONE
   enabled      TRUE
   limit        users root queues all.q to maxjob=2
   limit        users alang queues all.q to maxjob=2
}

# 작업당 CPU 수

PE Slot 수로 제한 . 사용자당 별도의 PE를 제공하고, 해당 PE Slot 수를 제한한다.

or

$ qconf -sc | grep maxcpu
maxcpu                    maxcpu     INT         <=    YES         YES        0        0

$ qconf -srqs maxcpu

{
   name         maxcpu
   description  NONE
   enabled      TRUE
   limit        users root queues all.q to maxcpu=4
   limit        users alang queues all.q to maxcpu=4
}

작업 실행시 -l maxcpu=1 추가

;;; num_proc -> job 수 ??

큐에 대한 우선권 부여

qconf -mq 를 통해 해당 큐 설정에 들어가고, 해당 큐안에서 비교 대상 큐에 대한 상대적인
우선권 설정을 수행한다.

priority              19,[batch=20],[short_60=18],[normal_12=17]

 

– Multi queue 구성 시 중복 호스트에 대한 작업 정보 공유하기

multi queue로 스케줄러 큐를 구성한 경우 서로 다른 큐에 같은 호스트가 참여할때
호스트에서 수행할수 있는 작업 수가 CPU(slot)수가 되는데, 모든 큐에서 해당 호스트
가 보유한 slot를 모두 인식함으로 해당 호스트에 보유한 slot보다 두배 이상의 작업이
부가되는 문제가 발생한다.

이런 문제를 해결하기 위해 실행호스트 속성에서 load_scaling 항목을 수정한다.

# qconf -me <hostname>

load_scaling          NONE

load_scaling          slots

언제부터간..바꿨음..

load_scaling 이 아니라 complex_values로 ..
complex_values slots=<slots_number>

모든노드에 공통으로 해당 정책을 적용하기 위해서는 ..

# qconf -me global

complex_values slots=<slots_number>

 

전체 큐 사용 종합 현황

qstat -g c

 

SGE 스케줄러 설정 조정

qconf -ssconf

————————————————————————
algorithm                         default
schedule_interval                 0:0:15
maxujobs                          0
queue_sort_method                 load
job_load_adjustments              np_load_avg=0.50
load_adjustment_decay_time        0:7:30
load_formula                      np_load_avg
schedd_job_info                   true
flush_submit_sec                  0
flush_finish_sec                  0
params                            none
reprioritize_interval             0:0:0
halftime                          168
usage_weight_list                 cpu=1.000000,mem=0.000000,io=0.000000
compensation_factor               5.000000
weight_user                       0.250000
weight_project                    0.250000
weight_department                 0.250000
weight_job                        0.250000
weight_tickets_functional         0
weight_tickets_share              0
share_override_tickets            TRUE
share_functional_shares           TRUE
max_functional_jobs_to_schedule   200
report_pjob_tickets               TRUE
max_pending_tasks_per_job         50
halflife_decay_list               none
policy_hierarchy                  OFS
weight_ticket                     0.010000
weight_waiting_time               0.000000
weight_deadline                   3600000.000000
weight_urgency                    0.100000
weight_priority                   1.000000
max_reservation                   0
default_duration                  INFINITY
———————————————————————

excution 서버가 죽었을때 qmaster에서 상태 체크가 늦는 경우

# qconf -mconf

max_unheard                  00:00:10  -> 조정 default 00:05:00

 

– 특정 core 수 단위로 자원을 할당하고자 할때

# qconf -sp mpi2_8cpu
pe_name            mpi2_8cpu
slots              3200
user_lists         NONE
xuser_lists        NONE
start_proc_args    NONE
stop_proc_args     NONE
allocation_rule    8
control_slaves     TRUE
job_is_first_task  FALSE
urgency_slots      min
accounting_summary FALSE

– 다중 라이선스 서버의 라이선스 정보 통합 관리 하기

[root@mhpc01 enlic]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.123.2   apps
192.168.220.116 mhpc01
192.168.220.117 mhpc02
192.168.220.118 mhpc03
192.168.220.119 mhpc04
 
192.168.123.90          abaquslm01
192.168.123.140         abaquslm02
192.168.123.209         abaquslm03

qlicserver.config의 설정파일입니다.

[root@mhpc01 enlic]# cat qlicserver.config
———————————————————————-
<?xml version=”1.0″?>
<qlicserverConfig>
<parameters type=”overwrite”>
  <param name=”dir”>/engrid/ensge/enlic/etc</param>
  <param name=”output”>qlicserver.cache</param>
  <param name=”LM_LICENSE_FILE”>
27000@abaquslm01:27000@abaquslm02
</param>
  <param name=”qhost”>qhost.cache</param>
  <param name=”qstat”>qstat.cache</param>
  <param name=”lmutil”>/engrid/ensge/enlic/bin/lmutil</param>
  <param name=”limits”>qlicserver.limits</param>
  <param name=”delay”>10</param>
  <param name=”timeout”>5</param>
</parameters>
 
 <resources>
<resource name=”abaqus_viewer”/>
   <resource name=”abaqus” served=”parallel” from=”abaquslm01″/>
 </resources>
 
 <resources>
  <resource name=”abaqus” served=”parallel” from=”abaquslm02″/>
 </resources>
 
<resources>
  <resource name=”abaqus” served=”parallel” from=”abaquslm03″/>
 </resources>
 

## 아래 설정에서 3개의 라이선스 서버에서의 정보를 합함 ###
<derived name=”sum” note=”combined local/global licenses”>
      <element>abaqus</element>
      <element>abaqus_viewer</element>
</derived>
 
 
</qlicserverConfig>
——————————————————————–

현제 보유하고있는 라이센스 수 입니다.

[root@mhpc01 enlic]#
lmstat -a -c
27000@abaquslm01:27000@abaquslm02:27000@abaquslm03 | grep para

Users of cadporter_parasolid:  (Total of 2011 licenses issued;  Total of 0 licenses in use)
Users of parallel:  (Total of 2011 licenses issued;  Total of 0 licenses in use)
Users of cadporter_parasolid:  (Total of 2011 licenses issued;  Total of 0 licenses in use)
Users of parallel:  (Total of 2011 licenses issued;  Total of 0 licenses in use)
Users of cadporter_parasolid:  (Total of 2011 licenses issued;  Total of 0 licenses in use)
Users of parallel:  (Total of 2011 licenses issued;  Total of 0 licenses in use)

기존 2011개의 라이센스에서 3배의 값인 6033로 표시되는 것을 확인하였습니다.

[root@mhpc01 enlic]# ./qlic
host = mhpc01
age  = 0:00:07
 
resource      total limit extern intern wait free
——–      —– —– —— —— —- —-
abaqus         6033     .      .      .    . 6033
abaqus_viewe   2011     .      *      .    . 2011
sum            8044     .      .      .    . 8044


hosts파일의 abaquslm01, abaquslm02, abaquslm03 중 1개를 주석처리하여
확인결과 4022개의 라이센스만 출력되는 것을 확인 하였습니다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.