1. # http://blog.itpub.net/15480802/viewspace-1408527/

设置linux的网卡软中断负载均衡

  1. __cpus4_hex() {
  2. _cpus4=$(grep "physical id" </proc/cpuinfo | uniq | wc -l | xargs -I{} echo "{}/4" | bc)
  3. _f=""
  4. for ((i = 0; i < "$_cpus4"; i++)); do
  5. _f="$_f"f
  6. done
  7. _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)
  8. echo "$_cpus4_hex"
  9. }
  10. __cpus4_hex
  11. __set_queues() {
  12. # 设置单张网卡的软中断
  13. # linux的中断负载均衡和RP
  14. # https://www.yuque.com/uuu/linux/ksoftirqd
  15. # _nic_name=p4p2
  16. for rxdir in /sys/class/net/"$_nic_name"*/queues/rx-*; do
  17. # 一个 f 代表 4 核心, 每 8 个 f 就要加一个逗号 (由后向前)
  18. echo "$_cpus4_hex" >"$rxdir"/rps_cpus
  19. done
  20. for i in /sys/class/net/"$_nic_name"*/queues/rx-*; do
  21. echo 2048 >"$i"/rps_flow_cnt
  22. done
  23. echo 1 >/proc/sys/net/core/rps_sock_flow_entries
  24. }
  25. __main() {
  26. __cpus4_hex
  27. _physical_nic=$(ls /sys/class/net/ | grep -v "$(ls /sys/devices/virtual/net/)")
  28. for _nic_name in $_physical_nic; do
  29. __set_queues
  30. done
  31. }
  32. __main