Loading CHANGELOG.md +4 −0 Original line number Diff line number Diff line Loading @@ -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 Loading README.md +31 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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>` Loading scripts/run/fuse-0.9.6deleted 100644 → 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." } scripts/run/master-0.9.6 +10 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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" Loading @@ -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/" } Loading @@ -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 Loading Loading
CHANGELOG.md +4 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
README.md +31 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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>` Loading
scripts/run/fuse-0.9.6deleted 100644 → 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." }
scripts/run/master-0.9.6 +10 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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" Loading @@ -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/" } Loading @@ -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 Loading