difftreelog
ci switch all benchmarks to realworld tests dir
in: master
3 files changed
nix/benchmarks.nixdiffbeforeafterboth1{2 lib,3 runCommand,4 stdenv,5 fetchFromGitHub,6 fetchJrq,7 go-jsonnet,8 sjsonnet,9 cpp-jsonnet,10 rsjsonnet,11 hyperfine,12 quick ? false,13 jrsonnetVariants,14}:15with lib;16let17 inherit (cpp-jsonnet) jsonnetBench;18 inherit (go-jsonnet) goJsonnetBench;19 graalvmBench = fetchFromGitHub {20 owner = "oracle";21 repo = "graal";22 rev = "bc305df3fe587960f7635f0185571500e5988475";23 hash = "sha256-4EKB1b2o4/qtYQ+nqbbs621OJrtjApsAWEBcw5EjrYc=";24 };25 realworldVendor = fetchJrq {26 name = "realworld-vendor";27 lockfile = ../tests/realworld/jsonnetfile.lock.json;28 vendorHash = "sha256-6tXi6bRw77YKB17PhSpJnVYQcsGOvB8sgjKIrFtrwfc=";29 };30 realworldBench = runCommand "realworld-bench" { } ''31 mkdir -p $out32 cp ${}/*.jsonnet ${}/*.libsonnet $out/33 cp -r ${realworldVendor} $out/vendor34 '';3536 # Removes outsiders from the output37 # Useful when comparing performance of different jrsonnet releases38 skipSlow = if quick then "slow benchmark, but only quick requested" else "";39in40stdenv.mkDerivation {41 name = "benchmarks";42 # __impure = true; # not supported by hercules-ci43 unpackPhase = "true";4445 buildInputs = [46 sjsonnet47 cpp-jsonnet48 rsjsonnet49 go-jsonnet5051 hyperfine52 ];5354 installPhase =55 let56 mkBench =57 {58 name,59 path,60 omitSource ? false,61 pathIsGenerator ? false,62 skipRustAlternative ? "",63 skipScala ? "",64 skipCpp ? "",65 skipGo ? "",66 jpaths ? [ ],67 }:68 let69 jpathArgs = concatMapStrings (p: " -J ${p}") jpaths;70 in71 ''72 echo >> $out73 echo "=== ${name}" >> $out74 echo >> $out75 ${optionalString(skipRustAlternative!="")''76 echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out77 echo >> $out78 ''}79 ${optionalString(skipGo!="")''80 echo "> Note: No results for Go, ${skipGo}" >> $out81 echo >> $out82 ''}83 ${optionalString(skipScala!="")''84 echo "> Note: No results for Scala (native)/Scala (GraalVM), ${skipScala}" >> $out85 echo >> $out86 ''}87 ${optionalString(skipCpp!="")''88 echo "> Note: No results for C++, ${skipCpp}" >> $out89 echo >> $out90 ''}91 ${optionalString(!omitSource)''92 echo ".Source" >> $out93 echo "[%collapsible]" >> $out94 echo "====" >> $out95 echo "[source,jsonnet]" >> $out96 echo "----" >> $out97 ${optionalStringpathIsGenerator"echo \"// Generator source\" >> $out"}98 cat ${path} >> $out99 echo >> $out100 echo "----" >> $out101 echo "====" >> $out102 echo >> $out103 ''}104 path=${path}105 ${optionalStringpathIsGenerator''106 go-jsonnet $path > generated.jsonnet107 path=generated.jsonnet108 ''}109 hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \110 ${111 concatStringsSep" "(112forEachjrsonnetVariants(113variant114"\"${variant.drv}/bin/jrsonnet $path${jpathArgs}\" -n \"Rust${115 ifvariant.name!=""then" (${variant.name})"else""116 }\""117)118)119 } \120 ${121 optionalString(122skipRustAlternative==""123)"\"rsjsonnet $path${jpathArgs}\" -n \"Rust (alternative, rsjsonnet)\""124 } \125 ${optionalString(skipGo=="")"\"go-jsonnet $path${jpathArgs}\" -n \"Go\""} \126 ${127 optionalString(skipScala=="")"\"sjsonnet-native $path${jpathArgs}\" -n \"Scala (native)\""128 } \129 ${130 131 132 optionalString(133skipScala==""&&stdenv.hostPlatform.system!="aarch64-linux"134)"\"sjsonnet-graalvm $path${jpathArgs}\" -n \"Scala (GraalVM)\""135 } \136 ${optionalString(skipCpp=="")"\"jsonnet $path${jpathArgs}\" -n \"C++\""}137 cat result.adoc >> $out138 '';139 in140 ''141 set -oux142 ulimit -s unlimited143144 temp=$(mktemp -d)145 cd $temp146147 touch $out148 ${optionalString(true)''149 cat ${} >> $out150 echo >> $out151152 echo "CPU: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2 | xargs), $(grep -c '^processor' /proc/cpuinfo) threads" >> $out153 echo >> $out154155 echo ".Tested versions" >> $out156 echo "[%collapsible]" >> $out157 echo "====" >> $out158 echo "* Go: $(go-jsonnet --version)" >> $out159 echo "* C++: $(jsonnet --version)" >> $out160 echo "* Scala (native/GraalVM): $(sjsonnet-native 2>&1 | grep -oP 'Sjsonnet \S+')" >> $out161 echo "* Rust (alternative): rsjsonnet ${rsjsonnet.version} (${rsjsonnet.src.rev})" >> $out162 ${concatStringsSep"\n"(163forEachjrsonnetVariants(164variant165"echo \"* Rust${166 ifvariant.name!=""then" (${variant.name})"else""167 }: $(${variant.drv}/bin/jrsonnet --version 2>&1)\" >> $out"168)169)}170 echo "====" >> $out171 echo >> $out172 ''}173 echo "== Real world" >> $out174 ${mkBench{175name="Graalvm CI";176path="${graalvmBench}/ci.jsonnet";177omitSource=true;178skipCpp="takes longer than a hour";179skipGo=skipSlow;180}}181 ${mkBench{182name="Loki manifests";183path="${realworldBench}/entry-loki.jsonnet";184jpaths=["${realworldBench}/vendor"];185skipCpp="too slow, takes hours, skews results";186skipGo=skipSlow;187}}188 ${mkBench{189name="Mimir manifests";190path="${realworldBench}/entry-mimir.jsonnet";191jpaths=["${realworldBench}/vendor"];192skipCpp="too slow, takes hours, skews results";193skipGo=skipSlow;194}}195 ${mkBench{196name="Tempo manifests";197path="${realworldBench}/entry-tempo.jsonnet";198jpaths=["${realworldBench}/vendor"];199skipCpp="too slow, takes hours, skews results";200skipGo=skipSlow;201}}202 ${mkBench{203name="GitLab runbooks dashboards";204path="${realworldBench}/entry-gitlab-runbooks.jsonnet";205jpaths=[206"${realworldBench}/vendor"207"${realworldBench}/vendor/runbooks/libsonnet"208"${realworldBench}/vendor/runbooks/dashboards"209"${realworldBench}/vendor/runbooks/services"210"${realworldBench}/vendor/runbooks/metrics-catalog"211];212skipCpp="too slow, takes hours, skews results";213skipGo=skipSlow;214}}215216 echo >> $out217 echo "== Benchmarks from C++ jsonnet (/perf_tests)" >> $out218 ${mkBench{219name="Large string join";220path="${jsonnetBench}/perf_tests/large_string_join.jsonnet";221}}222 ${mkBench{223name="Large string template";224omitSource=true;225path="${jsonnetBench}/perf_tests/large_string_template.jsonnet";226skipGo="fails with os stack size exhausion";227skipCpp="too slow, takes hours, skews results";228}}229 ${mkBench{230name="Realistic 1";231path="${jsonnetBench}/perf_tests/realistic1.jsonnet";232skipGo=skipSlow;233skipCpp="too slow, takes hours, skews results";234}}235 ${mkBench{236name="Realistic 2";237path="${jsonnetBench}/perf_tests/realistic2.jsonnet";238skipGo=skipSlow;239skipCpp="too slow, takes hours, skews results";240}}241242 echo >> $out243 echo "== Benchmarks from C++ jsonnet (/benchmarks)" >> $out244 ${mkBench{245name="Tail call";246path="${jsonnetBench}/benchmarks/bench.01.jsonnet";247}}248 ${mkBench{249name="Inheritance recursion";250path="${jsonnetBench}/benchmarks/bench.02.jsonnet";251skipCpp=skipSlow;252skipGo=skipSlow;253}}254 ${mkBench{255name="Simple recursive call";256path="${jsonnetBench}/benchmarks/bench.03.jsonnet";257skipGo=skipSlow;258}}259 ${mkBench{260name="Foldl string concat";261path="${jsonnetBench}/benchmarks/bench.04.jsonnet";262skipCpp=skipSlow;263}}264 ${mkBench{265name="Array sorts";266path="${jsonnetBench}/benchmarks/bench.06.jsonnet";267skipCpp=skipSlow;268}}269 ${mkBench{270name="Lazy array";271path="${jsonnetBench}/benchmarks/bench.07.jsonnet";272skipGo=skipSlow;273}}274 ${mkBench{275name="Inheritance function recursion";276path="${jsonnetBench}/benchmarks/bench.08.jsonnet";277skipCpp=skipSlow;278}}279 ${mkBench{280name="String strips";281path="${jsonnetBench}/benchmarks/bench.09.jsonnet";282skipCpp="too slow, takes hours, skews results";283}}284 ${mkBench{285name="Big object";286path="${jsonnetBench}/benchmarks/gen_big_object.jsonnet";287pathIsGenerator=true;288}}289290 echo >> $out291 echo "== Benchmarks from Go jsonnet (builtins)" >> $out292 ${mkBench{293name="std.base64";294path="${goJsonnetBench}/base64.jsonnet";295skipRustAlternative=skipSlow;296skipCpp="too slow, takes hours, skews results";297}}298 ${mkBench{299name="std.base64Decode";300path="${goJsonnetBench}/base64Decode.jsonnet";301skipRustAlternative=skipSlow;302skipCpp=skipSlow;303}}304 ${mkBench{305name="std.base64DecodeBytes";306path="${goJsonnetBench}/base64DecodeBytes.jsonnet";307skipRustAlternative=skipSlow;308skipCpp=skipSlow;309skipGo=skipSlow;310}}311 ${mkBench{312name="std.base64 (byte array)";313path="${goJsonnetBench}/base64_byte_array.jsonnet";314skipRustAlternative=skipSlow;315skipCpp=skipSlow;316skipGo=skipSlow;317}}318 ${mkBench{319name="std.foldl";320path="${goJsonnetBench}/foldl.jsonnet";321}}322 ${mkBench{323name="std.manifestJsonEx";324path="${goJsonnetBench}/manifestJsonEx.jsonnet";325skipCpp=skipSlow;326}}327 ${mkBench{328name="std.manifestTomlEx";329path="${goJsonnetBench}/manifestTomlEx.jsonnet";330skipCpp=skipSlow;331}}332 ${mkBench{333name="std.parseInt";334path="${goJsonnetBench}/parseInt.jsonnet";335skipCpp=skipSlow;336}}337 ${mkBench{338name="std.reverse";339path="${goJsonnetBench}/reverse.jsonnet";340skipCpp=skipSlow;341skipGo=skipSlow;342}}343 ${mkBench{344name="std.substr";345path="${goJsonnetBench}/substr.jsonnet";346}}347 ${mkBench{348name="Comparsion for array";349path="${goJsonnetBench}/comparison.jsonnet";350skipCpp="too slow, takes hours, skews results";351}}352 ${mkBench{353name="Comparsion for primitives";354path="${goJsonnetBench}/comparison2.jsonnet";355skipRustAlternative=skipSlow;356skipCpp="can't run: uses up to 192GB of RAM";357skipGo=skipSlow;358}}359 '';360}nix/fetch-jrq.nixdiffbeforeafterboth--- a/nix/fetch-jrq.nix
+++ b/nix/fetch-jrq.nix
@@ -10,7 +10,7 @@
name ? "jrq-vendor",
}:
stdenvNoCC.mkDerivation (finalAttrs: {
- inherit name;
+ name = "${name}-${builtins.substring 0 8 (builtins.hashFile "sha256" lockfile)}";
outputHashMode = "recursive";
outputHashAlgo = "sha256";
tests/realworld/entry-kube-prometheus.jsonnetdiffbeforeafterboth--- /dev/null
+++ b/tests/realworld/entry-kube-prometheus.jsonnet
@@ -0,0 +1 @@
+import 'kube-prometheus/main.libsonnet'