Speed over cat6

Hi, I’m trying to understand what could be the culprit of “low” speeds (for gigabit connection) on my pi <-> macbook.

Here’s the scenario: my pi is connected through USB 3.0 to a NAS drive, as well as to a SSD (for OS). When I download stuff from the internet to the pi (which goes directly into the NAS drive) it caps my provider speed (~ 22 MB/s writing), so that’s ok here.

However, when downloading something to my MacBook Pro from the pi (NAS drive as well) it can’t go over 20 MB/s. Everything is connected with Cat6 cables and 20 MB/s is quite below the gigabit speed. I don’t see what’s causing the bottleneck here.

Edit: I also noticed that when copying from the NAS drive to the Mac the pi temperature gets around 60º and keeps there (is the pi throttling the speed to prevent warming up? and why when downloading form the internet doesn’t it get that warm since the speeds are the same?)

Thanks!

Which RPi model is it? Up to RPi 3, Ethernet and USB are on the same bus, limiting overall bandwidth.

Alao which file transfer protocol do you use? Samba or NFS or something different? Those can further limit speeds an lead to CPU usage.

Well, I’m just downloading it directly through the Web UI of Plex (download file option). It’s a single movie file with ~10 GB.

In the meantime, I ran an iperf test between my MBP and Pi and it reports 429 Mbits/sec. Seems slow tbh.

Only RPi 4 serves full USB 3.0 and GiB Ethernet speeds. But download to and from via HTTP should be at least same speeds indeed :thinking:.

1 Like

It’s a Pi4 yes.

What’s more strange is that it gets quite warm when copying from the storage to somewhere else in the network (my mbp) whereas it doesn’t when downloading from the internet into the storage.

using htop should show the process causing high CPU load.

1 Like

What does your pi’s 4 report when you run iperf3? I can’t go beyond the 500 Mbits in a gigabit connection. It should reach 900 Mbits at least.

Indeed it should: Raspberry Pi 4 specs and benchmarks — The MagPi magazine

One test, could you try to apply performance governor and see whether this helps:

echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

I get around 950Mbit between RPi4 and a Windows 10 client.

Which commands are you running with iperf?

On the Pi just sudo iperf3 -s
and on the client iperf3.exe -c 192.168.X.X and iperf3.exe -c 192.168.X.X -R, to check both directions.

Ok with the -R flag I manage to get around 920 Mbps as well but only with the -R. Without is around 300-500 Mbps, why’s that?

You should be able to get 900+ on both cases.
Connect the devices directly with a tested cable.
At the same time monitor the cpu utilization.

-R is reverse, so the client sends to the server. Without -R it’s the other way around.
Maybe the NAS drive limits it?

I’m getting it only with -R only. Maybe a pi limitation the other way around? I don’t know, at least the cabling is good, so it wouldn’t ever get 900+ in any way I’d say.

When I don’t have the -R and the server is the pi, it doesn’t go beyond 500 mbps. Does that mean that the pi can’t handle this write speeds? Where is storing the data being download from the client?

On which device you start the server with iperf3 -s?
By default it writes to memory, not on disk. To write to disk you would need to use the -F flag and specify a file.

As we asked you before, try another cable to rule that out.
Also monitor the cpu utilization with top or htop when you are performing the test.

On the raspberry. Somehow, today, I can’t go past 500 Mbps either way, but yesterday it was going beyond 900.

CPU usage seems ok.

Edit: it was using the wifi IP instead of lan when I couldn’t go past the 500 Mbps. That explains the speed cap of 500 Mbps, however it doesn’t explain why the speed goes above 900 Mbps in on way but not reverse. So:

Pi sends & MBP receives = 900 Mbps+

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.06 GBytes   913 Mbits/sec  157             sender
[  5]   0.00-10.00  sec  1.06 GBytes   910 Mbits/sec                  receiver

Pi receives & MBP sends = 100 Mbps

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec   161 MBytes   135 Mbits/sec                  sender
[  5]   0.00-10.00  sec   161 MBytes   135 Mbits/sec                  receiver

Does anyone know why’s this difference? Where is the bottleneck that prevents the Pi from receiving at higher speeds?

Since this is happening uniquely to you it’s hard to troubleshoot.
Did you test with another cable to rule out the cable is broken?