# SPDX-License-Identifier: AGPL-3.0-or-later # # PASST - Plug A Simple Socket Transport # for qemu/UNIX domain socket mode # # PASTA - Pack A Subtle Tap Abstraction # for network namespace/tap device mode # # test/perf/pasta_udp - Check UDP performance in pasta mode # # Copyright (c) 2021 Red Hat GmbH # Author: Stefano Brivio htools bc head ip sleep iperf3 udp_rr jq sed nstools ip sleep iperf3 udp_rr jq sed test pasta: throughput and latency (local traffic) hout FREQ_PROCFS (echo "scale=1"; sed -n 's/cpu MHz.*: \([0-9]*\)\..*$/(\1+10^2\/2)\/10^3/p' /proc/cpuinfo) | bc -l | head -n1 hout FREQ_CPUFREQ (echo "scale=1"; printf '( %i + 10^5 / 2 ) / 10^6\n' $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq) ) | bc -l hout FREQ [ -n "__FREQ_CPUFREQ__" ] && echo __FREQ_CPUFREQ__ || echo __FREQ_PROCFS__ set THREADS 1 set STREAMS 4 set TIME 10 set OPTS -u -P __STREAMS__ info Throughput in Gbps, latency in µs, one thread at __FREQ__ GHz, __STREAMS__ streams report pasta lo_udp 1 __FREQ__ th MTU 1500B 4000B 16384B 65535B tr UDP throughput over IPv6: host to ns nsout IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname' nsout ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope == "global" and .prefixlen == 64).local' bw - bw - bw - iperf3 BW host ns __ADDR6__ 100${i}2 __THREADS__ __TIME__ __OPTS__ -b 15G bw __BW__ 7.0 9.0 tr UDP throughput over IPv6: ns to host ns ip link set dev lo mtu 1500 iperf3 BW ns host ::1 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 3G bw __BW__ 1.0 1.5 ns ip link set dev lo mtu 4000 iperf3 BW ns host ::1 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 3G bw __BW__ 1.2 1.8 ns ip link set dev lo mtu 16384 iperf3 BW ns host ::1 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 10G bw __BW__ 5.0 6.0 ns ip link set dev lo mtu 65535 iperf3 BW ns host ::1 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 15G bw __BW__ 7.0 9.0 tl UDP RR latency over IPv6: ns to host lat - lat - lat - hostb udp_rr --nolog -P 10003 -C 10013 -6 nsout LAT udp_rr --nolog -P 10003 -C 10013 -6 -c -H ::1 | sed -n 's/^throughput=\(.*\)/\1/p' hostw lat __LAT__ 200 150 tr UDP throughput over IPv4: ns to host ns ip link set dev lo mtu 1500 iperf3 BW ns host 127.0.0.1 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 3G bw __BW__ 1.0 1.5 ns ip link set dev lo mtu 4000 iperf3 BW ns host 127.0.0.1 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 3G bw __BW__ 1.2 1.8 ns ip link set dev lo mtu 16384 iperf3 BW ns host 127.0.0.1 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 10G bw __BW__ 5.0 6.0 ns ip link set dev lo mtu 65535 iperf3 BW ns host 127.0.0.1 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 15G bw __BW__ 7.0 9.0 tl UDP RR latency over IPv4: ns to host lat - lat - lat - hostb udp_rr --nolog -P 10003 -C 10013 -4 nsout LAT udp_rr --nolog -P 10003 -C 10013 -4 -c -H 127.0.0.1 | sed -n 's/^throughput=\(.*\)/\1/p' hostw lat __LAT__ 200 150 tr UDP throughput over IPv6: host to ns bw - bw - bw - #iperf3c host ::1 100${i}2 __THREADS__ __TIME__ __OPTS__ -b 15G #iperf3s BW ns 100${i}2 __THREADS__ iperf3 BW host ns ::1 100${i}2 __THREADS__ __TIME__ __OPTS__ -b 15G bw __BW__ 7.0 9.0 tl UDP RR latency over IPv6: host to ns lat - lat - lat - nsb udp_rr --nolog -P 10002 -C 10012 -6 hout LAT udp_rr --nolog -P 10002 -C 10012 -6 -c -H ::1 | sed -n 's/^throughput=\(.*\)/\1/p' nsw lat __LAT__ 200 150 tr UDP throughput over IPv4: host to ns bw - bw - bw - #iperf3c host 127.0.0.1 100${i}2 __THREADS__ __TIME__ __OPTS__ -b 15G #iperf3s BW ns 100${i}2 __THREADS__ iperf3 BW host ns 127.0.0.1 100${i}2 __THREADS__ __TIME__ __OPTS__ -b 15G bw __BW__ 7.0 9.0 tl UDP RR latency over IPv4: host to ns lat - lat - lat - nsb udp_rr --nolog -P 10002 -C 10012 -4 hout LAT udp_rr --nolog -P 10002 -C 10012 -4 -c -H 127.0.0.1 | sed -n 's/^throughput=\(.*\)/\1/p' nsw lat __LAT__ 200 150 te test pasta: throughput and latency (traffic via tap) nsout GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway' nsout GW6 ip -j -6 route show|jq -rM '.[] | select(.dst == "default").gateway' nsout IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname' info Throughput in Gbps, latency in µs, one thread at __FREQ__ GHz, __STREAMS__ streams report pasta tap_udp 1 __FREQ__ th MTU 1500B 4000B 16384B 65520B tr UDP throughput over IPv6: ns to host ns ip link set dev __IFNAME__ mtu 1500 iperf3 BW ns host __GW6__%__IFNAME__ 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 2G bw __BW__ 0.3 0.5 ns ip link set dev __IFNAME__ mtu 4000 iperf3 BW ns host __GW6__%__IFNAME__ 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 3G bw __BW__ 0.5 0.8 ns ip link set dev __IFNAME__ mtu 16384 iperf3 BW ns host __GW6__%__IFNAME__ 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 4G bw __BW__ 3.0 4.0 ns ip link set dev __IFNAME__ mtu 65520 iperf3 BW ns host __GW6__%__IFNAME__ 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 6G bw __BW__ 6.0 7.0 tl UDP RR latency over IPv6: ns to host lat - lat - lat - hostb udp_rr --nolog -P 10003 -C 10013 -6 nsout LAT udp_rr --nolog -P 10003 -C 10013 -6 -c -H __GW6__%__IFNAME__ | sed -n 's/^throughput=\(.*\)/\1/p' hostw lat __LAT__ 200 150 tr UDP throughput over IPv4: ns to host ns ip link set dev __IFNAME__ mtu 1500 iperf3 BW ns host __GW__ 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 2G bw __BW__ 0.3 0.5 ns ip link set dev __IFNAME__ mtu 4000 iperf3 BW ns host __GW__ 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 3G bw __BW__ 0.5 0.8 ns ip link set dev __IFNAME__ mtu 16384 iperf3 BW ns host __GW__ 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 4G bw __BW__ 3.0 4.0 ns ip link set dev __IFNAME__ mtu 65520 iperf3 BW ns host __GW__ 100${i}3 __THREADS__ __TIME__ __OPTS__ -b 6G bw __BW__ 6.0 7.0 tl UDP RR latency over IPv4: ns to host lat - lat - lat - hostb udp_rr --nolog -P 10003 -C 10013 -4 nsout LAT udp_rr --nolog -P 10003 -C 10013 -4 -c -H __GW__ | sed -n 's/^throughput=\(.*\)/\1/p' hostw lat __LAT__ 200 150 te