Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

FUSE Mount

The Kiseki native client provides a FUSE mount that exposes the distributed storage as a local filesystem on compute nodes. Unlike the NFS gateway, the FUSE client runs in the workload’s process space and performs client-side encryption – plaintext never leaves the process.

Building

The FUSE mount is feature-gated. Build the client binary with the fuse feature:

cargo build --release --bin kiseki-client-fuse --features fuse

This requires the fuser crate, which depends on the FUSE kernel module being available on the host:

  • Linux: install fuse3 or libfuse3-dev
  • macOS: install macFUSE

Mounting

kiseki-client-fuse mount /mnt/kiseki \
    --data-addr <storage-node>:9100 \
    --tenant <tenant-id> \
    --namespace <namespace-id>

Mount Options

Options are passed with -o:

kiseki-client-fuse mount /mnt/kiseki \
    -o cache_mode=organic \
    -o cache_dir=/local-nvme/kiseki-cache \
    -o cache_l2_max=100G \
    -o meta_ttl_ms=5000
OptionValuesDefaultDescription
cache_modepinned, organic, bypassorganicCache operating mode (see Client Cache)
cache_dirpath/tmp/kiseki-cacheL2 NVMe cache directory
cache_l1_maxbytes256ML1 (in-memory) cache size
cache_l2_maxbytes50GL2 (NVMe) cache size per process
meta_ttl_msmilliseconds5000Metadata cache TTL

Environment Variables

Mount options can also be set via environment variables. Mount options take priority over environment variables.

VariableEquivalent option
KISEKI_CACHE_MODEcache_mode
KISEKI_CACHE_DIRcache_dir
KISEKI_CACHE_L1_MAXcache_l1_max
KISEKI_CACHE_L2_MAXcache_l2_max
KISEKI_CACHE_META_TTL_MSmeta_ttl_ms
KISEKI_CACHE_POOL_IDAdopt an existing cache pool (see staging handoff)

Supported Operations

Read/Write

OperationSupportedNotes
readYesServed from cache (L1 -> L2 -> canonical)
writeYesWrites to canonical; local metadata cache updated immediately
open / closeYesStandard file handles
fsync / fdatasyncYesFlushes delta to Raft quorum
truncate / ftruncateYesComposition resize
O_APPENDYesAtomic append via delta
O_CREAT / O_EXCLYesAtomic create-if-not-exists
O_DIRECTLimitedBypasses client cache, still goes through FUSE

Directory Operations

OperationSupportedNotes
mkdir / rmdirYesCreate and remove directories
readdir / readdirplusYesListing from materialized view
rename (within namespace)YesAtomic within shard
rename (cross-namespace)NoReturns EXDEV
OperationSupportedNotes
stat / fstat / lstatYesFile metadata
chmod / chownYesStored in delta attributes
symlink / readlinkYesSymlink targets stored as inline data
Hard links (within namespace)Yes
Hard links (cross-namespace)NoReturns EXDEV
xattr operationsYesgetxattr, setxattr, listxattr, removexattr

Nested Directories and Write-at-Offset

The FUSE filesystem supports full directory trees within a namespace. Files can be created in nested directories, and writes at arbitrary offsets within a file are supported (the composition tracks chunk references and handles sparse regions with zero-fill).

mkdir -p /mnt/kiseki/experiments/run-42/logs
echo "epoch 1 loss: 0.3" > /mnt/kiseki/experiments/run-42/logs/train.log

# Write at offset (sparse file)
dd if=/dev/zero of=/mnt/kiseki/data/sparse.bin bs=1 count=1 seek=1048576

Not Supported

OperationReason
Writable shared mmapReturns ENOTSUP. Read-only mmap works. Use write() instead. (ADR-013)
POSIX ACLsUnix permissions only (uid/gid/mode)

Cache Mode Selection

The cache mode determines how aggressively the client caches data on local storage. Choose the mode that matches your workload:

ModeBest forBehavior
pinnedTraining (epoch reuse), inference (model weights)Chunks retained until explicit release. Populate via staging API.
organicMixed workloads, interactive useLRU eviction with usage-weighted retention. Default.
bypassStreaming ingest, checkpoint writes, one-shot scansNo caching. All reads go directly to canonical storage.
# Training job: pin the dataset
kiseki-client-fuse mount /mnt/kiseki -o cache_mode=pinned

# Interactive exploration
kiseki-client-fuse mount /mnt/kiseki -o cache_mode=organic

# Checkpoint writer
kiseki-client-fuse mount /mnt/kiseki -o cache_mode=bypass

See Client Cache & Staging for staging pre-fetch, Slurm integration, and policy configuration.

Transport Selection

The native client automatically selects the fastest available transport to reach storage nodes:

  1. libfabric/CXI (Slingshot) – if available on the fabric
  2. RDMA verbs – if InfiniBand/RoCE is available
  3. TCP+TLS – universal fallback

Transport selection is automatic and requires no configuration. The client discovers available transports during fabric discovery at startup (ADR-008).

Unmounting

fusermount -u /mnt/kiseki    # Linux
umount /mnt/kiseki           # macOS

On clean unmount, the L2 cache pool is wiped (all chunk files are zeroized and deleted). On crash, the orphaned cache pool is cleaned up by the next client process or by the kiseki-cache-scrub service.