Fairsharing e priorita'

From Atlmiwiki

Contents

Cluster Torque

Opzioni per utilizzare il fairshare

FSDECAY                 0.8
FSWEIGHT                1

Opzioni per decidere il peso del fairshare su utenti e gruppi

FSUSERWEIGHT            5
FSGROUPWEIGHT           30

Opzioni per evitare la "job starvation": Quando un job e' in coda aumenta la sua priorita' in modo da non restare in coda in eterno

XFACTORWEIGHT           3
XFWEIGHT                7
XFCAP                   1000000

opzioni per utilizzare le code, gli utenti e i gruppi per settare le priorita'

CLASSWEIGHT 1
CREDWEIGHT 1
USERWEIGHT 1
GROUPWEIGHT 1
QOSWEIGHT 1


Definizione di Qualita' di Servizio (QOS)


QOSCFG[short]  PRIORITY=1000
QOSCFG[normal] MAXJOB=56

Attribuzione a code di livelli di Qualita' di Servizio

CLASSCFG[cert]   QDEF=short   PRIORITY=60000
CLASSCFG[short]    QDEF=short  PRIORITY=2500

per utilizzare la gestione dell'aquisizione di priorita' da parte dei job in coda

JOBPRIOACCRUALPOLICY
MAXJOBQUEUEDPERUSERPOLICY ON

i job che superano il limite di 30 per ogni utente non aumentano la loro priorita' anche se restano in coda

MAXJOBQUEUEDPERUSERCOUNT 30



Riservazione delle Risorse

SRCFG[cert]         PERIOD=INFINITY HOSTLIST=grid023.mi.infn.it CLASSLIST=cert-,short
SRCFG[cert]             RESOURCES=PROCS:1
SRCFG[cert]             TASKCOUNT=1


Fairshare delle risorse in base alla VO (unix group)

Garantisce a ATLAS l'utilizzo di piu' del 50% delle risorse su base temporale

GROUPCFG[atlas]     FSTARGET=50.0+  PRIORITY=500   MAXPROC=52,65
GROUPCFG[dteam]     FSTARGET=2   PRIORITY=5000  MAXPROC=20,30
GROUPCFG[ops]     FSTARGET=2   PRIORITY=50000  MAXPROC=5
GROUPCFG[infngrid]     FSTARGET=2   PRIORITY=5000  MAXPROC=20,30
GROUPCFG[alice]     FSTARGET=15  PRIORITY=100   MAXPROC=25,50
GROUPCFG[lhcb]      FSTARGET=15  PRIORITY=100  MAXPROC=25,30
GROUPCFG[cms]      FSTARGET=35   PRIORITY=100    MAXPROC=15,30
GROUPCFG[atlaslocal]             PRIORITY=200   MAXPROC=61,62

Priorita' agli Utenti

USERCFG[atlassgm]    PRIORITY=40000 MAXPROC=10
USERCFG[cmssgm]    PRIORITY=40000 MAXPROC=5
USERCFG[alicesgm]    PRIORITY=40000 MAXPROC=5
USERCFG[lhcbsgm]    PRIORITY=40000 MAXPROC=5
USERCFG[resconi]     PRIORITY=10000

Priorita' alle code


CLASSCFG[atlas_low1]                         PRIORITY=500
CLASSCFG[atlas_low2]                         PRIORITY=500
CLASSCFG[atlas_low3]                         PRIORITY=500
CLASSCFG[atlas_high1]                        PRIORITY=1500
CLASSCFG[atlas_high2]                        PRIORITY=1500
CLASSCFG[atlas_high3]                        PRIORITY=1500

Cluster Condor

L'impostazione va effettuata sulla macchina negotiator di condor, nel nostro caso: t2cmcondor
Il file di configurazione generale per i server condor si trova in:
/opt/condor/local.`hostname -s`/condor_config.local

Le priorità sono implementate in condor nella forma A.R.:
P(u,t) = 0.5^(dt/h) * P(u,t-dt) + (1-b) * r(u,t)
dove r(u,t) sono le risorse dell'utente u al tempo t, e h è il periodo di dimezzamento impostato dalla costante di configurazione PRIORITY_HALFLIFE

Essendoci in condor solo una coda, le priorità possono essere implementate solo su base gruppo (atlas, atlasprd, lhcbprd ecc. ).
Grazie ad un ClassAd, denominato PseudoQueue, aggiunto nel wrapper Globus che invoca condor_submit alla ricezione del job, si può però regolare la preemption di un job a favore di un altro appartenente a una coda diversa. Il codice modificato del wrapper si trova nel CE condor, file Perl:
/opt/globus/lib/perl/Globus/GRAM/JobManager/lcgcondor.pm
e riporta le seguenti righe, dove la variabile $queue contiene una stringa estratta dall'endpoint del job che indica la coda di sottomissione (es. "atlas"):

   $script_file->print("Environment = $environment_string\n");
   $script_file->print("Input = " . $description->stdin() . "\n");
   $script_file->print("Output = $bout\n");
   $script_file->print("Error = $berr\n");
   $script_file->print("transfer_input_files = ".$cache_export_dir."/".$gpg_name."\n") if $local_x509 ne '-';
   $script_file->print("Log = " . $condor_logfile."\n");
   $script_file->print("#Extra attributes specified by client\n");
   $script_file->print("$submit_attrs_string\n");
   ## Author: Massimo Pistolese
   ## Date: 14-01-2009
   ## Type: Debug
   ## Action: attribute added to have Condor decide different priorities using groups, VO, or users
   ## Note: also dgas package patch required, to be found in the /root home
   my @gids = split ' ', $);
   my $uid = $>;
   my $AccountingGroup = getgrgid($gids[0]) . '.' . getpwuid($uid);
   $script_file->print("+AccountingGroup = \"$AccountingGroup\"\n");
   $script_file->print("+PseudoQueue = \"$queue\"\n");
   $script_file->print("queue " . $description->count() . "\n");

Qui è stata aggiunta anche la possibilità di estrarre gli usage records per l'accounting su base VO

Le costanti attualmente impostate in configurazione su t2cmcondor, per le priorità assegnate ai gruppi sono:

GROUP_NAMES = atlas, opssgm, atlasprd, atlassgm, alicesgm, lhcbsgm, pilatlas, itatlas, pillhcb

GROUP_QUOTA_opssgm = 5
GROUP_QUOTA_atlassgm = 5
GROUP_QUOTA_alicesgm = 1
GROUP_QUOTA_lhcbsgm = 1
GROUP_QUOTA_pillhcb = 8
GROUP_QUOTA_atlasprd = 40
GROUP_QUOTA_atlas = 40
GROUP_QUOTA_pilatlas = 40
GROUP_QUOTA_itatlas = 5
GROUP_AUTOREGROUP_opssgm = True
GROUP_AUTOREGROUP_alicesgm = True
GROUP_AUTOREGROUP_atlassgm = True
GROUP_AUTOREGROUP_atlas = True
GROUP_AUTOREGROUP_atlasprd = True
GROUP_AUTOREGROUP_pilatlas = True
GROUP_AUTOREGROUP_itatlas = True

# normal production
GROUP_PRIO_FACTOR_opssgm = 1
GROUP_PRIO_FACTOR_atlassgm = 1
GROUP_PRIO_FACTOR_lhcbsgm = 2
GROUP_PRIO_FACTOR_alicesgm = 2
GROUP_PRIO_FACTOR_atlasprd = 10
GROUP_PRIO_FACTOR_atlas = 10
GROUP_PRIO_FACTOR_pilatlas = 10
GROUP_PRIO_FACTOR_itatlas = 10
GROUP_PRIO_FACTOR_pillhcb = 20
    
DEFAULT_PRIO = 1

Per Condor le priorità crescono in modo inversamente proporzionale al prio_factor.

Per la coda short sono state fatte delle impostazioni direttamente sui files di configurazione dei WN, tenendo conto dei limiti (cputime massimo 2 ore, walltime massimo 4 ore). Il job andrà in preemption (kill a favore di altri job a maggiore priorità):

   PREEMPT  = ( PseudoQueue == "short" && ( $(CPUBusy) >= $(HOUR)*2 || $(ActivationTimer) >= $(HOUR)*4 ) )
         || ( PseudoQueue != "short" && ( $(CPUBusy) >= $(HOUR)*48 || $(ActivationTimer) >= $(HOUR)*72 ) ) 


per maggiori informazioni circa le priorità su condor:
Condor User Priorities