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.
csh: setenv F_SETBUF 4096
sh: F_SETBUF=4096
export F_SETBUF
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.
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.