Last active
March 14, 2022 20:35
-
-
Save tfausak/8019733fb5c703994d1665143c60ad0f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env sh | |
set -o errexit | |
# https://github.com/haskell-servant/servant/issues/986 | |
############################################################################### | |
# Print out various system information. | |
date | |
lsb_release --all | |
uname --all | |
stack --version | |
############################################################################### | |
# Generate an empty Stack project to install dependencies. | |
cat <<'END' > stack.yaml | |
resolver: lts-18.28 | |
extra-deps: | |
- servant-0.19 | |
- servant-server-0.19 | |
END | |
cat <<'END' > example.cabal | |
build-type: Simple | |
cabal-version: >= 1.2 | |
name: example | |
version: 0 | |
library | |
build-depends: base, servant, servant-server, wai, warp | |
build-tool-depends: bench:bench | |
exposed-modules: Example | |
END | |
cat <<'END' > Example.hs | |
module Example where | |
END | |
############################################################################### | |
# Install dependencies. | |
stack build | |
############################################################################### | |
# Generate source files. | |
mkdir --parents old new | |
for count in 1 2 4 8 16 32 64 | |
do | |
old=old/$count.hs | |
cat <<'END' > $old | |
{-# LANGUAGE DataKinds #-} | |
{-# LANGUAGE TypeOperators #-} | |
module M ( main ) where | |
import qualified Network.Wai as Wai | |
import qualified Network.Wai.Handler.Warp as Warp | |
import qualified Servant | |
main :: IO () | |
main = Warp.run 3000 application | |
application :: Wai.Application | |
application = Servant.serve proxy server | |
proxy :: Servant.Proxy Api | |
proxy = Servant.Proxy | |
server :: Servant.Server Api | |
server | |
END | |
{ | |
for n in $( seq 1 "$count" ) | |
do | |
op=$( test "$n" = 1 && echo '=' || echo 'Servant.:<|>' ) | |
echo " $op pure $n" | |
done | |
echo | |
echo 'type Api' | |
for n in $( seq 1 "$count" ) | |
do | |
op=$( test "$n" = 1 && echo '=' || echo 'Servant.:<|>' ) | |
echo " $op \"$n\" Servant.:> Servant.Get '[Servant.JSON] Int" | |
done | |
} >> "$old" | |
new="new/$count.hs" | |
cat <<'END' > "$new" | |
{-# LANGUAGE DataKinds #-} | |
{-# LANGUAGE DeriveGeneric #-} | |
{-# LANGUAGE TypeOperators #-} | |
module M ( main ) where | |
import qualified Network.Wai as Wai | |
import qualified Network.Wai.Handler.Warp as Warp | |
import qualified Servant | |
import qualified Servant.API.Generic as Servant | |
import qualified Servant.Server.Generic as Servant | |
import qualified GHC.Generics as Generics | |
main :: IO () | |
main = Warp.run 3000 application | |
application :: Wai.Application | |
application = Servant.genericServe routes | |
routes :: Routes Servant.AsServer | |
routes = Routes | |
END | |
{ | |
for n in $( seq 1 "$count" ) | |
do | |
op=$( test "$n" = 1 && echo '{' || echo ',' ) | |
echo " $op _$n = pure $n" | |
done | |
echo ' }' | |
echo | |
echo 'data Routes routes = Routes' | |
for n in $( seq 1 "$count" ) | |
do | |
op=$( test "$n" = 1 && echo '{' || echo ',' ) | |
echo " $op _$n :: routes Servant.:- \"$n\" Servant.:> Servant.Get '[Servant.JSON] Int" | |
done | |
echo ' } deriving (Generics.Generic)' | |
} >> "$new" | |
done | |
############################################################################### | |
# Run benchmark. | |
ghc='ghc -fforce-recomp -O1' | |
exec stack exec -- bench \ | |
"$ghc old/1.hs" "$ghc new/1.hs" \ | |
"$ghc old/2.hs" "$ghc new/2.hs" \ | |
"$ghc old/4.hs" "$ghc new/4.hs" \ | |
"$ghc old/8.hs" "$ghc new/8.hs" \ | |
"$ghc old/16.hs" "$ghc new/16.hs" \ | |
"$ghc old/32.hs" "$ghc new/32.hs" \ | |
"$ghc old/64.hs" "$ghc new/64.hs" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Mon 14 Mar 2022 04:34:32 PM EDT | |
No LSB modules are available. | |
Distributor ID: Ubuntu | |
Description: Ubuntu 20.04.4 LTS | |
Release: 20.04 | |
Codename: focal | |
Linux carton 5.4.0-100-generic #113-Ubuntu SMP Thu Feb 3 18:43:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux | |
Version 2.7.3, Git revision 7927a3aec32e2b2e5e4fb5be76d0d50eddcc197f x86_64 hpack-0.34.4 | |
benchmarking bench/ghc -fforce-recomp -O1 old/1.hs | |
time 530.1 ms (NaN s .. 663.8 ms) | |
0.993 R² (0.985 R² .. 1.000 R²) | |
mean 555.7 ms (535.0 ms .. 587.6 ms) | |
std dev 30.07 ms (1.413 ms .. 37.60 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 new/1.hs | |
time 848.3 ms (774.5 ms .. 899.3 ms) | |
0.999 R² (0.997 R² .. 1.000 R²) | |
mean 859.7 ms (847.8 ms .. 873.5 ms) | |
std dev 14.39 ms (6.441 ms .. 20.10 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 old/2.hs | |
time 605.6 ms (592.9 ms .. 616.4 ms) | |
1.000 R² (1.000 R² .. 1.000 R²) | |
mean 605.4 ms (603.6 ms .. 607.2 ms) | |
std dev 2.236 ms (1.050 ms .. 2.914 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 new/2.hs | |
time 936.3 ms (918.0 ms .. 961.8 ms) | |
1.000 R² (1.000 R² .. 1.000 R²) | |
mean 942.0 ms (936.1 ms .. 947.6 ms) | |
std dev 6.313 ms (3.709 ms .. 8.893 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 old/4.hs | |
time 770.6 ms (739.6 ms .. 798.4 ms) | |
1.000 R² (0.999 R² .. 1.000 R²) | |
mean 784.9 ms (774.9 ms .. 792.1 ms) | |
std dev 10.34 ms (5.306 ms .. 13.27 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 new/4.hs | |
time 1.194 s (1.153 s .. 1.221 s) | |
1.000 R² (1.000 R² .. 1.000 R²) | |
mean 1.180 s (1.170 s .. 1.185 s) | |
std dev 9.456 ms (2.890 ms .. 12.46 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 old/8.hs | |
time 903.1 ms (854.1 ms .. 942.4 ms) | |
1.000 R² (0.999 R² .. 1.000 R²) | |
mean 915.0 ms (905.4 ms .. 922.0 ms) | |
std dev 10.04 ms (3.000 ms .. 12.57 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 new/8.hs | |
time 1.988 s (1.948 s .. 2.056 s) | |
1.000 R² (1.000 R² .. 1.000 R²) | |
mean 1.965 s (1.957 s .. 1.978 s) | |
std dev 12.49 ms (1.971 ms .. 16.18 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 old/16.hs | |
time 1.243 s (1.209 s .. 1.304 s) | |
1.000 R² (0.999 R² .. NaN R²) | |
mean 1.197 s (1.173 s .. 1.213 s) | |
std dev 24.78 ms (12.94 ms .. 34.90 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 new/16.hs | |
time 3.397 s (3.388 s .. 3.409 s) | |
1.000 R² (1.000 R² .. 1.000 R²) | |
mean 3.424 s (3.412 s .. 3.437 s) | |
std dev 15.03 ms (5.194 ms .. 19.96 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 old/32.hs | |
time 1.921 s (1.891 s .. 1.982 s) | |
1.000 R² (1.000 R² .. 1.000 R²) | |
mean 1.895 s (1.887 s .. 1.908 s) | |
std dev 13.03 ms (156.9 μs .. 17.33 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 new/32.hs | |
time 7.270 s (7.181 s .. 7.425 s) | |
1.000 R² (1.000 R² .. 1.000 R²) | |
mean 7.267 s (7.241 s .. 7.282 s) | |
std dev 24.34 ms (10.34 ms .. 31.21 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 old/64.hs | |
time 4.480 s (4.371 s .. 4.604 s) | |
1.000 R² (1.000 R² .. 1.000 R²) | |
mean 4.440 s (4.418 s .. 4.463 s) | |
std dev 28.07 ms (13.94 ms .. 36.28 ms) | |
variance introduced by outliers: 19% (moderately inflated) | |
benchmarking bench/ghc -fforce-recomp -O1 new/64.hs | |
time 16.24 s (16.19 s .. 16.27 s) | |
1.000 R² (1.000 R² .. 1.000 R²) | |
mean 16.23 s (16.21 s .. 16.24 s) | |
std dev 14.71 ms (6.151 ms .. 18.82 ms) | |
variance introduced by outliers: 19% (moderately inflated) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment