Data spaces

All user data are stored on file systems reachable from the supercomputer login and compute nodes. Each file system has a purpose: your HOME directory contains user configuration, your SCRATCH directory is intended for temporary computational data sets, etc. To prevent over-usage of the file system capacities, limitations/quotas are set on data space allocated to users or groups. Except for your HOME directory, which is hosted by a NFS file system, user data spaces are stored on Lustre file systems. This section provides data usage guidelines that must be followed, since an inappropriate usage of the file systems might badly affect the overall production of the computing center.

Available file systems

This section introduces the available file systems with their purpose, their quota policy and their recommended usage.

File System Personal Shared
Home $CCCHOME $OWN_HOME $CCFRHOME $OWN_CCFRHOME $ALL_CCCHOME $ALL_CCFRHOME $<SHSPACE>_ALL_CCCHOME $<SHSPACE>_ALL_CCFRHOME $<SHSPACE>_ALL_HOME $OWN_ALL_CCCHOME $OWN_ALL_CCFRHOME $OWN_ALL_HOME
Scratch $CCCSCRATCHDIR $OWN_CCCSCRATCHDIR $CCFRSCRATCH $OWN_CCFRSCRATCH $ALL_CCCSCRATCHDIR $ALL_CCFRSCRATCH $<SHSPACE>_ALL_CCCSCRATCHDIR $<SHSPACE>_ALL_CCFRSCRATCH $OWN_ALL_CCCSCRATCHDIR $OWN_ALL_CCFRSCRATCH
Work $CCCWORKDIR $OWN_CCCWORKDIR $CCFRWORK $OWN_CCFRWORK $ALL_CCCWORKDIR $ALL_CCFRWORK $<SHSPACE>_ALL_CCCWORKDIR $<SHSPACE>_ALL_CCFRWORK $OWN_ALL_CCCWORKDIR $OWN_ALL_CCFRWORK
Store $CCCSTOREDIR $OWN_CCCSTOREDIR $CCFRSTORE $OWN_CCFRSTORE $ALL_CCCSTOREDIR $ALL_CCFRSTORE $<SHSPACE>_ALL_CCCSTOREDIR $<SHSPACE>_ALL_CCFRSTORE $OWN_ALL_CCCSTOREDIR $OWN_ALL_CCFRSTORE

HOME

The HOME is a slow, small file system with backup that can be used from any machine.

Characteristics:

  • Type: NFS
  • Data transfer rate: low
  • Quota: 5GB/user
  • Usage: Sources, job submission scripts…
  • Comments: Data are saved
  • Access: from all resources of the center
  • Personnal variables: $CCCHOME $OWN_HOME $CCFRHOME $OWN_CCFRHOME
  • Shared variables: $ALL_CCCHOME $ALL_CCFRHOME $<SHSPACE>_ALL_CCCHOME $<SHSPACE>_ALL_CCFRHOME $<SHSPACE>_ALL_HOME $OWN_ALL_CCCHOME $OWN_ALL_CCFRHOME $OWN_ALL_HOME

Note

  • HOME is the only file system without limitation on the number of files (quota on inodes)
  • The retention time for HOME directories backup is 6 months
  • The backup files are under the ~/.snapshot directory

SCRATCH

The SCRATCH is a very fast, big and automatically purged file system.

Characteristics:

  • Type: Lustre
  • Data transfer rate: 300 GB/s
  • Quota: The quota is defined by group. The command ccc_quota provides information about the quota of the groups you belong to. By default, a quota of 2 millions inodes and 100 To of disk space is granted for each data space.
  • Usage: Data, Code output…
  • Comments: This filesystem is subject to purge
  • Access: Local to the supercomputer
  • Personnal variables: $CCCSCRATCHDIR $OWN_CCCSCRATCHDIR $CCFRSCRATCHDIR $OWN_CCFRSCRATCHDIR
  • Shared variables: $ALL_CCCSCRATCHDIR $ALL_CCFRSCRATCHDIR $<SHSPACE>_ALL_CCCSCRATCHDIR $<SHSPACE>_ALL_CCFRSCRATCH $OWN_ALL_CCCSCRATCHDIR $OWN_ALL_CCFRSCRATCH

The purge policy is as follows:

  • Files not accessed for 60 days are automatically purged
  • Symbolic links are not purged
  • Directories that have been empty for more than 30 days are removed

Note

  • You may use the ccc_will_purge command to display the files to be purged soon. Please read the dedicated section for more information

WORK

WORK is a fast, medium and permanent file system (but without backup):

Characteristics:

  • Type: Lustre via routers
  • Data transfer rate: high (70 GB/s)
  • Quota: 5 TB and 500 000 files/group
  • Usage: Commonly used file (Source code, Binary…)
  • Comments: Neither purged nor saved (tar your important data to STORE)
  • Access: from all resources of the center
  • Personnal variables: $CCCWORKDIR $OWN_CCCWORKDIR $CCFRWORK $OWN_CCFRWORK
  • Shared variables: $ALL_CCCWORKDIR $ALL_CCFRWORK $<SHSPACE>_ALL_CCCWORKDIR $<SHSPACE>_ALL_CCFRWORK $OWN_ALL_CCCWORKDIR $OWN_ALL_CCFRWORK

Note

  • WORK is smaller than SCRATCH, it’s only managed through quota.
  • This space is not purged but not saved (regularly backup your important data as tar files in STORE)

STORE

STORE is a huge storage file system

Characteristics:

  • Type: Lustre + HSM
  • Data transfer rate: high (200 GB/s)
  • Quota: 50 000 files/group, expected file size range 10GB-1TB
  • Usage: To store of large files (direct computation allowed in that case) or packed data (tar files…)
  • Comments: Migration to hsm relies on file modification time: avoid using cp options like -p, -a
  • Access: from all resources of the center
  • Personnal variables: $CCCSTOREDIR $OWN_CCCSTOREDIR $CCFRSTORE $OWN_CCFRSTORE
  • Shared variables: $ALL_CCCSTOREDIR $ALL_CCFRSTORE $<SHSPACE>_ALL_CCCSTOREDIR $<SHSPACE>_ALL_CCFRSTORE $OWN_ALL_CCCSTOREDIR $OWN_ALL_CCFRSTORE
  • Additional info: Use ccc_hsm status <file> to know whether a file is on disk or tape level, and ccc_hsm get <file> to preload file from tape before a computation

Note

  • STORE has no limit on the disk usage (quota on space)
  • STORE usage is monitored by a scoring system
  • An HSM is a data storage system which automatically moves data between high-speed and low-speed storage media. In our case, the high speed device is a Lustre file system and the low speed device consists of magnetic tape drives. Data copied to the HSM filesystem will be moved to magnetic tapes (usually depending on the modification date of the files). Once the data is stored on tape, accessing it will be slower.
  • To fetch and store big data volumes on the Store, you may use the ccc_pack command. Please see the dedicated subsection for more information.

TMP

TMP is a local, fast file system but of limited size.

Characteristics:

  • Type: zram (RAM)
  • Data transfer rate: very high (>1GB/s) and very low latency
  • Size: 16 GB
  • Usage: Temporary files during a job
  • Comments: Purge after each job
  • Access: Local within each node
  • Variable: CCCTMPDIR or CCFRTMP

Note

  • TMP allow fast write and read for local needs.
  • TMP is local to the node. Only jobs/processes within the same node have access to the same files.
  • Write files in TMP will reduce the amount of available RAM.

SHM

SHM is a very fast, local file system but of limited size.

Characteristics:

  • Type: tmpfs (RAM, block size 4Ko)
  • Data transfer rate: very high (>1GB/s) and very low latency
  • Size: 50% of RAM (ie: 94 GB on skylake)
  • Usage: Temporary files during compute; can be used as a large cache
  • Comments: Purge after each job
  • Access: Local within each node
  • Variable: CCCSHMDIR

Note

  • SHM allow very fast file access.
  • SHM is local to the node. Only jobs/processes within the same node have access to the same files.
  • Write files in SHM will reduce the amount of available RAM.
  • Using the SHM folder through the CCCSHMDIR variable is strongly recommended, especially for small files.

Warning

CCCSHMDIR is only available during a SLURM allocation (ccc_msub). CCCSHMDIR is not available in an interactive session (ccc_mprun -s).

Warning

Using CCCSHMDIR is necessary in jobs to make sure data are properly cleaned at job end. It may cause node deadlocks otherwise.

Quota

Because file systems are shared between many users, restrictions are enforced on disk usage. The disk quotas and your current usage (space and number of files or directories) are shown by the command ccc_quota. This command also displays a score rating your usage on Lustre + HSM file systems (“Account scoring”).

$ ccc_quota
Disk quotas for user <login> (uid <uid>):

             ============ SPACE =============  ============ INODE =============
 Filesystem     usage    soft    hard   grace   entries    soft    hard   grace
 ----------  -------- ------- ------- -------  -------- ------- ------- -------
       HOME     2.06G      5G      5G       -   115.79k       -       -       -
      STORE   674.28G       -       -       -        25       -       -       -
       WORK    79.44G       -       -       -    334.3k       -       -       -
    SCRATCH   845.93G       -       -       -     1.06M       -       -       -

Disk quotas for data space <group> (gid <gid>):

             ============ SPACE =============  ============ INODE =============
 Filesystem     usage    soft    hard   grace   entries    soft    hard   grace
 ----------  -------- ------- ------- -------  -------- ------- ------- -------
       HOME         -       -       -       -         -       -       -       -
      STORE     2.56T       -       -       -    35.87k    100k  100.1k       -
       WORK     6.95T    110T  110.1T       -     3.97M      7M   7.05M       -
    SCRATCH   728.02G    100T  100.1T       -     1.34M      2M   2.05M       -

STORE filesystem scoring for group <group> (gid <gid>):

 ================= SPACE ================  ============== INODE ===============
    usage  files<32M  files<1G  avg_fsize   entries     dir  symlink  non_files
 -------- ---------- --------- ----------  -------- ------- -------- ----------
   16.97T     92.09%    92.33%       626M    35.87k    6235     1204     20.74%
          ---------- --------- ----------                            ----------
                 0/7 +     0/3 +      2/4                            +      3/6
          ====================================  TOTAL SCORE: 5/20 =============

Disk quotas

Three parameters govern the disk quotas:

  • soft limit: when your usage reaches this limit you will be warned.
  • hard limit: when your usage reaches this limit you will be unable to write new files.
  • grace period: the period during which you can exceed the soft limit.

Within the computing center, the quotas have been defined as follows:

  • the grace period is 1 week. It means that once you have reached the soft limit, a countdown starts for a week. By the end of the countdown, if you have not brought your quota under the soft limit, you will not be able to create new files anymore. Once you get back under the soft limit, the countdown is reset.
  • soft limit and hard limit are almost always the same, which means that checking your current usage to be below this limit is enough.
  • those limits have been set on both the number of files (inode) and the data usage (space) for WORK and SCRATCH.
  • those limits have been set only on the data usage (space) for HOME.
  • those limits have been set only on the number of files (inode) for Lustre + HSM file systems (CCCSTOREDIR).
  • Lustre + HSM file systems (CCCSTOREDIR) have a scoring system instead of space limitations.

Note

The section Disk quotas displayed by ccc_quota is updated in real-time.

Account scoring

On Lustre + HSM file systems (CCCSTOREDIR), a score reflects how close you are from the recommended usage.

4 criteria are defined and are each granted a certain amount of points. Here are those criteria:

  • inodes should be regular files (not directories nor symbolic links) for 6 points,
  • files should be bigger than 32MB for 7 points,
  • files should be bigger than 1GB for 3 points,
  • the average file size should be high enough for 4 points. More specifically, with 64MB, 128MB, 1GB and 8GB as limits, you get one point per limit exceeded by your average file size. For example, an average file size of 2GB will give you a partial score of 3/4.

The command ccc_quota shows how well you match the criteria in the Account Scoring section:

  • current usage (space and inodes)
  • percentages of files not matching the criteria
  • global score and the partial scores.

Here is an example of scoring:

STORE filesystem scoring for group <group> (gid <gid>):

 ================= SPACE ================  ============== INODE ===============
    usage  files<32M  files<1G  avg_fsize   entries     dir  symlink  non_files
 -------- ---------- --------- ----------  -------- ------- -------- ----------
   16.97T     92.09%    92.33%       626M    35.87k    6235     1204     20.74%
          ---------- --------- ----------                            ----------
                 0/7 +     0/3 +      2/4                            +      3/6
          ====================================  TOTAL SCORE: 5/20 =============
  • For instance, for the criteria “non_files”, the score is of 3 out of 6
  • The related number is 20.74%: this is the proportion of your inodes that are directories of links.
  • These 20.74% represent three points lost out of 6
  • The partial score of the criteria is computed and is then 3/6
  • Finally all partial scores are summed and constitute a global score
ex: (0+0+2+3)=5 points over (7+3+4+6)=20, that is to say 5/20

Note

The section Account Scoring displayed by ccc_quota is updated daily (around 13:00 CET/CEST).

Data protection

Warning

Please refer to internal technical documentation to get information about this subject.

Personal Spaces

Every user of the computing center has a personal space in their primary work group, on each available filesystems: NFS home, local and global Lustre filesystems.

The command ccc_home displays the personal directories for your login.

$ ccc_home -h
ccc_home: Print the path of a user directory (default: home directory).
usage: ccc_home [ -H | -s | -t | -W | -x | -A | -a | -n] [-u user] [-d datadir]
             [-h, --help]
-H, --home            :  (default) print the home directory path ($HOME)
-s, -t, --cccscratch  :  print the CCC scratch directory path   ($CCCSCRATCHDIR)
-X, --ccchome         :  print the CCC nfs directory path ($CCCHOMEDIR)
-W, --cccwork         :  print the CCC work directory path  ($CCCWORKDIR)
-A, --cccstore        :  print the CCC store directory path ($CCCSTOREDIR)
-a, --all             :  print all paths
-u user               :  show paths for the specified user instead of the current user
-d datadir            :  show paths for the specified datadir
-n, --no-env          :  do not load user env to report paths
-h, --help            :  display this help and exit

By default, members of the same work group have read access to each other’s personal spaces.

Shared Spaces

A shared space is a powerful tool to share environment, installations and results between users or a community. It mainly consists of data storage with additional tools to enhance or manage it. Shared spaces may be used within a community to share:

  • Data: input files, configuration files, results, logs
  • Products or compute codes

Accessibility and procedures

Warning

Please refer to internal technical documentation to get information about this subject.

Implementation

File systems

Regarding file systems, a shared space is like the already existing personal space: it is spread over 4 different file systems (HOME, CCCSCRATCH, CCCWORK and CCCSTORE). For a shared space called SHSPACE, the names to access the 4 different storage spaces will be:

  • $<SHSPACE>_HOME or $<SHSPACE>_CCFRHOME
  • $<SHSPACE>_CCCSCRATCHDIR or $<SHSPACE>_CCFRSCRATCH
  • $<SHSPACE>_CCCWORKDIR or $<SHSPACE>_CCFRWORK
  • $<SHSPACE>_CCCSTOREDIR or $<SHSPACE>_CCFRSTORE

Those environment variables also exist for your personal space: they are named OWN_HOME, OWN_SCRATCHDIR, etc. and are defined in your default environment.

Note

You may be a member of several shared spaces.

700 px | Shared storage space

Shared storage space

Limitations and quota

Several limitations rule a shared space:

  • It cannot be shared between users of different containers
  • It is not a user account and it does not come with computing hours

Please note that shared file systems have no specific quota. The inodes stored on any file system will impact the quota of their owner.

400 px | Shared space quota

Shared space quota

Unix groups

Warning

Please refer to internal technical documentation to get information about this subject.

Tools

The computing center provides several tools to ease usage and management of shared spaces.

  • The datadir/<shspace> and dfldatadir/<shspace> modules offer set environment variables that simplify access to the shared storage spaces.
  • The extenv/<shspace> module helps using shared products or computing codes.
  • The scripts ccc_shspace_chmod and ccc_shspace_modck, along with the module collwork, allow to test and set the unix permissions of files and directories in the shared space.

module datadir/dfldatadir

The modules datadir and dfldatadir set environment variables that point to the various storage spaces. Versions of those modules exists for your personal space (own, usually loaded by default), and for each shared space you are member of.

  • The datadir module sets an environment variable for each data directory available. Several versions of datadir may be loaded simultaneously in your environment.

The example below shows the default module datadir/own and the impact of loading datadir/shspace:

$ module list
Currently Loaded Modulefiles:
1) ccc 2) datadir/own 3) dfldatadir/own

$ echo $OWN_CCCWORKDIR
/ccc/work/contxxx/grp1/user1

$ module load datadir/shspace
load module datadir/shspace (Data Directory)

$ echo $SHSPACE_CCCWORKDIR
/ccc/work/contxxx/shspace/shspace
  • The dfldatadir module sets the default environment variables for the various storage spaces (CCCSCRATCHDIR, CCCWORKDIR, CCCSTOREDIR and their CCFR equivalent).

Only one version of dfldatadir can be loaded at a time.

This example shows how to use dfldatadir:

$ module list
Currently Loaded Modulefiles:
1) ccc 2) datadir/own 3) dfldatadir/own

$ echo $CCCWORKDIR
/ccc/work/contxxx/grp1/user1

By default, $CCCWORKDIR (and its CCFR’s equivalent $CCFRWORK) points to your own work directory.

$ module switch dfldatadir/own dfldatadir/shspace
unload module dfldatadir/own (Default Data Directory)
unload module datadir/own (Data Directory)
load module dfldatadir/shspace (Default Data Directory)

Once dfldatadir/shspace is loaded instead of dfldatadir/own, $CCCWORKDIR (and $CCFRWORK) points to the work directory shared by shspace.

$ echo $CCCWORKDIR
/ccc/work/contxxx/shspace/shspace

Generic variables are set by the dfldatadir module, which point to the datadir/shspace variables without mentioning a specific shspace name. This can be useful in order to create generic scripts adapted to different projects.

$ echo $ALL_CCCWORKDIR
/ccc/work/contxxx/shspace/shspace

Environment extension

The extenv module extends the current user environment. It defines a common environment for all users of a shared space.

Loading the extenv module will:

  • Set environment variables defining the path to shared products and module files (SHSPACE_PRODUCTSHOME, SHSPACE_MODULEFILES, SHSPACE_MODULESHOME)
  • Execute an initialization script
  • Add shared modules to the available modules

The environment extension mechanisms uses specific paths. Products installed in the <shspace> shared space should be installed in $SHSPACE_PRODUCTSHOME and the corresponding module files should be in $SHSPACE_MODULEFILES.

Initialization file

If a file named init is found in the path defined by $SHSPACE_MODULESHOME, then it is executed each time the extenv/<shspace> module is loaded. This may be helpful to define other common environment variables or to add prerequisites on modules to be used by the community.

For instance the following example defines two environment variables: one is the directory containing input files (SHSPACE_INPUTDIR), and the other is the result directory (SHSPACE_RESULTDIR). It also adds $SHSPACE_PRODUCTSHOME/tools/bin to the PATH so that the tools installed in $SHSPACE_PRODUCTSHOME/tools/bin are easily available.

$ cat $SHSPACE_MODULESHOME/init
setenv SHSPACE_INPUTDIR "$env(SHSPACE_CCCWORKDIR)/in"
setenv SHSPACE_RESULTDIR "$env(SHSPACE_CCCSCRATCHDIR)/res"
append-path PATH "$env(SHSPACE_PRODUCTSHOME)/tools/bin"
Modules

After the module extenv/<shspace> is loaded, all the module files located in $SHSPACE_MODULEFILES become visible to the module command. For each product, there should be one module file per version.

For example, if you create specific modules in the shared environment in the following paths:

$ find $SHSPACE_MODULEFILES
/ccc/contxxx/home/shspace/shspace/products/modules/modulefiles
/ccc/contxxx/home/shspace/shspace/products/modules/modulefiles/code1
/ccc/contxxx/home/shspace/shspace/products/modules/modulefiles/tool2
/ccc/contxxx/home/shspace/shspace/products/modules/modulefiles/libprod
/ccc/contxxx/home/shspace/shspace/products/modules/modulefiles/libprod/1.0
/ccc/contxxx/home/shspace/shspace/products/modules/modulefiles/libprod/2.0

Then, those modules will be visible and accessible once the extenv/<shspace> module is loaded.

$ module load extenv/shspace
load module extenv/shspace (Extra Environment)
$ module avail
---------------- /opt/Modules/default/modulefiles/applications -----------------
abinit/x.y.z        gaussian/x.y.z        openfoam/x.y.z
[...]
-------------------- /opt/Modules/default/modulefiles/tools --------------------
advisor/x.y.z       ipython/x.y.z         r/x.y.z
[...]
-------- /ccc/contxxx/home/shspace/shspace/products/modules/modulefiles --------
code1        libprod/1.0        libprod/2.0        tool2

$ module load tool2
$ module list
Currently Loaded Modulefiles:
1) ccc          3) dfldatadir/own   5) extenv/shspace
2) datadir/own  4) datadir/shspace  6) tool2

Let us consider the example of a product installed in the shared space. The program is called prog. Its version is version. It depends on the product dep. The product should be installed in the directory $SHSPACE_PRODUCTSHOME/prog-version. The syntax of its module file $SHSPACE_MODULEFILES/prog/version would be:

#%Module1.0
# Software description
set version     "version"
set whatis      "PROG"
set software    "prog"
set description "<description>"

# Conflict
conflict        "$software"

# Prereq
prereq dep

# load head common functions and behavior
source $env(MODULEFILES)/.scripts/.headcommon
# Loads software's environment

# application-specific variables
set prefix       "$env(SHSPACE_PRODUCTSHOME)/$software-$version"
set libdir       "$prefix/lib"
set incdir       "$prefix/include"
set docdir       "$prefix/doc"

# compilerwrappers-specific variables
set ldflags      "<ldflags>"

append-path PATH "$bindir"
append-path LD_LIBRARY_PATH "$libdir"

setenv VARNAME "VALUE"

# load common functions and behavior
source $env(MODULEFILES)/.scripts/.common
  • Setting the local variables prefix, libdir, incdir and docdir will create the environment variables PROG_ROOT, PROG_LIBDIR, PROG_INCDIR and PROG_DOCDIR when the module is loaded. You can also define any environment variable needed by the software as the example does for VARNAME.
  • Inter module dependencies are now handled automatically with the prereq keyword. That way, any time the module is loaded, its dependencies are loaded if necessary.

We recommend the use of the previous example as a template for all your module files. If you use the recommended path for all installations ($SHSPACE_PRODUCTSHOME/<software>-<version>), you can keep that template as it is. Just specify the right software and version and the potential VARNAME environment variables you want to define for the software.

Using that template will ensure that your module behaves the same way as the default modules and that all the available module commands will work for you.

Module collection

The collection mechanism allows to define a set of modules to be loaded either automatically when starting a session, through the default collection or manually with module restore [collection_name].

Along with datadir, dfldatadir and extenv, the aim of this collections is to replace all users configurations that may have been done up to now in the shell configuration files. (.bashrc, .bash_profile, etc)

Here are the useful commands to manage collections:

  • To create a collection containing the modules currently loaded in your environment:
module save [collection_name]

If [collection_name] is not specified, it will impact the default collection.

  • To list available collections:
module savelist
  • To load a saved collection:
module restore [collection_name]

If [collection_name] is not specified, the default collection will be loaded.

Those collections are stored in the users home, just like shell configuration scripts.

Let us say you have a product Tool2 installed in your shared extended environment. Here is how you would add it to your default collection:

$ module list
Currently Loaded Modulefiles:
1) ccc 2) datadir/own 3) dfldatadir/own

Load all necessary modules to access your shared product correctly.

$ module load datadir/shspace
load module datadir/shspace (Data Directory)
$ module load extenv/shspace
load module extenv/shspace (Extra Environment)
$ module load tool2
load module tool2 (TOOL2)
$ module list
Currently Loaded Modulefiles:
1) ccc         3) dfldatadir/own  5) extenv/shspace
2) datadir/own 4) datadir/shspace 6) tool2

Use module save to make the current environment the default one.

$ module save

After that, every time you will connect to your account, those will be the modules loaded by default.

We highly recommend the use of collections instead of adding calls to module load in shell configuration files. A call to module load takes non negligible time whether the module was already loaded or not. And when they are specified in ~/.bashrc, they run for each bash script or shell execution. On the contrary, a collection is only loaded if the environment has not yet been initialized. Therefore, using collections will fasten connections and script executions.

Note: To ensure the correct setting of your user environment, make sure

  • That the file ~/.bashrc contains:
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
  • That the file ~/.bash_profile contains:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

Managing permissions

Warning

Please refer to internal technical documentation to get information about this subject.

Parallel file system usage monitoring

Some general best practice rules should be met when using the available file systems. They are specified in Recommended data usage on parallel file system.

Inappropriate usage of parallel file systems is monitored, as it may badly affect overall performances. Several inappropriate practices are tracked down.

Too many small files on CCCSTOREDIR

On STORE, the monitoring starts when you have 500 files or more on this file system. This monitoring checks if your files on STORE follow this rules :

  • Average size of files below 1GB (see the column “avg_fsize(MB)” from ccc_quota)
  • Percentage of files lower than 512MB higher than 80% (see the column “files<512M” from ccc_quota)

Once a week, if these rules are not followed, the following actions are triggered until the situation is improved:

  • D0 - Alert 1: The user is informed by mail.
  • D7 - Alert 2: The user is informed by mail and his submissions are locked.
  • D14 - Alert 3: The user is informed by mail, his account is locked and his files can be compressed and even deleted.

Too many files in a directory on SCRATCH, WORK and STORE

Having a directory with more than 50000 entries (files or directories) at the root level is inappropriate.

Once a week if this rule is not followed, actions are triggered until situation is improved:

  • D0: The user is informed by mail.
  • D7: The user is informed by mail.
  • D14: The user is informed by mail and his submissions are locked.
  • D21: The user is informed by mail.
  • D28: The user is informed by mail, his account is locked and his files can be removed.

Data management on STORE

ccc_pack

ccc_pack allows for a storing large volumes of data. Usually, it is used to transfer data from the Scratch to the Store. Here is an example case :

$ ccc_pack --mkdir --partition=<partition> --filesystem=store,scratch --src=$CCCSCRATCHDIR/<source file path>   --dst=$CCCSTOREDIR/<destination directory> -j 2
$ ccc_msub $CCCSTOREDIR/<destination directory>/pack_<ID>.msub

More options are available, please use ccc_pack --help or man ccc_pack for more information.

ccc_unpack

ccc_unpack is the routine to reverse a pack. Usually, it is used to transfer data back from the Store to the Scratch. Here is an example case :

$ ccc_unpack --src-basename=ID --src=$CCCSTOREDIR/<archive directory> --dst=$CCCSCRATCHDIR/<output dir> --partition=milan -j 2

$ ccc_msub $CCCSTOREDIR/unpack_<ID>.msub

More options are available, please use ccc_unpack --help or man ccc_unpack for more information.

ccc_hsm

ccc_hsm is a tool designed to manage data among multiple levels of storage devices, from Lustre SDDs/HDDs to an archival system such as HPSS or Phobos. ccc_hsm can manage data placement through hints by migrating data within Lustre storage components. It can also trigger the copy of archived data back to Lustre through Lustre-HSM mecanisms. The details of its use is described in the following paragraphs.

ccc_hsm on the STORE

Display status

$ ccc_hsm status <file>

You can use the -T option to also display the storage tiers if the file is online, or its archive id if released.

Here is an example of an output on the store

$ ccc_hsm status -T test_dir/test_file
test_dir/test_file                  online  (hdd)

In this case, the file is ready to be used.

ccc_hsm status -T test_dir/test_file2
test_dir/test_file2     released

In this case, the file need to be fetched

To show the HSM status of all files in a directory, use the command:

ccc_hsm ls <dir>

In the same way, you can add the -T option to display storage tiers.

Here is an example of an output:

ccc_hsm ls -T test_dir
online   (hdd)           test_dir/test_file_1
online   (flash)         test_dir/test_file_2
released (1)             test_dir/test_file_3

Retrieving data

To retrieve files, you can use the get command to preload the entries into Lustre. The given path to retrieve can also be a directory, in which case additional options are required to specify the behaviour. The command is:

ccc_hsm get <path>

Multiple options can be added:

  • -r: for recursive get if the given path is a directory
  • -b: to get the data asynchronously in background
  • -d: to only retrieve the first level entries of a directory
  • -n: to only try to preload files once

If the retrieval is blocking (i.e. not using the -b option), it will wait for the file to be online. However, if the file isn’t online by the time the timeout is reached, ccc_hsm has no way of knowing why it couldn’t be retrieved.

Advanced usage for the store

ccc_hsm allows one to set special hints on a file to indicate the usage of the file in the future. This will help optimize the system performance and efficiently choose how and when migrations and archival are done.

Warning

Writing rights are required to use hints on a file. You may use hints only on the STORE and SCRATCH filesystems.

This is done by using the command:

ccc_hsm hint <hint> <path>

Multiple hints can be declared in the command line, and they have the following meanings:

  • --wont-access: The specified data will not be accessed in the near future (incompatible with --will-access)
  • --wont-change: The specified data will not be modified in the near future
  • --no-archive: The specified data should not be archived in the near future
  • --will-access: The specified data will be accessed in the near near future (incompatible with --wont-access)
  • --clear: Remove all previous user hints before applying new ones (if provided)

If no hint is provided, it will display the hint currently attached to the file.

For instance, if you know the file will not be accessed in the near futur, you may use the following command :

$ ccc_hsm hint --wont-access test_dir/test_file1
$ ccc_hsm hint test_dir/test_file1
wont-access

Data management on SCRATCH

ccc_will_purge

ccc_will_purge displays all files to be purged within 15 days. You may use the -d option to change the delay :

ccc_will_purge -d <maximum number of days before the purge>

ccc_hsm

ccc_hsm is a tool designed to manage data among multiple levels of storage devices, from Lustre SDDs/HDDs to an archival system such as HPSS or Phobos.

Warning

The SCRATCH is not a HSM Filesystem

ccc_hsm on the SCRATCH

Display status

ccc_hsm status <file>

You can use the -T option to also display the storage tiers if the file is online, or its archive id if released.

Here is an example of an output on the scratch:

$ ccc_hsm status -T test_dir/test_file
test_dir/test_file                  online  (hdd)

In this case, the file is on the hard drive (hdd). This is recommended if : • the files are not accessed often, or more generally if IO performances are not relevant • the access order is consistent This pool is also less used and may provide better writing performances when the machine load is heavy.

$ ccc_hsm status -T test_dir/test_file
test_dir/test_file                  online  (flash)

In this case, the file is on the NVME (flash memory). This is recommended if :

  • The files are accessed often, in a random order
  • The IO performances are crucial to the code

ccc_hsm allows one to set special hints on a file to indicate the usage of the file in the future. This will help optimize the system performance and efficiently choose how and when migrations and archival are done.

Warning

Writing rights are required to use hints on a file. You may use hints only on the STORE and SCRATCH filesystems.

This is done by using the command:

ccc_hsm hint <hint> <path>

Multiple hints can be declared in the command line, and they have the following meanings:

  • --wont-access: The specified data will not be accessed in the near future (incompatible with --will-access)
  • --wont-change: The specified data will not be modified in the near future
  • --no-archive: The specified data should not be archived in the near future
  • --will-access: The specified data will be accessed in the near near future (incompatible with --wont-access)
  • --clear: Remove all previous user hints before applying new ones (if provided)

If no hint is provided, it will display the hint currently attached to the file.

For instance, if you know the file will not be accessed in the near futur, you may use the following command :

$ ccc_hsm hint --wont-access test_dir/test_file1
$ ccc_hsm hint test_dir/test_file1
wont-access

Large files management

For files larger than 10 Go on the STORE, WORK or SCRATCH, it is recommanded to “strip” the file: Stripping a file consist in dividing it between several Object Storage Targets (OSTs).

In order to strip an existing file you may use the following commands:

lfs setstripe -c <number of stripes> <new path to file>
cp <previous path> <new path to file>

In this command, the -c option specifies the stripe count, which is the number of OSTs that the file will be striped across. In most cases, 2 to 4 stripes are enough to handle large files. In cas your IO patterns are well parallised, with the least amount of conflicts, you may use more stripes. Nevertheless, you may use no more than one OST per 32GB of file and no more than 16 stripes. Adding striping will increase read/write bandwidth and decrease latency fo large files but will increase the number of requests generated and thus the load on the processor.

For faster striping of the file, you may use the MPIFileUtils command dstripe as described in the MPIFileUtils subsection, in the Paralell IO section.

Once you have run this command, Lustre will automatically distribute the file across the specified number of OSTs. You can confirm that the file is striped across multiple OSTs by checking the output of the lfs getstripe command:

lfs getstripe <new path to file>

This will show you the stripe count, stripe size, and OSTs that the file is striped across.

You may also define the stripping for a directory, which will affect all new files created in it:

lfs setstripe -c <number of stripes><path of directory>

By default, maximum file size is 4TB, stripping allows for bigger files. If needed, you may use the command:

ulimit -f <file size limit>

However its usage is not recommended. In case of need, please send an email to the hotline.

In order to have the best IO performance, you may directly directly stripe your outputs with MPI IO. More details can be found in the I/O section of the official MPI documentation.

Cloud storage with Swift (Openstack)

Presentation

Swift is a cloud storage software offered by the OpenStack Object Store project. It allows you to easily store and access large amounts of data with a user-friendly API. It is designed to handle a large volume of data, and ensure that it is always available, reliable and secure. Swift is ideal for storing any type of unstructured data that can continue to grow.

Prerequisite

In order to use Swift, you will need to be part of an European or GENCI project.

Swift project management

Project management at the TGCC

In order to use Swift, you will need to load the swift-project module:

$ module load swift-project/<project>

You may change project with the following command:

$ module switch swift-project/<project2>

The list of your projects can be obtained through this command:

$ openstack project list

Project management from an authorized connection point

Get the following files script provided by CEA:

  • get_token.sh
  • ca.crt
  • keystonerc_user_cea

For GENCI projects:

$ curl "https://fenix-swift-fr.ccc.cea:443/505634db7f334d1898fc678ec014694e?container=public&object=get_token.sh"        --output <output file>
$ curl "https://fenix-swift-fr.ccc.cea:443/505634db7f334d1898fc678ec014694e?container=public&object=ca.crt"              --output <output file>
$ curl "https://fenix-swift-fr.ccc.cea:443/505634db7f334d1898fc678ec014694e?container=public&object=keystonerc_user_cea" --output <output file>

For European projects:

$ curl "https://fenix-swift-eu.ccc.cea.eu:443/505634db7f334d1898fc678ec014694e?container=public&object=get_token.sh"        --output <output file>
$ curl "https://fenix-swift-eu.ccc.cea.eu:443/505634db7f334d1898fc678ec014694e?container=public&object=ca.crt"              --output <output file>
$ curl "https://fenix-swift-eu.ccc.cea.eu:443/505634db7f334d1898fc678ec014694e?container=public&object=keystonerc_user_cea" --output <output file>

Replace OS_PROJECT_NAME by your project name in keystonerc_user_cea.

In order to use keystone/swift use these commands :

$ source keystonerc_user_cea
$ get_token.sh token your_project_id <login> /path/ca.crt
$ export <value> # Follow the instructions given by the previous script
$ get_token.sh project_id your_project_id <login>
$ export <value> # Follow the instructions given by the previous script
$ openstack project list
$ swift stat

Swift usage

Informations and statistics

You can display information of a given account, container or objects with the swift stat command:

$ swift stat <project>
$ swift stat <container>
$ swift stat <container> <object>
Account: <>
Container: <container>
Object: <object>
Content Type: <type> ^for instancetext/plain
Content Length: 10
Last Modified:  <time>
ETag: <tag>
Meta Mtime: <metadata modification time>
Accept-Ranges: bytes
X-Trans-Id: <>
X-Openstack-Request-Id: <>

Update metadata for an account, container or object.

$ swift post <account>
$ swift post <container>
$ swift post <container1> <file1>

Uploads and dowloads

Upload files and directories to a given container. If the container does not exist, it will be created.

$ swift upload <container> <directory1> <directory2> <file1> <file2>

Download all files in a container

$ swift download <container>

Download a file in a container

$ swift download <container> <file>

Suppression

Delete all file in an account

$ swift delete

Delete all files in a container

$ swift delete <container>

Delete a file in a container

$ swift delete <container> <file>

Sharing your project

Authentified sharing

In order to share your files with people in your community, you need to send a mail to the hotline Then, they can access your files with the following command:

For GENCI projects:

# From login nodes
$ swift --os-storage-url https://oio-gw.ccc.cea.fr:6008/v1/<AUTH_PROJECT_ID_OF_FILE_OWNER> download <container> <file>

# From an authorized connection point + auth
$ swift --os-storage-url https://swift-gtw-fr.ccc.cea.fr/PROJECT_ID_OF_FILE_OWNER download <container> <file>

For European projects:

#From login nodes
$ swift --os-storage-url https://oio-gw.ccc.cea.fr:6007/v1/<AUTH_PROJECT_ID_OF_FILE_OWNER> download <container> <file>

#From an authorized connection point + auth
$ swift --os-storage-url https://swift-gtw-eu.ccc.cea.fr/PROJECT_ID_OF_FILE_OWNER download <container> <file>

Public sharing

If you want to make your files public, you may also make a request to the hotline. Then anyone can access your files without authentication in read-only with the following command:

For GENCI projects:

$ curl "https://fenix-swift-fr.ccc.cea.fr:443/PROJECT_ID_OF_FILE_OWNER?container=<target_container>&object=<target_object>" --output <output file>

For European projects:

$ curl "https://fenix-swift-eu.ccc.cea.fr:443/PROJECT_ID_OF_FILE_OWNER?container=<target_container>&object=<target_object>" --output <output file>

Swift-to-Filesystem datamover

Nodeum is an effective Data Management Software that allow you to move data from Lustre to Swift and Swift to Lustre. You need to have an active CEA Swift account in order to use Nodeum. Nodeum works only on the STORE filesystem. You do not need to provide STORE path -> by default, Nodeum will chose file or directory in your $CCCSTOREDIR.

Usage:

#Move data from Swift to Lustre filesystem
$ ccc_nodeum swift_to_nodeum container1/object1 object_on_filesystem
#Move data from Lustre filesystem to Swift
$ ccc_nodeum nodeum_to_swift file1 container1