WiFi BE14 performance

I’ve been testing the BE14s Wifi capabilities recently, but I’ve hit a wall in regards to its performance. It generally works okay, but performance caps out at ~200Mbit/s when using 160MHz channel width on 5GHz, and even less on just 80MHz.

Now I’m wondering if this is just an issue in my hostapd config, or a firmware/hardware limitation? The same frequency, with even just 80MHz width, on only Wifi 6, provides way over 500Mbit/s with my old AVM router box.

I’ve ignored 2.4GHz and 6GHz, since the former is too overcrowded here to make any useful tests, and the later simply for lack of a compatible client.

This is my current hostapd config:

interface=wifi5g
hw_mode=a
eht_oper_chwidth=2
he_oper_chwidth=2
vht_oper_chwidth=2
eht_oper_centr_freq_seg0_idx=50
he_oper_centr_freq_seg0_idx=50
vht_oper_centr_freq_seg0_idx=50
channel=36
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][MAX-AMSDU-7935][GF][DSSS_CCK-40][TX-STBC][RX-STBC1][LDPC]
vht_capab=[MAX-A-MPDU-LEN-EXP3][MAX-MPDU-11454][VHT160][RXLDPC][SHORT-GI-80][SHORT-GI-160][TX-STBC-2BY1][RX-STBC-1][SU-BEAMFORMER][SU-BEAMFORMEE][BF-ANTENNA-3][MU-BEAMFORMER][SOUNDING-DIMENSION-3][RX-ANTENNA-PATTERN][TX-ANTENNA-PATTERN]
ieee80211w=1
wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256 SAE
bridge=brLAN
driver=nl80211
logger_stdout=-1
logger_stdout_level=2
logger_syslog=0
ctrl_interface=/run/hostapd
ctrl_interface_group=0
ssid=BLABLABLABLA
country_code=DE
ieee80211d=1
ieee80211h=1
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=-1
fragm_threshold=-1
preamble=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wmm_enabled=1
uapsd_advertisement_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
ieee80211n=1
ieee80211ac=1
ieee80211ax=1
he_su_beamformer=1
he_su_beamformee=1
he_mu_beamformer=1
ieee80211be=1
eht_su_beamformer=1
eht_su_beamformee=1
eht_mu_beamformer=1
wpa=2
wpa_passphrase=some_secure_password
wpa_psk_file=/etc/hostapd/hostapd.wpa_psk
rsn_pairwise=CCMP

Signal quality is excellent for all I can tell, so that can’t be the issue. It’s also very consistently capping out at always the exact same speeds. Slightly less in upload, but also consistently less.

This is using the Kernel from GitHub - frank-w/BPI-Router-Linux at 6.11-main rebased on top of 6.11.2. Grabbed the latest firmware from autobuild/autobuild_5.4_mac80211_release/package/kernel/mt76/src/firmware/mt7996 - openwrt/feeds/mtk-openwrt-feeds - Gitiles which results in these versions:

[   12.857267] mt7996e 0000:01:00.0: HW/SW Version: 0x8a108a10, Build Time: 20240809122254a
[   12.957365] mt7996e 0000:01:00.0: WM Firmware Version: ____000000, Build Time: 20240809122249
[   13.030851] mt7996e 0000:01:00.0: DSP Firmware Version: ____000000, Build Time: 20240809121650
[   13.087870] mt7996e 0000:01:00.0: WA Firmware Version: ____000000, Build Time: 20240809122214

For reference, I was testing similar things on a openwrt build (Releases · danpawlik/openwrt-builder · GitHub) and was getting 1200Mbps via 5GHz 160MHz wide, on an extended iperf3, 10Gb SFP (DAC) and dumb AP on LAN. It took about 10s and seemed to ramp up. I’m not sure it’s explicitly hardware. I ran into similar speed issues when trying debian 12 with 6.10 and 6.11, was going to touch base on this again once I’m done using the bpi-r4 as it is right now.

Using yesterdays openwrt’s snapshot, i can’t even enable 160MHz.

i also encounter some wifi performance problems. max. i reached was 100mbit on my laptop and my workstation, both have a wifi7 enabled card in it (if required, i could google the exact versions) and are about 2 meters away from the router. rather disappointing. running OpenWrt SNAPSHOT r27730-3d7040b7d6 / LuCI Master 24.281.62975~383edb4

wondering if thats related to the auto negotiation problem in any way?

It must either be a driver or config issue of some kind, given OpenWRT apparently does not have performance issues. If someone could provide the hostapd config file(s) openwrt generates, that’d be very helpful for testing.

root@OpenWrt:~# cat /tmp/run/hostapd-phy0.conf
driver=nl80211
logger_syslog=127
logger_syslog_level=2
logger_stdout=127
logger_stdout_level=2
hw_mode=g
supported_rates=60 90 120 180 240 360 480 540
basic_rates=60 120 240
beacon_int=100
stationary_ap=1
channel=acs_survey




#num_global_macaddr=1
ieee80211n=1
ht_coex=0
ht_capab=[LDPC][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][MAX-AMSDU-7935]

interface=phy0-ap0
ctrl_interface=/var/run/hostapd
ap_isolate=1
bss_load_update_period=60
chan_util_avg_period=600
disassoc_low_ack=1
skip_inactivity_poll=0
preamble=1
wmm_enabled=1
ignore_broadcast_ssid=0
uapsd_advertisement_enabled=1
utf8_ssid=1
multi_ap=0
wpa_passphrase=xxx
wpa_psk_file=/var/run/hostapd-phy0-ap0.psk
auth_algs=1
wpa=2
wpa_pairwise=CCMP
ssid=oli
bridge=br-lan
wds_bridge=
snoop_iface=br-lan
wpa_disable_eapol_key_retries=0
wpa_key_mgmt=WPA-PSK
okc=0
disable_pmksa_caching=1
dynamic_vlan=0
vlan_naming=1
vlan_no_bridge=1
vlan_file=/var/run/hostapd-phy0-ap0.vlan
qos_map_set=0,0,2,16,1,1,255,255,18,22,24,38,40,40,44,46,48,56
bssid=76:5f:50:6d:fe:0a
#default_macaddr
root@OpenWrt:~# cat /tmp/run/hostapd-phy1
hostapd-phy1-ap0.psk   hostapd-phy1-ap0.vlan  hostapd-phy1.conf
root@OpenWrt:~# cat /tmp/run/hostapd-phy1.conf 
driver=nl80211
logger_syslog=127
logger_syslog_level=2
logger_stdout=127
logger_stdout_level=2
hw_mode=a
beacon_int=100
stationary_ap=1
channel=acs_survey


tx_queue_data2_burst=2.0

#num_global_macaddr=1
ieee80211n=1
ht_coex=0
ht_capab=[LDPC][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][MAX-AMSDU-7935]
ieee80211ac=1
vht_oper_chwidth=0
vht_oper_centr_freq_seg0_idx=
vht_capab=[RXLDPC][SHORT-GI-80][TX-STBC-2BY1][SU-BEAMFORMER][SU-BEAMFORMEE][MU-BEAMFORMER][MU-BEAMFORMEE][RX-ANTENNA-PATTERN][TX-ANTENNA-PATTERN][RX-STBC-1][SOUNDING-DIMENSION-3][BF-ANTENNA-4][MAX-MPDU-11454][MAX-A-MPDU-LEN-EXP7]
ieee80211ax=1
he_oper_chwidth=0
he_oper_centr_freq_seg0_idx=
he_su_beamformer=1
he_su_beamformee=1
he_mu_beamformer=1
he_bss_color=128
he_spr_sr_control=3
he_default_pe_duration=4
he_rts_threshold=1023
he_mu_edca_qos_info_param_count=0
he_mu_edca_qos_info_q_ack=0
he_mu_edca_qos_info_queue_request=0
he_mu_edca_qos_info_txop_request=0
he_mu_edca_ac_be_aifsn=8
he_mu_edca_ac_be_aci=0
he_mu_edca_ac_be_ecwmin=9
he_mu_edca_ac_be_ecwmax=10
he_mu_edca_ac_be_timer=255
he_mu_edca_ac_bk_aifsn=15
he_mu_edca_ac_bk_aci=1
he_mu_edca_ac_bk_ecwmin=9
he_mu_edca_ac_bk_ecwmax=10
he_mu_edca_ac_bk_timer=255
he_mu_edca_ac_vi_ecwmin=5
he_mu_edca_ac_vi_ecwmax=7
he_mu_edca_ac_vi_aifsn=5
he_mu_edca_ac_vi_aci=2
he_mu_edca_ac_vi_timer=255
he_mu_edca_ac_vo_aifsn=5
he_mu_edca_ac_vo_aci=3
he_mu_edca_ac_vo_ecwmin=5
he_mu_edca_ac_vo_ecwmax=7
he_mu_edca_ac_vo_timer=255

interface=phy1-ap0
ctrl_interface=/var/run/hostapd
ap_isolate=1
bss_load_update_period=60
chan_util_avg_period=600
disassoc_low_ack=1
skip_inactivity_poll=0
preamble=1
wmm_enabled=1
ignore_broadcast_ssid=0
uapsd_advertisement_enabled=1
utf8_ssid=1
multi_ap=0
ocv=0
sae_require_mfp=1
sae_pwe=2
wpa_passphrase=xxx
wpa_psk_file=/var/run/hostapd-phy1-ap0.psk
auth_algs=1
wpa=2
wpa_pairwise=CCMP
ssid=oli
bridge=br-lan
wds_bridge=
snoop_iface=br-lan
wpa_disable_eapol_key_retries=0
wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256 SAE
okc=1
ieee80211w=1
group_mgmt_cipher=AES-128-CMAC
dynamic_vlan=0
vlan_naming=1
vlan_no_bridge=1
vlan_file=/var/run/hostapd-phy1-ap0.vlan
qos_map_set=0,0,2,16,1,1,255,255,18,22,24,38,40,40,44,46,48,56
bssid=76:5f:50:6d:fe:0b
#default_macaddr

I tried it with that config, minus some minor changes (ht_coex does not exist in the latest hostapd version, and he_bss_color is out of range, must be 1-63). No changes, speed even dropped even lower somehow.

So that pretty much leaves the kernel driver. OpenWRT is iirc using some relatively old 5.4 kernel or something?