next up previous contents
Next: CODINE auf CIP-Pool Up: CODINE - Das Previous: Parallele Jobs

Checkpointing

Bei längeren Jobs sollte man dafür Vorsorge treffen, daß die ganze Arbeit bei einem Programmabbruch (z.B. Platte voll) oder Crash nicht umsonst war, und regelmäßig Zwischenergebnisse abspeichern. Außerdem muß das Programm -- z.B. einfach am Vorhandensein eines Files -- erkennen können, daß es an der entsprechenden Stelle weitermachen soll und nicht wieder von vorn anfängt. Häufig haben große Programmpakete Optionen für ein solches ``Checkpointing''; eigene Programme kann man oft leicht dafür auslegen.

Teilt man dem CODINE-Batchsystem mit, daß man Checkpointing einsetzt, ist der Job nicht mehr an eine Queue gebunden; er kann, wenn die Auslastung zu sehr steigt oder wenn seine Queue angehalten wird, automatisch zu einem anderen Rechner ``migrieren''. Natürlich geht dabei die Arbeit seit dem letzten Checkpoint verloren, trotzdem rechnet sich dies oft: Wird beispielsweise ein normaler Job nachts auf anton gerechnet, bleibt er stehen, wenn die Queue morgens angehalten wird, und rechnet erst am Abend wieder weiter -- auch wenn alle anderen Rechner leer sind. Ein ``Checkpointing''-Job wird dagegen bei Anhalten der Queue auf eine andere freie Queue migriert und rechnet fröhlich weiter.

Ein Batchskript, das für Checkpointing ausgelegt ist, muß dafür vorbereitet sein, mehrmals von vorne zu starten, ohne immer wieder alles nochmal zu rechnen. Zur Unterstützung dieser Aufgabe setzt CODINE eine Umgebungsvariable $RESTARTED auf 0 beim ersten Mal, auf 1 bei einem Neustart. Damit das Skript nicht etwa mitten in einer Kopieroperation unterbrochen wird und kaputte Dateien hinterläßt, müssen alle Teile, die unterbrochen werden können, mit dem Kommando qrestart gestartet werden. Natürlich sollten diese Teile den weitaus größten Anteil an der CPU-Zeit haben, sonst macht das Checkpointen keinen Sinn. Ein einfaches Skript sieht dann etwa so aus:

#!/bin/ksh
# CODINE Batchskript für 
# User-Checkpointing
#

#
# Checkpointing wird gemacht 
# -> Migrieren ist möglich
#
#$ -ckpt

#$ -l group=skalar
#$ -s /bin/ksh
#$ -cwd

#
# das folgende nur beim ersten 
# Mal ausführen
#
if [ $RESTARTED = 0 ]; then
   make_grid
fi

#
# Eingabe-Datei in den 
# Usertemp-Bereich kopieren 
#
cp inputfile $TMPDIR/rzt/pj

#
# starte das eigentliche Programm
#   (nur dies kann unterbrochen werden)
#
qrestart -exec mein_fem_programm\
optionen

#
# aufräumen
#
rm $TMPDIR/rzt/pj/inputfile
mv $TMPDIR/rzt/pj/outputfile\
 $HOME/fem/results