mirror of
https://github.com/FUjr/gl-infra-builder.git
synced 2025-12-16 09:10:02 +00:00
126 lines
3.8 KiB
Diff
126 lines
3.8 KiB
Diff
From 3b2235f8a89b612cef7b311da8e3586a2c191cdf Mon Sep 17 00:00:00 2001
|
|
From: Dongming Han <handongming@gl-inet.com>
|
|
Date: Fri, 15 Jul 2022 10:42:57 +0800
|
|
Subject: [PATCH] ipq40xx: add smp network performance optimization
|
|
|
|
source: https://github.com/coolsnowwolf/lede/commit/b93293ef8dde8c0447c01569f968b389bedbbdb1
|
|
---
|
|
.../etc/hotplug.d/net/21_adjust_network | 8 ++
|
|
.../ipq40xx/base-files/lib/adjust_network.sh | 89 +++++++++++++++++++
|
|
2 files changed, 97 insertions(+)
|
|
create mode 100644 target/linux/ipq40xx/base-files/etc/hotplug.d/net/21_adjust_network
|
|
create mode 100644 target/linux/ipq40xx/base-files/lib/adjust_network.sh
|
|
|
|
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/net/21_adjust_network b/target/linux/ipq40xx/base-files/etc/hotplug.d/net/21_adjust_network
|
|
new file mode 100644
|
|
index 0000000000..bb4d215b4d
|
|
--- /dev/null
|
|
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/net/21_adjust_network
|
|
@@ -0,0 +1,8 @@
|
|
+#!/bin/sh
|
|
+
|
|
+[ -f /lib/adjust_network.sh ] && {
|
|
+ . /lib/adjust_network.sh
|
|
+ adjust_edma_smp_affinity
|
|
+ adjust_radio_smp_affinity
|
|
+ adjust_eth_queue
|
|
+}
|
|
diff --git a/target/linux/ipq40xx/base-files/lib/adjust_network.sh b/target/linux/ipq40xx/base-files/lib/adjust_network.sh
|
|
new file mode 100644
|
|
index 0000000000..99423022c5
|
|
--- /dev/null
|
|
+++ b/target/linux/ipq40xx/base-files/lib/adjust_network.sh
|
|
@@ -0,0 +1,89 @@
|
|
+#!/bin/sh
|
|
+# this scripts is used for adjust cpu's choice of interrupts.
|
|
+#
|
|
+
|
|
+################################################
|
|
+# Adjust smp_affinity of edma
|
|
+# Globals:
|
|
+# None
|
|
+# Arguments:
|
|
+# None
|
|
+# Returns:
|
|
+# None
|
|
+# Remark:
|
|
+# execute only once on start-up.
|
|
+################################################
|
|
+adjust_edma_smp_affinity() {
|
|
+ grep -q edma_eth_ /proc/interrupts || return 0
|
|
+ local nr=`cat /proc/cpuinfo | grep processor | wc -l`
|
|
+ local cpu=0
|
|
+ local tx_irq_num
|
|
+
|
|
+ for tx_num in `seq 0 1 15` ; do
|
|
+ cpu=`printf "%x" $((1<<((tx_num/4+0)%nr)))`
|
|
+ tx_irq_num=`grep -m1 edma_eth_tx$tx_num /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
|
|
+ [ -n "$tx_irq_num" ] && echo $cpu > /proc/irq/$tx_irq_num/smp_affinity
|
|
+ done
|
|
+
|
|
+ for rx_num in `seq 0 1 7` ; do
|
|
+ cpu=`printf "%x" $((1<<((rx_num/2)%nr)))`
|
|
+ rx_irq_num=`grep -m1 edma_eth_rx$rx_num /proc/interrupts | cut -d ':' -f 1 | tail -n1 | tr -d ' '`
|
|
+ [ -n "$rx_irq_num" ] && echo $cpu > /proc/irq/$rx_irq_num/smp_affinity
|
|
+ done
|
|
+}
|
|
+
|
|
+################################################
|
|
+# Adjust smp_affinity of ath10k for 2G and 5G
|
|
+# Globals:
|
|
+# None
|
|
+# Arguments:
|
|
+# None
|
|
+# Returns:
|
|
+# None
|
|
+# Remark:
|
|
+# execute only once on start-up.
|
|
+################################################
|
|
+adjust_radio_smp_affinity() {
|
|
+ local irqs="`grep -E 'ath10k' /proc/interrupts | cut -d ':' -f 1 | tr -d ' '`"
|
|
+ local nr=`cat /proc/cpuinfo | grep processor | wc -l`
|
|
+ local idx=2
|
|
+
|
|
+ for irq in $irqs; do
|
|
+ cpu=`printf "%x" $((1<<((idx)%nr)))`
|
|
+ echo $cpu > /proc/irq/$irq/smp_affinity
|
|
+ idx=$((idx+1))
|
|
+ done
|
|
+}
|
|
+
|
|
+################################################
|
|
+# Adjust queue of eth
|
|
+# Globals:
|
|
+# None
|
|
+# Arguments:
|
|
+# None
|
|
+# Returns:
|
|
+# None
|
|
+# Remark:
|
|
+# Each network reboot needs to be executed.
|
|
+################################################
|
|
+adjust_eth_queue() {
|
|
+ local nr=`cat /proc/cpuinfo | grep processor | wc -l`
|
|
+ local idx=0
|
|
+
|
|
+ for epath in /sys/class/net/eth[0-9]*; do
|
|
+ test -e $epath || break
|
|
+ echo $epath | grep -q "\." && continue
|
|
+ eth=`basename $epath`
|
|
+ idx=0
|
|
+ for exps in /sys/class/net/$eth/queues/rx-[0-9]*/rps_cpus; do
|
|
+ test -e $exps || break
|
|
+ cpu=`printf "%x" $((1<<((idx+1)%nr)))`
|
|
+ idx=$((idx+1))
|
|
+ echo $cpu > $exps
|
|
+ echo 256 > `dirname $exps`/rps_flow_cnt
|
|
+ done
|
|
+ which ethtool >/dev/null 2>&1 && ethtool -K $eth gro off
|
|
+ done
|
|
+
|
|
+ echo 1024 > /proc/sys/net/core/rps_sock_flow_entries
|
|
+}
|
|
--
|
|
2.17.1
|
|
|