Condor brukes til å spre jobber på maskiner. På Ifi kjører alle slike jobber med "nice"-verdi 19.
Meningen er at hverken konsoll-brukere eller rsh/ssh-brukere skal bli plaget av jobber som kjøres. Bruk av mus/tastatur og load sjekkes og vil eventuelt føre til midlertidig stans av Condor-styrte jobber. De fortsetter automatisk dersom forholdene ligger til rette for det, eller de flyttes automatisk til en annen maskin.
De fleste Linux-maskiner for laveregrad og hovedfag kan kjøre Condor-styrte jobber. I tillegg kan man sende jobber til Condor fra linux og solaris login-klyngene. Totalt er om lag 190 CPU-er disponible for Condor, med totalt 170 GB minne og en ytelse på 160 GFlops.
"Any academic report, publication, or other academic disclosure of results obtained with this Software will acknowledge this Software's use by an appropriate citation."
Se forøvrig fullstendige lisens-betingelser.
For programmer som man kan linke på nytt, f.eks. de man selv har skrevet i C eller C++, kan Condor automatisk lagre jobbens status periodisk til disk (vanligvis hver tredje time). Dette kalles ofte "checkpointing". Hvis maskinen stanser, kan Condor sette jobben i gang igjen på en annen maskin, fra sist lagrede status. Slik blir tapet av beregningstid begrenset. Dette er mulig fordi man linker inn Condor-biblioteker.
Mange program-pakker gir ikke brukeren mulighet til å linke med Condor-biblioteker, f.eks. MATLAB. Da må man selv ta hånd om mellomlagring av resultater for å redusere tap av beregningstid ved en eventuell maskinstans. Dette reduserer i noen grad nytten av Condor, men evnen til å utnytte ledige CPU-sykluser i et stort nett av maksiner og automatisk omstart ved maskin-havari, er også verdifulle egenskaper.
export CONDOR_CONFIG=/hom/chcomput/condor/condor_config.ifi export PATH=$PATH:/hom/chcomput/condor/$HOSTTYPE/bini et terminal-vindu, eller i filen
$HOME/.envir med
kommandoene
setenv CONDOR_CONFIG /hom/chcomput/condor/condor_config.ifi setenv POSTPATH /hom/chcomput/condor/$HOSTTYPE/binKommandoene i filen vil bli utført hver gang man logger inn på en Unix-maskin på Ifi.
pgrep -l condori et terminal-vindu. Dersom resultatet ikke er tomt, betyr det at Condor kjører på maskinen. Typisk svar er
1286 condor_master 1287 condor_startd 1288 condor_scheddhvilket betyr at tre Condor-demoner kjører på maskinen. "condor_master" styrer de andre demonene. "condor_startd" gjør maskinen tilgjengelig for eksekvering av jobber. "condor_schedd" sender jobber til Condor. Maskinene i login-klyngen kjører "condor_schedd", men ikke "condor_startd".
Hvis maskinen man sitter ved ikke er med i Condor, bruker man rsh
eller ssh til å logge seg inn på login-klyngen ved navn
login.ifi.uio.no (linux-maskiner) eller
solaris.ifi.uio.no, f.eks. slik
rsh login.ifi.uio.no
På en maskin som er med i Condor, kan man gi kommandoen
condor_statusfor å få en liste over alle maskiner som kan kjøre Condor-jobber. Unix-kommandoen "
man condor_status" gir mer informasjon.
Blant annet må filen inneholde en kommando som angir det "univers"-et Condor skal bruke, "standard", "vanilla" eller "java". Java-programmer må kjøre i "java"-universet. Andre programmer som man ikke selv kan linke, f.eks. MATLAB, må kjøre i Condors "vanilla"-univers. Programmer som man selv kan linke, skal kjøre i Condors "standard"-univers, slik at man kan dra nytte av Condors automatiske "checkpointing".
Universet angis f.eks. slik
universe = vanilla
En "submit"-fil kan inneholde flere kommandoer, som f.eks. gir navn på
filer som skal brukes i stedet for stdin,
stdout og stderr, hvor mange ganger programmet
skal kjøres (med forskjellig inngangs-data for hver kjøring), hvilke
krav programmet stiller til maskinene det skal kjøres på
(f.eks. maskin-arkitektur, minimum minne, raskest maskin etc.) og
hvem som skal motta e-post med informasjon om jobben.
Se lenger ned for eksempler. Unix-kommandoen "man
condor_submit" gir mer informasjon om innholdet av en
"submit"-fil.
condor_compile. For de vanligste link-kommandoer
setter man ganske enkelt ordet condor_compile foran på
kommando-linjen. Det gjøres også dersom kompilering og linking skjer i
ett trinn. condor_compile kan bl.a. brukes sammen med
cc, CC, gcc, g++,
ld (linkeren).
Unix-kommandoen "man condor_compile" gir mer informasjon om
kompilering og linking med Condors biblioteker.
condor_submit,
condor_submit "submit-fil"
# Bruk din egen epost-adresse for notify_user, f.eks: notify_user = brukernavn@ifi.uio.no executable = foo log = foo.log queueProgrammet ved navn "foo" vil bli kjørt i "standard" univers (fordi universet ikke er spesifisert), og logg-filen "foo.log" vil inneholde informasjon om kjøringen. Jobben vil bli kjørt på samme maskin-arkitektur som maskinen man gir
condor_submit-kommandoen til (med forbehold om at programmets
binærkode passer for denne maskin-typen).
Kommandoen "notify_user" er nødvendig, ellers vil posten sendes til brukernavn@uio.no.
Dersom man ikke skal bruke "standard" univers, må universet spesifiseres med kommandoen "universe".
For å unngå å bruke mange MATLAB-lisenser kan man bruke MATLAB Compiler til å generere C-kode for frittstående programmer. Kjøring av disse krever ikke MATLAB-lisens. Se MATLAB-dokumentasjon for mer om dette.
En "submit"-fil for kjøring av en enkelt MATLAB-jobb kan se slik ut
# Use your own email-address for notify_user, e.g.:
notify_user = brukernavn@ifi.uio.no
# Only receive e-mail in case of job error.
notification = Error
# Program to run.
executable = /local/bin/matlab
# Universe without checkpointing for non-linkable job
universe = vanilla
# Import user environment variables at the time of submission to Condor
getenv = True
# If you don't want the job to be limited to run on the same machine
# architecture as the submit machine, it must be specified in the
# reuirements command, e.g.
Requirements = (Arch == "INTEL" && OpSys == "LINUX") || \
(Arch == "SUN4u" && \
(OpSys =="SOLARIS28" || OpSys == "SOLARIS29"))
# stdin, i.e. keyboard input to MATLAB. Script, not function.
input = keyboard_input_script.m
# stdout, i.e. screen output from MATLAB.
output = matlab_screen_output.txt
# stderr. However, MATLAB prints error messages to screen, i.e. to stdout,
# so leave stderr at default value of /dev/null.
#error = matlab_errors.txt
# log-file for Condor activity
log = condor.log
# Choice of directory to start executable from (i.e. Condor does
# cd to initialdir prior to starting executable)
initialdir = $ENV(HOME)/matlab
# Arguments to pass to the executable.
# start_function can be m-file script or m-file function which must be on
# the MATLAB path. Substitute name with your own choice.
arguments = -nodisplay -nojvm -r start_function
queue
output og
error havner i mappen gitt av
initialdir. Java-programmet angis med full sti til klassen som
inneholder "main". Programmet bruker dessuten andre klasser fra
myJar.jar. Standard input hentes fra filen h.txt i en
spesifisert mappe.
Første argument i arguments må inneholde navnet på klassen som
inneholder "main". Navnet må angis slik at java-kommandoen er i
stand til å finne det. I eksemplet er navnet gitt med full
pakke-kvalifisering.
Legg merke til at executable angir start-klassen med endelsen
class, dvs. filen, mens arguments angir klassenavnet.
CLASSPATH vil inneholde filene angitt av jar-files i tillegg til
elementer som Condor trenger for å finne sine hjelpe-klasser.
# Use your own email-address for notify_user, e.g.: notify_user = brukernavn@ifi.uio.no executable = $ENV(HOME)/src/java/mypackage/ClassName.class universe = java initialdir = $ENV(HOME)/project input = $ENV(HOME)/data/h.txt output = submit.out error = submit.err jar_files = $ENV(HOME)/myJar.jar arguments = mypackage.ClassName arg0 arg1 arg2 log = project.log queue
queue 100vil programmet kjøres 100 ganger. Hver kjøring blir tilordnet et prosess-nummer, fra null. Dette gir muligheten til f.eks. å gi forskjellige data-filer til hver kjøring
input = file.$(Process)Andre kommandoer kan også bruke makroen
Process på denne måten.
En "submit"-fil kan inneholde flere "queue"-kommandoer. Prosess-nummeret
økes videre for hver "queue"-kommando (starter ikke fra null).
Alle prosesser som startes av en "submit"-fil blir tilordnet et felles
"cluster"-nummer som også kan refereres i en "submit"-fil, med makroen
Cluster.
man kommando" for mer informasjon
om kommandoene.
Løsningen er at man i "submit"-filen gir en requirements-kommando
som spesifiserer kravet til minne. Da vil Condor sløyfe kravet nevnt i forrige
avsnitt. Hvis man spesifiserer et minnekrav som er lavere enn størrelsen på
jobben, kan det føre til ineffektiv kjøring. Kravet kan f.eks. angis slik,
dersom jobben trenger 512 MB minne,
requirements = Memory > 512Hvis man har flere krav til maskinen, må alt legges inn i samme
requirements-kommando, f.eks.
requirements = Memory > 512 && ((Arch == "INTEL" && OpSys == "LINUX") || \
(Arch == "SUN4u" && \
(OpSys =="SOLARIS28" || OpSys == "SOLARIS29")))
/hom/chcomput/condor/man