1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
#!/bin/bash
set -eu -o pipefail
cd $(dirname $0)
REDIS_VERSION=7.2.3
REDIS_IMAGE="redis:${REDIS_VERSION}"
source ~/.profile
. ../param.bash
sudo nerdctl pull --quiet $REDIS_IMAGE
nerdctl pull --quiet $REDIS_IMAGE
echo "===== Benchmark: redis rootful via NetNS ====="
(
set +e
sudo nerdctl rm -f redis-server
sudo nerdctl rm -f redis-client
set -ex
sudo nerdctl run -d --name redis-server "${REDIS_IMAGE}"
sudo nerdctl run -d --name redis-client "${REDIS_IMAGE}" sleep infinity
SERVER_IP=$(sudo nerdctl exec redis-server hostname -i)
sudo nerdctl exec redis-client redis-benchmark -q -h $SERVER_IP --csv > redis-rootful-direct.log
cat redis-rootful-direct.log
sudo nerdctl rm -f redis-server
sudo nerdctl rm -f redis-client
)
echo "===== Benchmark: redis rootful via host ====="
(
set +e
sudo nerdctl rm -f redis-server
sudo nerdctl rm -f redis-client
set -ex
sudo nerdctl run -d -p 6380:6379 --name redis-server "${REDIS_IMAGE}"
sudo nerdctl run -d --name redis-client "${REDIS_IMAGE}" sleep infinity
sudo nerdctl exec redis-client redis-benchmark -q -h $HOST_IP -p 6380 --csv > redis-rootful-host.log
cat redis-rootful-host.log
sudo nerdctl rm -f redis-server
sudo nerdctl rm -f redis-client
)
echo "===== Benchmark: redis client(w/o bypass4netns) server(w/o bypass4netns) via intermediate NetNS ====="
(
set +e
nerdctl rm -f redis-server
nerdctl rm -f redis-client
set -ex
nerdctl run -d --name redis-server "${REDIS_IMAGE}"
nerdctl run -d --name redis-client "${REDIS_IMAGE}" sleep infinity
SERVER_IP=$(nerdctl exec redis-server hostname -i)
nerdctl exec redis-client redis-benchmark -q -h $SERVER_IP --csv > redis-wo-b4ns-direct.log
cat redis-wo-b4ns-direct.log
nerdctl rm -f redis-server
nerdctl rm -f redis-client
)
echo "===== Benchmark: redis client(w/o bypass4netns) server(w/o bypass4netns) via host ====="
(
set +e
nerdctl rm -f redis-server
nerdctl rm -f redis-client
set -ex
nerdctl run -d -p 6380:6379 --name redis-server "${REDIS_IMAGE}"
nerdctl run -d --name redis-client "${REDIS_IMAGE}" sleep infinity
nerdctl exec redis-client redis-benchmark -q -h $HOST_IP -p 6380 --csv > redis-wo-b4ns-host.log
cat redis-wo-b4ns-host.log
nerdctl rm -f redis-server
nerdctl rm -f redis-client
)
echo "===== Benchmark: redis client(w/ bypass4netns) server(w/ bypass4netns) via host ====="
(
set +e
systemctl --user stop run-bypass4netnsd
nerdctl rm -f redis-server
nerdctl rm -f redis-client
systemctl --user reset-failed
set -ex
systemd-run --user --unit run-bypass4netnsd bypass4netnsd
nerdctl run --annotation nerdctl/bypass4netns=true -d -p 6380:6379 --name redis-server $REDIS_IMAGE
nerdctl run --annotation nerdctl/bypass4netns=true -d --name redis-client $REDIS_IMAGE sleep infinity
nerdctl exec redis-client redis-benchmark -q -h $HOST_IP -p 6380 --csv > redis-w-b4ns.log
cat redis-w-b4ns.log
nerdctl rm -f redis-server
nerdctl rm -f redis-client
systemctl --user stop run-bypass4netnsd
)
echo "===== Benchmark: redis client(w/ bypass4netns) server(w/ bypass4netns) with multinode ====="
(
set +e
nerdctl rm -f redis-server
nerdctl rm -f redis-client
systemctl --user stop run-bypass4netnsd
systemctl --user stop etcd.service
systemctl --user reset-failed
set -ex
systemd-run --user --unit etcd.service /usr/bin/etcd --listen-client-urls http://$HOST_IP:2379 --advertise-client-urls http://$HOST_IP:2379
systemd-run --user --unit run-bypass4netnsd bypass4netnsd --multinode=true --multinode-etcd-address=http://$HOST_IP:2379 --multinode-host-address=$HOST_IP
nerdctl run --annotation nerdctl/bypass4netns=true -d -p 6380:6379 --name redis-server $REDIS_IMAGE
nerdctl run --annotation nerdctl/bypass4netns=true -d --name redis-client $REDIS_IMAGE sleep infinity
SERVER_IP=$(nerdctl exec redis-server hostname -i)
# without 'sleep 1', benchmark is not performed.(race condition?)
nerdctl exec redis-client /bin/sh -c "sleep 1 && redis-benchmark -q -h $SERVER_IP -p 6379 --csv"
nerdctl rm -f redis-server
nerdctl rm -f redis-client
systemctl --user stop run-bypass4netnsd
systemctl --user stop etcd.service
systemctl --user reset-failed
)
|