@@ -33,7 +33,7 @@ A comprehensive benchmarking tool for the NVIDIA Inference Xfer Library (NIXL) t
3333## Features
3434
3535- ** Multiple Communication Backends** : UCX, GPUNETIO, Mooncake, Libfabric for network communication
36- - ** Storage Backend Support** : GDS, GDS_MT, POSIX, HF3FS, OBJ (S3) for storage operations
36+ - ** Storage Backend Support** : GDS, GDS_MT, POSIX, HF3FS, OBJ (S3), GUSLI for storage operations
3737- ** Flexible Communication Patterns** :
3838 - ** Pairwise** : Point-to-point communication between pairs
3939 - ** Many-to-one** : Multiple initiators to single target
@@ -200,6 +200,7 @@ For development environments or when Docker is not available.
200200- ** DOCA** : NVIDIA DOCA SDK for GPUNetIO
201201- ** AWS SDK C++** : For S3 object storage backend
202202- ** GDS** : NVIDIA GPUDirect Storage
203+ - ** GUSLI** : G3+ User Space Access Library for direct block device access
203204- ** NVSHMEM** : Required for NVSHMEM worker type
204205- ** hwloc** : Hardware locality detection (required for Libfabric only)
205206
@@ -304,6 +305,21 @@ sudo dpkg -i doca-host_3.1.0-091000-25.07-ubuntu2404_amd64.deb
304305sudo apt-get update && sudo apt-get install -y doca-sdk-gpunetio libdoca-sdk-gpunetio-dev
305306```
306307
308+ ** GUSLI (Optional - for GUSLI backend):**
309+ ``` bash
310+ # Clone and build GUSLI
311+ git clone https://github.com/nvidia/gusli.git
312+ cd gusli
313+ make all BUILD_RELEASE=1 BUILD_FOR_UNITEST=0 VERBOSE=1 ALLOW_USE_URING=0
314+
315+ # Install library and headers
316+ sudo cp libgusli_clnt.so /usr/lib/
317+ sudo cp gusli_* .hpp /usr/include/
318+ sudo ldconfig
319+ ```
320+
321+ ** Note** : GUSLI must be built before building NIXL. See [ GUSLI Plugin README] ( ../../src/plugins/gusli/README.md ) for detailed installation and usage instructions.
322+
307323#### Python Environment Setup
308324``` bash
309325# Install uv (modern Python package manager)
@@ -404,7 +420,7 @@ sudo systemctl start etcd && sudo systemctl enable etcd
404420```
405421--runtime_type NAME # Type of runtime to use [ETCD] (default: ETCD)
406422--worker_type NAME # Worker to use to transfer data [nixl, nvshmem] (default: nixl)
407- --backend NAME # Communication backend [UCX, GDS, GDS_MT, POSIX, GPUNETIO, Mooncake, HF3FS, OBJ] (default: UCX)
423+ --backend NAME # Communication backend [UCX, GDS, GDS_MT, POSIX, GPUNETIO, Mooncake, HF3FS, OBJ, GUSLI ] (default: UCX)
408424--benchmark_group NAME # Name of benchmark group for parallel runs (default: default)
409425--etcd_endpoints URL # ETCD server URL for coordination (default: http://localhost:2379)
410426```
@@ -486,13 +502,26 @@ sudo systemctl start etcd && sudo systemctl enable etcd
486502--obj_req_checksum TYPE # Required checksum for S3 backend [supported, required] (default: supported)
487503```
488504
505+ ** GUSLI Backend:**
506+ ```
507+ --device_list LIST # Device specs in format 'id:type:path' (e.g., '11:F:./store0.bin,27:K:/dev/nvme0n1')
508+ # Type: F (file), K (kernel device), N (networked server with t/u prefix)
509+ --gusli_client_name NAME # Client identifier (default: NIXLBench)
510+ --gusli_max_simultaneous_requests NUM # Concurrent request limit (default: 32)
511+ --gusli_device_security LIST # Comma-separated security flags per device (e.g., 'sec=0x3,sec=0x71')
512+ --gusli_bdev_byte_offset BYTES # Starting LBA offset in bytes (default: 1048576)
513+ --gusli_config_file CONTENT # Custom config file content (auto-generated if not provided)
514+
515+ Note: storage_enable_direct is automatically enabled for GUSLI backend
516+ ```
517+
489518### Using ETCD for Coordination
490519
491520NIXL Benchmark uses an ETCD key-value store for coordination between benchmark workers. This is useful in containerized or cloud-native environments.
492521
493522** ETCD Requirements:**
494523- ** Required** : Network backends (UCX, GPUNETIO, Mooncake, Libfabric) and multi-node setups
495- - ** Optional** : Storage backends (GDS, GDS_MT, POSIX, HF3FS, OBJ, S3 ) running as single instances
524+ - ** Optional** : Storage backends (GDS, GDS_MT, POSIX, HF3FS, OBJ, GUSLI ) running as single instances
496525- ** Required** : Storage backends when ` --etcd_endpoints ` is explicitly specified
497526
498527** For multi-node benchmarks:**
@@ -573,6 +602,69 @@ The workers automatically coordinate ranks through ETCD as they connect.
573602./nixlbench --backend POSIX --filepath /mnt/storage/testfile --posix_api_type URING --storage_enable_direct
574603```
575604
605+ ** GUSLI Backend (G3+ User Space Access Library):**
606+
607+ GUSLI provides direct user-space access to block storage devices, supporting local files, kernel block devices, and networked GUSLI servers.
608+
609+ ** Note** : Direct I/O is automatically enabled when GUSLI backend is selected (no need to specify ` --storage_enable_direct ` ).
610+
611+ ``` bash
612+ # Basic GUSLI benchmark - single file device
613+ ./nixlbench --backend=GUSLI \
614+ --device_list=" 11:F:./store0.bin" \
615+ --num_initiator_dev=1 \
616+ --num_target_dev=1 \
617+ --op_type=WRITE
618+
619+ # NVMe device with custom security
620+ ./nixlbench --backend=GUSLI \
621+ --device_list=" 27:K:/dev/nvme0n1" \
622+ --gusli_device_security=" sec=0x7" \
623+ --num_initiator_dev=1 \
624+ --num_target_dev=1 \
625+ --op_type=READ
626+
627+ # Multi-device configuration
628+ ./nixlbench --backend=GUSLI \
629+ --device_list=" 11:F:./store0.bin,14:K:/dev/zero,27:K:/dev/nvme0n1" \
630+ --gusli_device_security=" sec=0x3,sec=0x71,sec=0x7" \
631+ --num_initiator_dev=3 \
632+ --num_target_dev=3 \
633+ --op_type=WRITE
634+
635+ # Networked GUSLI server (TCP)
636+ ./nixlbench --backend=GUSLI \
637+ --device_list=" 20:N:t192.168.1.100" \
638+ --gusli_device_security=" sec=0x10" \
639+ --num_initiator_dev=1 \
640+ --num_target_dev=1 \
641+ --op_type=WRITE
642+
643+ # High concurrency with multiple threads
644+ ./nixlbench --backend=GUSLI \
645+ --device_list=" 27:K:/dev/nvme0n1" \
646+ --gusli_max_simultaneous_requests=128 \
647+ --num_threads=8 \
648+ --total_buffer_size=$(( 16 * 1024 * 1024 * 1024 )) \
649+ --op_type=WRITE
650+ ```
651+
652+ ** GUSLI Device Types:**
653+ - ` F ` : File-backed storage (e.g., ` 11:F:./store0.bin ` )
654+ - ` K ` : Kernel block device (e.g., ` 27:K:/dev/nvme0n1 ` , ` 14:K:/dev/zero ` )
655+ - ` N ` : Networked GUSLI server with protocol prefix (e.g., ` 20:N:t192.168.1.100 ` for TCP, ` 21:N:u10.0.0.5 ` for UDP)
656+
657+ ** GUSLI-Specific Parameters:**
658+ - ` --gusli_client_name ` : Client identifier (default: "NIXLBench")
659+ - ` --gusli_max_simultaneous_requests ` : Concurrent request limit (default: 32)
660+ - ` --gusli_device_security ` : Comma-separated security flags per device (default: "sec=0x3" for each device)
661+ - ` --gusli_bdev_byte_offset ` : Starting LBA offset in bytes (default: 1MB)
662+ - ` --gusli_config_file ` : Custom config file content override
663+
664+ ** Notes** :
665+ - Number of devices in ` --device_list ` must match ` --num_initiator_dev ` and ` --num_target_dev `
666+ - Direct I/O is automatically enabled for GUSLI (no need to specify ` --storage_enable_direct ` )
667+
576668### Worker Types
577669
578670** NVSHMEM Worker:**
0 commit comments