mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-15 18:03:30 +00:00
90 lines
2.3 KiB
Bash
90 lines
2.3 KiB
Bash
#!/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
|
|
}
|