Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) #!/bin/bash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) # Copyright (c) 2019 Facebook
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) # This program is free software; you can redistribute it and/or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) # modify it under the terms of version 2 of the GNU General Public
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) # License as published by the Free Software Foundation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) Usage() {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)   echo "Script for testing HBM (Host Bandwidth Manager) framework."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)   echo "It creates a cgroup to use for testing and load a BPF program to limit"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)   echo "egress or ingress bandwidht. It then uses iperf3 or netperf to create"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)   echo "loads. The output is the goodput in Mbps (unless -D was used)."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)   echo ""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)   echo "USAGE: $name [out] [-b=<prog>|--bpf=<prog>] [-c=<cc>|--cc=<cc>]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)   echo "             [-D] [-d=<delay>|--delay=<delay>] [--debug] [-E] [--edt]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)   echo "             [-f=<#flows>|--flows=<#flows>] [-h] [-i=<id>|--id=<id >]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)   echo "             [-l] [-N] [--no_cn] [-p=<port>|--port=<port>] [-P]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)   echo "             [-q=<qdisc>] [-R] [-s=<server>|--server=<server]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21)   echo "             [-S|--stats] -t=<time>|--time=<time>] [-w] [cubic|dctcp]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22)   echo "  Where:"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)   echo "    out               egress (default)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)   echo "    -b or --bpf       BPF program filename to load and attach."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)   echo "                      Default is hbm_out_kern.o for egress,"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)   echo "    -c or -cc         TCP congestion control (cubic or dctcp)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)   echo "    --debug           print BPF trace buffer"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28)   echo "    -d or --delay     add a delay in ms using netem"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29)   echo "    -D                In addition to the goodput in Mbps, it also outputs"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30)   echo "                      other detailed information. This information is"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)   echo "                      test dependent (i.e. iperf3 or netperf)."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)   echo "    -E                enable ECN (not required for dctcp)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33)   echo "    --edt             use fq's Earliest Departure Time (requires fq)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)   echo "    -f or --flows     number of concurrent flows (default=1)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)   echo "    -i or --id        cgroup id (an integer, default is 1)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)   echo "    -N                use netperf instead of iperf3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37)   echo "    --no_cn           Do not return CN notifications"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)   echo "    -l                do not limit flows using loopback"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39)   echo "    -h                Help"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)   echo "    -p or --port      iperf3 port (default is 5201)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)   echo "    -P                use an iperf3 instance for each flow"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)   echo "    -q                use the specified qdisc"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43)   echo "    -r or --rate      rate in Mbps (default 1s 1Gbps)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44)   echo "    -R                Use TCP_RR for netperf. 1st flow has req"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45)   echo "                      size of 10KB, rest of 1MB. Reply in all"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)   echo "                      cases is 1 byte."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)   echo "                      More detailed output for each flow can be found"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48)   echo "                      in the files netperf.<cg>.<flow>, where <cg> is the"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49)   echo "                      cgroup id as specified with the -i flag, and <flow>"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)   echo "                      is the flow id starting at 1 and increasing by 1 for"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51)   echo "                      flow (as specified by -f)."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52)   echo "    -s or --server    hostname of netperf server. Used to create netperf"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53)   echo "                      test traffic between to hosts (default is within host)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54)   echo "                      netserver must be running on the host."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55)   echo "    -S or --stats     whether to update hbm stats (default is yes)."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56)   echo "    -t or --time      duration of iperf3 in seconds (default=5)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57)   echo "    -w                Work conserving flag. cgroup can increase its"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58)   echo "                      bandwidth beyond the rate limit specified"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59)   echo "                      while there is available bandwidth. Current"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)   echo "                      implementation assumes there is only one NIC"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)   echo "                      (eth0), but can be extended to support multiple"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62)   echo "                       NICs."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63)   echo "    cubic or dctcp    specify which TCP CC to use"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)   echo " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65)   exit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #set -x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) debug_flag=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) args="$@"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) name="$0"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) netem=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) cc=x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) dir="-o"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) dir_name="out"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) dur=5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) flows=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) id=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) prog=""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) port=5201
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) rate=1000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) multi_iperf=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) flow_cnt=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) use_netperf=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) rr=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) ecn=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) details=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) server=""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) qdisc=""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) flags=""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) do_stats=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) function start_hbm () {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)   rm -f hbm.out
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)   echo "./hbm $dir -n $id -r $rate -t $dur $flags $dbg $prog" > hbm.out
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)   echo " " >> hbm.out
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)   ./hbm $dir -n $id -r $rate -t $dur $flags $dbg $prog >> hbm.out 2>&1  &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99)   echo $!
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) processArgs () {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)   for i in $args ; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)     case $i in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)     # Support for upcomming ingress rate limiting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)     #in)         # support for upcoming ingress rate limiting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)     #  dir="-i"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)     #  dir_name="in"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)     #  ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)     out)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)       dir="-o"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)       dir_name="out"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)     -b=*|--bpf=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)       prog="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)     -c=*|--cc=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)       cc="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)     --no_cn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)       flags="$flags --no_cn"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)     --debug)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)       flags="$flags -d"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)       debug_flag=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)     -d=*|--delay=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)       netem="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)     -D)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)       details=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)     -E)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)       ecn=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)     --edt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)       flags="$flags --edt"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)       qdisc="fq"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)      ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)     -f=*|--flows=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)       flows="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)     -i=*|--id=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)       id="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)     -l)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)       flags="$flags -l"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)     -N)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)       use_netperf=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)     -p=*|--port=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)       port="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)     -P)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)       multi_iperf=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)     -q=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)       qdisc="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)     -r=*|--rate=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)       rate="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)     -R)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)       rr=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167)     -s=*|--server=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)       server="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)     -S|--stats)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)       flags="$flags -s"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)       do_stats=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)     -t=*|--time=*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)       dur="${i#*=}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)     -w)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)       flags="$flags -w"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)     cubic)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)       cc=cubic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)     dctcp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)       cc=dctcp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)     *)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)       echo "Unknown arg:$i"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)       Usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)       ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)     esac
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)   done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) processArgs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) if [ $debug_flag -eq 1 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)   rm -f hbm_out.log
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) hbm_pid=$(start_hbm)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) usleep 100000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) host=`hostname`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) cg_base_dir=/sys/fs/cgroup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) cg_dir="$cg_base_dir/cgroup-test-work-dir/hbm$id"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) echo $$ >> $cg_dir/cgroup.procs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) ulimit -l unlimited
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) rm -f ss.out
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) rm -f hbm.[0-9]*.$dir_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) if [ $ecn -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)   sysctl -w -q -n net.ipv4.tcp_ecn=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) if [ $use_netperf -eq 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)   cur_cc=`sysctl -n net.ipv4.tcp_congestion_control`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)   if [ "$cc" != "x" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)     sysctl -w -q -n net.ipv4.tcp_congestion_control=$cc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) if [ "$netem" -ne "0" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)   if [ "$qdisc" != "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)     echo "WARNING: Ignoring -q options because -d option used"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228)   tc qdisc del dev lo root > /dev/null 2>&1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229)   tc qdisc add dev lo root netem delay $netem\ms > /dev/null 2>&1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) elif [ "$qdisc" != "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)   tc qdisc del dev eth0 root > /dev/null 2>&1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)   tc qdisc add dev eth0 root $qdisc > /dev/null 2>&1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) n=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) m=$[$dur * 5]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) hn="::1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) if [ $use_netperf -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)   if [ "$server" != "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)     hn=$server
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) ( ping6 -i 0.2 -c $m $hn > ping.out 2>&1 ) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) if [ $use_netperf -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)   begNetserverPid=`ps ax | grep netserver | grep --invert-match "grep" | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)                    awk '{ print $1 }'`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)   if [ "$begNetserverPid" == "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)     if [ "$server" == "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)       ( ./netserver > /dev/null 2>&1) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)       usleep 100000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)   flow_cnt=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)   if [ "$server" == "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)     np_server=$host
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258)   else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)     np_server=$server
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261)   if [ "$cc" == "x" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)     np_cc=""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)   else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264)     np_cc="-K $cc,$cc"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266)   replySize=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)   while [ $flow_cnt -le $flows ] ; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268)     if [ $rr -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)       reqSize=1M
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270)       if [ $flow_cnt -eq 1 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)         reqSize=10K
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272)       fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273)       if [ "$dir" == "-i" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)         replySize=$reqSize
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)         reqSize=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276)       fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277)       ( ./netperf -H $np_server -l $dur -f m -j -t TCP_RR  -- -r $reqSize,$replySize $np_cc -k P50_lATENCY,P90_LATENCY,LOCAL_TRANSPORT_RETRANS,REMOTE_TRANSPORT_RETRANS,LOCAL_SEND_THROUGHPUT,LOCAL_RECV_THROUGHPUT,REQUEST_SIZE,RESPONSE_SIZE > netperf.$id.$flow_cnt ) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278)     else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)       if [ "$dir" == "-i" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)         ( ./netperf -H $np_server -l $dur -f m -j -t TCP_RR -- -r 1,10M $np_cc -k P50_LATENCY,P90_LATENCY,LOCAL_TRANSPORT_RETRANS,LOCAL_SEND_THROUGHPUT,REMOTE_TRANSPORT_RETRANS,REMOTE_SEND_THROUGHPUT,REQUEST_SIZE,RESPONSE_SIZE > netperf.$id.$flow_cnt ) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)       else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282)         ( ./netperf -H $np_server -l $dur -f m -j -t TCP_STREAM -- $np_cc -k P50_lATENCY,P90_LATENCY,LOCAL_TRANSPORT_RETRANS,LOCAL_SEND_THROUGHPUT,REQUEST_SIZE,RESPONSE_SIZE > netperf.$id.$flow_cnt ) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283)       fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285)     flow_cnt=$[flow_cnt+1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286)   done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) # sleep for duration of test (plus some buffer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289)   n=$[dur+2]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)   sleep $n
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) # force graceful termination of netperf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293)   pids=`pgrep netperf`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294)   for p in $pids ; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295)     kill -SIGALRM $p
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296)   done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298)   flow_cnt=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299)   rate=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)   if [ $details -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301)     echo ""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)     echo "Details for HBM in cgroup $id"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303)     if [ $do_stats -eq 1 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)       if [ -e hbm.$id.$dir_name ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305)         cat hbm.$id.$dir_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)       fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309)   while [ $flow_cnt -le $flows ] ; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310)     if [ "$dir" == "-i" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)       r=`cat netperf.$id.$flow_cnt | grep -o "REMOTE_SEND_THROUGHPUT=[0-9]*" | grep -o "[0-9]*"`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)     else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313)       r=`cat netperf.$id.$flow_cnt | grep -o "LOCAL_SEND_THROUGHPUT=[0-9]*" | grep -o "[0-9]*"`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)     echo "rate for flow $flow_cnt: $r"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)     rate=$[rate+r]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317)     if [ $details -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318)       echo "-----"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319)       echo "Details for cgroup $id, flow $flow_cnt"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)       cat netperf.$id.$flow_cnt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322)     flow_cnt=$[flow_cnt+1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)   done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324)   if [ $details -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325)     echo ""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326)     delay=`grep "avg" ping.out | grep -o "= [0-9.]*/[0-9.]*" | grep -o "[0-9.]*$"`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)     echo "PING AVG DELAY:$delay"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)     echo "AGGREGATE_GOODPUT:$rate"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329)   else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330)     echo $rate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) elif [ $multi_iperf -eq 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333)   (iperf3 -s -p $port -1 > /dev/null 2>&1) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)   usleep 100000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)   iperf3 -c $host -p $port -i 0 -P $flows -f m -t $dur > iperf.$id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336)   rates=`grep receiver iperf.$id | grep -o "[0-9.]* Mbits" | grep -o "^[0-9]*"`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)   rate=`echo $rates | grep -o "[0-9]*$"`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339)   if [ $details -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340)     echo ""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341)     echo "Details for HBM in cgroup $id"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342)     if [ $do_stats -eq 1 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343)       if [ -e hbm.$id.$dir_name ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344)         cat hbm.$id.$dir_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)       fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347)     delay=`grep "avg" ping.out | grep -o "= [0-9.]*/[0-9.]*" | grep -o "[0-9.]*$"`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348)     echo "PING AVG DELAY:$delay"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349)     echo "AGGREGATE_GOODPUT:$rate"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350)   else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351)     echo $rate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354)   flow_cnt=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355)   while [ $flow_cnt -le $flows ] ; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356)     (iperf3 -s -p $port -1 > /dev/null 2>&1) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)     ( iperf3 -c $host -p $port -i 0 -P 1 -f m -t $dur | grep receiver | grep -o "[0-9.]* Mbits" | grep -o "^[0-9]*" | grep -o "[0-9]*$" > iperf3.$id.$flow_cnt ) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358)     port=$[port+1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)     flow_cnt=$[flow_cnt+1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360)   done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361)   n=$[dur+1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362)   sleep $n
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363)   flow_cnt=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364)   rate=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365)   if [ $details -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366)     echo ""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367)     echo "Details for HBM in cgroup $id"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368)     if [ $do_stats -eq 1 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369)       if [ -e hbm.$id.$dir_name ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370)         cat hbm.$id.$dir_name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)       fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)   while [ $flow_cnt -le $flows ] ; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376)     r=`cat iperf3.$id.$flow_cnt`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) #    echo "rate for flow $flow_cnt: $r"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378)   if [ $details -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379)     echo "Rate for cgroup $id, flow $flow_cnt LOCAL_SEND_THROUGHPUT=$r"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381)     rate=$[rate+r]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382)     flow_cnt=$[flow_cnt+1]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383)   done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)   if [ $details -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385)     delay=`grep "avg" ping.out | grep -o "= [0-9.]*/[0-9.]*" | grep -o "[0-9.]*$"`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386)     echo "PING AVG DELAY:$delay"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)     echo "AGGREGATE_GOODPUT:$rate"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388)   else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389)     echo $rate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) if [ $use_netperf -eq 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)   sysctl -w -q -n net.ipv4.tcp_congestion_control=$cur_cc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) if [ $ecn -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397)   sysctl -w -q -n net.ipv4.tcp_ecn=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) if [ "$netem" -ne "0" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400)   tc qdisc del dev lo root > /dev/null 2>&1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) if [ "$qdisc" != "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)   tc qdisc del dev eth0 root > /dev/null 2>&1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) sleep 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) hbmPid=`ps ax | grep "hbm " | grep --invert-match "grep" | awk '{ print $1 }'`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) if [ "$hbmPid" == "$hbm_pid" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)   kill $hbm_pid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) sleep 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) # Detach any BPF programs that may have lingered
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) ttx=`bpftool cgroup tree | grep hbm`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) v=2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) for x in $ttx ; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418)     if [ "${x:0:36}" == "/sys/fs/cgroup/cgroup-test-work-dir/" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	cg=$x ; v=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)     else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 	if [ $v -eq 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 	    id=$x ; v=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 	    if [ $v -eq 1 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 		type=$x ; bpftool cgroup detach $cg $type id $id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 		v=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	    fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) if [ $use_netperf -ne 0 ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433)   if [ "$server" == "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434)     if [ "$begNetserverPid" == "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435)       netserverPid=`ps ax | grep netserver | grep --invert-match "grep" | awk '{ print $1 }'`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)       if [ "$netserverPid" != "" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437)         kill $netserverPid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438)       fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439)     fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440)   fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) exit