===== Scratch Directories on VSC_2 =====
In addition to $HOME, which is fine to use for standard jobs with rather few small files (<1000 files, overall size <1G), there are a number of specialized scratch directories.
The [[http://www.fhgfs.com/cms/documentation|Fraunhofer parallel cluster file system (FhGFS)/BeeGFS]] is used in $GLOBAL and $SCRATCH.
=== Global Personal Scratch Directories $GLOBAL ===
Please use the environment variable ''$GLOBAL'' to access your personal scratch space. Access is available from the compute and login nodes. The variable expands as e.g.:
$ echo $GLOBAL
/global/lv70999/username
The directory is writeable as user and readable by the group members. It is advisable to make use of these directories in particular for jobs with heavy I/O operations. In addition it will reduce the load on the fileserver holding the $HOME directories.
The Fraunhofer parallel file system is shared by all users and by all nodes.
Single jobs producing heavy load (>>1000 requests per second) have been observed to reduce responsiveness for all jobs and all users.
Lifetime of data is limited, see table below.
=== Per-node Scratch Directories $SCRATCH ===
Local scratch directories on each node are provided as a link to the Fraunhofer parallel file system and can thus be viewed also via the login nodes as '''/fhgfs/rXXnXX/'''.
The parallel file system (and thus the performance) is identical between $SCRATCH and $GLOBAL.
The variable ''$SCRATCH'' expands as:
$ echo $SCRATCH
/scratch
These directories are purged after job execution.
=== Local temporary ram disk $TMPDIR ===
For smaller files and very fast access, restricted to single nodes, the variables ''$TMP'' or ''$TMPDIR'' may be used which expand equally to
$ echo $TMP -- $TMPDIR
/tmp/123456.789.queue.q -- /tmp/123456.789.queue.q
These directories are purged after job execution.
Please refrain from writing directly to '''/tmp'''!
=== Joblocal scratch directory $JOBLOCAL ===
The newest, still experimental, scratch file system $JOBLOCAL is a common temporary storage within a user job.
The '''joblocal''' file system may be requested with
-v JOBLOCAL_FILESYSTEM=TRUE
All nodes within a job access the same files under '''/joblocal''', which is purged after job execution.
This method scales very well up to several hundred similar jobs.
Although the file system has 32GB, it is recommended to use only a few GB.
To save files at the job end, use, e.g.,
cd /joblocal; tar czf ${HOME}/joblocal_${JOB_NAME}_${JOB_ID}.tgz myfiles
in your [[prolog|user epilog]] script.
If there are many files (>>1000), please refrain from plain copying to $HOME or $GLOBAL at the job end.
Implementation details: ''$JOBLOCAL'' is implemented via [[http://en.wikipedia.org/wiki/SCSI_RDMA_Protocol| SCSI RDMA Protocol (SRP)]] and [[http://en.wikipedia.org/wiki/Network_File_System|NFS]].
Very high performance for small files is achieved by extensive caching on the jobs master node, which acts as (job internal) NFS server.
=== Comparison of scratch directories ===
| || $GLOBAL || $SCRATCH || $TMPDIR || $JOBLOCAL (experimental) ||
| Recommended file size || large || large || small || small ||
| Lifetime || files older than 180 days deleted if $GLOBAL space is running low || job || job || job ||
| Size || x00 TB (for all users) || x00 TB (for all users) || a few GB (within memory) || about 5 GB (hard limit: 32GB) ||
| Scaling || does not fit very large number of small file IO || does not fit very large number of small file IO || no problem (local) || no problem (local) ||
| Visibility || global || node (see above) || node || job ||
| Recommended usage || large files, available temporarily after job life || large files || small files, or many seek-operations within a file || many small files (>1000), or many seek-operations within a file ||