Low Throughput While Using NVMe-TCP on RHEL/Rocky/AlmaLinux
KB0022958
Pure Product
FlashArray
Environment
NVMe-TCP on RHEL/Rocky/AlmaLinux
Symptoms
- Throughput below expected
- Not utilizing all paths
- Network bandwidth underutilized
Cause
- FlashArray not using all paths
- Network bottleneck
- I/O scheduler
- CPU bottleneck
Resolution
Diagnosis:
# Test raw throughput
fio --name=test --rw=read --bs=1M --size=10G --filename=/dev/nvme0n1
# Check network utilization
iftop -i <interface>
# Check all paths are active
nvme list-subsys
# Verify IO policy
cat /sys/class/nvme-subsystem/nvme-subsys*/iopolicy
Solutions:
- Not using all paths:
- Verify IO policy is round-robin:
echo "round-robin" > /sys/class/nvme-subsystem/nvme-subsys0/iopolicy - Ensure all connections are live
- Verify IO policy is round-robin:
- Network bottleneck:
- Verify link speed:
ethtool <interface> | grep Speed - Check for packet drops:
ethtool -S <interface> - Verify flow control:
ethtool -a <interface>
- Verify link speed:
- I/O scheduler:
- Verify scheduler is ‘none’ for NVMe devices
- Increase queue depth if needed
- CPU bottleneck:
- Check CPU utilization
- Enable offload features
- Distribute IRQs across CPUs