Gigabit Ethernet quietly throttles NFS mounts, VM migrations and backups in many homelabs. On mini PCs without a PCIe slot, USB is the only way to add faster networking. But be careful what you buy: many “fast” USB adapters are 2.5 or 5 GbE.
Know your chips
| Chip | Speed | Linux driver |
|---|---|---|
| Realtek RTL8156 / RTL8156B / RTL8156BG | 2.5 GbE | r8152 |
| Realtek RTL8157 | 5 GbE | r8152 (support added in 2026) |
| Aquantia/Marvell AQC111U | 5 GbE | aqc111 |
| Realtek RTL8159 | 10 GbE | r8152, mainline from Linux 7.2 (Phoronix) |
| Marvell AQC107/AQC113 (Thunderbolt adapters) | 10 GbE | atlantic |
For true 10GbE over USB, the RTL8159 is the chip to look for. Thunderbolt 10GbE adapters with Marvell chips are the other option on machines with Thunderbolt or USB4.
The port matters
The RTL8159 is designed for USB 3.2 Gen 2x2 (20 Gbps), Thunderbolt 3/4 or USB4. Plugged into an ordinary USB 3.2 Gen 2 (10 Gbps) port it still works, but can’t reach full 10GbE once protocol overhead is counted. In a test posted with the Linux driver patches, an RTL8159 on a 20 Gbps port reached about 8.96 Gbps with iperf3. Check which USB ports your mini PC actually has before buying.
Linux driver and firmware
uname -r # 7.2 or newer for mainline RTL8159 support
lsmod | grep r8152
dmesg | grep -i r8152
ip -br link # new interface, usually enx<mac>
ethtool enx<mac> | grep Speed # check the negotiated link speed
The RTL8159 needs PHY firmware to link at 10G; according to the driver discussion, without it you only get 5G. On Debian and Proxmox the Realtek firmware comes from firmware-realtek (non-free-firmware). On kernels older than 7.2 you’d need Realtek’s out-of-tree driver, which you have to rebuild with every kernel update. Stick with a kernel that supports it natively.
Configuring a Static IP on Proxmox
On Proxmox, you’ll want to either bridge the USB adapter or assign it directly to a VM/container. For a host-level static IP, edit /etc/network/interfaces:
auto enx001122334455
iface enx001122334455 inet static
address 10.0.10.5/24
gateway 10.0.10.1
Then bring it up:
ifup enx001122334455
To create a Linux bridge on top of it for VM passthrough:
auto vmbr1
iface vmbr1 inet static
address 10.0.10.5/24
gateway 10.0.10.1
bridge-ports enx001122334455
bridge-stp off
bridge-fd 0
Restart networking or reboot the node. VMs can now be assigned vmbr1 as a second NIC on your 10GbE segment.
Test throughput yourself
Before trusting it with real workloads, measure:
iperf3 -s # on the other machine
iperf3 -c 10.0.10.5 -t 30 -P 4 # on the USB adapter's host
Compare a single stream and several parallel streams, and watch CPU load on the mini PC: USB networking costs more CPU than a PCIe NIC. Check ethtool for the link speed if results look capped at 5 Gbps (firmware) or around 2.5 Gbps (wrong adapter).
Setting Up a Fast NFS Share
Once your 10GbE interface is up, here’s a minimal NFS server setup on the Proxmox/Ubuntu host to serve VM storage or bulk data:
sudo apt install nfs-kernel-server
# Create export directory
sudo mkdir -p /data/nfs-fast
sudo chown nobody:nogroup /data/nfs-fast
# Add to /etc/exports
echo '/data/nfs-fast 10.0.10.0/24(rw,sync,no_subtree_check,no_root_squash)' \
| sudo tee -a /etc/exports
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server
On the client side, mount with options tuned for high throughput:
sudo mount -t nfs -o rw,hard,rsize=1048576,wsize=1048576 \
10.0.10.5:/data/nfs-fast /mnt/fast-nfs
For a persistent Docker-based NFS client that other containers can use, a compose snippet:
services:
app:
image: your-app:latest
volumes:
- nfs-data:/app/data
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: "addr=10.0.10.5,rw,hard,rsize=1048576,wsize=1048576,nfsvers=4"
device: ":/data/nfs-fast"
USB 10GbE vs PCIe: Honest Comparison
USB adapters aren’t the right tool for every node. Here’s where each makes sense:
Go USB when:
- Your node is a mini PC or NUC with no PCIe slot (check it has a 20 Gbps USB, USB4 or Thunderbolt port)
- You need temporary 10GbE for a backup run or migration
- You’re testing whether 10GbE even helps your workload before committing to a PCIe upgrade
- Budget is tight and you need multiple nodes upgraded at once
Go PCIe when:
- The node is a full ATX/mATX server with an open slot
- You need consistent sub-millisecond latency (USB adds CPU interrupt overhead)
- You’re running SR-IOV or need the NIC directly attached to a VM via PCIe passthrough
- The workload is storage-intensive 24/7 (USB adapters get warm under sustained load)
Used PCIe 10GbE cards (for example Intel X550 for RJ45, or Mellanox ConnectX cards for SFP+) are often cheap on the second-hand market. If you have the slot, use it.
Heat
10GbE adapters, USB or PCIe, run warm under sustained load. Give USB adapters some airflow rather than burying them behind a mini PC in a closed cabinet, especially for long transfers.
Recommended hardware
Related hardware (affiliate links. They help fund the site at no extra cost to you):
What’s Next
- Proxmox VE Homelab Setup: Complete Installation and Configuration Guide (2026): Segment your homelab network with VLANs on Proxmox bridges
- Stratis Storage on Linux: ZFS-Like Features Without the Complexity: NFS vs iSCSI for Proxmox VM storage: benchmarks and tradeoffs
- Best Mini PC for a Homelab Server in 2026: Tested & Ranked: Building a Proxmox cluster from mini PCs on a budget
- Grafana + Prometheus Homelab Monitoring: Full Stack Setup in 30 Minutes: Monitor network throughput and host metrics with Prometheus and Grafana
[discussion]
Comments are powered by Giscus — backed by GitHub Discussions. Sign in with GitHub to join the conversation.