udpgro_bench.sh 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. #
  4. # Run a series of udpgro benchmarks
  5. source lib.sh
  6. readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)"
  7. BPF_FILE="lib/xdp_dummy.bpf.o"
  8. cleanup() {
  9. local -r jobs="$(jobs -p)"
  10. local -r ns="$(ip netns list|grep $PEER_NS)"
  11. [ -n "${jobs}" ] && kill -INT ${jobs} 2>/dev/null
  12. [ -n "$ns" ] && ip netns del $ns 2>/dev/null
  13. }
  14. trap cleanup EXIT
  15. run_one() {
  16. # use 'rx' as separator between sender args and receiver args
  17. local -r all="$@"
  18. local -r tx_args=${all%rx*}
  19. local rx_args=${all#*rx}
  20. [[ "${tx_args}" == *"-4"* ]] && rx_args="${rx_args} -4"
  21. ip netns add "${PEER_NS}"
  22. ip -netns "${PEER_NS}" link set lo up
  23. ip link add type veth
  24. ip link set dev veth0 up
  25. ip addr add dev veth0 192.168.1.2/24
  26. ip addr add dev veth0 2001:db8::2/64 nodad
  27. ip link set dev veth1 netns "${PEER_NS}"
  28. ip -netns "${PEER_NS}" addr add dev veth1 192.168.1.1/24
  29. ip -netns "${PEER_NS}" addr add dev veth1 2001:db8::1/64 nodad
  30. ip -netns "${PEER_NS}" link set dev veth1 up
  31. ip -n "${PEER_NS}" link set veth1 xdp object ${BPF_FILE} section xdp
  32. ip netns exec "${PEER_NS}" ./udpgso_bench_rx ${rx_args} -r &
  33. ip netns exec "${PEER_NS}" ./udpgso_bench_rx -t ${rx_args} -r &
  34. wait_local_port_listen "${PEER_NS}" 8000 udp
  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}. Run 'make' 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