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
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_DATAin 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
- 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
LOG_DEBUG_VERBOSITYcan be used to further control how and which messages are emitted. Run the client with
LIBGKFS_LOG=helpfor 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.