PBS-Patch: Preemption und selbstdefinierte Ressourcen
 

Der clucon-Patch erweitert den OpenPBS-Nachfolger Torque (ein Patch für OpenPBS 2.3.16 ist in Arbeit) um Preemption und selbstdefinierte, dynamische Ressourcen. Der  Patch betrifft dabei auch den Scheduler-Teil. Da der Meta-Scheduler "Maui" deutlich leistungsfähiger ist als der PBS-eigene Scheduler beschränkt sich der Patch auf Maui. Deswegen besteht der Patch aus zwei Teilen: Ein Patch für Torque, ein Patch für Maui 3.2.5.

 

1. Dynamische Ressourcen

Möchte man in PBS neue Ressourcen definieren, um etwa Requests wie

qsub -l myapplication=1

stellen zu können, ist dieses bisher nur über die Änderung einiger Header-Files und Neucompilieren des Codes möglich. Mit dem clucon-Patch ist für jede neue Ressource in die Datei

$PBS_CONFDIR/server_priv/resourcedef

eine Zeile der Form

<resourcename> <type>


einzutragen. Zur Zeit ist für <type> nur "l" erlaubt, also der Typ "long".

Weiterhin muss dem Scheduler Maui mitgeteilt werden, welche der neuen Ressourcen er beim Scheduling berücksichtigen soll. Diese geschieht über

RMRESOURCES resourcename1 [resoucename2] ...

in der Datei maui.cfg.

Ein praktischer Anwendungsfall für die dynamischen Ressourcen ist das Überprüfen von Floating-Lizenzen. Hierzu schreibe man ein Skript (Bsp: testmyapplication), welches eine "1" auf STDOUT  zurückliefert wenn noch Lizenzen vorhanden sind. In

$PBSCONFDIR/mom_priv/config

ist nun noch einzutragen:

myapplication  ! testmyapplication

Schickt man nun einen Job mit

qsub -l myapplication=1

ab, läuft der Job nur an, wenn noch eine Lizenz frei ist.
 

 

2. Preemption

Bei der Clusternutzung tritt manchmal der Fall auf, dass lange Jobs, die eigentlich nicht so wichtig sind, für andere, vielleicht kürzere Jobs, den Cluster sperren. Zur besseren und gerechteren Cluster-Ausnutzung wäre es hier sinnvoll, den langen Job anzuhalten um den wichtigen Job vorzuziehen. Dieses Verhalten wird mit Preemption bezeichnet. Um diese Funktion nutzen zu können, sind folgende Arbeiten durchzuführen:

  • Anwenden des Patches

  • Definition von zwei Queues, bsp. Queue "queue_high" und Queue "queue_low"

  • Einfügen folgender Zeilen in die maui.cfg:

    QOSCFG[high] PRIORITY=1000 QFLAGS=PREEMPTOR
    QOSCFG[low] PRIORITY=-1000 QFLAGS=PREEMPTEE

    CLASSCFG[queue_high] QDEF=high
    CLASSCFG[queue_low] QDEF=low
     

  • Jobs, die unterbrochen werden können (PREEMPTEE), sollten in die Queue "queue_low" gestellt werden, wichtige Jobs, die andere unterbrechen dürfen (PREEMPTOR) in die Queue "queue_high".