# http://blog.itpub.net/15480802/viewspace-1408527/
设置linux的网卡软中断负载均衡
__cpus4_hex() {
_cpus4=$(grep "physical id" </proc/cpuinfo | uniq | wc -l | xargs -I{} echo "{}/4" | bc)
_f=""
for ((i = 0; i < "$_cpus4"; i++)); do
_f="$_f"f
done
_cpus4_hex=$(echo "$_f" | awk 'BEGIN{FS=OFS=""}{for(i=1;i<=NF;i++){if(i%8==0&&i!=NF){printf $i","}else{printf $i}}print ""}' | rev)
echo "$_cpus4_hex"
}
__cpus4_hex
__set_queues() {
# 设置单张网卡的软中断
# linux的中断负载均衡和RP
# https://www.yuque.com/uuu/linux/ksoftirqd
# _nic_name=p4p2
for rxdir in /sys/class/net/"$_nic_name"*/queues/rx-*; do
# 一个 f 代表 4 核心, 每 8 个 f 就要加一个逗号 (由后向前)
echo "$_cpus4_hex" >"$rxdir"/rps_cpus
done
for i in /sys/class/net/"$_nic_name"*/queues/rx-*; do
echo 2048 >"$i"/rps_flow_cnt
done
echo 1 >/proc/sys/net/core/rps_sock_flow_entries
}
__main() {
__cpus4_hex
_physical_nic=$(ls /sys/class/net/ | grep -v "$(ls /sys/devices/virtual/net/)")
for _nic_name in $_physical_nic; do
__set_queues
done
}
__main