Commit 4cddd029 authored by Ramon Nou's avatar Ramon Nou
Browse files

Added CHANGELOG/README/Module files

parent b73af058
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -28,6 +28,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
    - New sfind filtering in the server side
  - Added new tests (and enabling failing ones) to increase coverage
  - Added docker image (release) for 0.9.6 ([!279](https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/279))
  - Added FUSE support([!264](https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/264))
    - fuse_client mounting a virtual path exists, avoiding usage of LD_PRELOAD.
    - Added tests for FUSE support
    


### Changed 
+31 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ to I/O, which reduces interferences and improves performance.
    - [Interposition library via system call interception](#interposition-library-via-system-call-interception)
    - [Interposition library via libc call interception](#interposition-library-via-libc-call-interception)
    - [User library via linking against the application](#user-library-via-linking-against-the-application)
    - [FUSE client](#fuse-client)
  - [Logging](#logging)
- [Advanced and experimental features](#advanced-and-experimental-features)
  - [Rename](#rename)
@@ -266,6 +267,36 @@ GekkoFS offers a user library that can be linked against the application, which

In this case, `LD_PRELOAD` is not necessary. Nevertheless, `LIBGKFS_HOSTS_FILE` is still required.

### FUSE client

The GekkoFS FUSE client provides a way to mount the GekkoFS file system and access it as a standard mount point without using `LD_PRELOAD`.

tl;dr example:

```bash
export LIBGKFS_HOSTS_FILE=<hostfile_path>
mkdir <mount_dir_path>
<install_path>/bin/fuse_client -f -s <mount_dir_path>
```

The `fuse_client` requires the `LIBGKFS_HOSTS_FILE` environment variable to be set. It also accepts standard FUSE arguments.

Common launch arguments:
- `-f`: Run in foreground.
- `-s`: Single-threaded operation (recommended).
- `<mount_dir_path>`: The directory where GekkoFS will be mounted.

FUSE-specific options can be passed via `-o`:
- `writeback`: Enable writeback cache.
- `direct_io`: Enable direct I/O (can boost performance significantly).
- `timeout=<seconds>`: Caching timeout (default: 1.0).
- `cache={never,auto,always}`: Cache policy.

Example with options:
```bash
<install_path>/bin/fuse_client -f -s <mount_dir_path> -o writeback,direct_io,timeout=5.0
```

## Logging

The following environment variables can be used to enable logging in the client library: `LIBGKFS_LOG=<module>`

scripts/run/fuse-0.9.6

deleted100644 → 0
+0 −82
Original line number Diff line number Diff line
#%Module1.0
########################################################
#
# Author: Ramon Nou
#
########################################################

set PROG_NAME           GekkoFS
set PROG_VERSION        fuse-0.9.6
set BASE                /apps/GPP/GEKKOFS
set PROG_HOME           $BASE/gkfs-fuse/bin/gkfs_daemon
set PROG_PROXY          $BASE/gkfs-fuse/bin/gkfs_proxy
set PROG_FUSE           $BASE/gkfs-fuse/bin/fuse_client
set PRLD_HOME           $BASE/gkfs-fuse/lib64/libgkfs_intercept.so
set LIBC_HOME           $BASE/gkfs-fuse/lib64/libgkfs_libc_intercept.so
set LIBS                $BASE/deps-master/lib64:$BASE/deps-master/lib:$BASE/gkfs-fuse/lib64
set GKFS_RUN            $BASE/gkfs-master/bin/gkfs_run

proc ModulesHelp { } {
    puts stderr "----------------------------------------------------------------"
    puts stderr "\tGekkoFS Module fuse-0.9.6"
    puts stderr "----------------------------------------------------------------"
    puts stderr "\nDescription:"
    puts stderr "\tThis module loads the environment for GekkoFS (FUSE version)."
    puts stderr "\tIt sets up environment variables and providing helper scripts."
    puts stderr "\nDefined Environment Variables:"
    puts stderr "\tGKFS_DAEMON      : Path to the GekkoFS daemon executable"
    puts stderr "\tGKFS_PROXY       : Path to the GekkoFS proxy executable"
    puts stderr "\tGKFS_FUSE        : Path to the GekkoFS FUSE client executable"
    puts stderr "\tGKFS_INTERCEPT   : Path to the interception library"
    puts stderr "\tGKFS_LIBC        : Path to the libc interception library"
    puts stderr "\tLD_LIBRARY_PATH  : Includes GekkoFS and ADMIRE dependencies"
    puts stderr "\tGKFS_MNT         : Default mount point for GekkoFS (can be overridden)"
    puts stderr "\tGKFS_ROOT        : Default root directory for GekkoFS (can be overridden)"
    puts stderr "\tGKFS_BASE        : Path to the GekkoFS installation directory"
    puts stderr "\nHelper Scripts:"
    puts stderr "\t\$GKFS_RUN start      : Launch GekkoFS servers (requires Slurm allocation)"
    puts stderr "\t\$GKFS_RUN start_fuse : Launch GekkoFS servers AND FUSE clients"
    puts stderr "\t\$GKFS_RUN stop       : Stop GekkoFS servers/clients and cleanup"
    puts stderr "----------------------------------------------------------------"
    puts stderr "\nExample:"
    puts stderr "\t# No LD_PRELOAD needed with FUSE"
    puts stderr "\t./your_application"
    puts stderr "----------------------------------------------------------------"
    puts stderr "\nMore information: https://storage.bsc.es/gitlab/hpc/gekkofs/"
}

module-whatis   "Loads the $PROG_NAME $PROG_VERSION Environment"

# Consistency check
conflict ${PROG_NAME}

# Load required modules
if { [ module-info mode load ] } {
    module unload impi oneapi
    module load ucx/1.16.0-gcc libfabric/1.21.0-gcc gcc/14.1.0_binutils241
}

# Set Environment Variables
setenv          GKFS_DAEMON         $PROG_HOME
setenv          GKFS_PROXY          $PROG_PROXY
setenv          GKFS_FUSE           $PROG_FUSE
setenv          GKFS_INTERCEPT      $PRLD_HOME
setenv          GKFS_LIBC           $LIBC_HOME
setenv          GKFS_LOG_LEVEL      1
setenv          GKFS_DAEMON_LOG_LEVEL 0
setenv          GKFS_RUN            $GKFS_RUN
setenv          GKFS_BASE           $BASE/gkfs-fuse

# Useful defaults (can be overridden by user)
setenv        GKFS_MNT            /dev/shm/gkfs_mnt
setenv        GKFS_ROOT           $env(TMPDIR)/gkfs_root
setenv        GKFS_HOSTS_FILE     $env(HOME)/gkfs_hosts.txt
setenv        LIBGKFS_HOSTS_FILE  $env(HOME)/gkfs_hosts.txt

prepend-path    LD_LIBRARY_PATH     $LIBS
prepend-path    PATH                $BASE/bin

if { [module-info mode] != "whatis" } {
    puts stderr "GekkoFS FUSE environment loaded."
    puts stderr "Run 'module help [module-info name]' for more information."
}
+10 −4
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ set PROG_VERSION master-0.9.6
set BASE                /apps/GPP/GEKKOFS
set PROG_HOME           $BASE/gkfs-master/bin/gkfs_daemon
set PROG_PROXY          $BASE/gkfs-master/bin/gkfs_proxy
set PROG_FUSE           $BASE/gkfs-master/bin/fuse_client
set PRLD_HOME           $BASE/gkfs-master/lib64/libgkfs_intercept.so
set LIBC_HOME           $BASE/gkfs-master/lib64/libgkfs_libc_intercept.so
set LIBS                $BASE/deps-master/lib64:$BASE/deps-master/lib:$BASE/gkfs-master/lib64
@@ -25,6 +26,7 @@ proc ModulesHelp { } {
    puts stderr "\nDefined Environment Variables:"
    puts stderr "\tGKFS_DAEMON      : Path to the GekkoFS daemon executable"
    puts stderr "\tGKFS_PROXY       : Path to the GekkoFS proxy executable"
    puts stderr "\tGKFS_FUSE        : Path to the GekkoFS FUSE client executable"
    puts stderr "\tGKFS_INTERCEPT   : Path to the interception library (preferred)"
    puts stderr "\tGKFS_LIBC        : Path to the libc interception library"
    puts stderr "\tLD_LIBRARY_PATH  : Includes GekkoFS and ADMIRE dependencies"
@@ -33,10 +35,13 @@ proc ModulesHelp { } {
    puts stderr "\tGKFS_BASE        : Path to the GekkoFS installation directory"
    puts stderr "\nHelper Scripts:"
    puts stderr "\t\$GKFS_RUN start      : Launch GekkoFS servers (requires Slurm allocation)"
    puts stderr "\t\$GKFS_RUN start_fuse : Launch GekkoFS servers AND FUSE clients"
    puts stderr "\t\$GKFS_RUN stop       : Stop GekkoFS servers and cleanup"
    puts stderr "\t\$GKFS_RUN stop_fuse  : Stop GekkoFS FUSE clients"
    puts stderr "----------------------------------------------------------------"
    puts stderr "\nExample:"
    puts stderr "\tLD_PRELOAD=\$GKFS_INTERCEPT ./your_application"
    puts stderr "\nExamples:"
    puts stderr "\tInterception: LD_PRELOAD=\$GKFS_INTERCEPT ./your_application"
    puts stderr "\tFUSE:         ./your_application"
    puts stderr "----------------------------------------------------------------"
    puts stderr "\nMore information: https://storage.bsc.es/gitlab/hpc/gekkofs/"
}
@@ -55,6 +60,7 @@ if { [ module-info mode load ] } {
# Set Environment Variables
setenv          GKFS_DAEMON         $PROG_HOME
setenv          GKFS_PROXY          $PROG_PROXY
setenv          GKFS_FUSE           $PROG_FUSE
setenv          GKFS_INTERCEPT      $PRLD_HOME
setenv          GKFS_LIBC           $LIBC_HOME
setenv          GKFS_LOG_LEVEL      1