[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