Wifi hotspot expected speed

Hi,

I’m wondering if there’s a way to get better speeds out of the wifi hotspot in BlueOS?

I’m currently trying to create a floating gps beacon and video relay like a drop camera with live view.
There’s a raspberry pi in the floating module that I’m trying to connect my ground control station to as a hotspot (linux pc with AC wireless card - I’ve tried a separate external ac wireless card also).

I’m currently getting between 5-20MBits/s from the BlueOS hotspot using a raspberry Pi CM4 with an external antenna, with the devices right beside eachother. The Linux computer I’m using as a ground control station says it’s getting both 2.4 and 5gHz connection.

Are there any commands in BlueOS that limit the network performance of the hotspot?

I’ve added my external antenna option “dtparam=ant2” to “/boot/config.txt”

Also is it possible to modify the IP range of the DHCP server that the hotspot is giving out?

Any advice is greatly appreciated.

Hi @XYZEng,

It’s good to see someone running tests. I have some suggestions in question form that could lead us to a better understanding of what can be achieved and what’s happening:

  1. What are your metrics, and how are you measuring it?
  2. What’s exactly the setup being tested? Mainly the antennas and wireless cards, but some external factors might also be part of the test scenario, like other wifi networks in the area, the CPU temperature, etc.
  3. What can be the expected value of the metric for this setup?
  4. What’s your results with the built-in antenna (dtparam=ant1)?

For Raspberry Pi 4 (not the CM), I have something close to this: Networking Benchmarks | Raspberry Pi Dramble

Are there any commands in BlueOS that limit the network performance of the hotspot?

We didn’t place any limitations on the network or any hardware performance, but if you find any clue that it’s worse than in other OS we would love to dig into it.

Also is it possible to modify the IP range of the DHCP server that the hotspot is giving out?

It’s not possible yet, but we are working on it. Feel free to track this issue.

Thanks!

Hi João,

Thanks for the response,

For the throughput test, I’m using the network test built into BlueOS.
I’ve disabled all video and telemetry feeds.

I believe the unit is megabits/s.

  1. There are other wifi networks in the area, but I’ve tested it out in different rooms also.
    I guess I should try connecting with my phone later to rule out my laptops network card.

  2. I would usually get 500MBits/s to my broadband router. But I don’t know the limitations of the raspberry pi.

  3. With the built in Antenna, I’m also getting slow speeds.

I thought it was particulary strange because the speed varied a lot, and the variation was slow to change. Over the space of 30seconds it would be very slowly ramping up and down.

Once I check with my phone later (web interface for BlueOS), I’ll report back.
I may also try connecting the RPI and Laptop to my phones hotspot to see if that makes a difference.
I’ll also get data for RPI and Laptop connected to my home router to see what happens.

FYI. I’m using CM4 because it’s small enough to fit inside my enclosure, and it has an antenna jack built in.

Regards,
Kieron

Hi João,

After some troubleshooting, I realised that my raspberry pi wasn’t connecting to any AC networks.
I believe the reason for this is the wifi locale setting I selected as ie (Ireland) which seems to be very restricted on the raspberry pi,

So I’m reflashing BlueOS with Locale set to US which seems to be the least restricted wifi country.

I’ll revert back if I can get wifi connected over AC wireless.

Regards,
Kieron

FYI. Here’s the result from the “band 2” section after I use linux command “iw list” when the RPi is set to “ie” locale.
Note. on US locale all of the channels 144-165 are not disabled
I never noticed this, as I haven’t had high bandwidth applications for the RPi before.

Frequencies:
* 5170 MHz [34] (disabled)
* 5180 MHz [36] (20.0 dBm)
* 5190 MHz [38] (disabled)
* 5200 MHz [40] (20.0 dBm)
* 5210 MHz [42] (disabled)
* 5220 MHz [44] (20.0 dBm)
* 5230 MHz [46] (disabled)
* 5240 MHz [48] (20.0 dBm)
* 5260 MHz [52] (20.0 dBm) (no IR, radar detection)
* 5280 MHz [56] (20.0 dBm) (no IR, radar detection)
* 5300 MHz [60] (20.0 dBm) (no IR, radar detection)
* 5320 MHz [64] (20.0 dBm) (no IR, radar detection)
* 5500 MHz [100] (20.0 dBm) (no IR, radar detection)
* 5520 MHz [104] (20.0 dBm) (no IR, radar detection)
* 5540 MHz [108] (20.0 dBm) (no IR, radar detection)
* 5560 MHz [112] (20.0 dBm) (no IR, radar detection)
* 5580 MHz [116] (20.0 dBm) (no IR, radar detection)
* 5600 MHz [120] (20.0 dBm) (no IR, radar detection)
* 5620 MHz [124] (20.0 dBm) (no IR, radar detection)
* 5640 MHz [128] (20.0 dBm) (no IR, radar detection)
* 5660 MHz [132] (20.0 dBm) (no IR, radar detection)
* 5680 MHz [136] (20.0 dBm) (no IR, radar detection)
* 5700 MHz [140] (20.0 dBm) (no IR, radar detection)
* 5720 MHz [144] (disabled)
* 5745 MHz [149] (disabled)
* 5765 MHz [153] (disabled)
* 5785 MHz [157] (disabled)
* 5805 MHz [161] (disabled)
* 5825 MHz [165] (disabled)

1 Like

Hi @XYZEng ,

So I’m reflashing BlueOS with Locale set to US which seems to be the least restricted wifi country.

That’s true, the locale can have a hard impact on the hardware capabilities as it would impact not only the number of available channels but also the maximum allowed strength for a given WiFi version and frequency. Just keep in mind that while it can give you a boost in a specific scenario, nearby devices may have a decreased performance.

For the throughput test, I’m using the network test built into BlueOS.
I’ve disabled all video and telemetry feeds.

Good. For this purpose, I believe we’d have a better insight by also using the iperf tool. It would measure the maximum possible data volume of the network (the maximum bandwidth), while the BlueOS network tool is measuring the time it takes to transfer a file (throughput).

With the measured bandwidth, the first thing would be to see if the reported value matches the expected specification of the worst of the devices under test. This can give us a good hint about what to expect or what’s happening.

I would usually get 500MBits/s to my broadband router. But I don’t know the limitations of the raspberry pi.

The only data I have is that the RPI4’s wifi reaches above 10MB/s of throughput (see below) and almost 100Mbps of bandwidth, which seems nearly what you are getting with your CM4 setup if I understand it correctly.

This test was done 1m away from the Raspberry Pi 4, and in “Network Details” my Android reports a 72Mbps “Link speed” (bandwidth).

Thanks

1 Like

Thanks for the reply Joao,

I’ve tested a few different configurations now.

I’ve been using the following commands with the linux computer as the server, and the Raspberry Pi as the client, and am getting a very variable connection sometimes up at 20Mbits/s but dropping down to 5Mbits/s

When I hotspot my phone and connect the Ground control computer and BlueOS to the phone, I’m seeing a pretty stable 100MBits/s

Here is the iperf settings I’m using to test.

### on ground control computer
#start the iperf server
iperf3 -s

### on rpi - start the iperf client
iperf3 -c 172.20.10.3

Note when I’m hotspotting from the raspberry pi, and use the following commands, I’m only seeing a 54mbit/s link speed.
But when I hotspot from my phone and connect the Raspberry Pi, I’m seeing a 300-400MBit/s link speed from phone to RPi.
I know this isn’t expected speed, but it seems the “hotspot” from the raspberry pi is limited to a 54MBits/s link speed, but when the Pi is connected to my phone it achieves a much higher link speed, but I can’t figure out why.

###Running this on the ground control machine
#list wifi devices
iw dev

#get the bitrate of the connection
sudo iwlist wlp2s0 bitrate

I noticed the hostapd.conf file is initialised in the following file:
“core/services/wifi/Hotspot.py” file

But I wouldn’t know what to add to ensure a higher link speed is offered by the pi.

Any suggestions for me to measure the bandwidth as opposed to the throughput?
Or is my iwlist bitrate from the linux machine enough?

Regards,
Kieron

Hi @XYZEng,

Nice to see more data!

Great, we can safely say that in this network, the Raspberry Pi is the bottleneck.

It’s often the case where networking hardware has different capabilities when in access point mode from where it’s in client mode in a network. I did some testing here with my phone and Raspberry Pi 4 and I got nearly the same results as you… I also checked if speed could be suffering from any power_save flag in iw, but no effect was observed. I tried lowering the maximum power and it did lower the speed, so definitely changing the region, as you mentioned in a previous message, can help with better signal strength, therefore better speeds.

About the config, I found this, which can give us some hint on what to try out.

Also, something from Arch Linux wiki:

Frequent causes for a lower than expected throughput include

  • An improper choice of operation mode with a hw_mode lower than the one supported can limit the router artificially. Check that a modern operating mode is selected.
  • A crowded or otherwise noise afflicted channel can severely degrade performance especially in densely populated areas. Try changing to a different channel or even switch frequencies.
  • The availability of too little entropy can lead to poor performance. Consider installing haveged.

Thanks

1 Like

Is it a reasonable assumption that the link speed of 54Mbit/s is the limiting factor?

I think if VHT profile were specified in hostapd.conf file (initialised in the Hotspot.py file), it might try to connect using VHT mode which I believe is >400MBit/s link speed.

In the file you’ve linked they seem to suggest setting up the VHT profile like so:

# AC
ieee80211ac=1
require_vht=1
ieee80211d=0
ieee80211h=0
vht_capab=[MAX-AMSDU-3839][SHORT-GI-80]
vht_oper_chwidth=1
channel=36
vht_oper_centr_freq_seg0_idx=42
ssid=YOURPASSWORD
wpa_passphrase=YOURPASSWORD
interface=wlan0
wpa=2
wpa_pairwise=CCMP
ignore_broadcast_ssid=0

I would like to test this out, but I haven’t managed to flash my customised GitHub fork of BlueOS.

After I create a fork of the BlueOS on Github, and make some changes, what do I have to do to make it available in the BlueOS interface.
e.g. when I change the remote in the version chooser to williangalvani/blueos-core, his versions of BlueOS show up.
But I don’t know how to make my modded version of BlueOS show up

Here are the changes I’m trying to test on the hotspot.py file, which I believe initialises host.apd during docker startup.

But if you can explain to me how to make my fork available for me to flash using the version chooser. I’d be very grateful.

Regards,
Kieron

Hi @XYZEng,

Let’s jump into our GitHub repository, it has a wiki, in which this topic could help you. For better communication with our development team, I’d ask you to create an issue or a draft pull request to discuss subjects related to BlueOS development; we would love to have better wifi by default or to let the users configure it :slight_smile:

To quickly test changes in a Python script, I’d go edit the source file from BlueOS’ terminal or use our file browser (yes, it can edit files too), and then restart the service from the terminal.

Thanks!

1 Like