difftreelog
ci switch all benchmarks to realworld tests dir
in: master
3 files changed
nix/benchmarks.nixdiffbeforeafterboth1{2 lib,3 runCommand,4 stdenv,5 fetchJrq,6 go-jsonnet,7 sjsonnet,8 cpp-jsonnet,9 rsjsonnet,10 hyperfine,11 quick ? false,12 jrsonnetVariants,13}:14with lib;15let16 inherit (cpp-jsonnet) jsonnetBench;17 inherit (go-jsonnet) goJsonnetBench;18 realworldVendor = fetchJrq {19 name = "realworld-vendor";20 lockfile = ../tests/realworld/jsonnetfile.lock.json;21 vendorHash = "sha256-oEUzM6Bhu8ZT8vCtYDbBEjG5BFHYpID+1/2pgXvIAgo=";22 };23 realworldBench = runCommand "realworld-bench" { } ''24 mkdir -p $out25 cp ${}/*.jsonnet ${}/*.libsonnet $out/26 cp -r ${realworldVendor} $out/vendor27 '';2829 # Removes outsiders from the output30 # Useful when comparing performance of different jrsonnet releases31 skipSlow = if quick then "slow benchmark, but only quick requested" else "";32in33stdenv.mkDerivation {34 name = "benchmarks";35 # __impure = true; # not supported by hercules-ci36 unpackPhase = "true";3738 buildInputs = [39 sjsonnet40 cpp-jsonnet41 rsjsonnet42 go-jsonnet4344 hyperfine45 ];4647 installPhase =48 let49 mkBench =50 {51 name,52 path,53 omitSource ? false,54 pathIsGenerator ? false,55 skipRustAlternative ? "",56 skipScala ? "",57 skipCpp ? "",58 skipGo ? "",59 jpaths ? [ ],60 }:61 let62 jpathArgs = concatMapStrings (p: " -J ${p}") jpaths;63 in64 ''65 echo >> $out66 echo "=== ${name}" >> $out67 echo >> $out68 ${optionalString(skipRustAlternative!="")''69 echo "> Note: No results for Rust (alternative), ${skipRustAlternative}" >> $out70 echo >> $out71 ''}72 ${optionalString(skipGo!="")''73 echo "> Note: No results for Go, ${skipGo}" >> $out74 echo >> $out75 ''}76 ${optionalString(skipScala!="")''77 echo "> Note: No results for Scala (native)/Scala (GraalVM), ${skipScala}" >> $out78 echo >> $out79 ''}80 ${optionalString(skipCpp!="")''81 echo "> Note: No results for C++, ${skipCpp}" >> $out82 echo >> $out83 ''}84 ${optionalString(!omitSource)''85 echo ".Source" >> $out86 echo "[%collapsible]" >> $out87 echo "====" >> $out88 echo "[source,jsonnet]" >> $out89 echo "----" >> $out90 ${optionalStringpathIsGenerator"echo \"// Generator source\" >> $out"}91 cat ${path} >> $out92 echo >> $out93 echo "----" >> $out94 echo "====" >> $out95 echo >> $out96 ''}97 path=${path}98 ${optionalStringpathIsGenerator''99 go-jsonnet $path > generated.jsonnet100 path=generated.jsonnet101 ''}102 hyperfine -N -w4 -m20 --output=pipe --style=basic --export-asciidoc result.adoc \103 ${104 concatStringsSep" "(105forEachjrsonnetVariants(106variant107"\"${variant.drv}/bin/jrsonnet $path${jpathArgs}\" -n \"Rust${108 ifvariant.name!=""then" (${variant.name})"else""109 }\""110)111)112 } \113 ${114 optionalString(115skipRustAlternative==""116)"\"rsjsonnet $path${jpathArgs}\" -n \"Rust (alternative, rsjsonnet)\""117 } \118 ${optionalString(skipGo=="")"\"go-jsonnet $path${jpathArgs}\" -n \"Go\""} \119 ${120 optionalString(skipScala=="")"\"sjsonnet-native $path${jpathArgs}\" -n \"Scala (native)\""121 } \122 ${123 124 125 optionalString(126skipScala==""&&stdenv.hostPlatform.system!="aarch64-linux"127)"\"sjsonnet-graalvm $path${jpathArgs}\" -n \"Scala (GraalVM)\""128 } \129 ${optionalString(skipCpp=="")"\"jsonnet $path${jpathArgs}\" -n \"C++\""}130 cat result.adoc >> $out131 '';132 in133 ''134 set -oux135 ulimit -s unlimited136137 temp=$(mktemp -d)138 cd $temp139140 touch $out141 ${optionalString(true)''142 cat ${} >> $out143 echo >> $out144145 echo "CPU: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2 | xargs), $(grep -c '^processor' /proc/cpuinfo) threads" >> $out146 echo >> $out147148 echo ".Tested versions" >> $out149 echo "[%collapsible]" >> $out150 echo "====" >> $out151 echo "* Go: $(go-jsonnet --version)" >> $out152 echo "* C++: $(jsonnet --version)" >> $out153 echo "* Scala (native/GraalVM): $(sjsonnet-native 2>&1 | grep -oP 'Sjsonnet \S+')" >> $out154 echo "* Rust (alternative): rsjsonnet ${rsjsonnet.version} (${rsjsonnet.src.rev})" >> $out155 ${concatStringsSep"\n"(156forEachjrsonnetVariants(157variant158"echo \"* Rust${159 ifvariant.name!=""then" (${variant.name})"else""160 }: $(${variant.drv}/bin/jrsonnet --version 2>&1)\" >> $out"161)162)}163 echo "====" >> $out164 echo >> $out165 ''}166 echo "== Real world" >> $out167 ${mkBench{168name="GitLab runbooks dashboards";169path="${realworldBench}/entry-gitlab-runbooks.jsonnet";170jpaths=[171"${realworldBench}/vendor"172"${realworldBench}/vendor/runbooks/libsonnet"173"${realworldBench}/vendor/runbooks/dashboards"174"${realworldBench}/vendor/runbooks/services"175"${realworldBench}/vendor/runbooks/metrics-catalog"176];177skipCpp="too slow, takes hours, skews results";178skipGo=skipSlow;179}}180 ${mkBench{181name="GraalVM CI";182path="${realworldBench}/entry-graalvm.jsonnet";183jpaths=[184"${realworldBench}/vendor/graal"185];186skipCpp="too slow, takes hours, skews results";187skipGo=skipSlow;188}}189 ${mkBench{190name="Kube-prometheus";191path="${realworldBench}/entry-kube-prometheus.jsonnet";192jpaths=[193"${realworldBench}/vendor"194];195skipCpp="too slow, takes hours, skews results";196skipGo=skipSlow;197}}198 ${mkBench{199name="Loki manifests";200path="${realworldBench}/entry-loki.jsonnet";201jpaths=[202"${realworldBench}/vendor"203"${realworldBench}"204];205skipCpp="too slow, takes hours, skews results";206skipGo=skipSlow;207}}208 ${mkBench{209name="Mimir manifests";210path="${realworldBench}/entry-mimir.jsonnet";211jpaths=[212"${realworldBench}/vendor"213"${realworldBench}"214];215skipCpp="too slow, takes hours, skews results";216skipGo=skipSlow;217skipScala="https://github.com/databricks/sjsonnet/issues/829";218}}219 ${mkBench{220name="Tempo manifests";221path="${realworldBench}/entry-tempo.jsonnet";222jpaths=[223"${realworldBench}/vendor"224"${realworldBench}"225];226skipCpp="too slow, takes hours, skews results";227skipGo=skipSlow;228}}229230 echo >> $out231 echo "== Benchmarks from C++ jsonnet (/perf_tests)" >> $out232 ${mkBench{233name="Large string join";234path="${jsonnetBench}/perf_tests/large_string_join.jsonnet";235}}236 ${mkBench{237name="Large string template";238omitSource=true;239path="${jsonnetBench}/perf_tests/large_string_template.jsonnet";240skipGo="fails with os stack size exhausion";241skipCpp="too slow, takes hours, skews results";242}}243 ${mkBench{244name="Realistic 1";245path="${jsonnetBench}/perf_tests/realistic1.jsonnet";246skipGo=skipSlow;247skipCpp="too slow, takes hours, skews results";248}}249 ${mkBench{250name="Realistic 2";251path="${jsonnetBench}/perf_tests/realistic2.jsonnet";252skipGo=skipSlow;253skipCpp="too slow, takes hours, skews results";254}}255256 echo >> $out257 echo "== Benchmarks from C++ jsonnet (/benchmarks)" >> $out258 ${mkBench{259name="Tail call";260path="${jsonnetBench}/benchmarks/bench.01.jsonnet";261}}262 ${mkBench{263name="Inheritance recursion";264path="${jsonnetBench}/benchmarks/bench.02.jsonnet";265skipCpp=skipSlow;266skipGo=skipSlow;267}}268 ${mkBench{269name="Simple recursive call";270path="${jsonnetBench}/benchmarks/bench.03.jsonnet";271skipGo=skipSlow;272}}273 ${mkBench{274name="Foldl string concat";275path="${jsonnetBench}/benchmarks/bench.04.jsonnet";276skipCpp=skipSlow;277}}278 ${mkBench{279name="Array sorts";280path="${jsonnetBench}/benchmarks/bench.06.jsonnet";281skipCpp=skipSlow;282}}283 ${mkBench{284name="Lazy array";285path="${jsonnetBench}/benchmarks/bench.07.jsonnet";286skipGo=skipSlow;287}}288 ${mkBench{289name="Inheritance function recursion";290path="${jsonnetBench}/benchmarks/bench.08.jsonnet";291skipCpp=skipSlow;292}}293 ${mkBench{294name="String strips";295path="${jsonnetBench}/benchmarks/bench.09.jsonnet";296skipCpp="too slow, takes hours, skews results";297}}298 ${mkBench{299name="Big object";300path="${jsonnetBench}/benchmarks/gen_big_object.jsonnet";301pathIsGenerator=true;302}}303304 echo >> $out305 echo "== Benchmarks from Go jsonnet (builtins)" >> $out306 ${mkBench{307name="std.base64";308path="${goJsonnetBench}/base64.jsonnet";309skipRustAlternative=skipSlow;310skipCpp="too slow, takes hours, skews results";311}}312 ${mkBench{313name="std.base64Decode";314path="${goJsonnetBench}/base64Decode.jsonnet";315skipRustAlternative=skipSlow;316skipCpp=skipSlow;317}}318 ${mkBench{319name="std.base64DecodeBytes";320path="${goJsonnetBench}/base64DecodeBytes.jsonnet";321skipRustAlternative=skipSlow;322skipCpp=skipSlow;323skipGo=skipSlow;324}}325 ${mkBench{326name="std.base64 (byte array)";327path="${goJsonnetBench}/base64_byte_array.jsonnet";328skipRustAlternative=skipSlow;329skipCpp=skipSlow;330skipGo=skipSlow;331}}332 ${mkBench{333name="std.foldl";334path="${goJsonnetBench}/foldl.jsonnet";335}}336 ${mkBench{337name="std.manifestJsonEx";338path="${goJsonnetBench}/manifestJsonEx.jsonnet";339skipCpp=skipSlow;340}}341 ${mkBench{342name="std.manifestTomlEx";343path="${goJsonnetBench}/manifestTomlEx.jsonnet";344skipCpp=skipSlow;345}}346 ${mkBench{347name="std.parseInt";348path="${goJsonnetBench}/parseInt.jsonnet";349skipCpp=skipSlow;350}}351 ${mkBench{352name="std.reverse";353path="${goJsonnetBench}/reverse.jsonnet";354skipCpp=skipSlow;355skipGo=skipSlow;356}}357 ${mkBench{358name="std.substr";359path="${goJsonnetBench}/substr.jsonnet";360}}361 ${mkBench{362name="Comparsion for array";363path="${goJsonnetBench}/comparison.jsonnet";364skipCpp="too slow, takes hours, skews results";365}}366 ${mkBench{367name="Comparsion for primitives";368path="${goJsonnetBench}/comparison2.jsonnet";369skipRustAlternative=skipSlow;370skipCpp="can't run: uses up to 192GB of RAM";371skipGo=skipSlow;372}}373 '';374}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'