Path Redundancy Model
Queue-Depth IO Policy
IO Policy Comparison
| Policy | Behavior | Best For |
|---|---|---|
| queue-depth | Routes to path with lowest queue | Mixed workloads (recommended) |
| round-robin | Rotates through paths equally | Uniform latency paths |
| numa | Prefers NUMA-local paths | NUMA-optimized systems |
Enabling Native Multipath
# Add kernel parameter
echo 'options nvme_core multipath=Y' > /etc/modprobe.d/nvme-tcp.conf
# Verify after reboot
cat /sys/module/nvme_core/parameters/multipath
# Output: Y
NVMe-TCP Failover Sequence
NVMe-TCP Failover Parameters
| Parameter | Default | Recommended | Description |
|---|---|---|---|
ctrl-loss-tmo |
600s | 1800s | Time before controller considered lost |
reconnect-delay |
10s | 10s | Delay between reconnection attempts |
nr_io_queues |
CPU count | - | Number of IO queues per controller |
Note:
NVMe-TCP uses native NVMe multipathing built into the Linux kernel. This is NOT dm-multipath (multipath.conf, multipathd) - those are for iSCSI/Fibre Channel only.
NVMe-TCP APD (All Paths Down) Behavior
When all paths to an NVMe controller are lost:
-
ctrl-loss-tmo timer starts - Default 600s (recommended: 1800s for production)
-
Reconnection attempts - NVMe driver attempts reconnection every
reconnect-delayseconds -
If timer expires - Controller is removed and I/O fails to application
-
If path recovers - I/O automatically resumes without intervention