target_linux_rockchip-6.x/armv8/base-files/etc/hotplug.d/net/40-net-smp-affinity
2023-02-20 06:38:06 +08:00

63 lines
1.5 KiB
Bash

#!/bin/sh
[ "$ACTION" = add ] || exit
get_device_irq() {
local device="$1"
local line
local seconds="0"
# wait up to 10 seconds for the irq/device to appear
while [ "${seconds}" -le 10 ]; do
line=$(grep -m 1 "${device}\$" /proc/interrupts) && break
seconds="$(( seconds + 2 ))"
sleep 2
done
echo ${line} | sed 's/:.*//'
}
set_interface_core() {
local core_mask="$1"
local interface="$2"
local device="$3"
[ -z "${device}" ] && device="$interface"
local irq=$(get_device_irq "$device")
echo "${core_mask}" > /proc/irq/${irq}/smp_affinity
}
case "$(board_name)" in
friendlyarm,nanopi-r4s)
set_interface_core 10 "eth0"
set_interface_core 20 "eth1"
;;
friendlyarm,nanopi-r5c)
set_interface_core 2 "eth0-0"
set_interface_core 2 "eth0-16"
set_interface_core 2 "eth0-18"
echo d > /sys/class/net/eth0/queues/rx-0/rps_cpus
set_interface_core 4 "eth1-0"
set_interface_core 4 "eth1-16"
set_interface_core 4 "eth1-18"
echo b > /sys/class/net/eth1/queues/rx-0/rps_cpus
ethtool -K eth0 tso on sg on tx on
ethtool -K eth1 tso on sg on tx on
;;
friendlyarm,nanopi-r5s)
set_interface_core 8 "eth0"
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
set_interface_core 4 "eth1-0"
set_interface_core 4 "eth1-16"
set_interface_core 4 "eth1-18"
echo b > /sys/class/net/eth1/queues/rx-0/rps_cpus
set_interface_core 2 "eth2-0"
set_interface_core 2 "eth2-16"
set_interface_core 2 "eth2-18"
echo d > /sys/class/net/eth2/queues/rx-0/rps_cpus
ethtool -K eth1 tso on sg on tx on
ethtool -K eth2 tso on sg on tx on
;;
esac