Files
homelab-optimized/docs/infrastructure/network-performance-tuning.md
Gitea Mirror Bot 2931009345
Some checks failed
Documentation / Build Docusaurus (push) Failing after 8s
Documentation / Deploy to GitHub Pages (push) Has been skipped
Sanitized mirror from private repository - 2026-03-16 10:55:35 UTC
2026-03-16 10:55:35 +00:00

281 lines
6.7 KiB
Markdown

# 🚀 Network Performance Tuning Guide
**🟠 Advanced Guide**
This guide documents the network performance testing and optimization between Calypso and Atlantis NAS units, connected via the TP-Link TL-SX1008 10GbE switch.
---
## 📊 Network Performance Test Results
### Test Configuration
- **Date**: January 2025
- **Tool**: iperf3 (via Docker: `networkstatic/iperf3`)
- **Connection**: Calypso ↔ TL-SX1008 ↔ Atlantis (10GbE)
- **MTU**: 1500 (standard)
### Baseline Results (Before Tuning)
| Direction | Speed | Notes |
|-----------|-------|-------|
| **Calypso → Atlantis** (upload) | 6.87 Gbps | ~3,570 TCP retransmits |
| **Atlantis → Calypso** (download) | 9.27 Gbps | Near line-rate ✅ |
### Optimized Results (After Tuning)
| Direction | Speed | Improvement |
|-----------|-------|-------------|
| **Calypso → Atlantis** (upload) | 7.35 Gbps | +7% |
| **Atlantis → Calypso** (download) | 9.27 Gbps | Unchanged |
---
## 🔧 Optimizations Applied
### 1. Ring Buffer Optimization (Calypso)
**Before:**
```
RX: 2048 (max: 8184)
TX: 4096 (max: 8184)
```
**After:**
```bash
sudo ethtool -G eth2 rx 8184 tx 8184
```
**Result:**
```
RX: 8184 ✅
TX: 8184 ✅
```
> ⚠️ **Note**: Changing ring buffers may briefly reset the NIC and drop connections.
### 2. TCP Buffer Tuning (Both NAS)
**Before:**
```
net.core.rmem_max = 212992
net.core.wmem_max = 212992
net.ipv4.tcp_rmem = 4096 87380 6291456
net.ipv4.tcp_wmem = 4096 16384 4194304
```
**Optimized settings:**
```bash
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
```
### 3. NIC Offloading Features (Verified Enabled)
```bash
ethtool -k eth2 | grep -E 'tcp-segmentation|generic-segmentation|generic-receive'
```
All offloading features should show `on`:
- `tcp-segmentation-offload: on`
- `generic-segmentation-offload: on`
- `generic-receive-offload: on`
### 4. Flow Control (Verified Enabled)
```bash
ethtool -a eth2
```
Expected output:
```
Pause parameters for eth2:
Autonegotiate: off
RX: on
TX: on
```
---
## 📋 Commands Reference
### Check Current Settings
```bash
# Ring buffers
ethtool -g eth2
# TCP buffers
sysctl net.core.rmem_max net.core.wmem_max net.ipv4.tcp_rmem net.ipv4.tcp_wmem
# Offloading
ethtool -k eth2
# Flow control
ethtool -a eth2
# MTU
cat /sys/class/net/eth2/mtu
```
### Apply Optimizations (Temporary)
```bash
# Max ring buffers
sudo ethtool -G eth2 rx 8184 tx 8184
# Increase TCP buffers
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
```
> ⚠️ These settings reset on reboot. See "Making Changes Persistent" below.
### Running iperf3 Tests
```bash
# Start server on Atlantis
sudo docker run -d --rm --name iperf3-server --network host networkstatic/iperf3 -s
# Run upload test from Calypso
sudo docker run --rm --network host networkstatic/iperf3 -c 192.168.0.200 -t 10 -P 4
# Run download test from Calypso (reverse mode)
sudo docker run --rm --network host networkstatic/iperf3 -c 192.168.0.200 -t 10 -P 4 -R
# Stop server
sudo docker stop iperf3-server
```
---
## 🔒 Making Changes Persistent
### On Synology DSM (Recommended)
For MTU and basic network settings, use DSM GUI:
- **Control Panel** → **Network****Network Interface**
- Select interface → **Edit** → Configure settings
### Via sysctl.conf
Create `/etc/sysctl.d/99-network-tuning.conf`:
```bash
# TCP buffer sizes for 10GbE
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Additional tuning
net.core.netdev_max_backlog = 250000
net.ipv4.tcp_max_syn_backlog = 30000
net.ipv4.tcp_tw_reuse = 1
```
Apply: `sudo sysctl -p /etc/sysctl.d/99-network-tuning.conf`
---
## 🎯 Jumbo Frames (MTU 9000)
### Why Jumbo Frames Help
Jumbo frames reduce per-packet overhead by sending larger packets (9000 bytes vs 1500 bytes). This can improve throughput by ~10-15% on 10GbE.
### Requirements
All devices in the path must support jumbo frames:
-**TL-SX1008**: Supports up to 9KB frames
-**Calypso**: Can be configured via DSM
-**Atlantis**: Can be configured via DSM
-**Archer BE19000**: Does NOT support jumbo frames
### Safe Configuration
Since Calypso and Atlantis communicate directly through the TL-SX1008 (not the router), jumbo frames can be enabled between them without affecting other devices:
```
Calypso (MTU 9000) ──► TL-SX1008 ──► Atlantis (MTU 9000)
Archer (MTU 1500) ──► Other devices
```
### Enabling Jumbo Frames
**Via DSM GUI (Persistent):**
1. **Control Panel****Network****Network Interface**
2. Select your 10G interface → **Edit**
3. Set **MTU** to **9000**
4. Click **OK**
**Via CLI (Temporary):**
```bash
sudo ip link set eth2 mtu 9000
sudo ip link set ovs_eth2 mtu 9000
```
> ⚠️ **Synology OVS Note**: On Synology with Open vSwitch, the `ovs_eth2` bridge interface may not accept MTU changes via CLI. Use DSM GUI instead.
---
## 🔍 Troubleshooting
### High Retransmit Count
If you see many TCP retransmits in iperf3:
1. Check ring buffer sizes (increase to max)
2. Verify TCP buffers are tuned
3. Check for packet loss: `ethtool -S eth2 | grep -i error`
4. Verify flow control is enabled
### Asymmetric Speeds
If upload is slower than download:
- This can be normal due to NIC/driver asymmetry
- Check if one side has smaller buffers
- Synology OVS adds some overhead
### Speed Below Expected
1. Verify link speed: `ethtool eth2 | grep Speed`
2. Check for errors: `ethtool -S eth2`
3. Test with single stream first: `iperf3 -c IP -t 10` (no `-P`)
4. Check CPU usage during test (might be CPU-bound)
---
## 📈 Performance Summary
### Current Achieved Speeds
| Path | Speed | % of Line Rate |
|------|-------|----------------|
| Atlantis → Calypso | 9.27 Gbps | 93% ✅ |
| Calypso → Atlantis | 7.35 Gbps | 74% |
| NUC → Calypso (Tailscale) | 550 Mbps | N/A (WAN limited) |
| NUC → Calypso (SMB) | 1.1 Gbps | N/A (caching benefit) |
### For Streaming Use Cases
These speeds are more than sufficient for:
- **4K HDR streaming**: Requires ~80-150 Mbps ✅
- **4K Remux playback**: Requires ~100-150 Mbps ✅
- **Multiple concurrent 4K streams**: Easily supported ✅
---
## 📚 Related Documentation
- [Network Infrastructure Guide](networking.md)
- [10GbE Backbone Diagram](../diagrams/10gbe-backbone.md)
- [Storage Topology](../diagrams/storage-topology.md)
---
*Last updated: January 2025*