Painfully Slow Raspberry Pi Zero W Internet Speeds

Just configured my Raspberry Pi Zero W ordered on # 100139504.
Loaded using Noobs and Raspian Image - no difference on Sandisk and Samsung micro SD cards.
When doing a sudo apt-get upgrade it took over 30 minutes most of this downloading time. As an example a 220Mb file took over 10 minutes at about 300Kb/s.
Trying to open YouTube on Chromium will sometimes time out and if it does connect it cannot playback video at the lowest resolution.
Running speedtest.net gets between 1 and 3 Mb/sec on the odd occasion it doesn’t time out.
I have a 50M NBN connection and get 48Mb/sec on my Windows wired system and over 40Mb/sec on other WiFi enabled devices.
The interesting thing is that when the Pi is connected my overall speed test results go down to around 30Mb/sec. The Pi is less than 5 meters from the access point.
I’m working on a project which requires accessing the internet but this unit is not suitable due to these slow speeds.

Surely it must be better than this.

All help appreciated.

Regards,

Hersh

Hi Hersh,

It sounds like you are running the full Raspbian image (not Lite). Is that correct?

Hi Graham, yes the full version of both.

Ok thanks for confirming. Pi Zero will not function anywhere near as well as a 3 Model B+ or A+ when running the fuill version of Raspbian. It would be worth considering the A+ if you need to run the GUI as it has a much (much!) faster processor onboard. For websurfing, the 3B+ would be better again with more RAM.

The Pi Zero W can certainly get better WiFi speeds, though you are going to have to free up resources. Use the Lite package instead, setup your WiFi and prep for headless use.

https://core-electronics.com.au/tutorials/raspberry-pi-zerow-headless-wifi-setup.html

Then use a CLI package such as:

Have a read of the inconsistencies listed on that page, no speed check is perfect but they’ve been transparent with that information.

Install, usage and optional stuff are listed on the Github page. This, along with Raspbian Lite, will undoubtedly get you better results. If it’s still slow, then it would be worth cross-checking with another board (same model) to see if the issue follows the hardware (and of course, keep everything in the same physical location to avoid other WiFi variables).

Look at the specs for the boards.

The pi zero has a 1GHz 1 core processor 512MB of RAM 801.11n WiFi
Designed to run low power embedded applications.

The pi 3A has a 1.4GHz 4 core processor 512MB of RAM 802.11ac WiFi 2.4 & 5 G WiFi and ethernet

The pi 3B has a 1.4GHz 4 core processor 1GB of RAM and same WiFi and Ethernet as the 3A

Trying to run a full blown GUI on the zero or 3A will result in mad thrashing of the swap file on the SD card because of the limited memory, even with a light weight display manager.

Check the specs for the WiFi for yourself, and then you can complain when the board doesn’t exceed it’s rated specs.

Using the pi’s for what they are intended, they perform well. Abuse them and they will give you a bad experience.

I’ve tried following your tutorial but couldn’t get it to work. Will have another attempt tonight. What improvement in speed should I get? What speeds do you get at your office?

I can’t see it improving that much running headless. Check out https://notenoughtech.com/raspberry-pi/raspberry-pi-zero-w-wifi-performance/ they are getting 100x better results. Is it possible my unit is faulty?

I understand what you are saying about inconsistencies with speed test but when installing the upgrade the server advised that the download speed was 300Kb/sec.

On the page that you linked to, the tests appear to be running a lite variant of Raspbian. The results are sometimes over 30Mbits/s. That’s an impressive leap up from the 1-3Mbit/s that you were getting, and I doubt you’d get much more given what the Pi Zero W is designed to do. 802.11n compatiblity doesn’t mean full-speed support, though it will maintain a stable connection if there is reception.

Go ahead and try a speed test with a A+ or B+, using 802.11ac on 5Ghz (perhaps it would be best to use iperf to avoid external bottlenecks, your home Internet speeds would quickly be maxed out).

Every device that is connected will nibble away at the available bandwidth (though not much). Depending on the 2.4Ghz in your area, there might also be contending traffic from neighbouring WiFi routers. The biggest issue is if devices are using internet at the same time, between QoS and other factors, there’ll be a notable affect.

That’s not unusual, the endpoint for updates isn’t designed for speed testing.

According to the spec, the n format supports 4 antenna and should in practice max out at about 240Mb/s resulting in a theoretical speed of 30Mb/sec for the Zero which has one antenna. I’m still about a 30th of this. I don’t think 90% loss is acceptable.

I don’t think the home network is the issue as I have had two Netflix users (at 4K) and two phones connected simultaneously with only 10% drop in speed.

When my tests were done last night, no other devices were connected to the WiFi.

The endpoint for updates wasn’t used for testing. This was the reported speed during the process. They can only report the speed that the files were downloaded.

I’ll do some more tests tonight and report back.

You seem to be assuming that the repositories don’t speed throttle. They do.

So are you saying that 1 - 3Mb/s is all that a Zero can get with no other traffic on the network?

I’m not surprised that your PiZ is slow, it’s quite possible that RAM would be entirely consumed and pushing into swap.

Go ahead and try those tips out - setup Lite and give it a whirl. You ought to see results like this within around 1-meter of your WiFi router.

image

I installed Lite on a 64G SD card and after some mucking around with the ssh connection I managed to get speeds between 15 and 25Mb/sec using speedtest-cli. Hopefully this will be good enough to stream radio stations for my first project. Thanks to all for the assistance and prompt support. Much appreciated.

1 Like

Nice, that’s a huge increase!

If in the future you need more horsepower but something smaller than the 3B+, then take a look at the 3A+. It’s my pick of the bunch for most projects.

If your application is streaming radio station audio, the bandwidth requirements are minimal. 320kbit/sec (i.e. 40kbyte/sec) is regarded as high quality and many stations use lower bit rates. Your problem is available memory, not network or processor speed. With aggressive pruning of applications, you should have no problem running audio streaming on a minimal processor. I remember doing it a few years ago with 64Mb memory and an 80MHz processor. The limitation was the processing required to decode the bit stream. The Pi should not be troubled.

1 Like

Thanks Alan for the information. Very useful. I’m working on a clock radio and have the 8 x 7 Segment displays working. Still need to add audio support and the radio scanning. I’ll be using a shaft encoder to change radio channels. Manually setting the alarm time is to be done via 4 x thumbwheels so that you can always see what time the alarm is set for (assuming there’s light in the room). A fifth thumbwheel sets the various modes. I like to give myself an actual project to learn Python and the Raspberry Pi.

My Pi Zero 2W would be fine for hours, then have periods of dropouts. Instead of wiping the SD and installing the latest lite OS, I’ve disabled services I don’t need and I now get 30Mbps instead of 3Mbps as measured with iperf3. Here’s the list of things run, if it’s of use to others.

systemctl disable alsa-restore.service
systemctl disable avahi-daemon.service
systemctl disable bluetooth.service
systemctl disable bluetooth.target
systemctl disable cups-browsed.service
systemctl disable cups.service
systemctl disable dphys-swapfile.service
systemctl disable hciuart.service
systemctl disable lightdm.service
systemctl disable sound.target
systemctl disable swap.target
systemctl disable udisks2.service

mkdir /home/pi/.config/systemd/user/
systemctl --user mask pulseaudio.socket
systemctl --user mask pipewire.socket
systemctl --user mask pipewire-pulse.socket
systemctl --user mask pulseaudio.service
systemctl --user mask pipewire.service
systemctl --user mask pipewire-pulse.service

Add to /etc/rc.local:

iwconfig wlan0 power off

1 Like

Hey Mark,

That’s an awesome tip for anyone that doesn’t want to run the Lite version of Pi OS.

Thanks for letting us know!
Blayden

1 Like