40-net-smp-affinity 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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 -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-r2s|\
  26. xunlong,orangepi-r1-plus|\
  27. xunlong,orangepi-r1-plus-lts)
  28. set_interface_core 2 "eth0"
  29. set_interface_core 4 "eth1" "xhci-hcd:usb3"
  30. ;;
  31. friendlyarm,nanopi-r4s)
  32. set_interface_core 10 "eth0"
  33. set_interface_core 20 "eth1"
  34. ;;
  35. friendlyarm,nanopi-r5c)
  36. set_interface_core 2 "eth0"
  37. set_interface_core 4 "eth1"
  38. ;;
  39. friendlyarm,nanopi-r5s)
  40. set_interface_core 2 "eth0"
  41. set_interface_core 4 "eth1"
  42. set_interface_core 8 "eth2"
  43. ;;
  44. esac