GekkoFS 0.7.0 is now available, with enhancements to the filesystem configuration options, more detailed log output, and several bugfixes.


  • Added support for system calls eventfd() and eventfd2() which were directly forwarded to the kernel in previous versions.
  • Internal file descriptors created by the fcntl() are now handled.
  • Internal file descriptors passed to processes using CMSG_DATA in system calls suchj as recvmsg() are now handled.


  • The client interception library now relies on Mercury instead of Margo for network communication. The motivation behind this major change is to increase application compatibility, since the Argobots ULTs used by Margo to send and process RPCs clashed at times with applications using pthreads. This often caused strange behaviors and difficult to track bugs due to ULT stack corruptions.
  • Environment variables have been renamed to better distinguish which variables affect the client library and which variables affect the daemon. More specifically, client environment variables will now use the LIBGKFS_ prefix, while daemon environment variables will use the GKFS_DAEMON_ prefix.
  • The spdlog logging library used by the client interception library has been replaced with a bespoke logging infrastructure. The rationale behind this major change is that spdlog’s internal threads and exception management often had issues with the system call interception infrastructure. The current logging infrastructure is designed around the syscall interception mechanism, and is therefore more stable.
  • Partly due to the new logging infrastructure and partly in an effort to facilitate developer usage, there have been significant changes to the environment variables controlling logging output. The desired log module is now selected with LIBGKFS_LOG, while the desired output channel is controlled with LIBGKFS_LOG_OUTPUT. Additional options such as LIBGKFS_LOG_OUTPUT_TRUNC, LOG_SYSCALL_FILTER and LOG_DEBUG_VERBOSITY can be used to further control how and which messages are emitted. Run the client with LIBGKFS_LOG=help for more details.
  • Improved dependency management in CMake.


  • The internal file descriptors of the client library have been relocated to a private range to avoid interfering with client application file descriptors.