From 0d853dd76392d669385fd472c1154c2a818ae2e6 Mon Sep 17 00:00:00 2001 From: Frank Wunderlich Date: Tue, 10 Jun 2025 23:28:00 +0200 Subject: [PATCH 77/84] readme: add README.md for RSS/LRO --- README.md | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000000..f6b88d4d502a --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# RSS / LRO + +HW-acceleration for ending traffic. +For routed traffic PPE is needed and hw offloading in nftables. +Bridged traffic may need addional changes (openwrt use bridger utility). + +## RSS + +(Receive Side Scaling) + +using 4 additional IRQ for spreading load + +cat /proc/interrupts | grep ethernet + +echo 1 > /proc/irq/105/smp_affinity +echo 2 > /proc/irq/106/smp_affinity +echo 4 > /proc/irq/107/smp_affinity +echo 8 > /proc/irq/108/smp_affinity + +moving tx frame-engine irq to different cpu (here 3rd) +echo 4 > /proc/irq/103/smp_affinity + +disable RPS (Receive Packet Steering) for all macs: +echo 0 > /sys/devices/platform/soc/15100000.ethernet/net/eth0/queues/rx-0/rps_cpus + +pay attention on iperf-version (iperf 3.17 is ok, 3.12 is not) + +traffic must be created using multiple streams so that it can be splitted, so use multithreaded iperf3 + +on R4: +bin/iperf3 -s + +on the other side: +iperf3 -c 192.168.1.1 -i 1 -P 4 + +you should reach ~9.3 GBit/s + +and see spreading load over CPU cores + +root@bpi-r4-phy-8G:~# cat /proc/interrupts | grep eth +103: 20 198366 0 0 GICv3 229 Level 15100000.ethernet +105: 3611 0 0 0 GICv3 221 Level 15100000.ethernet, 15100000.ethernet +106: 2 6842 0 0 GICv3 222 Level 15100000.ethernet, 15100000.ethernet +107: 4 0 27643 0 GICv3 223 Level 15100000.ethernet, 15100000.ethernet +108: 3 0 0 27925 GICv3 224 Level 15100000.ethernet, 15100000.ethernet + +using the default iperf3 from debian bookworm (3.12) results in only 6.7GBit/s + +## LRO +(Large Receive Offload) + +Add HW LRO RX rule: + +ethtool -N [interface] flow-type tcp4 dst-ip [IP] action 0 loc [0/1] + +Delete HW LRO RX rule: + +ethtool -N [interface] delete [0/1] + +Enable/Disable HW LRO rule: + +ethtool -K [interface] lro [on | off] + +Show the current offload features: + +ethtool -k [interface] + +example: + +ethtool -N eth2 flow-type tcp4 dst-ip 192.168.1.1 action 0 loc 0 +ethtool -K eth2 lro on +ethtool -k eth2 + +using iperf instead of iperf3! + +verify with propritary debugfs +Enable HW LRO rings +echo 4 1 > /proc/mtketh/hw_lro_auto_tlb +Enable HW LRO statistics +echo 5 1 > /proc/mtketh/hw_lro_auto_tlb + +cat /proc/mtketh/hw_lro_stats -- 2.30.2