230 lines
6.9 KiB
Bash
230 lines
6.9 KiB
Bash
#!/bin/sh
|
|
|
|
[ "$ACTION" = add ] || exit
|
|
|
|
get_device_irq() {
|
|
local device="$1"
|
|
local line
|
|
local seconds
|
|
|
|
for seconds in $(seq 0 9); do
|
|
line=$(grep -m 1 "${device}\$" /proc/interrupts) && break
|
|
sleep 1
|
|
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_list
|
|
}
|
|
|
|
sysctl -w net.core.rmem_max=26214400
|
|
sysctl -w net.core.rmem_default=2097152
|
|
sysctl -w net.core.wmem_max=16214400
|
|
sysctl -w net.core.wmem_default=524288
|
|
sysctl -w net.ipv4.tcp_mem="22611 65536 932448"
|
|
sysctl -w net.ipv4.tcp_rmem="65536 524288 8388608"
|
|
sysctl -w net.ipv4.tcp_wmem="65536 524288 8388608"
|
|
sysctl -w net.ipv4.tcp_max_syn_backlog=56384
|
|
sysctl -w net.ipv4.tcp_max_tw_buckets=6000
|
|
sysctl -w net.ipv4.tcp_max_orphans=32768
|
|
sysctl -w net.ipv4.tcp_orphan_retries=3
|
|
sysctl -w net.netfilter.nf_conntrack_max=6553500
|
|
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=7440
|
|
sysctl -w net.netfilter.nf_conntrack_udp_timeout=60
|
|
sysctl -w net.netfilter.nf_conntrack_udp_timeout_stream=180
|
|
sysctl -w fs.nr_open=65535000
|
|
sysctl -w net.core.netdev_budget=5000
|
|
sysctl -w net.core.netdev_budget_usecs=50000
|
|
sysctl -w net.netfilter.nf_conntrack_max=629536
|
|
sysctl -w net.netfilter.nf_conntrack_buckets=32384
|
|
|
|
case "$(board_name)" in
|
|
ariaboard,photonicat)
|
|
set_interface_core 2 "eth0"
|
|
set_interface_core 4 "eth1"
|
|
;;
|
|
embedfire,doornet1|\
|
|
friendlyarm,nanopi-r2c|\
|
|
friendlyarm,nanopi-r2s)
|
|
set_interface_core "0-1" "eth0"
|
|
set_interface_core "2-3" "eth1" "xhci-hcd:usb3"
|
|
rfc=32768
|
|
sysctl net.core.rps_sock_flow_entries=$rfc
|
|
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
|
|
do
|
|
eth_name=$(echo "$fileRfc"|awk -F/ '{print $5}')
|
|
echo $rfc > $fileRfc
|
|
done
|
|
#0011
|
|
echo 3 > /sys/class/net/eth0/queues/rx-0/rps_cpus
|
|
echo 3 > /sys/class/net/eth0/queues/rx-1/rps_cpus
|
|
#1100
|
|
echo c > /sys/class/net/eth1/queues/rx-0/rps_cpus
|
|
echo c > /sys/class/net/eth1/queues/rx-1/rps_cpus
|
|
/usr/sbin/ethtool -K eth0 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth1 tso on sg on tx on
|
|
;;
|
|
embedfire,doornet2|\
|
|
friendlyarm,nanopi-r4s|\
|
|
friendlyarm,nanopi-r4se)
|
|
set_interface_core "4" "eth0"
|
|
set_interface_core "5" "eth1"
|
|
rfc=32768
|
|
sysctl net.core.rps_sock_flow_entries=$rfc
|
|
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
|
|
do
|
|
eth_name=$(echo "$fileRfc"|awk -F/ '{print $5}')
|
|
echo $rfc > $fileRfc
|
|
done
|
|
#0011
|
|
echo 3 > /sys/class/net/eth0/queues/rx-0/rps_cpus
|
|
echo 3 > /sys/class/net/eth0/queues/rx-1/rps_cpus
|
|
#1100
|
|
echo c > /sys/class/net/eth1/queues/rx-0/rps_cpus
|
|
echo c > /sys/class/net/eth1/queues/rx-1/rps_cpus
|
|
/usr/sbin/ethtool -K eth0 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth1 tso on sg on tx on
|
|
;;
|
|
embedfire,lubancat-1n|\
|
|
friendlyelec,nanopi-r3s|\
|
|
embedfire,lubancat-5|\
|
|
embedfire,lubancat-2)
|
|
set_interface_core "0-1" "eth0"
|
|
set_interface_core "2-3" "eth1"
|
|
/usr/sbin/ethtool -K eth0 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth1 tso on sg on tx on
|
|
rfc=32768
|
|
sysctl net.core.rps_sock_flow_entries=$rfc
|
|
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
|
|
do
|
|
eth_name=$(echo "$fileRfc"|awk -F/ '{print $5}')
|
|
echo $rfc > $fileRfc
|
|
done
|
|
#0011
|
|
echo 3 > /sys/class/net/eth0/queues/rx-0/rps_cpus
|
|
echo 3 > /sys/class/net/eth0/queues/rx-1/rps_cpus
|
|
#1100
|
|
echo c > /sys/class/net/eth1/queues/rx-0/rps_cpus
|
|
echo c > /sys/class/net/eth1/queues/rx-1/rps_cpus
|
|
/usr/sbin/ethtool -K eth0 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth1 tso on sg on tx on
|
|
;;
|
|
hinlink,opc-h66k|\
|
|
friendlyarm,nanopi-r5c|\
|
|
friendlyarm,nanopc-t6|\
|
|
friendlyarm,nanopi-r6c)
|
|
set_interface_core "0-3" "eth0-0"
|
|
set_interface_core "0" "eth0-16"
|
|
set_interface_core "1" "eth0-18"
|
|
set_interface_core "3" "eth1-0"
|
|
set_interface_core "2" "eth1-18"
|
|
set_interface_core "2" "eth1-16"
|
|
rfc=32768
|
|
sysctl net.core.rps_sock_flow_entries=$rfc
|
|
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
|
|
do
|
|
eth_name=$(echo "$fileRfc"|awk -F/ '{print $5}')
|
|
echo $rfc > $fileRfc
|
|
done
|
|
#0011
|
|
echo 3 > /sys/class/net/eth0/queues/rx-0/rps_cpus
|
|
echo 3 > /sys/class/net/eth0/queues/rx-1/rps_cpus
|
|
#1100
|
|
echo c > /sys/class/net/eth1/queues/rx-0/rps_cpus
|
|
echo c > /sys/class/net/eth1/queues/rx-1/rps_cpus
|
|
/usr/sbin/ethtool -K eth0 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth1 tso on sg on tx on
|
|
;;
|
|
friendlyarm,nanopi-r6s|\
|
|
friendlyarm,nanopi-r5s)
|
|
set_interface_core "0-3" "eth0"
|
|
set_interface_core "1" "eth1-0"
|
|
set_interface_core "0" "eth1-16"
|
|
set_interface_core "0" "eth1-18"
|
|
set_interface_core "3" "eth2-0"
|
|
set_interface_core "2" "eth2-18"
|
|
set_interface_core "2" "eth2-16"
|
|
rfc=32768
|
|
sysctl net.core.rps_sock_flow_entries=$rfc
|
|
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
|
|
do
|
|
eth_name=$(echo "$fileRfc"|awk -F/ '{print $5}')
|
|
echo $rfc > $fileRfc
|
|
done
|
|
#0101
|
|
echo 9 > /sys/class/net/eth0/queues/rx-0/rps_cpus
|
|
#0011
|
|
echo 3 > /sys/class/net/eth1/queues/rx-0/rps_cpus
|
|
echo 3 > /sys/class/net/eth1/queues/rx-1/rps_cpus
|
|
#1100
|
|
echo c > /sys/class/net/eth2/queues/rx-0/rps_cpus
|
|
echo c > /sys/class/net/eth2/queues/rx-1/rps_cpus
|
|
/usr/sbin/ethtool -K eth0 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth1 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth2 tso on sg on tx on
|
|
;;
|
|
hinlink,opc-h68k|\
|
|
hinlink,opc-h69k|\
|
|
embedfire,lubancat-2n)
|
|
set_interface_core "0-3" "eth0"
|
|
set_interface_core "1" "eth1"
|
|
set_interface_core "2" "eth2-0"
|
|
set_interface_core "2" "eth2-16"
|
|
set_interface_core "1" "eth2-18"
|
|
set_interface_core "3" "eth3-0"
|
|
set_interface_core "3" "eth3-18"
|
|
set_interface_core "1" "eth3-16"
|
|
rfc=32768
|
|
sysctl net.core.rps_sock_flow_entries=$rfc
|
|
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
|
|
do
|
|
eth_name=$(echo "$fileRfc"|awk -F/ '{print $5}')
|
|
echo $rfc > $fileRfc
|
|
done
|
|
#0101
|
|
echo 9 > /sys/class/net/eth0/queues/rx-0/rps_cpus
|
|
echo 9 > /sys/class/net/eth1/queues/rx-0/rps_cpus
|
|
#0011
|
|
echo 3 > /sys/class/net/eth2/queues/rx-0/rps_cpus
|
|
echo 3 > /sys/class/net/eth2/queues/rx-1/rps_cpus
|
|
#1100
|
|
echo c > /sys/class/net/eth3/queues/rx-0/rps_cpus
|
|
echo c > /sys/class/net/eth3/queues/rx-1/rps_cpus
|
|
/usr/sbin/ethtool -K eth0 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth1 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth2 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth3 tso on sg on tx on
|
|
;;
|
|
hinlink,h88k)
|
|
set_interface_core "6-7" "eth0"
|
|
set_interface_core "4-5" "eth1"
|
|
set_interface_core "0-1" "eth2"
|
|
rfc=32768
|
|
sysctl net.core.rps_sock_flow_entries=$rfc
|
|
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
|
|
do
|
|
eth_name=$(echo "$fileRfc"|awk -F/ '{print $5}')
|
|
echo $rfc > $fileRfc
|
|
done
|
|
#0101
|
|
echo 9 > /sys/class/net/eth0/queues/rx-0/rps_cpus
|
|
echo 9 > /sys/class/net/eth0/queues/rx-1/rps_cpus
|
|
#0011
|
|
echo 3 > /sys/class/net/eth1/queues/rx-0/rps_cpus
|
|
echo 3 > /sys/class/net/eth1/queues/rx-1/rps_cpus
|
|
|
|
/usr/sbin/ethtool -K eth0 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth1 tso on sg on tx on
|
|
/usr/sbin/ethtool -K eth2 tso on sg on tx on
|
|
;;
|
|
esac
|