[openwrt/openwrt] bcm4908: enable & setup packet steering
LEDE Commits
lede-commits at lists.infradead.org
Thu Jul 28 08:47:47 PDT 2022
rmilecki pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/57cad53f4e52be987cdd61308ff7d2704baca539
commit 57cad53f4e52be987cdd61308ff7d2704baca539
Author: Rafał Miłecki <rafal at milecki.pl>
AuthorDate: Thu Jul 28 17:46:33 2022 +0200
bcm4908: enable & setup packet steering
Without packet steering NAT masquarade speed on BCM4908 /jumps/ between
two speeds:
1. 826 Mb/s (±3 Mb/s)
2. 909 Mb/s (±8 Mb/s)
and it never reaches ~940 Mb/s.
Proper packet steering can improve it. Below are testing results for
running iperf TCP traffic from LAN to WAN. They were used to pick up
golden values.
┌──────────┬──────────┬───────────┐
│ eth0 │ br-lan │ speed │
│ rps_cpus │ rps_cpus │ [Mbps] │
├──────────┼──────────┼───────────┤
│ 0 │ 0 │ 743 / 804 │
│ 0 │ 1 │ 738 / 821 │
│ 0 │ 2 │ ✓ 940 │
│ 0 │ 4 │ ✓ 938 │
│ 0 │ 8 │ ✓ 941 │
├──────────┼──────────┼───────────┤
│ 1 │ 0 │ 829 │
│ 1 │ 1 │ 829 │
│ 1 │ 2 │ ✓ 942 │
│ 1 │ 4 │ ✓ 941 │
│ 1 │ 8 │ ✓ 941 │
├──────────┼──────────┼───────────┤
│ 2 │ 0 │ ✓ 942 │
│ 2 │ 1 │ 926 │
│ 2 │ 2 │ ✓ 942 │
│ 2 │ 4 │ ✓ 942 │
│ 2 │ 8 │ ✓ 941 │
├──────────┼──────────┼───────────┤
│ 4 │ 0 │ ✓ 941 │
│ 4 │ 1 │ 925 │
│ 4 │ 2 │ ✓ 941 │
│ 4 │ 4 │ ✓ 941 │
│ 4 │ 8 │ ✓ 941 │
├──────────┼──────────┼───────────┤
│ 8 │ 0 │ ✓ 942 │
│ 8 │ 1 │ 925 │
│ 8 │ 2 │ ✓ 941 │
│ 8 │ 4 │ ✓ 942 │
│ 8 │ 8 │ ✓ 942 │
└──────────┴──────────┴───────────┘
Ref: fcbd39689ebfe ("bcm53xx: enable & setup packet steering")
Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
---
.../bcm4908/base-files/etc/init.d/fastnetwork | 46 ++++++++++++++++++++++
.../base-files/etc/uci-defaults/05_packet_steering | 3 ++
2 files changed, 49 insertions(+)
diff --git a/target/linux/bcm4908/base-files/etc/init.d/fastnetwork b/target/linux/bcm4908/base-files/etc/init.d/fastnetwork
new file mode 100755
index 0000000000..88f6075990
--- /dev/null
+++ b/target/linux/bcm4908/base-files/etc/init.d/fastnetwork
@@ -0,0 +1,46 @@
+#!/bin/sh /etc/rc.common
+
+START=25
+USE_PROCD=1
+
+start_service() {
+ reload_service
+}
+
+service_triggers() {
+ procd_add_reload_trigger "network"
+ procd_add_reload_trigger "firewall"
+ procd_add_reload_interface_trigger "lan"
+}
+
+reload_service() {
+ local packet_steering="$(uci -q get network. at globals[0].packet_steering)"
+ local num_cpus="$(grep -c "^processor.*:" /proc/cpuinfo)"
+ local flow_offloading="$(uci -q get firewall. at defaults[0].flow_offloading)"
+ local flow_offloading_hw="$(uci -q get firewall. at defaults[0].flow_offloading_hw)"
+ local rps_eth0=0
+ local rps_br_lan=0
+
+ [ "$num_cpus" -le 1 ] && return
+
+ [ "$packet_steering" = 1 ] && {
+ if [ ${flow_offloading_hw:-0} -gt 0 ]; then
+ # HW offloading
+ # Not implemented
+ :
+ elif [ ${flow_offloading:-0} -gt 0 ]; then
+ # SW offloading
+ # BCM4908 always reaches ~940 Mb/s
+ :
+ else
+ # Default
+ case "$num_cpus" in
+ 2) rps_eth0=2; rps_br_lan=2;;
+ 4) rps_eth0=e; rps_br_lan=e;;
+ esac
+ fi
+ }
+
+ echo $rps_eth0 > /sys/class/net/eth0/queues/rx-0/rps_cpus
+ echo $rps_br_lan > /sys/class/net/br-lan/queues/rx-0/rps_cpus
+}
diff --git a/target/linux/bcm4908/base-files/etc/uci-defaults/05_packet_steering b/target/linux/bcm4908/base-files/etc/uci-defaults/05_packet_steering
new file mode 100644
index 0000000000..98c9497815
--- /dev/null
+++ b/target/linux/bcm4908/base-files/etc/uci-defaults/05_packet_steering
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+uci set network. at globals[0].packet_steering="1"
More information about the lede-commits
mailing list