Uvod
SGE (engl. Sun Grid Engine) je klasterski sustav za upravljanje poslovima (engl. job management system, JMS). Više informacija o sustavu SGE možete pronaći u izvještaju http://www.srce.hr/crogrid/clusters.pdf te SGE-jevim službenim stranicama http://gridengine.sunsource.net/. U ovom dokumentu je opisano korištenje SGE verzije 6.
Izvođenje poslova
Korisničke aplikacije (u nastavku poslovi) koji se izvode pomoću sustava SGE moraju biti opisane startnom shell skriptom (npr. sh, bash). Unutar startne skripte, pored normalnih naredbi navode se parametri za SGE. Također je moguće koristiti SGE varijable okoline opisane u odjeljku SGE varijable okoline.
Pokretanje poslova se ostvaruje naredbom qsub
:
qsub <SGE_parametri> <ime_skripte>
SGE parametre je, osim u skripti, moguće navesti prilikom poziva naredbe qsub
.
SGE također sadrži grafičko sučelje (engl. graphical user interface, GUI) za pristup svim funkcionalnostima sustava. GUI se pokreće naredbom qmon
. Korištenje GUI-ja neće biti opisivano jer unutar samog njega postoje upute za uporabu (tipke Help).
SGE okolina i parametri
Prilikom izvođenja poslova potrebno je definirati kojem projektu poslovi pripadaju. Na taj način se prati trošenje resursa od strane pojedinih projekata i omogućava pravedno raspoređivanje (engl. fair share) poslova među njima.
SGE za radni direktorij uzima $HOME. Ukoliko se želi promijeniti direktorij potrebno je to napraviti u skripti. Ako se eksplicitno ne navedu standardni izlaz i greška, bit će spremljeni u datoteke: <radni_direktorij>/<ime_skripte>.o<id_posla> i <radni_direktorij>/<ime_skripte>.e<id_posla>.
SGE parametri omogućavaju korisniku da SGE-u detaljnije opiše svoj posao. Oni se unutar shell skripte navode u sljedećem obliku:
#$ -<parametar> <vrijednost>
Osnovni SGE parametri koje se preporuča postaviti su:
-cwd : parametar definira da je trenutni direktorij radni direktorij posla. -e <ime_dat>: ime datoteke u koju se sprema standardna greška. -l <resurs>=<vrij>[,<resurs>=<vrij>...] : definira resurse koje posao zahtjeva (za razliku od PBS-a, ova opcija se ne koristi kod paralelnih poslova). -M <email_adresa>[,<email_adresa>...] : lista mail adresa na koju se šalju obavijesti o poslu. -m [a][b][e] : parametar definira u kojem slučaju se šalje obavijest: b - početak izvođenja, e - završetak izvođenja, a - greška u izvođenju posla. -now y|n : vrijednost y definira da se posao mora izvesti odmah. Ukoliko SGE ne može pronaći slobodne resurse, posao se ne sprema u red, nego odmah završava. Kod interaktivnih poslova podrazumijevana vrijednost je y, a kod ostalih n. -N <ime_prog> : ime programa koje će se prikazati pri dohvatu informacija o poslovima. -o <ime_dat>: ime datoteke u koju se sprema standardni izlaz. -P <ime_projekta>: ime projekta kojemu posao pripada. -pe <paralelna_okolina> <raspon_cvorova> : parametar se koristi za paralelne poslove. Prvi parametar definira modul koji pokreće traženi oblik paralelnog posla. Drugi parametar definira konkretan broj procesora ili raspon u obliku <N>,[<Ni>,...]<S>-<E>,[<Si>-<Ei>,] koji paralelni posao zahtjeva. Za detalje vidi odjeljak Paralelni poslovi. -q <ime_reda>[,<ime_reda>...]: red poslova u koje se sprema posao. Ovu opciju je moguće koristiti i za zahtijevanje određenog čvora, na način da se zahtjeva lokalni red poslova (npr. all.q@compute-0-0.local). -r y|n : da li se prilikom greške posao ponovno pokreće (podrazumijevana vrijednost: no). -t <početak>:<kraj>:<korak> : parametar definira da se radi o polju poslova. Vrijednost <početak> je identifikator prvog zadatka, <kraj> identifikator posljednjeg zadatka, a <korak> vrijednost za koju se uvećava svaki sljedeći identifikator između <početak> i <kraj>. -v <var>[=<vrijednost>][,<var>[=<vrijednost>]...]: opcija definira SGE-u da uzme trenutne vrijednosti varijable okoline ili da ih postavi na određenu vrijednost prilikom izvođenja posla. Ovaj parametar je koristan kada aplikacija koristi posebne varijable okoline, jer ih SGE podrazumijevano ne postavlja prilikom pokretanja posla. -V : opcija definira SGE-u da poslu prenese sve trenutne varijable okoline.
Detaljan popis i informacije o parametrima moguće je dobiti naredbom man qsub
. Napomena: prilikom nabrajanja vrijednosti parametara (npr. -l
ili -q
) nije dozvoljeno stavljati razmake.
Serijski poslovi
Najjednostavniji oblik SGE poslova su serijski poslovi koji zahtijevaju samo jedan procesor za izvođenje. Za njih obično nije potrebno navoditi nikakve posebne parametre, nego se samo navodi ime programa.
Primjeri korištenja
1. Primjer skripte bez dodatnih parametara
#!/bin/bash date
2. Primjer jednostavne skripte s parametrima
#!/bin/bash #$ -N Date_SGE_script #$ -o Date_SGE.out #$ -e Date_SGE.err date
3. Primjer izvođenja programa iz trenutnog direktorija
#!/bin/bash #$ -N mojprog #$ -P local #$ -o mojprog.out #$ -e mojprog.err #$ -cwd mojprog
Interaktivni poslovi
SGE omogućava pokretanje interaktivnih poslova. Kod interaktivnih poslova standardni izlaz i greške se šalju izravno korisniku. Drugi oblik interaktivnih poslova je da korisnik dobije komandnu liniju čvora koji mu je dodijeljen. Za interaktivno izvođenje poslova koristi se naredba qrsh
. Preporuča se koristiti ovaj oblik poslova u slučaju kada je potrebno prevesti ili debuggirati aplikacije na čvorovima. Za razliku od korištenja ssh, na ovaj način se daje do znanja SGE-u da su čvorovi zauzeti i da ne pokreće druge poslove na njima. Prilikom interaktivnog izvođenja naredbe potrebno je navesti puni put do naredbe.
Ukoliko SGE trenutno nema slobodnih resursa i posao se želi ostaviti da čeka u redu, potrebno je navesti parametar "-now n
". U suprotnom će SGE odmah završiti izvođenje posla s porukom:
Your "qrsh" request could not be scheduled, try again later.
Ukoliko skripta koja se pokreće poziva aplikaciju s grafičkim sučeljem potrebno je koristiti naredbu qrsh
i definirati varijablu okoline DISPLAY.
Primjeri korištenja
1. Izravan pristup do komandne linije proizvoljnog čvora
qrsh
2. Izravan pristup do komandne linije čvora compute-0-1.local
qrsh -q all.q@compute-0-1.local
3. Primjer interaktivnog izvođenja naredbe
qrsh /home/user/mojaskripta
4. Primjer interaktivnog izvođenja aplikacije s grafičkim sučeljem
qrsh -DISPLAY=10.1.1.1:0.0 <job_script>
Paralelni poslovi
Pokretanje paralelnih poslova je specifično jer postoje alati za pokretanje podposlova (npr. mpirun) koji sami obavljaju raspoređivanje podposlova po čvorovima. U slučaju MPI (engl. Message Passing Interface) poslova, okolina je postavljena na odgovarajuću implementaciju.
Da bi se omogućilo SGE sustavu da kontrolira izvođenje paralelnih poslova potrebno je definirati broj procesora koji je potreban za izvođenje posla. Sintaksa je:
-pe <tip_paralelnog_posla> <N>,[<Ni>,...]<S>-<E>,[<Si>-<Ei>,]
Primjeri raspona adresa su: 1. Vrijednost može biti između 2 i 4
-pe p20-mpi 2-4
2. Vrijednost može biti 1 ili 4
-pe p20-mpi 1,4
3. Vrijednost može biti 1 ili između 2 i 4
-pe p20-mpi 1,2-4
Kada SGE dodijeli čvorove paralelnom poslu, popis čvorova spremi u datoteku $TMPDIR/machines. Unutar SGE skripte datoteka se prenosi kao parametar paralelnim programima (npr. pvm, mpiexec). Korisnici mogu iskoristiti varijablu za vlastito raspoređivanje procesa, primjerice s alatom ssh. Obzirom da korisnik ne mora unaprijed znati koliko procesora će mu biti dodijeljeno, SGE postavlja vrijednost varijable $NSLOTS na broj dodijeljenih procesora.
Više informacija o paralelnim okolinama dostupnim na Isabelli možete pronaći na stranici Redovi poslova i paralelne okoline.
Polja poslova
SGE omogućava izvođenje polja poslova, tj. višestruko pokretanje istog posla. Podposlovi unutar polja se nazivaju zadaci. Svaki zadatak dobiva svoj identifikator. Prilikom pokretanja polja poslova korisnik može definirati raspon vrijednosti identifikatora zadataka. Polje poslova i raspon vrijednosti identifikatora se definira parametrom -t
:
-t <početak>:<kraj>:<korak>
Vrijednost <početak>
je identifikator prvog zadatka, <kraj>
identifikator posljednjeg zadatka, a <korak>
vrijednost za koju se uvećava svaki sljedeći identifikator između <početak>
i <kraj>
.
Korisnik može koristiti SGE varijablu okoline $SGE_TASK_ID
za dohvat identifikatora zadatka. Pomoću identifikatora korisnici mogu dodijeliti različite parametre pojedinom zadatku (vidi primjere korištenja). Zadaci mogu biti i paralelni poslovi, pri čemu je potrebno navesti parametre prema uputama iz prethodnog poglavlja.
Primjeri korištenja
1. Primjer skripte za pokretanje polja poslova koje se sastoji od 10 zadataka
#$ -N starSeeker #$ -o ./taskJobOutput/ #$ -e taskJobErr #$ -t 1-10 ./starSeeker starCluster.$SGE_TASK_ID
2. Primjer skripte za pokretanje polja paralelnih poslova koje se sastoji od 10 zadataka
#$ -N starSeeker #$ -o ./taskJobOutput/ #$ -e taskJobErr #$ -pe p20-mpi 4 #$ -t 1-10 mpiexec -machinefile $TMPDIR/machines ./starSeeker starCluster.$SGE_TASK_ID
Definiranje dodatnih karakteristika poslova
Prilikom pokretanja poslova korisnik može detaljnije opisati koji uvjeti trebaju biti ispunjeni za posao. Primjerice, moguće je zahtijevati samo određene redove, arhitekturu, količinu memorije ili procesorskog vremena. Opisivanje poslova je iznimno bitno za rad sustava za upravljanje poslovima jer omogućava učinkovitije raspoređivanje poslova.
Parametri se navode pomoću opcije -l
:
#$ -l <naziv_parametra>=<vrijednost_parametra>[,<naziv_parametra>=<vrijednost_parametra>...]
Parametri koji samo definiraju potrebe posla:
arch : arhitektura čvorova. Moguće vrijednosti ovih parametara moguće je vidjeti iz qstat -f naredbe. mem_free : količina slobodne stvarne memorije swap_free : količina slobodne swap memorije virtual_free : zbroj stvarne i swap memorije mem_total : ukupna količina stvarne memorije swap_total : ukupna količina swap memorije virtual_total : zbroj slobodne stvarne i swap memorije hostname: ime jednog ili više čvorova na kojima se želi izvesti posao.
Parametri koji postavljaju stvarna ograničenja na poslove:
vmem: virtualna memorija je zbroj stvarne (RAM) i swap memorije koju procesor koristi. rss: stvarna memorija core: veličina core datoteke u slučaju da se desi core dump stack: veličina stoga programa. Ovaj parametar se postavlja na vmem ako nije naveden. data: veličina ukupne memorije koju proces zahtjeva (izuzev stoga). Ovaj parametar se postavlja na vmem ako nije naveden. fsize: količina HD koju proces smije potrošiti cput: stvarno vrijeme koje proces "provede" u procesoru rt: ukupno vrijeme izvođenja procesa
SGE koristi alat ulimit za postavljanje ograničenja za poslove (resursi: rss, rt, cpu, data, core, stack, vmem i fsize). Posao će biti zaustavljen sa signalom segmentation fault ukoliko prekorači ograničenja. Stoga je potrebno pažljivo definirati vrijednosti (npr. uzimati 50% veće vrijednosti od očekivanog).
Stvarna ograničenja se postavljaju po procesu. Na primjer, ukoliko korisnik na jednom čvoru zahtjeva 3 procesora, vrijednosti ograničenja će biti pomnožene s 3.
-l memory
Kako bi učinkovitije rasporedili željeni posao, jedna od korisnijih karakteristika je -l memory
. Ova opcija je izuzetno korisna za poslove koji zahtjevaju veliku količinu radne memorije. Željena količina radne memorije izražava se u Gb koje posao treba za izvođenje jednog procesa! Primjer za posao koji zahjeva 20 jezgri i 200Gb RAM-a:
#$ -pe mpi 20 #$ -l memory=10
-l scratch
Karakteristiku -l scratch
koristimo za poslove koji zahtijevaju veliku količinu prostora na scratchu. Kao i u slučaju karakteristike -l memory
, navodi se količina memorije izražena u Gb koje posao treba za izvođenje jednog procesa. Primjer za posao koji zahtjeva 4 jezgre i 200 Gb scratch prostora:
#$ -pe mpisingle 4 #$ -l scratch=50
SGE varijable okoline
Unutar skripte moguće je koristiti SGE varijable. Primjeri SGE varijabli su već spomenute varijable $NSLOTS
i $TMPDIR
. Neke od SGE varijabla su:
$SGE_O_HOST : adresa računala sa kojeg je pokrenut posao $SGE_O_PATH : originalna vrijednost varijable okoline PATH prilikom pokretanja posla $SGE_O_WORKDIR : direktorij iz kojeg je posao pokrenut $SGE_STDOUT_PATH : datoteka u koju se sprema standardni izlaz $SGE_STDERR_PATH : datoteka u koju se sprema standardna greška $HOSTNAME : adresa računala na kojem se izvršava skripta $JOB_ID : SGE identifikator posla $JOB_NAME : ime posla $PE_HOSTFILE : ime datoteke u kojoj su navedene adrese računala $QUEUE : ime reda u kojem se posao izvršava $SGE_TASK_ID : identifikator zadatka kod polja poslova $TMPDIR : ime direktorija u koji se mogu spremati privremene datoteke (/scratch).
Gdje spremati privremene podatke i rezultate?
Za spremanje privremenih podataka i rezultat ne preporuča se korištenje $HOME
direktorija, budući da se time smanjuje učinkovitost aplikacije te se opterećuju frontend i mreža klastera. Za ovakve datoteke uputno je koristiti varijablu $TMPDIR
koja će za svaki pojedini posao kreirati direktorij na radnim čvorovima oblika /scratch/<jobID>.<taskID>.<queue>
koji će se automatsko ukloniti nakon završetka posla. Ukoliko postoje naznake da će kreirane privremene datoteke premašiti vrijednost od 500Gb, spremanje privremenih podataka treba se vršiti na disk /shared
.
Primjer korištenja automatski kreiranog direktorija pomoću varijable $TMPDIR:
#$ -N scratch #$ -cwd #$ -o output/scratch.out #$ -j y cd $TMPDIR pwd > test cp test $SGE_O_WORKDIR
Korištenje diska /shared
kada aplikacija barata privremenim podatcima većim od 500Gb:
#$ -N scratch #$ -cwd #$ -o output/scratch.out #$ -j y mkdir -p /shared/$USER/$TMPDIR cd /shared/$USER/$TMPDIR pwd > test sleep 120 cp test $SGE_O_WORKDIR
Praćenje i upravljanje izvođenjem poslova
Nakon pokretanja posla korisnik može koristiti različite SGE-ove alate za praćenje izvođenja posla.
Prikaz informacija o poslovima
Naredba qstat
je SGE-ova naredba za prikaz stanja poslova. Neki od važnijih parametara naredbe su:
-s [r|p|s|h] : filtrira poslove prema stanju: r - aktivni, s - zaustavljeni aktivni, h - zaustavljeni u redu, p - poslovi u redu. -j : prikazuju se poruke od SGE-a (npr. razlog zašto posao nije raspoređen na određene čvorove). -f : prikazuju se detaljne informacije o opterećenosti čvorova i rasporedu poslova na čvorove. -F : detaljan prikaz podataka o čvorovima. -u <ime_korisnika> : prikazuju se samo poslovi od korisnika <ime_korisnika>. -q [ime_reda] : naredba dohvaća isključivo informacije o redovima poslova. -g c: dohvat zbirnih informacija o redovima poslova: ukupno opterećenje reda, ukupan broj čvorova u redu, broj zauzetih i slobodnih čvorova te broj čvorova u posebnim stanjima. -g t : u prikazu poslova su označeni slave i master zadaci (ovaj ispis je analogan ispisu iz SGE5.3).
Informacije o ostalim parametrima moguće je dobiti naredbom man qstat
.
Uobičajen način praćenja izvođenja poslova je korištenjem parametara -r
i -n
. Na primjer, naredba:
qstat -s r -f
prikazuje sve aktivne poslove i imena čvorova na kojima se izvode.
Detaljni podaci o nekom poslu:
qstat -j <id_posla>
Ukoliko se ne navede <id_posla>
bit će prikazani podaci o svim aktivnim poslovima.
Upravljanje poslovima
Nakon pokretanja, poslom se može upravljati: privremeno ga zaustaviti, potpuno ga zaustaviti te mu promijeniti karakteristike.
Naredbe za privremeno zaustavljanje posla su:
qhold <id_posla> - privremeno zaustavlja izvođenje posla qrls <id_posla> - nastavlja izvođenje posla
Aktivni posao neće biti stvarno zaustavljen. Naredba se koristi isključivo dok posao čeka u redu na izvođenje. Za potrebe zaustavljanja aktivnog posla koristiti naredbu qmod
.
Veću kontrolu nad poslom omogućava naredba qmod
. Naredba omogućava privremeno zaustavljanje aktivnih poslova i to na način da poslu pošalje signal SIGSTOP
. Posao će preći u neaktivno stanje (T), ali neće osloboditi resurse (memoriju, opisnike datoteka). Naredba omogućava i spremanje stanja procesa na disk (checkpointing) za poslove koji imaju tu mogućnost. Nadalje pomoću qmod
naredbe korisnik može zaustaviti aktivni proces i vratiti ga natrag u red poslova. Parametri naredbe su:
-c : naredba izvodi spremanje stanja proces -f : parametar definira da se naredba izvede bez obzira da li je to moguće ili ne (korisno kod vraćanja u red poslova koji su označeni s parametrom -r n). -r: naredba zaustavlja posao i vraća ga natrag u red. -s : naredba zaustavlja izvođenje aktivnog procesa. -us : naredba nastavlja izvođenje zaustavljenog aktivnog posla.
Posao se u potpunosti zaustavlja naredbom qdel
:
qdel <id_posla>
Moguće je i zaustaviti sve poslove pojedinih korisnika s opcijom "-u <ime_korisnika>
" ili svih korisnika s opcijom "-u all
".
Dohvat informacija o završenim poslovima
Informacije o završenim poslovima i statistike moguće je dobiti korištenjem naredbe qacct
. Uobičajeno korištenje je: qacct -j <id_posla>
sto prikazuje sve podatke o poslu <id_posla>
.
Pomoću naredbe qacct
moguće je vidjeti statistike o klasteru. Parametri naredbe su:
-j [ime_posla] : detaljan opis pojedinih poslova -h [adresa_čvora] : statistike za pojedine čvorove -q [ime_reda] : statistike za pojedine redove -o [ime_korisnika] : statistike za pojedine korisnike -pe [ime_paralelne_okoline] : statistike za pojedine paralelne okoline -slots [broj_procesora] : statistike za poslove za određeni broj procesora
Primjeri korištenja
1. Dohvat detaljnih informacija o poslovima korisnika toni koji su koristili 4 procesora:
qacct -o toni -slots 4 -j
Određivanje prioriteta podnesenih poslova
SGE ima mehanizam za kontrolu prioriteta podnošenja poslova. Kod računanja prioriteta, uzimaju se u obzir tri težinska parametra: weight_priority
,
weight_urgency
i weight_ticket
. Navedeni parametri se mogu provjeriti pozivom naredbe:
qconf -ssconf
Jednadžba za računanje prioriteta je:
pri = weight_priority * npprior + weight_urgency * nurg + weight_ticket * ntckts
,
gdje je npprior
prioritet koji korisnici navode u opisu posla, nurg
je prioritet koji dolazi iz opisa posla, a ntckts
je prioritet na temelju fair-share ticketa.
Kako se vidi iz ispisa gore navedene naredbe, weight_priority = 0.000000
, te se jednadžba svodi na oblik:
pri = weight_urgency * nurg + weight_ticket * ntckts = 0.1 * nurg + 1 * ntckts
.
Što je veći prioritet posla, to će se on prije početi izvršavati.
Prioritet koji se izračunava iz opisa posla (urg
) se računa iz količine traženih resursa tako da se zbroje doprinosi svakog pojedinog resursa:
urg = sum(hrr).
Šest je takvih mogućih resursa:
- cores
- exclusive
- memory
- scratch
- slots
- vendor
Pripadni prioriteti za navedene resurse mogu se vidjeti pozivom naredbe (gleda se stupac urgency):
qconf -sc
Za pojedini resurs, doprinos se računa prema jednadžbi:
hrr = rurg * assumed_slot_allocation * request
,
gdje je rurg
urgency za dani resurs, assumed_slot_allocation
je traženi broj slotova (broj jezgri), a request
su traženi resursi per-slot.
Pokažimo navedeno na jednom primjeru. Naredbom:
qstat -u "*" -s p -urg
u stupcu urg se vidi urgency. Jedan praktični primjer:
job-ID prior nurg urg rrcontr wtcontr dlcontr name user state submit/start at deadline queue slots ja-task-ID --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 106560 0.08422 0.84218 47320 47320 0 0 min1 bkovacev qw 04/07/2019 12:26:43 28
U ovom slučaju urg = 47320
. Naredbom qstat -j <job_id>
se može vidjeti informacije o danom poslu:
[root@teran ~]# qstat -j 106560 ============================================================== job_number: 106560 exec_file: job_scripts/106560 submission_time: Sun Apr 7 12:26:43 2019 owner: bkovacev uid: 10011 group: grid gid: 501 sge_o_home: /home/bkovacev sge_o_log_name: bkovacev sge_o_path: /usr/lib64/qt-3.3/bin:/opt/sge/bin:/opt/sge/bin/lx-amd64:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/puppetlabs/bin:/images/amd/usr/local/amber/exe/:/home/bkovacev:/home/bkovacev/bin:/home/bkovacev/taopackage/scripts:/usr/local/amber12/exe:/home/bkovacev/lib/openmpi/:/home/bkovacev/.local/bin:/home/bkovacev/bin sge_o_shell: /bin/bash sge_o_workdir: /storage/home/bkovacev/CF4-ACTIVATION/M02X sge_o_host: teran account: sge hard resource_list: memory=4,scratch=29 mail_list: bkovacev@teran.isabella notify: FALSE job_name: min1 jobshare: 0 env_list: TERM=NONE script_file: min1 parallel environment: p28-mpisingle range: 28 project: ISAB-8531-2018 binding: NONE job_type: NONE
Iz ispisa se vidi hard resource_list. Dakle, resursi koji se uzimaju u obzir su memory
, scratch
i slots
. Uvrštavanjem u gornju jednadžbu, dobiva se gore navedeni urgency:
urg = 100 * 28 * 4 (memory) + 10 * 28 * 29 (scratch) + 1000 * 28 (slots) = 47320.