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: fcbd39689e ("bcm53xx: enable & setup packet steering")
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
			
			
This commit is contained in:
		
							
								
								
									
										46
									
								
								target/linux/bcm4908/base-files/etc/init.d/fastnetwork
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								target/linux/bcm4908/base-files/etc/init.d/fastnetwork
									
									
									
									
									
										Executable file
									
								
							| @@ -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.@globals[0].packet_steering)" | ||||||
|  | 	local num_cpus="$(grep -c "^processor.*:" /proc/cpuinfo)" | ||||||
|  | 	local flow_offloading="$(uci -q get firewall.@defaults[0].flow_offloading)" | ||||||
|  | 	local flow_offloading_hw="$(uci -q get firewall.@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 | ||||||
|  | } | ||||||
| @@ -0,0 +1,3 @@ | |||||||
|  | # SPDX-License-Identifier: GPL-2.0-only | ||||||
|  |  | ||||||
|  | uci set network.@globals[0].packet_steering="1" | ||||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki