udpgro_bench.sh 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. #
  4. # Run a series of udpgro benchmarks
  5. readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
  6. BPF_FILE="../bpf/xdp_dummy.bpf.o"
  7. cleanup() {
  8. local -r jobs="$(jobs -p)"
  9. local -r ns="$(ip netns list|grep $PEER_NS)"
  10. [ -n "${jobs}" ] && kill -INT ${jobs} 2>/dev/null
  11. [ -n "$ns" ] && ip netns del $ns 2>/dev/null
  12. }
  13. trap cleanup EXIT
  14. run_one() {
  15. # use 'rx' as separator between sender args and receiver args
  16. local -r all="$@"
  17. local -r tx_args=${all%rx*}
  18. local rx_args=${all#*rx}
  19. [[ "${tx_args}" == *"-4"* ]] && rx_args="${rx_args} -4"
  20. ip netns add "${PEER_NS}"
  21. ip -netns "${PEER_NS}" link set lo up
  22. ip link add type veth
  23. ip link set dev veth0 up
  24. ip addr add dev veth0 192.168.1.2/24
  25. ip addr add dev veth0 2001:db8::2/64 nodad
  26. ip link set dev veth1 netns "${PEER_NS}"
  27. ip -netns "${PEER_NS}" addr add dev veth1 192.168.1.1/24
  28. ip -netns "${PEER_NS}" addr add dev veth1 2001:db8::1/64 nodad
  29. ip -netns "${PEER_NS}" link set dev veth1 up
  30. ip -n "${PEER_NS}" link set veth1 xdp object ${BPF_FILE} section xdp
  31. ip netns exec "${PEER_NS}" ./udpgso_bench_rx ${rx_args} -r &
  32. ip netns exec "${PEER_NS}" ./udpgso_bench_rx -t ${rx_args} -r &
  33. # Hack: let bg programs complete the startup
  34. sleep 0.2
  35. ./udpgso_bench_tx ${tx_args}
  36. }
  37. run_in_netns() {
  38. local -r args=$@
  39. ./in_netns.sh $0 __subprocess ${args}
  40. }
  41. run_udp() {
  42. local -r args=$@
  43. echo "udp gso - over veth touching data"
  44. run_in_netns ${args} -S 0 rx
  45. echo "udp gso and gro - over veth touching data"
  46. run_in_netns ${args} -S 0 rx -G
  47. }
  48. run_tcp() {
  49. local -r args=$@
  50. echo "tcp - over veth touching data"
  51. run_in_netns ${args} -t rx
  52. }
  53. run_all() {
  54. local -r core_args="-l 4"
  55. local -r ipv4_args="${core_args} -4 -D 192.168.1.1"
  56. local -r ipv6_args="${core_args} -6 -D 2001:db8::1"
  57. echo "ipv4"
  58. run_tcp "${ipv4_args}"
  59. run_udp "${ipv4_args}"
  60. echo "ipv6"
  61. run_tcp "${ipv4_args}"
  62. run_udp "${ipv6_args}"
  63. }
  64. if [ ! -f ${BPF_FILE} ]; then
  65. echo "Missing ${BPF_FILE}. Build bpf selftest first"
  66. exit -1
  67. fi
  68. if [[ $# -eq 0 ]]; then
  69. run_all
  70. elif [[ $1 == "__subprocess" ]]; then
  71. shift
  72. run_one $@
  73. else
  74. run_in_netns $@
  75. fi