thousands-advantage-10804
09/19/2025, 7:03 PMworried-state-78253
09/20/2025, 8:29 AMenough-australia-5601
09/22/2025, 3:08 PMethtool
to confirm that the interfaces are all running in the expected modes. You wrote that you're using RJ45 based cabling for the network hardware in question. There are different qualities of cabling. For 1000Base-T anything worse than CAT5e is a probably a waste of time. Note that CAT5 != CAT5e.
You can also try to find the bottleneck by using tools like perf3
to double check that the line-speeds between your nodes matches your expectations roughly.
If your hardware is good and you're sure that there aren't any weird things configured on your switches (QoS...) there are some gotchas when setting up VMs and their networks:
One thing to look out for is the device type of the virtual network device. There are several models to choose from: e1000
, rtl8139
... and they all have pros and cons. If your guest operating system supports it, go with the paravirtualized virtio
for best performance in most cases. The other ones are software-emulated versions of popular real hardware, which offer better compatibility with operating systems that don't ship with virtio
drivers (Windows) , but they can be a performance bottleneck.
The other thing to look out for is the setup of the virtual network. The defaults may not be best for performance.
If you can, set up the network to be bridged rather than NAT'ed. But this requires e.g. an external DHCP server or similar provisions configure networking for your guest VMs.
---
If you're looking to go beyond 10 000Base-T speeds you should consider doing PCI passthrough of a virtual function of the network card (i.e SR-IOV or whatever equivalent your hardware supports).
This requires careful hardware-specific setup beginning with enabling the necessary processor features in your EFI firmware and loading the required kernel modules. But if done right it should be possible to get the full performance out of your hardware from within a VM.worried-state-78253
09/22/2025, 3:17 PMworried-state-78253
09/22/2025, 3:27 PMworried-state-78253
09/22/2025, 3:29 PMworried-state-78253
09/22/2025, 4:07 PM#!/bin/bash
# List of hosts and interfaces (format: ip_or_hostname:interface)
HOSTS_AND_IFACES=(
"192.168.X.Y:enp5s0"
)
# SSH options (add -i /path/to/key if needed)
SSH_OPTS="-o BatchMode=yes -o ConnectTimeout=5"
echo "|_. Host |_. Interface |_. Link Detected |_. Speed |_. Duplex |_. Status |"
for entry in "${HOSTS_AND_IFACES[@]}"; do
host="${entry%%:*}"
iface="${entry##*:}"
# Run ethtool remotely
output=$(ssh $SSH_OPTS "rancher@$host" "LANG=C sudo ethtool $iface 2>/dev/null")
if [ $? -ne 0 ] || [[ -z "$output" ]]; then
echo "| $host | $iface | ERROR | - | - | - |"
continue
fi
link=$(echo "$output" | awk -F': ' '/Link detected:/ {print $2}')
speed=$(echo "$output" | awk -F': ' '/Speed:/ {print $2}')
duplex=$(echo "$output" | awk -F': ' '/Duplex:/ {print $2}')
status="OK"
if [[ "$link" != "yes" ]]; then
status="NO LINK"
elif [[ "$speed" == "Unknown!" || -z "$speed" ]]; then
status="NO SPEED"
fi
echo "| $host | $iface | $link | $speed | $duplex | $status |"
done
worried-state-78253
09/22/2025, 4:13 PMroot@runner-f-1:~# speedtest-cli --secure
Retrieving <http://speedtest.net|speedtest.net> configuration...
...
Retrieving <http://speedtest.net|speedtest.net> server list...
Selecting best server based on ping...
Hosted by Community Fibre Limited (London) [49.78 km]: 11.87 ms
Testing download speed................................................................................
Download: 509.55 Mbit/s
Testing upload speed......................................................................................................
Upload: 566.69 Mbit/s
While not "full speed", thats a 500% improvement! I suspect the test is actually limited - and the speed is comparable to the earlier test from a machine outside the virtual network!