Performance of UniFi nanoHD

For those who actually got this to work, what is the performance like?

I'm finding official firmware has have gotten slower and slower as they "upgraded" the firmware so am seriously considering this now.

2 Likes

I'm interested too. Even when I think I cannot install OpenWrt in my NanoHDs. I tried a month ago and I couldn't probably because of their U-Boot version.

1 Like

I did the following:

Made sure I had ssh login enabled to the nanohd.
I had restored to factory settings so using ubnt login credentials but this should not be necessary.

Download https://dl.ubnt.com/unifi/firmware/U7NHD/3.9.27.8537/BZ.mt7621.v3.9.27.8537.180317.1220.bin and scp it to the nanoHD.

scp BZ.mt7621.v3.9.27.8537.180317.1220.bin ubnt@nanoipaddress:/tmp/

Downgrade the nanoHD:

ssh ubnt@nanoipaddress
cd /tmp
fwupdate.real -m BZ.mt7621.v3.9.27.8537.180317.1220.bin

The nanoHD rebooted.

Download OpenWRT and scp to the nanoHD:

scp openwrt-21.02.0-ramips-mt7621-ubnt_unifi-nanohd-squashfs-sysupgrade.bin ubnt@nanohdipaddress:/tmp/

Write the bootselect flag. Otherwise, the device might boot from the wrong partition. Verify the mtd partition used in the command below
is the one labled "bs" in /proc/mtd (as this might change in the future).

dd if=/dev/zero bs=1 count=1 of=/dev/mtd4

Write the OpenWrt sysupgrade to the mtd partitions labeled "kernel0" and "kernel1" then reboot the nanoHD.

dd if=/tmp/openwrt-21.02.0-ramips-mt7621-ubnt_unifi-nanohd-squashfs-sysupgrade.bin of=/dev/mtdblock6
dd if=/tmp/openwrt-21.02.0-ramips-mt7621-ubnt_unifi-nanohd-squashfs-sysupgrade.bin of=/dev/mtdblock7
reboot

Set my local ip to something in 192.168.1.x, but not 192.168.1.1, and ssh root@192.168.1.1, and change the ip in /etc/config/network to what I want it to be, and reboot.


Speed seems okay on 80Mhz but I'm having some issues with DFS channels, specifically 160Mhz wont work at all. I'm seeing 62-72MB/s copying from my NAS and it seems to authenticate with the access point much faster than stock firmware. I also seem to get a higher link rate further away from the AP.

If you're fine with channel 36 or 52, its working fine there. It feels more responsive than stock firmware to me. I had no idea the nanoHD was a quad-core CPU, never seen LuCI this fast.

This is where my installation fails, probably due to the fact that the lower version that's allowed to be installed: "required_version": "4.3.16",

Oh, well, I'm not sure what to do next. :wink:

Yeah that's a weird one as some people have successfully done it to brand new units, I can only guess they must have old stock.

I think its extremely scummy of a company to block downgrades, it should always be the end users choice unless it legitimately cannot run due to hardware changes and those hardware changes had better make the product BETTER not worse too.

I'm really thankful it worked for me as even if its slower than I could get on stock firmware, I just don't want to deal with the bloated Unifi Controller. I've always found OpenWRT rock-solid stable and easy to use.

I'm using OpenWRT on my NanoHD and performance is pretty bad to be honest.

3 Likes

Are you using 80Mhz channel width?

i would expect proper performance, am i wrong?

This is a iperf running from a Macbook Pro connected to a NanoHD against my router.

@grim$ ➜  ~ iperf3 -u -b 0 -c openwrt.lan
Connecting to host openwrt.lan, port 5201
[  7] local 192.168.1.189 port 61871 connected to 192.168.1.1 port 5201
[ ID] Interval           Transfer     Bitrate         Total Datagrams
[  7]   0.00-1.00   sec  99.7 MBytes   836 Mbits/sec  77254
[  7]   1.00-2.00   sec  90.9 MBytes   762 Mbits/sec  74451
[  7]   2.00-3.00   sec  93.8 MBytes   787 Mbits/sec  72122
[  7]   3.00-4.00   sec   105 MBytes   879 Mbits/sec  79881
[  7]   4.00-5.00   sec  89.5 MBytes   751 Mbits/sec  68851
[  7]   5.00-6.00   sec   105 MBytes   879 Mbits/sec  79427
[  7]   6.00-7.00   sec  90.9 MBytes   762 Mbits/sec  71275
[  7]   7.00-8.00   sec  97.3 MBytes   817 Mbits/sec  75009
[  7]   8.00-9.00   sec   101 MBytes   844 Mbits/sec  77872
[  7]   9.00-10.00  sec  86.6 MBytes   727 Mbits/sec  67609
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  7]   0.00-10.00  sec   959 MBytes   804 Mbits/sec  0.000 ms  0/743751 (0%)  sender
[  7]   0.00-10.01  sec   949 MBytes   795 Mbits/sec  0.007 ms  56423/743573 (7.6%)  receiver

that looks excellent, thank you

And this one using TCP, forgot to include it:

@grim$ ➜  ~ iperf3 -c openwrt.lan
Connecting to host openwrt.lan, port 5201
[  7] local 192.168.1.189 port 57642 connected to 192.168.1.1 port 5201
[ ID] Interval           Transfer     Bitrate
[  7]   0.00-1.00   sec  87.6 MBytes   735 Mbits/sec
[  7]   1.00-2.00   sec  89.1 MBytes   748 Mbits/sec
[  7]   2.00-3.00   sec  82.0 MBytes   687 Mbits/sec
[  7]   3.00-4.00   sec  86.5 MBytes   725 Mbits/sec
[  7]   4.00-5.00   sec  91.1 MBytes   765 Mbits/sec
[  7]   5.00-6.00   sec  90.7 MBytes   761 Mbits/sec
[  7]   6.00-7.00   sec  89.0 MBytes   746 Mbits/sec
[  7]   7.00-8.00   sec  87.2 MBytes   732 Mbits/sec
[  7]   8.00-9.00   sec  87.0 MBytes   730 Mbits/sec
[  7]   9.00-10.00  sec  89.4 MBytes   750 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  7]   0.00-10.00  sec   880 MBytes   738 Mbits/sec                  sender
[  7]   0.00-10.01  sec   877 MBytes   735 Mbits/sec                  receiver

iperf Done.

Note: My wife and daughters using same AP at the same time to play and watch a YT video. :wink:

1 Like

somehow i do net get the same speed, i am on 5ghz channel 124 with 80mhz width.
macbook pro m1 to nanohd within a couple of meters direct distance:

➜  ~ iperf3 -c 192.168.178.2
Connecting to host 192.168.178.2, port 5201
[  5] local 192.168.178.26 port 50042 connected to 192.168.178.2 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  29.9 MBytes   251 Mbits/sec
[  5]   1.00-2.00   sec  35.6 MBytes   299 Mbits/sec
[  5]   2.00-3.00   sec  36.7 MBytes   308 Mbits/sec
[  5]   3.00-4.00   sec  37.5 MBytes   314 Mbits/sec
[  5]   4.00-5.01   sec  28.6 MBytes   239 Mbits/sec
[  5]   5.01-6.01   sec  7.89 MBytes  66.2 Mbits/sec
[  5]   6.01-7.01   sec  7.50 MBytes  62.9 Mbits/sec
[  5]   7.01-8.00   sec  30.6 MBytes   258 Mbits/sec
[  5]   8.00-9.00   sec  37.1 MBytes   311 Mbits/sec
[  5]   9.00-10.00  sec  36.2 MBytes   303 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec   288 MBytes   241 Mbits/sec                  sender
[  5]   0.00-10.01  sec   284 MBytes   238 Mbits/sec                  receiver

config:

config wifi-device 'radio1'
	option type 'mac80211'
	option hwmode '11a'
	option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
	option cell_density '0'
	option htmode 'VHT80'
	option country 'DE'
	option channel '124'
	option txpower '20'

Its probably not the Access Point.

I've moved over to a WiFi 6 AP and on a good day I get 940Mbit, on a bad day I get 400Mbit, on average its anywhere inbetween. Seems to be the nature of 5Ghz that it picks up interference all over the place, even on channels that appear clean. I've now used about four different Access Points and they exhibit identical behaviour, apart from WiFi 6 being faster on a good day.

Testing just now I got 496Mbit from my NAS and 610Mbit to my NAS, on my Macbook Pro. Channel 100, 80Mhz, Link rate 1200Mbit, 802.11ax. Oh and iperf3 can't always be trusted, I just copied a file to my NAS at 672Mbit. :wink:

I'd recommend something like Stats for MacOS so you can put network transfer rate in the menu bar to see what its REALLY doing.

It looks about right, your M1 only has a 2x2 MIMO, which has a maximum theorical speed of 867 Mbps, real life is 40-50% of it, so your 300 Mbps.

No really so good, tho'.

Quick test with a M1 Pro (running Sonoma) and a NanoHD (lastest OpenWrt 23.05.0-rc3):

Quick test

@reaper$ ➜  ~ networkQuality
==== SUMMARY ====
Uplink capacity: 35.409 Mbps
Downlink capacity: 370.244 Mbps
Responsiveness: High (36.123 milliseconds | 1661 RPM)
Idle Latency: 19.375 milliseconds | 3157 RPM
@reaper$ ➜  ~ iperf -c openwrt.lan -e -z --bounceback
------------------------------------------------------------
Client connecting to openwrt.lan, TCP port 5001 with pid 95163 (1 flows)
Write buffer size:  100 Byte
Bursting:  100 Byte writes 10 times every 1.00 second(s)
Bounce-back test (size= 100 Byte) (server hold req=0 usecs)
TOS set to 0x0 and nodelay (Nagle off)
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  1] local 192.168.1.151%en0 port 55657 connected with 192.168.1.1 port 5001 (bb len/hold=100/0) (sock=5) (icwnd/mss/irtt=11/1448/7000) (ct=7.09 ms) on 2023-09-30 05:08:58.011 (AEST)
[ ID] Interval        Transfer    Bandwidth         BB cnt=avg/min/max/stdev         Rtry  Cwnd/RTT    RPS
[  1] 0.00-1.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.227/2.416/4.443/0.640 ms    0   12K/3000 us    310 rps
[  1] 1.00-2.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.255/2.732/7.516/1.499 ms    0   13K/2000 us    307 rps
[  1] 2.00-3.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.235/2.505/7.247/1.417 ms    0   14K/3000 us    309 rps
[  1] 3.00-4.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.389/2.808/7.682/1.515 ms    0   15K/3000 us    295 rps
[  1] 4.00-5.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.316/2.850/6.707/1.200 ms    0   16K/2000 us    302 rps
[  1] 5.00-6.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.392/2.826/7.512/1.459 ms    0   17K/3000 us    295 rps
[  1] 6.00-7.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.396/2.710/7.326/1.412 ms    0   18K/3000 us    294 rps
[  1] 7.00-8.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.193/2.355/7.619/1.560 ms    0   19K/3000 us    313 rps
[  1] 8.00-9.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.201/2.419/7.358/1.472 ms    0   20K/4000 us    312 rps
[  1] 9.00-10.00 sec  1.95 KBytes  16.0 Kbits/sec    10=3.243/2.730/7.410/1.464 ms    0   21K/3000 us    308 rps
[  1] 0.00-10.03 sec  19.7 KBytes  16.1 Kbits/sec    101=3.355/2.355/10.365/1.495 ms    0   21K/18000 us    298 rps
[  1] 0.00-10.03 sec BB8-PDF: bin(w=100us):cnt(101)=24:1,25:2,26:1,27:7,28:26,29:32,30:10,32:2,33:3,34:3,35:1,38:1,41:1,45:1,68:1,73:1,74:2,75:1,76:2,77:2,104:1 (5.00/95.00/99.7%=27/75/104,Outliers=1,obl/obu=0/0)
@reaper$ ➜  ~ flent rrul --verbose -H sydney.starlink.taht.net  -p all  --figure-width=12.80 --figure-height=9.60 -s 0.05 -o rrul.png

Connection to AP:

CAKE and QoS parameters:

config queue 'eth1'
	option interface 'eth1'
	option qdisc 'cake'
	option linklayer 'none'
	option upload '47000'
	option debug_logging '0'
	option verbosity '5'
	option qdisc_advanced '1'
	option qdisc_really_really_advanced '1'
	option ingress_ecn 'ECN'
	option egress_ecn 'ECN'
	option squash_dscp '0'
	option squash_ingress '0'
	option enabled '1'
	option script 'piece_of_cake.qos'
	option iqdisc_opts 'nat dual-dsthost ingress docsis noatm'
	option eqdisc_opts 'nat dual-srchost ack-filter docsis noatm'
	option download '0'

/etc/config/wireless iw_qos_map_set only BE in my wireless as per following config:

	option iw_qos_map_set '0,63,255,255,255,255,255,255,255,255,255,255,255,255,255,255'