2
0

40-net-smp-affinity 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/bin/sh
  2. [ "$ACTION" = add ] || exit
  3. get_device_irq() {
  4. local device="$1"
  5. local line
  6. local seconds="0"
  7. # wait up to 10 seconds for the irq/device to appear
  8. while [ "${seconds}" -le 10 ]; do
  9. line=$(grep -E -m 1 "${device}\$" /proc/interrupts) && break
  10. seconds="$(( seconds + 2 ))"
  11. sleep 2
  12. done
  13. echo ${line} | sed 's/:.*//'
  14. }
  15. set_interface_core() {
  16. local core_mask="$1"
  17. local interface="$2"
  18. local device="$3"
  19. [ -z "${device}" ] && device="$interface"
  20. local irq=$(get_device_irq "$device")
  21. echo "${core_mask}" > /proc/irq/${irq}/smp_affinity
  22. }
  23. case "$(board_name)" in
  24. friendlyarm,nanopi-r2c|\
  25. friendlyarm,nanopi-r2c-plus|\
  26. friendlyarm,nanopi-r2s|\
  27. radxa,cm3-io|\
  28. xunlong,orangepi-r1-plus|\
  29. xunlong,orangepi-r1-plus-lts)
  30. set_interface_core 2 "eth0"
  31. set_interface_core 4 "eth1" "xhci-hcd:usb[0-9]+"
  32. ;;
  33. friendlyarm,nanopi-r4s|\
  34. friendlyarm,nanopi-r4s-enterprise)
  35. set_interface_core 10 "eth0"
  36. set_interface_core 20 "eth1"
  37. ;;
  38. friendlyarm,nanopi-r5c|\
  39. radxa,e25)
  40. set_interface_core 2 "eth0"
  41. set_interface_core 4 "eth1"
  42. ;;
  43. friendlyarm,nanopi-r5s)
  44. set_interface_core 2 "eth0"
  45. set_interface_core 4 "eth1"
  46. set_interface_core 8 "eth2"
  47. ;;
  48. esac