rps_default_mask.sh 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. readonly ksft_skip=4
  4. readonly cpus=$(nproc)
  5. ret=0
  6. [ $cpus -gt 2 ] || exit $ksft_skip
  7. readonly INITIAL_RPS_DEFAULT_MASK=$(cat /proc/sys/net/core/rps_default_mask)
  8. readonly TAG="$(mktemp -u XXXXXX)"
  9. readonly VETH="veth${TAG}"
  10. readonly NETNS="ns-${TAG}"
  11. setup() {
  12. ip netns add "${NETNS}"
  13. ip -netns "${NETNS}" link set lo up
  14. }
  15. cleanup() {
  16. echo $INITIAL_RPS_DEFAULT_MASK > /proc/sys/net/core/rps_default_mask
  17. ip netns del $NETNS
  18. }
  19. chk_rps() {
  20. local rps_mask expected_rps_mask=$4
  21. local dev_name=$3
  22. local netns=$2
  23. local cmd="cat"
  24. local msg=$1
  25. [ -n "$netns" ] && cmd="ip netns exec $netns $cmd"
  26. rps_mask=$($cmd /sys/class/net/$dev_name/queues/rx-0/rps_cpus)
  27. printf "%-60s" "$msg"
  28. # In case there is more than 32 CPUs we need to remove commas from masks
  29. rps_mask=${rps_mask//,}
  30. expected_rps_mask=${expected_rps_mask//,}
  31. if [ $rps_mask -eq $expected_rps_mask ]; then
  32. echo "[ ok ]"
  33. else
  34. echo "[fail] expected $expected_rps_mask found $rps_mask"
  35. ret=1
  36. fi
  37. }
  38. trap cleanup EXIT
  39. echo 0 > /proc/sys/net/core/rps_default_mask
  40. setup
  41. chk_rps "empty rps_default_mask" $NETNS lo 0
  42. cleanup
  43. echo 1 > /proc/sys/net/core/rps_default_mask
  44. setup
  45. chk_rps "changing rps_default_mask dont affect existing devices" "" lo $INITIAL_RPS_DEFAULT_MASK
  46. echo 3 > /proc/sys/net/core/rps_default_mask
  47. chk_rps "changing rps_default_mask dont affect existing netns" $NETNS lo 0
  48. ip link add name $VETH type veth peer netns $NETNS name $VETH
  49. ip link set dev $VETH up
  50. ip -n $NETNS link set dev $VETH up
  51. chk_rps "changing rps_default_mask affect newly created devices" "" $VETH 3
  52. chk_rps "changing rps_default_mask don't affect newly child netns[II]" $NETNS $VETH 0
  53. ip link del dev $VETH
  54. ip netns del $NETNS
  55. setup
  56. chk_rps "rps_default_mask is 0 by default in child netns" "$NETNS" lo 0
  57. ip netns exec $NETNS sysctl -qw net.core.rps_default_mask=1
  58. ip link add name $VETH type veth peer netns $NETNS name $VETH
  59. chk_rps "changing rps_default_mask in child ns don't affect the main one" "" lo $INITIAL_RPS_DEFAULT_MASK
  60. chk_rps "changing rps_default_mask in child ns affects new childns devices" $NETNS $VETH 1
  61. chk_rps "changing rps_default_mask in child ns don't affect existing devices" $NETNS lo 0
  62. exit $ret