Troubleshooting
This guide helps you diagnose and resolve common issues when building, configuring, and using NIXL. Start with the Debug Logging section to enable detailed output, then find your issue category below.
Debug Logging
NIXL uses a configurable logging system that can help diagnose issues. Set the NIXL_LOG_LEVEL environment variable to increase verbosity:
The available log levels are:
See Environment Variables for the full NIXL_LOG_LEVEL reference and all other NIXL configuration knobs.
Error Codes Reference
NIXL uses integer status codes defined in nixl_types.h. Understanding these codes helps you quickly identify the root cause of failures:
Build and Installation Issues
Meson Setup Fails with Missing Dependencies
Ensure all required build tools are installed:
- C++20-compatible compiler
- Meson build system (
pip install meson) - Ninja build tool (
pip install ninja) - pkg-config
See Building NIXL from Source for detailed source build instructions including Docker containers, or Quick Start for PyPI installation.
UCX Not Found During Build
UCX is required for most network backends. If Meson cannot find UCX:
UCX version compatibility matters. NIXL requires UCX 1.14+ for full feature support. Check your UCX version with ucx_info -v.
Python Bindings Import Error
If you get ImportError: libnixl.so: cannot open shared object file:
Plug-in Shared Library Not Found at Runtime
If NIXL cannot find backend plug-ins at runtime, set the plug-in directory:
The default plug-in directory is {libdir}/plugins relative to the NIXL installation.
Runtime Errors
Agent Initialization Fails (NIXL_ERR_BACKEND)
The backend library is not found or not properly configured:
- Verify
NIXL_PLUGIN_DIRpoints to the correct plug-in directory - Check that the backend’s shared library exists (e.g.,
libplugin_UCX.so) - Verify backend prerequisites are installed (e.g., UCX libraries for the UCX backend)
- Enable
NIXL_LOG_LEVEL=DEBUGto see the exact plug-in loading error
Memory Registration Fails (NIXL_ERR_INVALID_PARAM)
Invalid memory address or size was passed to registerMem:
- Verify the memory allocation succeeded before registering
- Check that the memory type matches the backend’s supported types (use
getSupportedMems()) - Ensure the address and length are valid for the memory region
Operation Not Allowed (NIXL_ERR_NOT_ALLOWED)
Operations must follow the correct sequence: initialize agent, register memory, exchange metadata, then transfer:
- Verify you have registered memory before attempting transfers
- Verify metadata has been exchanged (either side-channel, etcd, or programmatic) before transfer
- Check that the transfer handle is in the correct state
Transfer Failures
Transfer Stays in NIXL_IN_PROG
Transfers are asynchronous. If a transfer appears stuck:
- Continue polling with
getXferStatus()— some transfers take time depending on data size - Check network connectivity between the source and destination agents
- Verify the remote agent is still running and healthy
- Enable
NIXL_LOG_LEVEL=DEBUGto see backend-level transfer progress
Type Mismatch (NIXL_ERR_MISMATCH)
Source and destination descriptors are incompatible:
- Verify both sides registered compatible memory types
- Check that descriptor sizes match between source and destination
- Ensure the transfer operation type (read/write) is correct for the direction
Backend Error During Transfer (NIXL_ERR_BACKEND)
A backend-specific failure occurred during the transfer:
- Enable
NIXL_LOG_LEVEL=DEBUGto see detailed backend error messages - Check backend-specific logs and connectivity
- Verify backend configuration (see Backend-Specific Issues below)
Remote Disconnect (NIXL_ERR_REMOTE_DISCONNECT)
The remote agent became unreachable during the operation:
- Check network connectivity to the remote host
- Verify the remote agent process is still running
- Check firewall rules between the two hosts
- For RDMA backends, verify InfiniBand/RoCE connectivity with
ibv_devinfo
Backend-Specific Issues
See Backend Selection for backend requirements and memory type compatibility.
UCX
Connection timeout: Verify RDMA devices are available with ibv_devinfo. Check that both hosts can reach each other on the RDMA network.
Memory registration warning after 5s: If UCX logs a warning about slow memory registration, you can adjust the timeout:
Alternatively, verify that the device supports the memory type being registered.
Libfabric
Provider selection issues: Check available providers with fi_info. Ensure the correct provider is being selected for your network fabric.
CUDA address workaround: If you encounter issues with CUDA memory addresses on certain providers:
GDS (GPUDirect Storage)
cuFile initialization fails: Verify the GDS driver is loaded and the cuFile configuration is accessible:
- Check that
CUFILE_ENV_PATH_JSONpoints to a valid cuFile configuration - Verify the filesystem is supported by GDS (for example, ext4, XFS, or a supported parallel filesystem)
- Ensure the GDS kernel module is loaded:
lsmod | grep nvidia_fs
S3 / Object Storage
Authentication errors: Verify your credentials are set:
Custom endpoint: For non-AWS S3-compatible storage (MinIO, Ceph, etc.):
Use HTTP only for development or in environments where the connection is otherwise secured. Use HTTPS for production endpoints.
Azure Blob Storage
Connection fails: Verify your storage account URL is set:
For local testing with Azurite:
etcd Connection Issues
See Metadata Exchange with etcd for the full etcd setup and configuration guide.
etcd Not Connecting
Verify the etcd endpoint is set and the server is reachable:
Metadata Not Found for Remote Agent
The remote agent may not have published its metadata yet:
- Check that the remote agent has called
sendLocalMD()after registering memory - Verify both agents use the same etcd namespace.
NIXL_ETCD_NAMESPACEdefaults to/nixl/agents/when unset. - Inspect the configured namespace:
Stale Metadata After Agent Restart
When an agent restarts, its previous metadata may still be in etcd:
- Agents overwrite their metadata on republish via
sendLocalMD() - Remote agents with cached metadata will be notified via the watcher mechanism
- If issues persist, manually clear the agent’s keys from the configured namespace:
After clearing an agent’s etcd keys, all remote agents that previously fetched its metadata will need to re-fetch it.