Print view
This page is available in German only.

Programmentwicklung für ia64/TX7 (cross.dkrz.de, pp-Queue)

Der Server cross.dkrz.de soll auch zum Pre- und Postprocessing von Daten der SX6-Knoten eingesetzt werden. Für die Programmentwicklung stehen native C/C++ und ein Fortran 90 Compiler zur Verfügung.

I/O auf GFS Dateisystemen

Von cross.dkrz.de haben Sie Zugriff auf alle GFS Dateisysteme. Das GFS Dateisystem ermöglicht den Zugriff auf Daten von verschiedenen Rechnern aus mit einem Datendurchsatz, welcher dem lokaler Dateisysteme vergleichbar ist.

Für effizienten Datentransfer auf diesen Dateisystemen ist jedoch ein wichtiger Punkt zu beachten: Die Blockgröße aller Lese- oder Schreiboperationen sollte 64 kByte keinesfalls unterschreiten. Effizienter Transfer ist mit Blockgrößen ab 4 MByte möglich.

Fortran I/O

Hohe Transferraten erhalten Sie mit Unformatted Sequential Access. Sie sollten pro I/O-Statement möglichst große Datenmengen bewegen. Während der Laufzeit Ihres Programmes müssen Sie die Umgebungsvariable F_SETBUF setzen:

csh: setenv F_SETBUF 4096

sh: F_SETBUF=4096
export F_SETBUF

C/C++ I/O

Schreiben bzw. lesen Sie einfach große Datenblöcke (> 4 MByte) pro Aufruf einer I/O-Funktion.

Viele Programme fragen mit stat(2)/fstat(2) die Blockgröße des Dateisystems ab (st_blksize). GFS liefert hierbei den Wert des darunterliegenden physikalischen Dateisystems (16 kBytes). Für effektives I/O muss ein solches Programm angepasst werden. In den meisten Fällen genügt es den Wert von st_blksize zu ignorieren und eine gößere Blockgröße vorzugeben.

Falls das Programm keine interne Pufferung vorsieht und mit I/O-Operationen von geringem Datenvolumen zu rechnen ist, besteht die Möglichkeit mit setvbuf(3) einen Puffer zur größeren Blockung einzrichten.

char *mybuffer;
FILE *fp;
.
.
.
if (!(mybuffer = malloc (4194304)))
    exit (EXIT_FAILURE);

if (setvbuf (fp, mybuffer, _IOFBF, 4194304))
    exit (EXIT_FAILURE);

Alle weiteren I/O-Operationen über fp werden dann mit einem 4 MByte großen Puffer ausgeführt.

Wenn das Programm direkt mit einem File-Deskriptor arbeitet, muss die Pufferung selbst programmiert werden.

Bibliotheken und Werkzeuge

Einige häufig verwendete Werkzeuge und Bibliotheken sind für hohen Datendurchsatz angepasst worden. Neben Systemwerkzeugen, die in /opt/gfsext/ zu finden sind, sind dies:

Wenn Sie netCDF oder NCO verwenden, müssen Sie die Shellvariable NC_BLOCKSIZE auf die gewünschte Blockgröße in Byte setzen. Also in den meisten Fällen:
    setenv NC_BLOCKSIZE 4194304
bzw.
    NC_BLOCKSIZE=4194304
    export NC_BLOCKSIZE
Falls Sie bei Systemkommandos oder auch bei Programmen in /pool/ia64 niedrige I/O Transferraten (unter 10 MBytes/Sek.) feststellen, wenden Sie sich bitte an die Benutzerberatung oder direkt an Mathis Rosenhauer.
Deutsches Klimarechenzentrum GmbH | Impressum