slog: improve benchmark handling
Make some improvements to how benchmarks are run, motivated
by the latest benchstat
(https://pkg.go.dev/golang.org/x/perf/cmd/benchstat).
- Run each benchmark 10 times, the minimum recommended in the
benchstat package doc.
- Use the -ignore flag to benchstat to remove the need to edit
the "pkg" line in benchmark output.
- Create a Makefile to put all benchmark-running code in one place.
- Remove all run_benchmarks.sh scripts.
- Use the same name for each subdirectory's output file to enable
a single Makefile rule.
Change-Id: Idc6d02ad1bcf10f1a4cd1e1f7f326da9b015ec2a
Reviewed-on: https://go-review.googlesource.com/c/exp/+/463355
Run-TryBot: Jonathan Amsterdam <jba@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
diff --git a/slog/benchmarks/Makefile b/slog/benchmarks/Makefile
new file mode 100644
index 0000000..1c673c5
--- /dev/null
+++ b/slog/benchmarks/Makefile
@@ -0,0 +1,25 @@
+# Run and compare benchmarks.
+# This requires a version of benchstat that supports
+# the -ignore flag. The flag was added on or before 13 January 2023,
+# so a compatible version can be obtained by running
+# go install golang.org/x/perf/cmd/benchstat@latest
+
+count = 10
+
+default: compare-zap compare-zerolog
+
+compare-%: %_benchmarks/out.bench slog.bench
+ benchstat -ignore pkg $^
+
+slog.bench: *.go ../*.go ../../go.mod
+ go test -run NONE -bench . -count $(count) > $@
+
+slog-nopc.bench: *.go ../*.go ../../go.mod
+ go test -tags nopc -run NONE -bench . -count $(count) > $@
+
+%_benchmarks/out.bench: %_benchmarks/*.go %_benchmarks/go.mod
+ go test -C $*_benchmarks -bench . -count $(count) > $@
+
+# Don't delete the out.bench files after a comparison.
+.PRECIOUS: %_benchmarks/out.bench
+
diff --git a/slog/benchmarks/run_benchmarks.sh b/slog/benchmarks/run_benchmarks.sh
deleted file mode 100755
index 5ad72ff..0000000
--- a/slog/benchmarks/run_benchmarks.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash -e
-
-go=${1:-go}
-
-cd $(dirname $0)
-
-set -x
-
-$go test -bench . -count 5 > slog.bench
-$go test -tags nopc -bench . -count 5 > slog-nopc.bench
diff --git a/slog/benchmarks/slog.bench b/slog/benchmarks/slog.bench
index 080399b..d8423a8 100644
--- a/slog/benchmarks/slog.bench
+++ b/slog/benchmarks/slog.bench
@@ -2,105 +2,205 @@
goarch: amd64
pkg: golang.org/x/exp/slog/benchmarks
cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
-BenchmarkAttrs/disabled/5_args-8 98892404 10.48 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 10.62 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 10.73 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 10.92 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args-8 100000000 10.66 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 100000000 11.20 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 100000000 11.67 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 100000000 10.89 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 100000000 10.99 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/5_args_ctx-8 91002250 11.37 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 53510887 19.73 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 60331378 19.19 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 62306692 19.63 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 60143833 19.67 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/10_args-8 56598145 19.66 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16253622 69.64 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 16667188 70.84 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 17396628 68.30 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 17736950 71.59 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/disabled/40_args-8 14518330 74.08 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3203592 380.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 2950881 371.5 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 2910333 369.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3170496 367.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3213660 349.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3121356 393.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3043286 398.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3094351 386.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 3170066 395.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/5_args_ctx-8 2650004 442.5 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1696753 680.2 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1376792 910.2 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1468706 827.8 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1413218 871.2 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1348390 759.4 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 450120 2591 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 420805 2736 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 402405 2684 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 445548 2540 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 477627 2574 ns/op 1408 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2523033 507.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2455040 517.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2762488 454.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2667278 458.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2566798 493.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2534534 477.8 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2553498 474.5 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2532687 474.5 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2619766 484.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args_ctx-8 2403781 492.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1358740 880.3 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1286355 927.4 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1312178 876.7 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1209062 956.3 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1315174 950.8 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 366254 3571 ns/op 1413 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 360555 3643 ns/op 1413 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 350850 3678 ns/op 1413 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 376776 3411 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 340332 3419 ns/op 1413 B/op 1 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 941372 1149 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 975567 1164 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1101978 1238 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 980968 1174 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args-8 1000000 1145 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1107 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1062 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1097755 1088 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1122 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1232 ns/op 8 B/op 2 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 731670 2231 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 624934 2126 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 704256 1790 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 630151 1879 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/10_args-8 720806 1856 ns/op 224 B/op 5 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 226788 6160 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 198184 5963 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 205917 5741 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 201160 5746 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/Text_discard/40_args-8 208953 6389 ns/op 1477 B/op 17 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1269580 931.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1347073 873.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1314978 918.4 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1272811 930.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args-8 1358918 971.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1255411 851.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1356436 891.0 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1227829 903.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1361992 896.1 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/5_args_ctx-8 1324644 909.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 600196 1679 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 697009 1689 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 729364 1721 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 752677 1613 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/10_args-8 739350 1463 ns/op 208 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 242408 5117 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 230407 5000 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 254080 5092 ns/op 1412 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 220143 4767 ns/op 1411 B/op 1 allocs/op
-BenchmarkAttrs/JSON_discard/40_args-8 241828 5076 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 10.38 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 10.17 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 10.09 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 10.08 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 10.20 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 10.02 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 120035740 10.16 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 120233986 10.27 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 117988443 10.02 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args-8 100000000 10.06 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 64901528 18.46 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 65517596 18.56 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 62191188 18.61 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 60753042 19.24 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 62396752 18.55 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 65066020 19.71 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 53918031 19.35 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 61424350 19.26 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 63099553 19.27 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/5_args_ctx-8 62610777 19.57 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 58835091 18.60 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 64711941 18.23 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 65916264 18.37 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 63195285 18.69 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 56442674 18.72 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 62956743 18.87 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 60827743 18.35 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 62394498 18.76 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 64166661 18.28 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/10_args-8 65357238 18.40 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 18569176 64.25 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 18564842 64.20 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 18519975 64.97 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 18786619 63.57 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 18571372 66.20 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 17988332 65.02 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 18360752 65.41 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 17946436 66.87 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 17820082 65.00 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/disabled/40_args-8 18557458 65.02 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3620848 343.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3470655 354.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3550908 331.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3509739 326.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3676604 326.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3736221 323.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3723120 336.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3620608 335.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3617883 332.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 3652323 333.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3550478 335.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3596498 341.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3258937 367.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3241588 348.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3493239 336.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3644119 330.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3561814 332.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3554258 336.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3577270 334.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/5_args_ctx-8 3665946 330.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1993348 595.0 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1946636 631.1 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1948170 589.5 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2063065 614.9 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2100612 556.1 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2044090 582.5 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2060553 548.5 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 2056201 550.1 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1977146 532.5 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1931263 566.2 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 647122 2258 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 545836 2284 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 508528 2272 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 562800 2287 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 535436 2322 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 550000 2423 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 497152 2313 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 536480 2378 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 559452 2367 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 525532 2424 ns/op 1408 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2841034 437.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2972779 414.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2803665 416.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2968459 408.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2877259 405.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2946810 408.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2882872 429.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2821292 418.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2827576 414.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2937133 410.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2855346 431.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2874630 448.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2785812 429.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2832249 425.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2793758 431.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2835672 426.0 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2823031 430.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2754075 432.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2800448 439.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args_ctx-8 2636191 438.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1396909 795.7 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1474057 850.3 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1462328 777.6 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1476898 816.1 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1475731 758.6 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1446337 787.0 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1580239 769.8 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1512943 751.8 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1632409 730.6 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1560541 772.2 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 468709 3217 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 358268 3294 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 356757 3278 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 407335 3404 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 341132 3429 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 347739 3344 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 383474 3382 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 357300 3414 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 365079 3254 ns/op 1413 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 384639 3169 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1000000 1042 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1000000 1022 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1267287 968.3 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1000000 1011 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1218736 1008 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1245417 1008 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1258174 954.8 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1000000 1036 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1188182 973.6 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args-8 1223532 978.3 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1003 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1016 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1203034 973.9 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1205427 978.4 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1202929 1025 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1080 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1005 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1165257 1027 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 999788 1019 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/5_args_ctx-8 1000000 1055 ns/op 8 B/op 2 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 698312 1710 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 682496 1688 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 730700 1674 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 746887 1663 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 763560 1644 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 750136 1634 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 707833 1752 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 753760 1697 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 712462 1622 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/10_args-8 673885 1654 ns/op 224 B/op 5 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 253814 5530 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 244048 5478 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 213270 5296 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 228202 5273 ns/op 1476 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 223803 5194 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 212857 5116 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 210901 5638 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 213262 5428 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 215106 5271 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/Text_discard/40_args-8 195278 5372 ns/op 1477 B/op 17 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1503031 758.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1651918 761.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1497864 782.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1523539 801.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1498520 821.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1426116 779.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1566673 794.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1525293 814.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1531303 790.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args-8 1573575 793.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1443855 790.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1439426 862.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1452058 814.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1384497 876.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1309636 839.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1490181 813.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1449897 804.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1416861 916.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1533164 774.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/5_args_ctx-8 1461074 799.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1351 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 891554 1363 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 946274 1331 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 833112 1324 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 938376 1323 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 949410 1355 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 939082 1435 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 1000000 1381 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 954004 1406 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/10_args-8 910243 1355 ns/op 208 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 281059 4666 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 233239 5091 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 258936 4646 ns/op 1411 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 262107 5005 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 201921 5649 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 238518 5323 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 229134 5344 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 237520 5414 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 221271 5040 ns/op 1412 B/op 1 allocs/op
+BenchmarkAttrs/JSON_discard/40_args-8 217669 5238 ns/op 1412 B/op 1 allocs/op
PASS
-ok golang.org/x/exp/slog/benchmarks 150.784s
+ok golang.org/x/exp/slog/benchmarks 301.806s
diff --git a/slog/benchmarks/zap_benchmarks/out.bench b/slog/benchmarks/zap_benchmarks/out.bench
new file mode 100644
index 0000000..a683c7f
--- /dev/null
+++ b/slog/benchmarks/zap_benchmarks/out.bench
@@ -0,0 +1,66 @@
+goos: linux
+goarch: amd64
+pkg: golang.org/x/exp/slog/benchmarks/zap_benchmarks
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkAttrs/async_discard/5_args-8 2909584 423.5 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 2966116 478.0 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 2358548 502.2 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 2951581 477.6 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 2355459 496.8 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 2574444 503.1 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 2329268 490.8 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 2523195 446.6 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 2389597 526.5 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/5_args-8 2332710 477.4 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1532005 773.1 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1676757 679.5 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1644735 776.9 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1387543 858.7 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1431322 789.3 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1504154 794.2 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1660015 793.5 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1702724 698.2 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1532509 754.9 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/10_args-8 1779415 689.6 ns/op 640 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 541555 2489 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 523632 2538 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 568752 2435 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 707185 2132 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 480524 2411 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 531994 2376 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 569430 2535 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 473851 2190 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 530892 2151 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/async_discard/40_args-8 487734 2083 ns/op 2689 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2168425 553.1 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2224008 573.1 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2375797 528.1 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2241901 536.5 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2338927 548.0 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2151067 557.4 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2053158 564.6 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2223476 560.4 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2055274 533.9 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 2221306 569.5 ns/op 320 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1200391 928.6 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1288224 895.8 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1233352 920.7 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1226899 994.6 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1000000 1067 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1000000 1135 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1000000 1012 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1000000 1009 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1000000 1072 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 1000000 1052 ns/op 641 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 300684 3884 ns/op 2698 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 295438 3894 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 294153 3694 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 330223 3749 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 309178 3832 ns/op 2699 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 346945 3405 ns/op 2697 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 305378 3818 ns/op 2698 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 293497 3749 ns/op 2698 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 352947 3676 ns/op 2698 B/op 1 allocs/op
+BenchmarkAttrs/fastText_discard/40_args-8 301669 3682 ns/op 2700 B/op 1 allocs/op
+PASS
+ok golang.org/x/exp/slog/benchmarks/zap_benchmarks 95.928s
diff --git a/slog/benchmarks/zap_benchmarks/run_benchmarks.sh b/slog/benchmarks/zap_benchmarks/run_benchmarks.sh
deleted file mode 100755
index 487f934..0000000
--- a/slog/benchmarks/zap_benchmarks/run_benchmarks.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash -e
-
-go=${1:-go}
-
-cd $(dirname $0)
-
-set -x
-
-# Run all benchmarks a few times and capture to a file.
-$go test -bench . -count 5 > zap.bench
-
-# Rename the package in the output to fool benchstat into comparing
-# these benchmarks with the ones in the parent directory.
-sed -i -e 's?^pkg: .*$?pkg: golang.org/x/exp/slog/benchmarks?' zap.bench
diff --git a/slog/benchmarks/zap_benchmarks/zap.bench b/slog/benchmarks/zap_benchmarks/zap.bench
deleted file mode 100644
index 9268dd1..0000000
--- a/slog/benchmarks/zap_benchmarks/zap.bench
+++ /dev/null
@@ -1,36 +0,0 @@
-goos: linux
-goarch: amd64
-pkg: golang.org/x/exp/slog/benchmarks
-cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
-BenchmarkAttrs/async_discard/5_args-8 2967360 367.3 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3353967 356.3 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 2856321 388.9 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 2827572 376.6 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/5_args-8 3196188 376.0 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1770090 635.4 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2039012 642.2 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1838562 622.1 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 2066180 573.6 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/10_args-8 1905164 624.8 ns/op 640 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 604632 1895 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 614727 1947 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 547798 1864 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 580722 1985 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/async_discard/40_args-8 657516 1926 ns/op 2689 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2318203 500.6 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2275015 530.1 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2239497 533.8 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2345541 519.9 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 2377508 507.7 ns/op 320 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1393738 900.7 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1267099 880.2 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1383918 878.0 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1279138 897.7 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 1270694 1037 ns/op 641 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 373773 2888 ns/op 2697 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 383184 2929 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 427410 2986 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 410481 3023 ns/op 2698 B/op 1 allocs/op
-BenchmarkAttrs/fastText_discard/40_args-8 426891 3097 ns/op 2698 B/op 1 allocs/op
-PASS
-ok golang.org/x/exp/slog/benchmarks/zap_benchmarks 48.330s
diff --git a/slog/benchmarks/zerolog_benchmarks/out.bench b/slog/benchmarks/zerolog_benchmarks/out.bench
new file mode 100644
index 0000000..811276c
--- /dev/null
+++ b/slog/benchmarks/zerolog_benchmarks/out.bench
@@ -0,0 +1,26 @@
+goos: linux
+goarch: amd64
+pkg: golang.org/x/exp/slog/benchmarks/zerolog_benchmarks
+cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
+BenchmarkAttrs/fastText_discard/5_args-8 6418659 189.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6533284 195.6 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 5889310 198.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6604699 186.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6355650 179.5 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6616807 179.7 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6906835 183.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6206449 184.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6946840 180.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/5_args-8 6482282 193.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4138516 282.4 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4230062 278.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4168550 287.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4263456 278.1 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4329322 280.8 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4063077 288.9 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4137674 293.2 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4281580 285.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4209427 300.3 ns/op 0 B/op 0 allocs/op
+BenchmarkAttrs/fastText_discard/10_args-8 4304002 282.7 ns/op 0 B/op 0 allocs/op
+PASS
+ok golang.org/x/exp/slog/benchmarks/zerolog_benchmarks 29.079s
diff --git a/slog/benchmarks/zerolog_benchmarks/run_benchmarks.sh b/slog/benchmarks/zerolog_benchmarks/run_benchmarks.sh
deleted file mode 100755
index 428022b..0000000
--- a/slog/benchmarks/zerolog_benchmarks/run_benchmarks.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash -e
-
-go=${1:-go}
-
-cd $(dirname $0)
-
-set -x
-
-# Run all benchmarks a few times and capture to a file.
-$go test -bench . -count 5 > zerolog.bench
-
-# Rename the package in the output to fool benchstat into comparing
-# these benchmarks with the ones in the parent directory.
-sed -i -e 's?^pkg: .*$?pkg: golang.org/x/exp/slog/benchmarks?' zerolog.bench
diff --git a/slog/benchmarks/zerolog_benchmarks/zerolog.bench b/slog/benchmarks/zerolog_benchmarks/zerolog.bench
deleted file mode 100644
index 3a92daf..0000000
--- a/slog/benchmarks/zerolog_benchmarks/zerolog.bench
+++ /dev/null
@@ -1,16 +0,0 @@
-goos: linux
-goarch: amd64
-pkg: golang.org/x/exp/slog/benchmarks
-cpu: Intel(R) Xeon(R) CPU @ 2.20GHz
-BenchmarkAttrs/fastText_discard/5_args-8 6696618 181.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 7084600 175.6 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 6270475 187.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 6545570 186.5 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/5_args-8 6452163 184.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 4179442 281.9 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 4376378 274.7 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 4276617 285.3 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 4258966 279.2 ns/op 0 B/op 0 allocs/op
-BenchmarkAttrs/fastText_discard/10_args-8 3991080 293.3 ns/op 0 B/op 0 allocs/op
-PASS
-ok golang.org/x/exp/slog/benchmarks/zerolog_benchmarks 14.421s