penguin/tinyproxy

An L4 proxy designed to act as a tiny transparent shim

devtools/ab_test.sh

raw ยท 1758 bytes

#!/usr/bin/env bash
set -euo pipefail

# Run from repo root:
#   sudo ./test_tinyproxy.sh
#
# Routes:
#   :12700 -> builtin http_ok
#   :12800 -> TCP proxy to 127.0.0.1:12700

NOFILE="${NOFILE:-1048576}"
WORKERS="${WORKERS:-0}"
TINYPROXY="${TINYPROXY:-/usr/local/bin/tinyproxy}"

LISTEN_BACKLOG="${LISTEN_BACKLOG:-65535}"
SYN_BACKLOG="${SYN_BACKLOG:-65535}"
EPHEMERAL_RANGE="${EPHEMERAL_RANGE:-10000 65535}"

if [ "$(id -u)" -ne 0 ]; then
	echo "error: run as root: sudo $0" >&2
	exit 1
fi

if [ ! -x "$TINYPROXY" ]; then
	echo "error: tinyproxy binary not found/executable: $TINYPROXY" >&2
	exit 1
fi

echo "== tinyproxy stress-test launcher =="
echo "tinyproxy:        $TINYPROXY"
echo "workers:          $WORKERS"
echo "nofile:           $NOFILE"
echo "somaxconn:        $LISTEN_BACKLOG"
echo "tcp_max_syn_backlog: $SYN_BACKLOG"
echo "ephemeral ports:  $EPHEMERAL_RANGE"
echo

echo "== raising process fd limit =="
ulimit -n "$NOFILE"
echo "soft nofile: $(ulimit -Sn)"
echo "hard nofile: $(ulimit -Hn)"
echo

echo "== applying temporary sysctl tuning =="
sysctl -w "net.core.somaxconn=$LISTEN_BACKLOG"
sysctl -w "net.ipv4.tcp_max_syn_backlog=$SYN_BACKLOG"
sysctl -w "net.ipv4.ip_local_port_range=$EPHEMERAL_RANGE"
echo

echo "== current relevant sysctls =="
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_max_syn_backlog
sysctl net.ipv4.ip_local_port_range
echo

echo "== starting tinyproxy =="
echo "test direct builtin:"
echo "  ab -c 10000 -n 100000 http://127.0.0.1:12700/"
echo
echo "test chained tcp->tcp->builtin:"
echo "  ab -c 10000 -n 100000 http://127.0.0.1:12800/"
echo
echo "watch sockets:"
echo "  ./watch_tinyproxy_sockets.sh"
echo

exec "$TINYPROXY" \
	-w"$WORKERS" \
	-L "tcp :12700 builtin http_ok" \
	-L "tcp :12800 tcp 127.0.0.1:12700"