git.iko.soy/typeable/servant
on typo help sign in
typeable/servant/streaming-benchmark.sh
268 lines 6.5 kB history raw
1#!/bin/sh
3set -e
5SIZE=10000000
6SLOWURL="http://localhost:8000/slow/2"
7FASTURL="http://localhost:8000/get/$SIZE"
8PROXYURL="http://localhost:8000/proxy"
10# we use binary, as there's some size
11TESTFILE="$(cabal-plan list-bin servant-machines:test:example)"
12TMPFILE="$(mktemp)"
14CURLSTATS="time: %{time_total}, size: %{size_download}, download speed: %{speed_download}\n"
16# cleanup
18cleanup() {
19 if [ ! -z "$MACHINES_PID" ]; then
20 kill "$MACHINES_PID" || true
21 fi
23 if [ ! -z "$CONDUIT_PID" ]; then
24 kill "$CONDUIT_PID" || true
25 fi
27 if [ ! -z "$PIPES_PID" ]; then
28 kill "$PIPES_PID" || true
29 fi
31 if [ ! -z "$COOKBOOK_PID" ]; then
32 kill "$COOKBOOK_PID" || true
33 fi
35 rm -f "$TMPFILE"
38trap cleanup EXIT
40bench() {
41 echo "\e[36m=== $1 ===\e[0m"
44# Server
45#######################################################################
47## Machines
49bench "server machines"
51$(cabal-plan list-bin servant-machines:test:example) server +RTS -sbench-machines-server-rts.txt &
52MACHINES_PID=$!
53echo "Starting servant-machines server. PID=$MACHINES_PID"
55# Time to startup
56sleep 1
58# Run slow url to test & warm-up server
59curl "$SLOWURL"
61curl --silent --show-error "$FASTURL" --output /dev/null --write-out "$CURLSTATS" > bench-machines-server.txt
63curl --silent --show-error "$PROXYURL" --request POST --data-binary @"$TESTFILE" --output "$TMPFILE" --write-out "$CURLSTATS" > bench-machines-server-proxy.txt
65kill -INT $MACHINES_PID
66unset MACHINES_PID
68## Pipes
70bench "server pipes"
72$(cabal-plan list-bin servant-pipes:test:example) server +RTS -sbench-pipes-server-rts.txt &
73PIPES_PID=$!
74echo "Starting servant-pipes server. PID=$PIPES_PID"
76# Time to startup
77sleep 1
79# Run slow url to test & warm-up server
80curl "$SLOWURL"
82curl --silent --show-error "$FASTURL" --output /dev/null --write-out "$CURLSTATS" > bench-pipes-server.txt
84curl --silent --show-error "$PROXYURL" --request POST --data-binary @"$TESTFILE" --output "$TMPFILE" --write-out "$CURLSTATS" > bench-pipes-server-proxy.txt
86kill -INT $PIPES_PID
87unset PIPES_PID
89## Cookbook
91bench "server cookbook"
93$(cabal-plan list-bin cookbook-basic-streaming) server +RTS -sbench-cookbook-server-rts.txt &
94COOKBOOK_PID=$!
95echo "Starting servant-cookbook server. PID=$COOKBOOK_PID"
97# Time to startup
98sleep 1
100# Run slow url to test & warm-up server
101curl "$SLOWURL"
103curl --silent --show-error "$FASTURL" --output /dev/null --write-out "$CURLSTATS" > bench-cookbook-server.txt
105curl --silent --show-error "$PROXYURL" --request POST --data-binary @"$TESTFILE" --output "$TMPFILE" --write-out "$CURLSTATS" > bench-cookbook-server-proxy.txt
107kill -INT $COOKBOOK_PID
108unset COOKBOOK_PID
110## Conduit
112bench "server conduit"
114$(cabal-plan list-bin servant-conduit:test:example) server +RTS -sbench-conduit-server-rts.txt &
115CONDUIT_PID=$!
116echo "Starting servant-conduit server. PID=$CONDUIT_PID"
118# Time to startup
119sleep 1
121# Run slow url to test & warm-up server
122curl "$SLOWURL"
124curl --silent --show-error "$FASTURL" --output /dev/null --write-out "$CURLSTATS" > bench-conduit-server.txt
126curl --silent --show-error "$PROXYURL" --request POST --data-binary @"$TESTFILE" --output "$TMPFILE" --write-out "$CURLSTATS" > bench-conduit-server-proxy.txt
128# kill -INT $CONDUIT_PID
129# unset CONDUIT_PID
131# Client
132#######################################################################
134# Uses conduit as server
136## Machines
138bench "client machines"
140# Test run
141$(cabal-plan list-bin servant-machines:test:example) client 10
143# Real run
144/usr/bin/time --verbose --output bench-machines-client-time.txt \
145 "$(cabal-plan list-bin servant-machines:test:example)" client "$SIZE" +RTS -sbench-machines-client-rts.txt
147## Pipes
149bench "server pipes"
151# Test run
152$(cabal-plan list-bin servant-pipes:test:example) client 10
154# Real run
155/usr/bin/time --verbose --output bench-pipes-client-time.txt \
156 "$(cabal-plan list-bin servant-pipes:test:example)" client "$SIZE" +RTS -sbench-pipes-client-rts.txt
158## Conduit
160bench "client conduit"
162# Test run
163$(cabal-plan list-bin servant-conduit:test:example) client 10
165# Real run
166/usr/bin/time --verbose --output bench-conduit-client-time.txt \
167 "$(cabal-plan list-bin servant-conduit:test:example)" client "$SIZE" +RTS -sbench-conduit-client-rts.txt
169## Cookbook
171bench "server cookbook"
173# Test run
174$(cabal-plan list-bin cookbook-basic-streaming) client 10
176# Real run
177/usr/bin/time --verbose --output bench-cookbook-client-time.txt \
178 "$(cabal-plan list-bin cookbook-basic-streaming)" client "$SIZE" +RTS -sbench-cookbook-client-rts.txt
180## Kill server
182kill -INT $CONDUIT_PID
183unset CONDUIT_PID
184sleep 1
186# Exit
187#######################################################################
189header() {
190 { echo "$1 $2";
191 echo ""
192 } >> bench.md
195report() {
196 echo "\`\`\`" >> bench.md
197 cat "$1" >> bench.md
198 echo "\`\`\`" >> bench.md
199 echo "" >> bench.md
202report2() {
203 echo "\`\`\`" >> bench.md
204 cat "$1" | sed 's/^\s*//' >> bench.md
205 echo "\`\`\`" >> bench.md
206 echo "" >> bench.md
209note() {
210 echo "$1" >> bench.md
211 echo "" >> bench.md
214rm -f bench.md
216header "#" "Streaming test benchmark"
217note "size parameter: $SIZE"
219header "##" Server
221note "- /fast/$SIZE\n- /proxy"
223header "###" machines
224report bench-machines-server.txt
225report bench-machines-server-proxy.txt
226report bench-machines-server-rts.txt
228header "###" pipes
229report bench-pipes-server.txt
230report bench-pipes-server-proxy.txt
231report bench-pipes-server-rts.txt
233header "###" conduit
234note "Conduit server is also used for client tests below"
235report bench-conduit-server.txt
236report bench-conduit-server-proxy.txt
237report bench-conduit-server-rts.txt
239header "###" cookbook
240report bench-cookbook-server.txt
241report bench-cookbook-server-proxy.txt
242report bench-cookbook-server-rts.txt
244header "##" Client
246header "###" machines
247report2 bench-machines-client-time.txt
248report bench-machines-client-rts.txt
250header "###" pipes
251report2 bench-pipes-client-time.txt
252report bench-pipes-client-rts.txt
254header "###" conduit
255report2 bench-conduit-client-time.txt
256report bench-conduit-client-rts.txt
258header "###" cookbook
259report2 bench-cookbook-client-time.txt
260report bench-cookbook-client-rts.txt
262# Cleanup filepaths
263sed -E -i 's/\/[^ ]*machines[^ ]*\/example/...machines:example/' bench.md
264sed -E -i 's/\/[^ ]*conduit[^ ]*\/example/...conduit:example/' bench.md
265sed -E -i 's/\/[^ ]*pipes[^ ]*\/example/...pipes:example/' bench.md
266sed -E -i 's/\/[^ ]*\/cookbook-basic-streaming/...cookbook-basic-streaming/' bench.md
268sleep 3