diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a0a60c..40e5a42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project are recorded here. The format follows Keep a ## [Unreleased] +### Added + +- A calibrated historical directory-token benchmark (#39), comparing released prefix churn, repeated reuse, and live-lock controls. Small real-CLI calibration runs in the suite; large timing runs are informational. The retained macOS study contains 135 observations and reports multi-second reads of a released wide-10k store, with host-drift and synthetic-fixture limits. + ## [0.7.0] - 2026-09-16 ### Added diff --git a/Makefile b/Makefile index fede374..d8546f8 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ SHELL := /usr/bin/env bash # lib/*.sh are fragments of one script and only lint as the whole they build into (bin/git-locks). -SCRIPTS := bin/git-locks test/test.sh scripts/hooks/pre-commit scripts/hooks/pre-push scripts/build.sh +SCRIPTS := bin/git-locks test/test.sh scripts/hooks/pre-commit scripts/hooks/pre-push scripts/build.sh scripts/benchmark-directory-tokens.sh test/directory-token-churn.sh PREFIX ?= $(HOME)/.local .PHONY: build lint test test-docker install uninstall @@ -14,6 +14,7 @@ lint: test: bash test/test.sh + bash test/directory-token-churn.sh test-docker: # the same suite inside the official bash image, for a wall between the tests and your machine docker run --rm -v "$(CURDIR)":/src -w /src bash:5.2 bash -c 'apk add --no-cache git python3 py3-jsonschema >/dev/null && git config --global user.email t@example.invalid && git config --global user.name t && bash test/test.sh' diff --git a/README.md b/README.md index 64cdd64..ed2c63f 100644 --- a/README.md +++ b/README.md @@ -454,3 +454,5 @@ The source is `lib/`, one module per section in numeric order (`000-prelude.sh` ## License Apache 2.0. See `LICENSE` and `NOTICE`. + +Historical directory-token measurements have a calibrated generator and an informational runner in [`scripts/benchmark-directory-tokens.sh`](scripts/benchmark-directory-tokens.sh). See the [benchmark protocol](docs/benchmarks/directory-tokens.md) for fixture semantics, resource bounds, and reproducible commands. Timings are not CI gates. diff --git a/docs/benchmarks/directory-tokens-results.md b/docs/benchmarks/directory-tokens-results.md new file mode 100644 index 0000000..0f3c690 --- /dev/null +++ b/docs/benchmarks/directory-tokens-results.md @@ -0,0 +1,46 @@ +# Directory-token churn results, 2026-09-22 + +A released store with 10,000 distinct directory tokens and 10,000 reachable records had a median `check` latency of **3.641 seconds** in this run. Empty-store controls measured **0.140 seconds before** the matrix and **0.094 seconds after** it. The store had no job or path refs. Historical directory state belongs in performance measurements alongside live-lock count. + +These are 135 native macOS observations: nine scenarios, five operations, three repetitions each. Every measured command exited 0, expected output-line counts matched, and every post-operation ref fingerprint matched its starting state. The raw check range for wide 10k was **3.070–6.811 seconds**; its median should not be read as a stable latency guarantee. + +## Median operation latency + +Values below are rounded milliseconds. Full minimum/median/maximum distributions are in [summary.csv](results/2026-09-22/summary.csv), with every sample in [observations.csv](results/2026-09-22/observations.csv). + +| Scenario | Check | Exact claim | Prefix claim | List | Doctor | +|---|---:|---:|---:|---:|---:| +| Empty, before | 140 | 205 | 268 | 105 | 162 | +| Wide 1k | 348 | 474 | 436 | 299 | 334 | +| Wide 10k | 3641 | 2753 | 2433 | 2110 | 2462 | +| Deep 1k prefixes | 201 | 260 | 296 | 193 | 261 | +| Deep 10k prefixes | 1031 | 1144 | 1209 | 1158 | 1372 | +| Reuse 1k acquisitions | 139 | 180 | 197 | 107 | 107 | +| Reuse 10k acquisitions | 212 | 203 | 193 | 95 | 89 | +| Live 1k control | 460 | 539 | 806 | 1160 | 3017 | +| Empty, after | 94 | 165 | 163 | 71 | 71 | + +## What the comparisons show + +- **Released records still cost reads.** Wide 10k retained 10,000 refs and 10,000 distinct records, with zero jobs or paths. Median `list` was 2.110 seconds even though it emitted no lines; median `doctor` was 2.462 seconds. +- **Keep ref count and reachable-record count separate.** Deep 10k retained the same 10,000 refs but only 1,000 distinct records. Its median `check` was 1.031 seconds. The fixed scenario order and host variation prevent attributing the entire difference to object count. +- **Unreachable objects and retained authority have different costs.** Reuse 10k left 10 tokens pointing to one record, plus 10,000 loose historical objects on disk. Median `check` was 0.212 seconds, `list` 0.095 seconds, and `doctor` 0.089 seconds. This workload did not reproduce wide 10k's multi-second observations; it does not establish that unreachable-object growth is free under every storage layout. +- **Live-lock work adds a separate cost.** The synthetic live 1k control had 3,000 refs and 1,000 records. Its median `list` was 1.160 seconds and `doctor` 3.017 seconds, compared with 0.299 and 0.334 seconds in the released wide 1k store. + +The [before/after inventories](results/2026-09-22/fixtures.csv) retain all ref, reachable-record, loose-object, and allocated-store counts. Wide 10k occupied 78.2 MiB after setup; deep 10k occupied 43.0 MiB; reuse 10k occupied 39.2 MiB. Each scenario accumulated six unreachable probe records during measured claim/release repetitions; the inventories expose those additions while ref fingerprints remained identical. + +## Provenance and limits + +The measured revision was `fe7cdb588ee16f0d90350865344e0b007bf4ffa0`, with binary blob `ff0444627cb9239b1a582ecfc9645fe22b68e611` and generator blob `2d934e9942ecd7aa2f080d93b7cb4e36b95688d8`. The git-locks executable is unchanged from the study's `01e39c3` main baseline. The final results commit adds data and this report without changing that measured code. + +The host was macOS 26.6.2, Darwin 25.6.0 arm64, MacBookPro18,3, 10 logical CPUs, and 16 GiB RAM. Bash was 5.3.9 and Git reported 2.54.0, Apple Git-157. Exact captured metadata is in [environment.txt](results/2026-09-22/environment.txt) and [hardware.txt](results/2026-09-22/hardware.txt). Hardware metadata came from `sw_vers` and `sysctl hw.model hw.ncpu hw.memsize` on the same host. + +Setup used synthetic loose Git objects and refs. Small wide/deep/reuse fixtures matched actual CLI claim/release records and refs after excluding acquisition IDs. The large history was not produced by thousands of CLI invocations. Setup, inventory, ref restoration, and release cleanup were excluded from operation timing. Native resource reports are concatenated, unchanged except for filename headers, in [native-time.txt](results/2026-09-22/native-time.txt). The largest native maximum-RSS report was 46.3 MiB during wide 10k `doctor`; it is not aggregate concurrent memory. + +The largest observed setup working footprint was **157.3 MiB**, measured with `du -sk` before setup inputs were removed. The 200 MiB check detects an excess after allocation; it is a planned workload budget and an observed check, not a preventive disk quota. The completed matrix removed every scenario store. Retained data is compact text. + +Caches were not cleared, and the host was shared with other development work. Empty controls changed from 140 to 94 milliseconds for `check`, and from 162 to 71 milliseconds for `doctor`. That drift, fixed operation order, wall-clock instrumentation, and three repetitions limit causal and statistical claims. There was no failed timing observation or partial large-matrix run. Earlier host disk pressure delayed the study before its full matrix started. + +These results support profiling snapshot reads at large retained-token counts and repeating the experiment after the hardening changes land. They do not justify deleting generation tokens or changing the concurrency protocol. Packed stores, garbage collection, cold caches, other machines, and long-running CLI history setup remain unmeasured. No timing threshold or retention-policy change is introduced. + +See the [protocol and reproduction commands](directory-tokens.md) for the calibrated generator, quick checks, and full matrix. diff --git a/docs/benchmarks/directory-tokens.md b/docs/benchmarks/directory-tokens.md new file mode 100644 index 0000000..3f7a304 --- /dev/null +++ b/docs/benchmarks/directory-tokens.md @@ -0,0 +1,41 @@ +# Historical directory-token benchmark + +This study asks how directory tokens retained after release affect command cost when no job or path refs remain. It compares ref count and distinct reachable records, since a deep path leaves several tokens pointing to the same record. Repeated reuse also leaves unreachable historical blobs on disk. + +The runner measures `check`, an exact claim, a prefix claim, `list`, and `doctor`. The live control measures the same successful commands against unrelated reservations. Large fixture setup uses Git directly and is excluded from operation timing. The fixture generator creates loose objects and loose refs, including distinct historical records, with the same post-release semantics as the CLI. Its deterministic acquisition IDs differ from real generated IDs. + +`test/directory-token-churn.sh` calibrates shallow, deep, and reused shapes against actual CLI claim/release sequences. It compares every retained ref and every record field except the acquisition ID, checks independent counts, and runs the real doctor. It deliberately contaminates a released fixture to verify rejection. Empty stores, live controls, invalid counts, missing stores, and existing output protection are also covered. Twelve seed-39 shape samples use hand-counted count/record oracles. A quick matrix exercises the timing/cleanup path without a latency assertion. + +## Workloads + +| Scenario | Requested scale | Retained directory tokens | Distinct reachable records | Live jobs | +|---|---:|---:|---:|---:| +| Empty, before and after the matrix | 0 | 0 | 0 | 0 | +| Shallow/wide | 1,000 / 10,000 paths | 1,000 / 10,000 | 1,000 / 10,000 | 0 | +| Deep, ten levels per path | 1,000 / 10,000 prefixes | 1,000 / 10,000 | 100 / 1,000 | 0 | +| Repeated reuse of ten directories | 1,000 / 10,000 acquisitions | 10 | 1 | 0 | +| Synthetic live control, shallow/wide | 1,000 paths | 1,000 | 1,000 | 1,000 | + +Each scenario has three repetitions of each operation. Claim cleanup runs outside the timer. Prefix claims create a retained probe token, so the runner removes that exclusively owned token with its expected object ID after release. A fingerprint verifies that all refs exactly match their starting state after every observation. The before/after inventories expose unreachable probe records left by those operations. + +## Reproduction + +Requirements are Bash 5, Git, standard Unix utilities, and native `/usr/bin/time` on macOS or GNU time on Linux. Small calibration is part of `make test`. No runtime dependency is added to git-locks. + +```bash +bash test/directory-token-churn.sh +bash scripts/benchmark-directory-tokens.sh run /tmp/locks-churn-quick quick +bash scripts/benchmark-directory-tokens.sh run /tmp/locks-churn-results +``` + +Output directories must not exist. The fixture command refuses existing stores and bounds its input to 10,000 work units. The large matrix processes one store at a time in a private temporary directory, then removes that store. The planned peak footprint is below 200 MiB, including temporary input files, loose objects, and refs. The runner checks the working footprint after the setup transaction, before deleting setup inputs, and reports an excess above 200 MiB. This check happens after allocation; it is not a preventive disk quota. A failed run retains raw command output, metrics, partial CSVs, and its current temporary store for diagnosis. + +`environment.txt` identifies the measured revision, binary and generator blob IDs, Bash/Git/platform versions, and repetition count. `fixtures.csv` records setup time separately, ref/record/object counts, and allocated store KiB before and after operations, plus the observed setup working footprint. `observations.csv` retains every raw duration, native maximum RSS report, exit code, and stdout line count. Native resource reports are retained under `raw/`; `summary.csv` contains minimum, median, and maximum durations. + +## Interpretation limits + +Filesystem caches are not cleared. Setup and ref verification warm filesystem metadata, so these are repeated local observations on a shared host, not cold-storage measurements. `elapsed_us` uses Bash's wall clock around native time and the CLI; it includes the time wrapper. Native maximum RSS is a per-command resource report, not total concurrent process memory. Three repetitions support bounded descriptive comparisons, not a latency SLA or confidence interval. + +The fixture equivalence check covers reachable record semantics at small scale. Synthetic setup does not measure the cost of thousands of actual CLI claim/release invocations, historical transaction interleavings, or token reclamation. The benchmark adds no timing threshold and proposes no retention-policy change. + +The completed native macOS study and retained observations are in the [2026-09-22 results](directory-tokens-results.md). diff --git a/docs/benchmarks/results/2026-09-22/environment.txt b/docs/benchmarks/results/2026-09-22/environment.txt new file mode 100644 index 0000000..4299c16 --- /dev/null +++ b/docs/benchmarks/results/2026-09-22/environment.txt @@ -0,0 +1,12 @@ +specimen_revision=fe7cdb588ee16f0d90350865344e0b007bf4ffa0 +binary_git_blob=ff0444627cb9239b1a582ecfc9645fe22b68e611 +generator_git_blob=2d934e9942ecd7aa2f080d93b7cb4e36b95688d8 +bash=5.3.9(1)-release +mode=full +repetitions=3 +git version 2.54.0 (Apple Git-157) +Darwin 25.6.0 arm64 +started_utc=2026-09-22T16:28:15Z +scratch=/tmp/locks-churn-measurement.trLdeM/locks-churn-matrix.rBBi2T +Synthetic loose-object/ref fixtures; acquisition ids deterministic. Setup, inventory and cleanup excluded from timing. Filesystem caches not cleared. elapsed_us uses Bash EPOCHREALTIME around native time plus the CLI; max RSS is the native per-command resource report, not aggregate concurrent memory. +completed_utc=2026-09-22T16:32:56Z diff --git a/docs/benchmarks/results/2026-09-22/fixtures.csv b/docs/benchmarks/results/2026-09-22/fixtures.csv new file mode 100644 index 0000000..78e9e97 --- /dev/null +++ b/docs/benchmarks/results/2026-09-22/fixtures.csv @@ -0,0 +1,19 @@ +scenario,phase,setup_us,dirs,jobs,paths,refs,reachable_blobs,loose_objects,disk_kib,setup_working_kib +empty,before,95528,0,0,0,0,0,0,80,80 +empty,after,0,0,0,0,0,0,6,104,0 +wide-1000,before,4149531,1000,0,0,1000,1000,1000,8080,16184 +wide-1000,after,0,1000,0,0,1000,1000,1006,8104,0 +wide-10000,before,30998673,10000,0,0,10000,10000,10000,80080,161108 +wide-10000,after,0,10000,0,0,10000,10000,10006,80104,0 +deep-1000,before,937112,1000,0,0,1000,100,100,4480,8984 +deep-1000,after,0,1000,0,0,1000,100,106,4504,0 +deep-10000,before,13018614,10000,0,0,10000,1000,1000,44080,89108 +deep-10000,after,0,10000,0,0,10000,1000,1006,44104,0 +reuse-1000,before,1820118,10,0,0,10,1,1000,4120,8164 +reuse-1000,after,0,10,0,0,10,1,1006,4144,0 +reuse-10000,before,22319860,10,0,0,10,1,10000,40120,80164 +reuse-10000,after,0,10,0,0,10,1,10006,40144,0 +live-1000,before,3836279,1000,1000,1000,3000,1000,1000,16080,28356 +live-1000,after,0,1000,1000,1000,3000,1000,1006,16104,0 +empty-after,before,50016,0,0,0,0,0,0,80,80 +empty-after,after,0,0,0,0,0,0,6,104,0 diff --git a/docs/benchmarks/results/2026-09-22/hardware.txt b/docs/benchmarks/results/2026-09-22/hardware.txt new file mode 100644 index 0000000..d355ea4 --- /dev/null +++ b/docs/benchmarks/results/2026-09-22/hardware.txt @@ -0,0 +1,6 @@ +ProductName: macOS +ProductVersion: 26.6.2 +BuildVersion: 25G83 +hw.model: MacBookPro18,3 +hw.ncpu: 10 +hw.memsize: 17179869184 diff --git a/docs/benchmarks/results/2026-09-22/native-time.txt b/docs/benchmarks/results/2026-09-22/native-time.txt new file mode 100644 index 0000000..dcca683 --- /dev/null +++ b/docs/benchmarks/results/2026-09-22/native-time.txt @@ -0,0 +1,2700 @@ +### deep-1000-check-1.metrics + 0.19 real 0.09 user 0.08 sys + 10649600 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 8716 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 249 voluntary context switches + 304 involuntary context switches + 757038997 instructions retired + 199358901 cycles elapsed + 5554560 peak memory footprint + +### deep-1000-check-2.metrics + 0.20 real 0.09 user 0.08 sys + 10780672 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 8776 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 234 voluntary context switches + 287 involuntary context switches + 755293270 instructions retired + 205505935 cycles elapsed + 5685632 peak memory footprint + +### deep-1000-check-3.metrics + 0.19 real 0.09 user 0.08 sys + 10649600 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 8778 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 244 voluntary context switches + 300 involuntary context switches + 761122305 instructions retired + 202197415 cycles elapsed + 5554560 peak memory footprint + +### deep-1000-doctor-1.metrics + 0.25 real 0.12 user 0.09 sys + 11468800 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 7472 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 193 voluntary context switches + 763 involuntary context switches + 933888197 instructions retired + 262998524 cycles elapsed + 6390168 peak memory footprint + +### deep-1000-doctor-2.metrics + 0.30 real 0.12 user 0.09 sys + 11223040 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 7442 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 283 voluntary context switches + 921 involuntary context switches + 930921543 instructions retired + 265950062 cycles elapsed + 6144408 peak memory footprint + +### deep-1000-doctor-3.metrics + 0.20 real 0.11 user 0.08 sys + 11075584 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 7475 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 860 voluntary context switches + 524 involuntary context switches + 927846264 instructions retired + 249279187 cycles elapsed + 5996952 peak memory footprint + +### deep-1000-exact_claim-1.metrics + 0.25 real 0.11 user 0.11 sys + 10747904 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 15095 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 226 voluntary context switches + 394 involuntary context switches + 782450724 instructions retired + 219925054 cycles elapsed + 5652864 peak memory footprint + +### deep-1000-exact_claim-2.metrics + 0.25 real 0.11 user 0.11 sys + 10895360 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 14999 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 10 signals received + 261 voluntary context switches + 426 involuntary context switches + 784322993 instructions retired + 219364750 cycles elapsed + 5800320 peak memory footprint + +### deep-1000-exact_claim-3.metrics + 0.25 real 0.11 user 0.11 sys + 10944512 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 15090 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 8 signals received + 262 voluntary context switches + 532 involuntary context switches + 784060376 instructions retired + 219323473 cycles elapsed + 5849472 peak memory footprint + +### deep-1000-list-1.metrics + 0.19 real 0.09 user 0.08 sys + 10960896 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 7305 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 229 voluntary context switches + 271 involuntary context switches + 753305485 instructions retired + 200227249 cycles elapsed + 5865856 peak memory footprint + +### deep-1000-list-2.metrics + 0.18 real 0.09 user 0.08 sys + 10715136 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 7275 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 228 voluntary context switches + 323 involuntary context switches + 752286567 instructions retired + 198937797 cycles elapsed + 5620096 peak memory footprint + +### deep-1000-list-3.metrics + 0.18 real 0.09 user 0.07 sys + 10649600 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 7246 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 211 voluntary context switches + 474 involuntary context switches + 753764851 instructions retired + 206834860 cycles elapsed + 5554560 peak memory footprint + +### deep-1000-prefix_claim-1.metrics + 0.26 real 0.12 user 0.12 sys + 11042816 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 16228 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 270 voluntary context switches + 434 involuntary context switches + 787978662 instructions retired + 219918478 cycles elapsed + 5947776 peak memory footprint + +### deep-1000-prefix_claim-2.metrics + 0.29 real 0.12 user 0.13 sys + 10862592 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 16239 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 267 voluntary context switches + 490 involuntary context switches + 788506551 instructions retired + 222966151 cycles elapsed + 5767552 peak memory footprint + +### deep-1000-prefix_claim-3.metrics + 0.29 real 0.12 user 0.13 sys + 10698752 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 16183 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 266 voluntary context switches + 1222 involuntary context switches + 788402812 instructions retired + 229432503 cycles elapsed + 5603712 peak memory footprint + +### deep-10000-check-1.metrics + 1.02 real 0.54 user 0.47 sys + 31162368 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12718 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 2276 voluntary context switches + 1450 involuntary context switches + 6241606372 instructions retired + 1526579934 cycles elapsed + 26083736 peak memory footprint + +### deep-10000-check-2.metrics + 0.98 real 0.54 user 0.44 sys + 30228480 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12603 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2474 voluntary context switches + 1182 involuntary context switches + 6250317686 instructions retired + 1530071046 cycles elapsed + 25149848 peak memory footprint + +### deep-10000-check-3.metrics + 1.12 real 0.55 user 0.53 sys + 30441472 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12698 page reclaims + 74 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 6 signals received + 2144 voluntary context switches + 1861 involuntary context switches + 6251851150 instructions retired + 1559207857 cycles elapsed + 25362840 peak memory footprint + +### deep-10000-doctor-1.metrics + 1.75 real 0.78 user 0.60 sys + 28409856 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12567 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 5356 voluntary context switches + 7480 involuntary context switches + 8008230347 instructions retired + 2026239598 cycles elapsed + 23331224 peak memory footprint + +### deep-10000-doctor-2.metrics + 1.36 real 0.74 user 0.58 sys + 30752768 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12307 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 9834 voluntary context switches + 3487 involuntary context switches + 7999981356 instructions retired + 1976061195 cycles elapsed + 25674136 peak memory footprint + +### deep-10000-doctor-3.metrics + 1.36 real 0.74 user 0.56 sys + 30375936 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12530 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 9096 voluntary context switches + 3423 involuntary context switches + 7994756934 instructions retired + 1963068443 cycles elapsed + 25297304 peak memory footprint + +### deep-10000-exact_claim-1.metrics + 1.33 real 0.59 user 0.54 sys + 30310400 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 19283 page reclaims + 57 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 10 signals received + 2233 voluntary context switches + 2708 involuntary context switches + 6309338947 instructions retired + 1622098416 cycles elapsed + 25231768 peak memory footprint + +### deep-10000-exact_claim-2.metrics + 1.13 real 0.57 user 0.55 sys + 31522816 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 19027 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 10 signals received + 2369 voluntary context switches + 1696 involuntary context switches + 6325205973 instructions retired + 1568520348 cycles elapsed + 26460592 peak memory footprint + +### deep-10000-exact_claim-3.metrics + 0.99 real 0.54 user 0.45 sys + 32194560 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 19325 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 8 signals received + 2607 voluntary context switches + 1166 involuntary context switches + 6311841940 instructions retired + 1526264646 cycles elapsed + 27115928 peak memory footprint + +### deep-10000-list-1.metrics + 1.16 real 0.56 user 0.53 sys + 28229632 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 11579 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2242 voluntary context switches + 2263 involuntary context switches + 6239514924 instructions retired + 1524256261 cycles elapsed + 23151000 peak memory footprint + +### deep-10000-list-2.metrics + 1.14 real 0.55 user 0.53 sys + 29016064 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 11662 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2433 voluntary context switches + 1629 involuntary context switches + 6232129970 instructions retired + 1510792901 cycles elapsed + 23937432 peak memory footprint + +### deep-10000-list-3.metrics + 1.15 real 0.56 user 0.54 sys + 29261824 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 11583 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2390 voluntary context switches + 1723 involuntary context switches + 6236023340 instructions retired + 1514984936 cycles elapsed + 24183192 peak memory footprint + +### deep-10000-prefix_claim-1.metrics + 1.27 real 0.62 user 0.55 sys + 29802496 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 20853 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 14 signals received + 863 voluntary context switches + 2657 involuntary context switches + 6300379520 instructions retired + 1611992987 cycles elapsed + 24723864 peak memory footprint + +### deep-10000-prefix_claim-2.metrics + 1.01 real 0.58 user 0.44 sys + 30769152 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 20684 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 8 signals received + 2438 voluntary context switches + 1131 involuntary context switches + 6328358426 instructions retired + 1533380491 cycles elapsed + 25690520 peak memory footprint + +### deep-10000-prefix_claim-3.metrics + 1.20 real 0.59 user 0.53 sys + 27295744 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 20465 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 11 signals received + 2344 voluntary context switches + 2054 involuntary context switches + 6304504787 instructions retired + 1558055922 cycles elapsed + 22217112 peak memory footprint + +### empty-after-check-1.metrics + 0.09 real 0.03 user 0.03 sys + 8077312 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 5948 page reclaims + 32 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 23 voluntary context switches + 176 involuntary context switches + 114806855 instructions retired + 43839199 cycles elapsed + 2949456 peak memory footprint + +### empty-after-check-2.metrics + 0.08 real 0.03 user 0.03 sys + 8011776 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 5907 page reclaims + 25 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 2 signals received + 13 voluntary context switches + 183 involuntary context switches + 112362095 instructions retired + 41193106 cycles elapsed + 2883920 peak memory footprint + +### empty-after-check-3.metrics + 0.07 real 0.03 user 0.03 sys + 8093696 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 5951 page reclaims + 25 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 13 voluntary context switches + 154 involuntary context switches + 112714967 instructions retired + 42559459 cycles elapsed + 2965840 peak memory footprint + +### empty-after-doctor-1.metrics + 0.06 real 0.02 user 0.02 sys + 8192000 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4440 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 8 voluntary context switches + 107 involuntary context switches + 111224001 instructions retired + 41533383 cycles elapsed + 3064144 peak memory footprint + +### empty-after-doctor-2.metrics + 0.06 real 0.02 user 0.02 sys + 8093696 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4439 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 8 voluntary context switches + 119 involuntary context switches + 110292050 instructions retired + 38909565 cycles elapsed + 2965840 peak memory footprint + +### empty-after-doctor-3.metrics + 0.06 real 0.02 user 0.02 sys + 8159232 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4434 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 9 voluntary context switches + 132 involuntary context switches + 110784054 instructions retired + 40356415 cycles elapsed + 3031376 peak memory footprint + +### empty-after-exact_claim-1.metrics + 0.14 real 0.05 user 0.06 sys + 8339456 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12113 page reclaims + 42 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 10 signals received + 48 voluntary context switches + 356 involuntary context switches + 136999333 instructions retired + 57976528 cycles elapsed + 3211600 peak memory footprint + +### empty-after-exact_claim-2.metrics + 0.15 real 0.05 user 0.06 sys + 8388608 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12063 page reclaims + 41 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 11 signals received + 47 voluntary context switches + 391 involuntary context switches + 137595568 instructions retired + 58666119 cycles elapsed + 3260752 peak memory footprint + +### empty-after-exact_claim-3.metrics + 0.16 real 0.05 user 0.06 sys + 8355840 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12187 page reclaims + 41 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 9 signals received + 47 voluntary context switches + 387 involuntary context switches + 137868357 instructions retired + 56437240 cycles elapsed + 3227984 peak memory footprint + +### empty-after-list-1.metrics + 0.06 real 0.02 user 0.02 sys + 8028160 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4417 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 8 voluntary context switches + 198 involuntary context switches + 109133916 instructions retired + 41607938 cycles elapsed + 2900304 peak memory footprint + +### empty-after-list-2.metrics + 0.06 real 0.02 user 0.02 sys + 7995392 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4431 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 2 signals received + 8 voluntary context switches + 141 involuntary context switches + 111101405 instructions retired + 40454574 cycles elapsed + 2867536 peak memory footprint + +### empty-after-list-3.metrics + 0.06 real 0.02 user 0.02 sys + 8028160 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4391 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 8 voluntary context switches + 142 involuntary context switches + 107726088 instructions retired + 40003711 cycles elapsed + 2900304 peak memory footprint + +### empty-after-prefix_claim-1.metrics + 0.17 real 0.06 user 0.07 sys + 8404992 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 13163 page reclaims + 42 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 10 signals received + 53 voluntary context switches + 575 involuntary context switches + 144642408 instructions retired + 64030582 cycles elapsed + 3277136 peak memory footprint + +### empty-after-prefix_claim-2.metrics + 0.15 real 0.05 user 0.06 sys + 8355840 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 13206 page reclaims + 42 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 13 signals received + 51 voluntary context switches + 462 involuntary context switches + 142738780 instructions retired + 63553753 cycles elapsed + 3227984 peak memory footprint + +### empty-after-prefix_claim-3.metrics + 0.15 real 0.05 user 0.07 sys + 8372224 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 13143 page reclaims + 42 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 15 signals received + 47 voluntary context switches + 383 involuntary context switches + 143294515 instructions retired + 63178655 cycles elapsed + 3244368 peak memory footprint + +### empty-check-1.metrics + 0.13 real 0.04 user 0.04 sys + 8093696 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 5925 page reclaims + 25 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 13 voluntary context switches + 490 involuntary context switches + 117489796 instructions retired + 55522289 cycles elapsed + 2965840 peak memory footprint + +### empty-check-2.metrics + 0.09 real 0.03 user 0.03 sys + 7995392 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 5939 page reclaims + 25 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 13 voluntary context switches + 288 involuntary context switches + 114748459 instructions retired + 47808864 cycles elapsed + 2867536 peak memory footprint + +### empty-check-3.metrics + 0.15 real 0.04 user 0.04 sys + 8077312 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 5972 page reclaims + 25 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 11 voluntary context switches + 402 involuntary context switches + 114369674 instructions retired + 55402499 cycles elapsed + 2949456 peak memory footprint + +### empty-doctor-1.metrics + 0.19 real 0.03 user 0.03 sys + 8159232 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4491 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 7 voluntary context switches + 441 involuntary context switches + 112478237 instructions retired + 50944934 cycles elapsed + 3031376 peak memory footprint + +### empty-doctor-2.metrics + 0.10 real 0.03 user 0.03 sys + 8159232 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4454 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 8 voluntary context switches + 420 involuntary context switches + 112543202 instructions retired + 50808602 cycles elapsed + 3031376 peak memory footprint + +### empty-doctor-3.metrics + 0.09 real 0.03 user 0.03 sys + 8159232 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4464 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 9 voluntary context switches + 368 involuntary context switches + 112460500 instructions retired + 48238658 cycles elapsed + 3031376 peak memory footprint + +### empty-exact_claim-1.metrics + 0.20 real 0.06 user 0.08 sys + 8339456 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12093 page reclaims + 41 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 13 signals received + 41 voluntary context switches + 675 involuntary context switches + 138044714 instructions retired + 65858816 cycles elapsed + 3211600 peak memory footprint + +### empty-exact_claim-2.metrics + 0.19 real 0.06 user 0.08 sys + 8339456 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12123 page reclaims + 41 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 15 signals received + 36 voluntary context switches + 848 involuntary context switches + 139036533 instructions retired + 66088710 cycles elapsed + 3211600 peak memory footprint + +### empty-exact_claim-3.metrics + 0.22 real 0.06 user 0.08 sys + 8372224 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12218 page reclaims + 41 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 15 signals received + 37 voluntary context switches + 1087 involuntary context switches + 141280039 instructions retired + 69963050 cycles elapsed + 3244368 peak memory footprint + +### empty-list-1.metrics + 0.08 real 0.03 user 0.03 sys + 8044544 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4441 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 8 voluntary context switches + 226 involuntary context switches + 109994389 instructions retired + 50389247 cycles elapsed + 2916688 peak memory footprint + +### empty-list-2.metrics + 0.09 real 0.03 user 0.03 sys + 7979008 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4419 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 8 voluntary context switches + 328 involuntary context switches + 109719245 instructions retired + 48339128 cycles elapsed + 2851152 peak memory footprint + +### empty-list-3.metrics + 0.10 real 0.03 user 0.03 sys + 8077312 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 4452 page reclaims + 18 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 7 voluntary context switches + 368 involuntary context switches + 110130816 instructions retired + 47416407 cycles elapsed + 2949456 peak memory footprint + +### empty-prefix_claim-1.metrics + 0.26 real 0.07 user 0.09 sys + 8421376 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 13286 page reclaims + 63 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 15 signals received + 46 voluntary context switches + 1124 involuntary context switches + 145472417 instructions retired + 77854758 cycles elapsed + 3293520 peak memory footprint + +### empty-prefix_claim-2.metrics + 0.36 real 0.07 user 0.10 sys + 8372224 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 13189 page reclaims + 42 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 14 signals received + 44 voluntary context switches + 1312 involuntary context switches + 147116125 instructions retired + 81377191 cycles elapsed + 3244368 peak memory footprint + +### empty-prefix_claim-3.metrics + 0.24 real 0.07 user 0.09 sys + 8372224 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 13212 page reclaims + 42 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 16 signals received + 41 voluntary context switches + 868 involuntary context switches + 146390166 instructions retired + 78974347 cycles elapsed + 3244368 peak memory footprint + +### live-1000-check-1.metrics + 0.45 real 0.22 user 0.21 sys + 14467072 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 11085 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 2112 voluntary context switches + 767 involuntary context switches + 2353184984 instructions retired + 591534381 cycles elapsed + 9388440 peak memory footprint + +### live-1000-check-2.metrics + 0.46 real 0.22 user 0.20 sys + 14139392 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 11013 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 2159 voluntary context switches + 551 involuntary context switches + 2354261301 instructions retired + 589175073 cycles elapsed + 9044352 peak memory footprint + +### live-1000-check-3.metrics + 0.45 real 0.22 user 0.20 sys + 14204928 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 11050 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 2165 voluntary context switches + 688 involuntary context switches + 2346053355 instructions retired + 585452215 cycles elapsed + 9109888 peak memory footprint + +### live-1000-doctor-1.metrics + 2.76 real 2.18 user 0.46 sys + 16629760 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12625 page reclaims + 37 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 6 signals received + 5864 voluntary context switches + 3586 involuntary context switches + 32597466403 instructions retired + 6826909597 cycles elapsed + 11534720 peak memory footprint + +### live-1000-doctor-2.metrics + 3.01 real 2.19 user 0.50 sys + 17039360 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12999 page reclaims + 37 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 5499 voluntary context switches + 5067 involuntary context switches + 32579950919 instructions retired + 6860907577 cycles elapsed + 11944320 peak memory footprint + +### live-1000-doctor-3.metrics + 3.26 real 2.24 user 0.51 sys + 16252928 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 12794 page reclaims + 56 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 6 signals received + 3004 voluntary context switches + 6874 involuntary context switches + 32600685837 instructions retired + 6996908195 cycles elapsed + 11174296 peak memory footprint + +### live-1000-exact_claim-1.metrics + 0.52 real 0.24 user 0.24 sys + 14778368 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 17403 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 14 signals received + 2206 voluntary context switches + 914 involuntary context switches + 2380328378 instructions retired + 611482365 cycles elapsed + 9699736 peak memory footprint + +### live-1000-exact_claim-2.metrics + 0.52 real 0.24 user 0.24 sys + 14680064 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 17542 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 14 signals received + 2196 voluntary context switches + 1023 involuntary context switches + 2384585450 instructions retired + 609892344 cycles elapsed + 9601432 peak memory footprint + +### live-1000-exact_claim-3.metrics + 0.47 real 0.24 user 0.21 sys + 14499840 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 17326 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 9 signals received + 2310 voluntary context switches + 526 involuntary context switches + 2381939088 instructions retired + 599352080 cycles elapsed + 9404800 peak memory footprint + +### live-1000-list-1.metrics + 1.17 real 0.79 user 0.23 sys + 14598144 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 9845 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2987 voluntary context switches + 1492 involuntary context switches + 9385985544 instructions retired + 2380133934 cycles elapsed + 9503104 peak memory footprint + +### live-1000-list-2.metrics + 1.15 real 0.79 user 0.23 sys + 14630912 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 9872 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2828 voluntary context switches + 1476 involuntary context switches + 9392730905 instructions retired + 2370491803 cycles elapsed + 9552280 peak memory footprint + +### live-1000-list-3.metrics + 1.13 real 0.78 user 0.23 sys + 15024128 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 9892 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 2975 voluntary context switches + 1343 involuntary context switches + 9397634876 instructions retired + 2364023468 cycles elapsed + 9929088 peak memory footprint + +### live-1000-prefix_claim-1.metrics + 0.80 real 0.50 user 0.25 sys + 14385152 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 18890 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 13 signals received + 3181 voluntary context switches + 981 involuntary context switches + 5648532685 instructions retired + 1401347541 cycles elapsed + 9290112 peak memory footprint + +### live-1000-prefix_claim-2.metrics + 0.79 real 0.50 user 0.26 sys + 14991360 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 18918 page reclaims + 52 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 10 signals received + 3119 voluntary context switches + 1002 involuntary context switches + 5650467425 instructions retired + 1405938663 cycles elapsed + 9896320 peak memory footprint + +### live-1000-prefix_claim-3.metrics + 0.81 real 0.50 user 0.26 sys + 15024128 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 18864 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 11 signals received + 3006 voluntary context switches + 1156 involuntary context switches + 5649078929 instructions retired + 1401056997 cycles elapsed + 9929088 peak memory footprint + +### reuse-1000-check-1.metrics + 0.18 real 0.05 user 0.05 sys + 8339456 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 8223 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 26 voluntary context switches + 434 involuntary context switches + 128270418 instructions retired + 55978230 cycles elapsed + 3228008 peak memory footprint + +### reuse-1000-check-2.metrics + 0.13 real 0.04 user 0.05 sys + 8323072 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 8168 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 21 voluntary context switches + 345 involuntary context switches + 124307742 instructions retired + 53719725 cycles elapsed + 3211624 peak memory footprint + +### reuse-1000-check-3.metrics + 0.12 real 0.04 user 0.05 sys + 8323072 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 8116 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 2 signals received + 22 voluntary context switches + 395 involuntary context switches + 124942126 instructions retired + 49617453 cycles elapsed + 3211624 peak memory footprint + +### reuse-1000-doctor-1.metrics + 0.10 real 0.04 user 0.04 sys + 8470528 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6735 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 2 signals received + 17 voluntary context switches + 333 involuntary context switches + 126532431 instructions retired + 50663570 cycles elapsed + 3359080 peak memory footprint + +### reuse-1000-doctor-2.metrics + 0.09 real 0.04 user 0.04 sys + 8421376 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6654 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 18 voluntary context switches + 324 involuntary context switches + 126696509 instructions retired + 51453666 cycles elapsed + 3309928 peak memory footprint + +### reuse-1000-doctor-3.metrics + 0.10 real 0.04 user 0.04 sys + 8454144 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6665 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 18 voluntary context switches + 278 involuntary context switches + 127724672 instructions retired + 50548719 cycles elapsed + 3342696 peak memory footprint + +### reuse-1000-exact_claim-1.metrics + 0.22 real 0.07 user 0.08 sys + 8552448 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 14430 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 51 voluntary context switches + 685 involuntary context switches + 152220319 instructions retired + 69293057 cycles elapsed + 3441000 peak memory footprint + +### reuse-1000-exact_claim-2.metrics + 0.17 real 0.07 user 0.08 sys + 8650752 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 14558 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 54 voluntary context switches + 580 involuntary context switches + 150508385 instructions retired + 63498801 cycles elapsed + 3539304 peak memory footprint + +### reuse-1000-exact_claim-3.metrics + 0.17 real 0.07 user 0.08 sys + 8552448 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 14786 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 10 signals received + 55 voluntary context switches + 698 involuntary context switches + 151988052 instructions retired + 65605479 cycles elapsed + 3441000 peak memory footprint + +### reuse-1000-list-1.metrics + 0.10 real 0.03 user 0.04 sys + 8323072 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6697 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 16 voluntary context switches + 303 involuntary context switches + 121074352 instructions retired + 45489892 cycles elapsed + 3211624 peak memory footprint + +### reuse-1000-list-2.metrics + 0.10 real 0.03 user 0.04 sys + 8355840 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6715 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 1 signals received + 17 voluntary context switches + 273 involuntary context switches + 119561599 instructions retired + 48038720 cycles elapsed + 3244392 peak memory footprint + +### reuse-1000-list-3.metrics + 0.09 real 0.03 user 0.04 sys + 8388608 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6606 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 2 signals received + 17 voluntary context switches + 212 involuntary context switches + 119942343 instructions retired + 47270706 cycles elapsed + 3277160 peak memory footprint + +### reuse-1000-prefix_claim-1.metrics + 0.20 real 0.07 user 0.08 sys + 8552448 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 15547 page reclaims + 52 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 9 signals received + 58 voluntary context switches + 687 involuntary context switches + 156255414 instructions retired + 70382112 cycles elapsed + 3441000 peak memory footprint + +### reuse-1000-prefix_claim-2.metrics + 0.19 real 0.07 user 0.08 sys + 8634368 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 15570 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 11 signals received + 58 voluntary context switches + 609 involuntary context switches + 155307730 instructions retired + 69887955 cycles elapsed + 3522920 peak memory footprint + +### reuse-1000-prefix_claim-3.metrics + 0.19 real 0.07 user 0.08 sys + 8617984 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 15659 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 14 signals received + 54 voluntary context switches + 565 involuntary context switches + 155042387 instructions retired + 70607095 cycles elapsed + 3506536 peak memory footprint + +### reuse-10000-check-1.metrics + 0.14 real 0.04 user 0.05 sys + 8404992 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 8073 page reclaims + 38 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 6 signals received + 36 voluntary context switches + 351 involuntary context switches + 126646998 instructions retired + 52253543 cycles elapsed + 3293544 peak memory footprint + +### reuse-10000-check-2.metrics + 0.14 real 0.05 user 0.05 sys + 8388608 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 8219 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 25 voluntary context switches + 567 involuntary context switches + 130068424 instructions retired + 57507088 cycles elapsed + 3277160 peak memory footprint + +### reuse-10000-check-3.metrics + 0.10 real 0.04 user 0.04 sys + 8339456 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 8205 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 2 signals received + 24 voluntary context switches + 352 involuntary context switches + 126385714 instructions retired + 51145742 cycles elapsed + 3228008 peak memory footprint + +### reuse-10000-doctor-1.metrics + 0.09 real 0.03 user 0.03 sys + 8437760 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6699 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 2 signals received + 18 voluntary context switches + 169 involuntary context switches + 126090161 instructions retired + 46425244 cycles elapsed + 3326312 peak memory footprint + +### reuse-10000-doctor-2.metrics + 0.08 real 0.03 user 0.03 sys + 8437760 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6692 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 18 voluntary context switches + 151 involuntary context switches + 126950675 instructions retired + 44659458 cycles elapsed + 3326312 peak memory footprint + +### reuse-10000-doctor-3.metrics + 0.08 real 0.03 user 0.03 sys + 8536064 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6733 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 1 signals received + 18 voluntary context switches + 141 involuntary context switches + 126688307 instructions retired + 46917213 cycles elapsed + 3424616 peak memory footprint + +### reuse-10000-exact_claim-1.metrics + 0.31 real 0.06 user 0.08 sys + 8650752 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 14491 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 10 signals received + 147 voluntary context switches + 686 involuntary context switches + 152528604 instructions retired + 68243730 cycles elapsed + 3539304 peak memory footprint + +### reuse-10000-exact_claim-2.metrics + 0.19 real 0.06 user 0.07 sys + 8552448 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 14455 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 11 signals received + 56 voluntary context switches + 395 involuntary context switches + 150337429 instructions retired + 63402398 cycles elapsed + 3441000 peak memory footprint + +### reuse-10000-exact_claim-3.metrics + 0.18 real 0.06 user 0.07 sys + 8568832 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 14501 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 11 signals received + 54 voluntary context switches + 430 involuntary context switches + 150652498 instructions retired + 67011985 cycles elapsed + 3457384 peak memory footprint + +### reuse-10000-list-1.metrics + 0.09 real 0.03 user 0.04 sys + 8290304 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6674 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 16 voluntary context switches + 173 involuntary context switches + 121349653 instructions retired + 47502897 cycles elapsed + 3178856 peak memory footprint + +### reuse-10000-list-2.metrics + 0.08 real 0.03 user 0.03 sys + 8323072 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6692 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 16 voluntary context switches + 171 involuntary context switches + 119088363 instructions retired + 43376458 cycles elapsed + 3211624 peak memory footprint + +### reuse-10000-list-3.metrics + 0.09 real 0.04 user 0.03 sys + 8323072 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 6682 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 18 voluntary context switches + 216 involuntary context switches + 119511254 instructions retired + 45911470 cycles elapsed + 3211624 peak memory footprint + +### reuse-10000-prefix_claim-1.metrics + 0.16 real 0.06 user 0.07 sys + 8503296 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 15491 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 13 signals received + 60 voluntary context switches + 275 involuntary context switches + 153546007 instructions retired + 63473137 cycles elapsed + 3391848 peak memory footprint + +### reuse-10000-prefix_claim-2.metrics + 0.20 real 0.07 user 0.08 sys + 8617984 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 15629 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 14 signals received + 54 voluntary context switches + 590 involuntary context switches + 156463845 instructions retired + 72667681 cycles elapsed + 3506536 peak memory footprint + +### reuse-10000-prefix_claim-3.metrics + 0.18 real 0.07 user 0.08 sys + 8601600 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 15612 page reclaims + 52 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 14 signals received + 57 voluntary context switches + 638 involuntary context switches + 155335292 instructions retired + 73385240 cycles elapsed + 3490152 peak memory footprint + +### wide-1000-check-1.metrics + 0.38 real 0.14 user 0.18 sys + 12386304 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 10728 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 1987 voluntary context switches + 937 involuntary context switches + 1278159934 instructions retired + 359781268 cycles elapsed + 7291264 peak memory footprint + +### wide-1000-check-2.metrics + 0.34 real 0.14 user 0.17 sys + 12435456 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 10625 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 1901 voluntary context switches + 1080 involuntary context switches + 1277238884 instructions retired + 357978319 cycles elapsed + 7340416 peak memory footprint + +### wide-1000-check-3.metrics + 0.32 real 0.14 user 0.17 sys + 12517376 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 10667 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 2057 voluntary context switches + 664 involuntary context switches + 1277571981 instructions retired + 355606432 cycles elapsed + 7422336 peak memory footprint + +### wide-1000-doctor-1.metrics + 0.33 real 0.15 user 0.16 sys + 12484608 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 9327 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2414 voluntary context switches + 547 involuntary context switches + 1450643366 instructions retired + 389388578 cycles elapsed + 7389568 peak memory footprint + +### wide-1000-doctor-2.metrics + 0.32 real 0.15 user 0.16 sys + 12468224 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 9386 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 3012 voluntary context switches + 544 involuntary context switches + 1453009067 instructions retired + 386059502 cycles elapsed + 7373184 peak memory footprint + +### wide-1000-doctor-3.metrics + 0.33 real 0.15 user 0.16 sys + 12058624 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 9293 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 2948 voluntary context switches + 465 involuntary context switches + 1451761715 instructions retired + 386644073 cycles elapsed + 6963584 peak memory footprint + +### wide-1000-exact_claim-1.metrics + 0.40 real 0.16 user 0.21 sys + 13008896 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 17128 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 2057 voluntary context switches + 867 involuntary context switches + 1309150407 instructions retired + 380202513 cycles elapsed + 7930264 peak memory footprint + +### wide-1000-exact_claim-2.metrics + 0.46 real 0.17 user 0.23 sys + 12238848 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 17110 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 10 signals received + 1592 voluntary context switches + 1225 involuntary context switches + 1311880510 instructions retired + 383294988 cycles elapsed + 7160216 peak memory footprint + +### wide-1000-exact_claim-3.metrics + 0.51 real 0.18 user 0.24 sys + 12484608 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 17228 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 16 signals received + 1419 voluntary context switches + 1554 involuntary context switches + 1307674459 instructions retired + 400502770 cycles elapsed + 7405976 peak memory footprint + +### wide-1000-list-1.metrics + 0.31 real 0.13 user 0.16 sys + 12451840 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 9262 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2196 voluntary context switches + 480 involuntary context switches + 1277533884 instructions retired + 342932522 cycles elapsed + 7356800 peak memory footprint + +### wide-1000-list-2.metrics + 0.29 real 0.13 user 0.14 sys + 12353536 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 9198 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2193 voluntary context switches + 470 involuntary context switches + 1275107794 instructions retired + 344041501 cycles elapsed + 7258496 peak memory footprint + +### wide-1000-list-3.metrics + 0.29 real 0.13 user 0.15 sys + 12353536 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 9202 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 2174 voluntary context switches + 468 involuntary context switches + 1274115474 instructions retired + 340070012 cycles elapsed + 7258496 peak memory footprint + +### wide-1000-prefix_claim-1.metrics + 0.43 real 0.17 user 0.23 sys + 12025856 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 18018 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 14 signals received + 1935 voluntary context switches + 1022 involuntary context switches + 1312558436 instructions retired + 385046257 cycles elapsed + 6930816 peak memory footprint + +### wide-1000-prefix_claim-2.metrics + 0.42 real 0.17 user 0.22 sys + 12386304 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 18269 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 13 signals received + 2077 voluntary context switches + 998 involuntary context switches + 1314344119 instructions retired + 390687637 cycles elapsed + 7307672 peak memory footprint + +### wide-1000-prefix_claim-3.metrics + 0.43 real 0.17 user 0.23 sys + 12517376 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 18459 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 2066 voluntary context switches + 846 involuntary context switches + 1318245187 instructions retired + 388092439 cycles elapsed + 7422336 peak memory footprint + +### wide-10000-check-1.metrics + 6.80 real 1.13 user 2.11 sys + 39075840 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 21802 page reclaims + 10039 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 6 signals received + 19892 voluntary context switches + 35747 involuntary context switches + 11566270535 instructions retired + 3305247707 cycles elapsed + 37421464 peak memory footprint + +### wide-10000-check-2.metrics + 3.63 real 1.08 user 1.64 sys + 42319872 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 31817 page reclaims + 34 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 5 signals received + 20431 voluntary context switches + 12116 involuntary context switches + 11629572985 instructions retired + 3234652838 cycles elapsed + 37241240 peak memory footprint + +### wide-10000-check-3.metrics + 3.06 real 1.08 user 1.69 sys + 41074688 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 31601 page reclaims + 42 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 20452 voluntary context switches + 11212 involuntary context switches + 11570486348 instructions retired + 3277986049 cycles elapsed + 36454832 peak memory footprint + +### wide-10000-doctor-1.metrics + 2.45 real 1.18 user 1.32 sys + 42418176 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 31519 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 2 signals received + 30650 voluntary context switches + 3444 involuntary context switches + 13310174794 instructions retired + 3400143105 cycles elapsed + 37339544 peak memory footprint + +### wide-10000-doctor-2.metrics + 2.46 real 1.18 user 1.30 sys + 46448640 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 31830 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 30875 voluntary context switches + 3017 involuntary context switches + 13315093481 instructions retired + 3376644056 cycles elapsed + 41370008 peak memory footprint + +### wide-10000-doctor-3.metrics + 2.27 real 1.16 user 1.20 sys + 48529408 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 31670 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 2 signals received + 31294 voluntary context switches + 2783 involuntary context switches + 13316537363 instructions retired + 3350403283 cycles elapsed + 43450776 peak memory footprint + +### wide-10000-exact_claim-1.metrics + 3.69 real 1.14 user 1.66 sys + 41713664 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 38212 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 15 signals received + 13755 voluntary context switches + 13257 involuntary context switches + 11595257693 instructions retired + 3289293538 cycles elapsed + 36635032 peak memory footprint + +### wide-10000-exact_claim-2.metrics + 2.74 real 1.06 user 1.55 sys + 40304640 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 38138 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 15 signals received + 21582 voluntary context switches + 6767 involuntary context switches + 11610979945 instructions retired + 3142853983 cycles elapsed + 35226008 peak memory footprint + +### wide-10000-exact_claim-3.metrics + 2.69 real 1.04 user 1.51 sys + 42483712 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 38091 page reclaims + 50 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 19254 voluntary context switches + 5357 involuntary context switches + 11628222478 instructions retired + 3102639177 cycles elapsed + 37405080 peak memory footprint + +### wide-10000-list-1.metrics + 2.10 real 0.99 user 1.17 sys + 42369024 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 30606 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 22121 voluntary context switches + 2186 involuntary context switches + 11561554032 instructions retired + 2912212468 cycles elapsed + 37290392 peak memory footprint + +### wide-10000-list-2.metrics + 2.07 real 0.99 user 1.14 sys + 42270720 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 30475 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 4 signals received + 21529 voluntary context switches + 1870 involuntary context switches + 11552037323 instructions retired + 2917850579 cycles elapsed + 37192088 peak memory footprint + +### wide-10000-list-3.metrics + 2.14 real 1.00 user 1.18 sys + 40714240 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 30380 page reclaims + 27 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 3 signals received + 21452 voluntary context switches + 2551 involuntary context switches + 11557273973 instructions retired + 2961033187 cycles elapsed + 35635608 peak memory footprint + +### wide-10000-prefix_claim-1.metrics + 2.22 real 1.02 user 1.23 sys + 42450944 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 40026 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 16 signals received + 19390 voluntary context switches + 3418 involuntary context switches + 11594668329 instructions retired + 3026304582 cycles elapsed + 37372312 peak memory footprint + +### wide-10000-prefix_claim-2.metrics + 2.42 real 1.05 user 1.38 sys + 42401792 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 39656 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 13 signals received + 21881 voluntary context switches + 3704 involuntary context switches + 11649069871 instructions retired + 3048051181 cycles elapsed + 37323160 peak memory footprint + +### wide-10000-prefix_claim-3.metrics + 2.63 real 1.03 user 1.27 sys + 41385984 maximum resident set size + 0 average shared memory size + 0 average unshared data size + 0 average unshared stack size + 39570 page reclaims + 51 page faults + 0 swaps + 0 block input operations + 0 block output operations + 0 messages sent + 0 messages received + 12 signals received + 21942 voluntary context switches + 2916 involuntary context switches + 11616224204 instructions retired + 2970392764 cycles elapsed + 36307352 peak memory footprint + diff --git a/docs/benchmarks/results/2026-09-22/observations.csv b/docs/benchmarks/results/2026-09-22/observations.csv new file mode 100644 index 0000000..c662d20 --- /dev/null +++ b/docs/benchmarks/results/2026-09-22/observations.csv @@ -0,0 +1,136 @@ +scenario,operation,repetition,elapsed_us,max_rss_bytes,exit_code,stdout_lines +empty,check,1,140349,8093696,0,1 +empty,check,2,122835,7995392,0,1 +empty,check,3,165215,8077312,0,1 +empty,exact_claim,1,204391,8339456,0,1 +empty,exact_claim,2,204685,8339456,0,1 +empty,exact_claim,3,230801,8372224,0,1 +empty,prefix_claim,1,268134,8421376,0,1 +empty,prefix_claim,2,376280,8372224,0,1 +empty,prefix_claim,3,246909,8372224,0,1 +empty,list,1,94167,8044544,0,0 +empty,list,2,105187,7979008,0,0 +empty,list,3,116587,8077312,0,0 +empty,doctor,1,222286,8159232,0,1 +empty,doctor,2,146920,8159232,0,1 +empty,doctor,3,162085,8159232,0,1 +wide-1000,check,1,390001,12386304,0,1 +wide-1000,check,2,348307,12435456,0,1 +wide-1000,check,3,326217,12517376,0,1 +wide-1000,exact_claim,1,413170,13008896,0,1 +wide-1000,exact_claim,2,474293,12238848,0,1 +wide-1000,exact_claim,3,515319,12484608,0,1 +wide-1000,prefix_claim,1,435890,12025856,0,1 +wide-1000,prefix_claim,2,425523,12386304,0,1 +wide-1000,prefix_claim,3,436852,12517376,0,1 +wide-1000,list,1,319017,12451840,0,0 +wide-1000,list,2,298510,12353536,0,0 +wide-1000,list,3,298607,12353536,0,0 +wide-1000,doctor,1,333914,12484608,0,1 +wide-1000,doctor,2,326917,12468224,0,1 +wide-1000,doctor,3,342554,12058624,0,1 +wide-10000,check,1,6810787,39075840,0,1 +wide-10000,check,2,3641052,42319872,0,1 +wide-10000,check,3,3070117,41074688,0,1 +wide-10000,exact_claim,1,3696581,41713664,0,1 +wide-10000,exact_claim,2,2753221,40304640,0,1 +wide-10000,exact_claim,3,2699529,42483712,0,1 +wide-10000,prefix_claim,1,2229934,42450944,0,1 +wide-10000,prefix_claim,2,2432716,42401792,0,1 +wide-10000,prefix_claim,3,2643295,41385984,0,1 +wide-10000,list,1,2109775,42369024,0,0 +wide-10000,list,2,2077166,42270720,0,0 +wide-10000,list,3,2148337,40714240,0,0 +wide-10000,doctor,1,2461855,42418176,0,1 +wide-10000,doctor,2,2473124,46448640,0,1 +wide-10000,doctor,3,2278075,48529408,0,1 +deep-1000,check,1,200989,10649600,0,1 +deep-1000,check,2,204095,10780672,0,1 +deep-1000,check,3,200741,10649600,0,1 +deep-1000,exact_claim,1,259061,10747904,0,1 +deep-1000,exact_claim,2,259907,10895360,0,1 +deep-1000,exact_claim,3,284244,10944512,0,1 +deep-1000,prefix_claim,1,269942,11042816,0,1 +deep-1000,prefix_claim,2,295501,10862592,0,1 +deep-1000,prefix_claim,3,306765,10698752,0,1 +deep-1000,list,1,201654,10960896,0,0 +deep-1000,list,2,193450,10715136,0,0 +deep-1000,list,3,190670,10649600,0,0 +deep-1000,doctor,1,261042,11468800,0,1 +deep-1000,doctor,2,316060,11223040,0,1 +deep-1000,doctor,3,213726,11075584,0,1 +deep-10000,check,1,1030860,31162368,0,1 +deep-10000,check,2,985510,30228480,0,1 +deep-10000,check,3,1132827,30441472,0,1 +deep-10000,exact_claim,1,1344914,30310400,0,1 +deep-10000,exact_claim,2,1143546,31522816,0,1 +deep-10000,exact_claim,3,1000280,32194560,0,1 +deep-10000,prefix_claim,1,1278824,29802496,0,1 +deep-10000,prefix_claim,2,1022609,30769152,0,1 +deep-10000,prefix_claim,3,1209040,27295744,0,1 +deep-10000,list,1,1172903,28229632,0,0 +deep-10000,list,2,1146484,29016064,0,0 +deep-10000,list,3,1157725,29261824,0,0 +deep-10000,doctor,1,1759788,28409856,0,1 +deep-10000,doctor,2,1371903,30752768,0,1 +deep-10000,doctor,3,1365184,30375936,0,1 +reuse-1000,check,1,207641,8339456,0,1 +reuse-1000,check,2,138964,8323072,0,1 +reuse-1000,check,3,131173,8323072,0,1 +reuse-1000,exact_claim,1,224993,8552448,0,1 +reuse-1000,exact_claim,2,177180,8650752,0,1 +reuse-1000,exact_claim,3,179566,8552448,0,1 +reuse-1000,prefix_claim,1,213756,8552448,0,1 +reuse-1000,prefix_claim,2,197170,8634368,0,1 +reuse-1000,prefix_claim,3,194397,8617984,0,1 +reuse-1000,list,1,107144,8323072,0,0 +reuse-1000,list,2,120620,8355840,0,0 +reuse-1000,list,3,102741,8388608,0,0 +reuse-1000,doctor,1,107687,8470528,0,1 +reuse-1000,doctor,2,105070,8421376,0,1 +reuse-1000,doctor,3,106641,8454144,0,1 +reuse-10000,check,1,150382,8404992,0,1 +reuse-10000,check,2,297500,8388608,0,1 +reuse-10000,check,3,211878,8339456,0,1 +reuse-10000,exact_claim,1,414399,8650752,0,1 +reuse-10000,exact_claim,2,202645,8552448,0,1 +reuse-10000,exact_claim,3,193084,8568832,0,1 +reuse-10000,prefix_claim,1,170672,8503296,0,1 +reuse-10000,prefix_claim,2,208163,8617984,0,1 +reuse-10000,prefix_claim,3,192988,8601600,0,1 +reuse-10000,list,1,94988,8290304,0,0 +reuse-10000,list,2,94765,8323072,0,0 +reuse-10000,list,3,98381,8323072,0,0 +reuse-10000,doctor,1,97395,8437760,0,1 +reuse-10000,doctor,2,87869,8437760,0,1 +reuse-10000,doctor,3,89112,8536064,0,1 +live-1000,check,1,460109,14467072,0,1 +live-1000,check,2,464923,14139392,0,1 +live-1000,check,3,460172,14204928,0,1 +live-1000,exact_claim,1,546016,14778368,0,1 +live-1000,exact_claim,2,539272,14680064,0,1 +live-1000,exact_claim,3,482565,14499840,0,1 +live-1000,prefix_claim,1,805559,14385152,0,1 +live-1000,prefix_claim,2,803729,14991360,0,1 +live-1000,prefix_claim,3,814064,15024128,0,1 +live-1000,list,1,1180926,14598144,0,1000 +live-1000,list,2,1159651,14630912,0,1000 +live-1000,list,3,1143225,15024128,0,1000 +live-1000,doctor,1,2773695,16629760,0,1 +live-1000,doctor,2,3016559,17039360,0,1 +live-1000,doctor,3,3290683,16252928,0,1 +empty-after,check,1,97030,8077312,0,1 +empty-after,check,2,94422,8011776,0,1 +empty-after,check,3,86150,8093696,0,1 +empty-after,exact_claim,1,150912,8339456,0,1 +empty-after,exact_claim,2,165104,8388608,0,1 +empty-after,exact_claim,3,169660,8355840,0,1 +empty-after,prefix_claim,1,178408,8404992,0,1 +empty-after,prefix_claim,2,163095,8355840,0,1 +empty-after,prefix_claim,3,163023,8372224,0,1 +empty-after,list,1,75712,8028160,0,0 +empty-after,list,2,71045,7995392,0,0 +empty-after,list,3,70937,8028160,0,0 +empty-after,doctor,1,74855,8192000,0,1 +empty-after,doctor,2,65517,8093696,0,1 +empty-after,doctor,3,70684,8159232,0,1 diff --git a/docs/benchmarks/results/2026-09-22/summary.csv b/docs/benchmarks/results/2026-09-22/summary.csv new file mode 100644 index 0000000..19ad9b5 --- /dev/null +++ b/docs/benchmarks/results/2026-09-22/summary.csv @@ -0,0 +1,46 @@ +scenario,operation,repetitions,min_us,median_us,max_us +deep-1000,check,3,200741,200989,204095 +deep-1000,doctor,3,213726,261042,316060 +deep-1000,exact_claim,3,259061,259907,284244 +deep-1000,list,3,190670,193450,201654 +deep-1000,prefix_claim,3,269942,295501,306765 +deep-10000,check,3,985510,1030860,1132827 +deep-10000,doctor,3,1365184,1371903,1759788 +deep-10000,exact_claim,3,1000280,1143546,1344914 +deep-10000,list,3,1146484,1157725,1172903 +deep-10000,prefix_claim,3,1022609,1209040,1278824 +empty,check,3,122835,140349,165215 +empty,doctor,3,146920,162085,222286 +empty,exact_claim,3,204391,204685,230801 +empty,list,3,94167,105187,116587 +empty,prefix_claim,3,246909,268134,376280 +empty-after,check,3,86150,94422,97030 +empty-after,doctor,3,65517,70684,74855 +empty-after,exact_claim,3,150912,165104,169660 +empty-after,list,3,70937,71045,75712 +empty-after,prefix_claim,3,163023,163095,178408 +live-1000,check,3,460109,460172,464923 +live-1000,doctor,3,2773695,3016559,3290683 +live-1000,exact_claim,3,482565,539272,546016 +live-1000,list,3,1143225,1159651,1180926 +live-1000,prefix_claim,3,803729,805559,814064 +reuse-1000,check,3,131173,138964,207641 +reuse-1000,doctor,3,105070,106641,107687 +reuse-1000,exact_claim,3,177180,179566,224993 +reuse-1000,list,3,102741,107144,120620 +reuse-1000,prefix_claim,3,194397,197170,213756 +reuse-10000,check,3,150382,211878,297500 +reuse-10000,doctor,3,87869,89112,97395 +reuse-10000,exact_claim,3,193084,202645,414399 +reuse-10000,list,3,94765,94988,98381 +reuse-10000,prefix_claim,3,170672,192988,208163 +wide-1000,check,3,326217,348307,390001 +wide-1000,doctor,3,326917,333914,342554 +wide-1000,exact_claim,3,413170,474293,515319 +wide-1000,list,3,298510,298607,319017 +wide-1000,prefix_claim,3,425523,435890,436852 +wide-10000,check,3,3070117,3641052,6810787 +wide-10000,doctor,3,2278075,2461855,2473124 +wide-10000,exact_claim,3,2699529,2753221,3696581 +wide-10000,list,3,2077166,2109775,2148337 +wide-10000,prefix_claim,3,2229934,2432716,2643295 diff --git a/scripts/benchmark-directory-tokens.sh b/scripts/benchmark-directory-tokens.sh new file mode 100644 index 0000000..2d934e9 --- /dev/null +++ b/scripts/benchmark-directory-tokens.sh @@ -0,0 +1,352 @@ +#!/usr/bin/env bash +# Informational benchmark. Large fixtures are synthetic loose Git objects/refs, +# calibrated against real claim/release by test/directory-token-churn.sh. +set -euo pipefail +export LC_ALL=C +unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE GIT_COMMON_DIR GIT_PREFIX +BENCH_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +fail() { + printf 'directory-token benchmark: %s\n' "$*" >&2 + return 2 +} + +fixture() { # New STORE, wide|deep|reuse, count, optional live + local store="$1" shape="$2" count="$3" live="${4:-released}" + [[ "${count}" =~ ^[0-9]{1,5}$ ]] || { + fail 'count must be 0..10000' + return 2 + } + ((10#${count} <= 10000)) || { + fail 'count must be 0..10000' + return 2 + } + count=$((10#${count})) + [[ "${live}" == released || "${live}" == live ]] || { + fail 'state must be released or live' + return 2 + } + local records="${count}" + case "${shape}" in + wide | reuse) ;; + deep) + ((count % 10 == 0)) || { + fail 'deep count must be a multiple of 10 prefixes' + return 2 + } + records=$((count / 10)) + ;; + *) + fail 'shape must be wide, deep, or reuse' + return 2 + ;; + esac + [[ ! -e "${store}" ]] || { + fail 'refusing an existing store' + return 2 + } + mkdir "${store}" + git init --bare -q "${store}" + local inputs="${store}/fixture-inputs" i path job ancestor prefix file text + local record_files=() prefix_files=() path_files=() record_oids=() prefix_oids=() path_oids=() prefixes=() + local -A last_record=() prefix_seen=() + mkdir "${inputs}" + for ((i = 1; i <= records; i++)); do + printf -v job 'j%05d' "${i}" + case "${shape}" in + wide) printf -v path 'd%05d/file.md' "${i}" ;; + deep) printf -v path 'g%05d/a/b/c/d/e/f/g/h/i/file.md' "${i}" ;; + reuse) printf -v path 'shared/a/b/c/d/e/f/g/h/i/file%05d.md' "${i}" ;; + *) return 2 ;; + esac + file="${inputs}/record-${i}" + printf 'schema: git-locks/1\njob: %s\nholder: benchmark\nclaimed: 1000000\nexpires: 1014400\nfamily: 0\nacquisition: fixture-%s\npaths:\n%s\n' "${job}" "${i}" "${path}" >"${file}" + record_files+=("${file}") + if [[ "${live}" == live ]]; then + file="${inputs}/path-${i}" + printf '%s' "${path}" >"${file}" + path_files+=("${file}") + fi + ancestor="${path%/*}/" + prefix='' + while [[ -n "${ancestor}" ]]; do + prefix+="${ancestor%%/*}/" + ancestor="${ancestor#*/}" + last_record["${prefix}"]=$((i - 1)) + if [[ -z "${prefix_seen[${prefix}]+x}" ]]; then + prefix_seen["${prefix}"]=1 + prefixes+=("${prefix}") + file="${inputs}/prefix-${#prefixes[@]}" + printf '%s' "${prefix}" >"${file}" + prefix_files+=("${file}") + fi + done + done + if ((records > 0)); then + text="$(printf '%s\n' "${record_files[@]}" | git --git-dir="${store}" hash-object -w --stdin-paths)" + mapfile -t record_oids <<<"${text}" + text="$(printf '%s\n' "${prefix_files[@]}" | git --git-dir="${store}" hash-object --stdin-paths)" + mapfile -t prefix_oids <<<"${text}" + if [[ "${live}" == live ]]; then + text="$(printf '%s\n' "${path_files[@]}" | git --git-dir="${store}" hash-object --stdin-paths)" + mapfile -t path_oids <<<"${text}" + fi + { + printf 'start\n' + for i in "${!prefixes[@]}"; do + printf 'create refs/locks/dirs/%s %s\n' "${prefix_oids[${i}]}" "${record_oids[${last_record[${prefixes[${i}]}]}]}" + done + if [[ "${live}" == live ]]; then + for i in "${!record_oids[@]}"; do + printf 'create refs/locks/jobs/j%05d %s\n' "$((i + 1))" "${record_oids[${i}]}" + printf 'create refs/locks/paths/%s %s\n' "${path_oids[${i}]}" "${record_oids[${i}]}" + done + fi + printf 'prepare\ncommit\n' + } >"${inputs}/transaction" + git --git-dir="${store}" update-ref --stdin <"${inputs}/transaction" >/dev/null + fi + local footprint + footprint="$(du -sk "${store}")" + read -r FIXTURE_WORKING_KIB _ <<<"${footprint}" + ((FIXTURE_WORKING_KIB <= 204800)) || { + fail 'fixture working footprint exceeded 200 MiB' + return 1 + } + # These files were created above in a newly created, exclusively owned store. + rm -rf "${inputs}" +} + +verify() { # STORE expected directory refs, expected live jobs/path refs + local store="$1" want_dirs="$2" want_jobs="$3" dirs=0 jobs=0 paths=0 ref rows + rows="$(git --git-dir="${store}" for-each-ref --format='%(refname)')" || return 1 + while IFS= read -r ref; do + [[ -n "${ref}" ]] || continue + case "${ref}" in + refs/locks/dirs/*) dirs=$((dirs + 1)) ;; + refs/locks/jobs/*) jobs=$((jobs + 1)) ;; + refs/locks/paths/*) paths=$((paths + 1)) ;; + *) + fail "unexpected ref ${ref}" + return 1 + ;; + esac + done <<<"${rows}" + [[ "${dirs}:${jobs}:${paths}" == "${want_dirs}:${want_jobs}:${want_jobs}" ]] || { + fail "wrong fixture counts: dirs=${dirs} jobs=${jobs} paths=${paths}, wanted ${want_dirs}/${want_jobs}/${want_jobs}" + return 1 + } + printf 'dirs=%s jobs=%s paths=%s\n' "${dirs}" "${jobs}" "${paths}" +} + +ref_fingerprint() { + git --git-dir="$1" for-each-ref --format='%(refname) %(objectname)' | git --git-dir="$1" hash-object --stdin +} + +inventory() { # STORE scenario phase setup_us -> CSV, all reachable objects are blobs + local store="$1" rows ref oid dirs=0 jobs=0 paths=0 refs=0 reachable=0 loose=0 disk key value + local -A seen=() + rows="$(git --git-dir="${store}" for-each-ref --format='%(refname) %(objectname)')" + while read -r ref oid; do + [[ -n "${ref}" ]] || continue + refs=$((refs + 1)) + if [[ -z "${seen[${oid}]+x}" ]]; then + seen["${oid}"]=1 + reachable=$((reachable + 1)) + fi + case "${ref}" in + refs/locks/dirs/*) dirs=$((dirs + 1)) ;; + refs/locks/jobs/*) jobs=$((jobs + 1)) ;; + refs/locks/paths/*) paths=$((paths + 1)) ;; + *) fail "unexpected ref ${ref}" ;; + esac + done <<<"${rows}" + rows="$(git --git-dir="${store}" count-objects -v)" + while read -r key value; do [[ "${key}" != count: ]] || loose="${value}"; done <<<"${rows}" + rows="$(du -sk "${store}")" + read -r disk _ <<<"${rows}" + printf '%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n' "$2" "$3" "$4" "${dirs}" "${jobs}" "${paths}" "${refs}" "${reachable}" "${loose}" "${disk}" "${5:-0}" +} + +measure() { # STORE OUT SCENARIO OP REP EXPECTED_LINES command... + local store="$1" out="$2" scenario="$3" operation="$4" repetition="$5" want_lines="$6" + shift 6 + local stem="${out}/raw/${scenario}-${operation}-${repetition}" start end elapsed rc rss='' first rest lines=0 _line + start="${EPOCHREALTIME/./}" + case "${BENCH_OS}" in + Darwin) + if GIT_LOCKS_STORE="${store}" GIT_LOCKS_NOW=1000000 /usr/bin/time -l "${BENCH_ROOT}/bin/git-locks" "$@" >"${stem}.stdout" 2>"${stem}.metrics"; then rc=0; else rc=$?; fi + ;; + Linux) + if GIT_LOCKS_STORE="${store}" GIT_LOCKS_NOW=1000000 /usr/bin/time -f 'rss_kib %M' -o "${stem}.metrics" "${BENCH_ROOT}/bin/git-locks" "$@" >"${stem}.stdout" 2>"${stem}.stderr"; then rc=0; else rc=$?; fi + ;; + *) + fail 'timing currently supports Darwin or Linux' + return 2 + ;; + esac + end="${EPOCHREALTIME/./}" + elapsed=$((end - start)) + while read -r first rest; do + if [[ "${rest}" == 'maximum resident set size' ]]; then rss="${first}"; fi + if [[ "${first}" == rss_kib ]]; then rss=$((rest * 1024)); fi + done <"${stem}.metrics" + while IFS= read -r _line; do lines=$((lines + 1)); done <"${stem}.stdout" + printf '%s,%s,%s,%s,%s,%s,%s\n' "${scenario}" "${operation}" "${repetition}" "${elapsed}" "${rss}" "${rc}" "${lines}" >>"${out}/observations.csv" + if [[ ! "${rss}" =~ ^[0-9]+$ ]] || ((elapsed < 0 || rc != 0 || lines != want_lines)); then + fail "invalid observation ${scenario}/${operation}/${repetition}; raw failure retained in ${stem}.*" + return 1 + fi + rm "${stem}.stdout" # Successful payloads were checked; failures are retained. +} + +summarize() { # OUT: sorted per-operation distributions, no timing gate + local out="$1" scenario operation repetition elapsed rss rc lines key values n + local -A groups=() + while IFS=, read -r scenario operation repetition elapsed rss rc lines; do + [[ "${scenario}" != scenario ]] || continue + key="${scenario},${operation}" + groups["${key}"]+="${elapsed}"$'\n' + done <"${out}/observations.csv" + printf 'scenario,operation,repetitions,min_us,median_us,max_us\n' >"${out}/summary.csv" + for key in "${!groups[@]}"; do + values="$(printf '%s' "${groups[${key}]}" | sort -n)" + local sorted=() + mapfile -t sorted <<<"${values}" + n="${#sorted[@]}" + printf '%s,%s,%s,%s,%s\n' "${key}" "${n}" "${sorted[0]}" "${sorted[$((n / 2))]}" "${sorted[$((n - 1))]}" + done | sort >>"${out}/summary.csv" +} + +run_matrix() { # NEW OUTPUT DIRECTORY [quick] + local out="$1" mode="${2:-full}" scratch started setup_us scenario shape count state dirs jobs repetitions=3 entry operation rep expected before after probe_hash probe_oid current + ((BASH_VERSINFO[0] >= 5)) || { + fail 'timing requires Bash 5 for EPOCHREALTIME' + return 2 + } + [[ "${mode}" == full || "${mode}" == quick ]] || { + fail 'mode must be full or quick' + return 2 + } + [[ ! -e "${out}" ]] || { + fail 'refusing an existing output directory' + return 2 + } + mkdir -p "${out}/raw" + out="$(cd "${out}" && pwd)" + scratch="$(mktemp -d "${TMPDIR:-/tmp}/locks-churn-matrix.XXXXXX")" + BENCH_OS="$(uname -s)" + local matrix=('empty:wide:0:released' 'wide-1000:wide:1000:released' 'wide-10000:wide:10000:released' 'deep-1000:deep:1000:released' 'deep-10000:deep:10000:released' 'reuse-1000:reuse:1000:released' 'reuse-10000:reuse:10000:released' 'live-1000:wide:1000:live' 'empty-after:wide:0:released') + if [[ "${mode}" == quick ]]; then + repetitions=1 + matrix=('empty:wide:0:released' 'wide-3:wide:3:released' 'deep-20:deep:20:released' 'reuse-5:reuse:5:released' 'live-3:wide:3:live') + fi + local revision binary_blob generator_blob stamp + revision="$(git -C "${BENCH_ROOT}" rev-parse HEAD)" + binary_blob="$(git -C "${BENCH_ROOT}" hash-object bin/git-locks)" + generator_blob="$(git -C "${BENCH_ROOT}" hash-object scripts/benchmark-directory-tokens.sh)" + stamp="$(date -u +%FT%TZ)" + { + printf 'specimen_revision=%s\n' "${revision}" + printf 'binary_git_blob=%s\n' "${binary_blob}" + printf 'generator_git_blob=%s\n' "${generator_blob}" + printf 'bash=%s\nmode=%s\nrepetitions=%s\n' "${BASH_VERSION}" "${mode}" "${repetitions}" + git --version + uname -srm + printf 'started_utc=%s\n' "${stamp}" + printf 'scratch=%s\n' "${scratch}" + printf 'Synthetic loose-object/ref fixtures; acquisition ids deterministic. Setup, inventory and cleanup excluded from timing. Filesystem caches not cleared. elapsed_us uses Bash EPOCHREALTIME around native time plus the CLI; max RSS is the native per-command resource report, not aggregate concurrent memory.\n' + } >"${out}/environment.txt" + printf 'scenario,operation,repetition,elapsed_us,max_rss_bytes,exit_code,stdout_lines\n' >"${out}/observations.csv" + printf 'scenario,phase,setup_us,dirs,jobs,paths,refs,reachable_blobs,loose_objects,disk_kib,setup_working_kib\n' >"${out}/fixtures.csv" + for entry in "${matrix[@]}"; do + IFS=: read -r scenario shape count state <<<"${entry}" + local store="${scratch}/${scenario}.git" + started="${EPOCHREALTIME/./}" + fixture "${store}" "${shape}" "${count}" "${state}" + setup_us=$((${EPOCHREALTIME/./} - started)) + dirs="${count}" + jobs=0 + [[ "${shape}" != reuse ]] || dirs=10 + [[ "${state}" != live ]] || jobs="${count}" + verify "${store}" "${dirs}" "${jobs}" >/dev/null + inventory "${store}" "${scenario}" before "${setup_us}" "${FIXTURE_WORKING_KIB}" >>"${out}/fixtures.csv" + before="$(ref_fingerprint "${store}")" + probe_hash="$(printf '_benchmark_probe/' | git --git-dir="${store}" hash-object --stdin)" + for operation in check exact_claim prefix_claim list doctor; do + for ((rep = 1; rep <= repetitions; rep++)); do + local args=() + expected=1 + case "${operation}" in + check) args=(check _benchmark_probe.md) ;; + exact_claim) args=(claim --job benchmark-probe --holder benchmark _benchmark_probe.md) ;; + prefix_claim) args=(claim --job benchmark-probe --holder benchmark _benchmark_probe/) ;; + list) + args=(list) + expected="${jobs}" + ;; + doctor) args=(doctor) ;; + *) return 2 ;; + esac + measure "${store}" "${out}" "${scenario}" "${operation}" "${rep}" "${expected}" "${args[@]}" + if [[ "${operation}" == *_claim ]]; then + probe_oid="$(git --git-dir="${store}" rev-parse refs/locks/jobs/benchmark-probe)" + GIT_LOCKS_STORE="${store}" GIT_LOCKS_NOW=1000000 "${BENCH_ROOT}/bin/git-locks" release --job benchmark-probe >/dev/null + if [[ "${operation}" == prefix_claim ]]; then + current="$(git --git-dir="${store}" rev-parse "refs/locks/dirs/${probe_hash}")" + [[ "${current}" == "${probe_oid}" ]] || { + fail 'probe token changed unexpectedly' + return 1 + } + git --git-dir="${store}" update-ref -d "refs/locks/dirs/${probe_hash}" "${probe_oid}" + fi + fi + after="$(ref_fingerprint "${store}")" + [[ "${before}" == "${after}" ]] || { + fail "fixture drift after ${scenario}/${operation}" + return 1 + } + done + done + verify "${store}" "${dirs}" "${jobs}" >/dev/null + inventory "${store}" "${scenario}" after 0 >>"${out}/fixtures.csv" + printf 'measured %s\n' "${scenario}" + # The matrix created this store under its private mktemp directory. + rm -rf "${store}" + done + rmdir "${scratch}" + summarize "${out}" + stamp="$(date -u +%FT%TZ)" + printf 'completed_utc=%s\n' "${stamp}" >>"${out}/environment.txt" +} + +main() { + case "${1:-}" in + fixture) + (($# == 4 || $# == 5)) || { + fail 'fixture STORE SHAPE COUNT [live]' + return 2 + } + fixture "$2" "$3" "$4" "${5:-released}" + ;; + verify) + (($# == 4)) || { + fail 'verify STORE DIRS JOBS' + return 2 + } + verify "$2" "$3" "$4" + ;; + run) + (($# == 2 || $# == 3)) || { + fail 'run OUTDIR [quick]' + return 2 + } + run_matrix "$2" "${3:-full}" + ;; + *) + fail 'usage: benchmark-directory-tokens.sh fixture|verify|run' + return 2 + ;; + esac +} +if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then main "$@"; fi diff --git a/test/directory-token-churn.sh b/test/directory-token-churn.sh new file mode 100644 index 0000000..540e7db --- /dev/null +++ b/test/directory-token-churn.sh @@ -0,0 +1,148 @@ +#!/usr/bin/env bash +# Independent small-store calibration before the informational large benchmark. +set -euo pipefail +unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE GIT_COMMON_DIR GIT_PREFIX +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +TMP="$(mktemp -d "${TMPDIR:-/tmp}/locks-churn-calibration.XXXXXX")" +trap 'rm -rf "${TMP}"' EXIT +BENCH="${ROOT}/scripts/benchmark-directory-tokens.sh" +if bash "${BENCH}" fixture "${TMP}/wide.git" wide 3 >"${TMP}/out" 2>"${TMP}/err"; then + printf 'ok fixture command builds three released directory reservations\n' +else + printf 'FAIL fixture command must build three released directory reservations\n' >&2 + cat "${TMP}/err" >&2 + exit 1 +fi + +assert() { # description actual expected + [[ "$2" == "$3" ]] || { + printf 'FAIL %s: got %s, expected %s\n' "$1" "$2" "$3" >&2 + exit 1 + } + printf 'ok %s\n' "$1" +} +count_refs() { git --git-dir="$1" for-each-ref --format='%(refname)' "$2" | wc -l | tr -d ' '; } +signature() { # Acquisition ids vary; every other reachable record byte must agree. + local ref oid line rows body + rows="$(git --git-dir="$1" for-each-ref --format='%(refname) %(objectname)')" + while read -r ref oid; do + [[ -n "${ref}" ]] || continue + printf '%s\n' "${ref}" + body="$(git --git-dir="$1" cat-file blob "${oid}")" + while IFS= read -r line; do + case "${line}" in acquisition:*) ;; *) printf '%s\n' "${line}" ;; esac + done <<<"${body}" + done <<<"${rows}" +} + +for shape in wide deep reuse; do + case "${shape}" in + wide) + count=3 + dirs=3 + records=3 + paths=(d00001/file.md d00002/file.md d00003/file.md) + ;; + deep) + count=20 + dirs=20 + records=2 + paths=(g00001/a/b/c/d/e/f/g/h/i/file.md g00002/a/b/c/d/e/f/g/h/i/file.md) + ;; + reuse) + count=5 + dirs=10 + records=1 + paths=(shared/a/b/c/d/e/f/g/h/i/file00001.md shared/a/b/c/d/e/f/g/h/i/file00002.md shared/a/b/c/d/e/f/g/h/i/file00003.md shared/a/b/c/d/e/f/g/h/i/file00004.md shared/a/b/c/d/e/f/g/h/i/file00005.md) + ;; + *) exit 2 ;; + esac + synthetic="${TMP}/${shape}.git" + if [[ "${shape}" != wide ]]; then bash "${BENCH}" fixture "${synthetic}" "${shape}" "${count}"; fi + actual="${TMP}/${shape}-cli.git" + i=0 + for path in "${paths[@]}"; do + i=$((i + 1)) + printf -v job 'j%05d' "${i}" + GIT_LOCKS_STORE="${actual}" GIT_LOCKS_NOW=1000000 "${ROOT}/bin/git-locks" claim --job "${job}" --holder benchmark "${path}" >/dev/null + GIT_LOCKS_STORE="${actual}" GIT_LOCKS_NOW=1000000 "${ROOT}/bin/git-locks" release --job "${job}" >/dev/null + done + got="$(count_refs "${synthetic}" refs/locks/dirs/)" + assert "${shape} has independently counted directory tokens" "${got}" "${dirs}" + got="$(count_refs "${synthetic}" refs/locks/jobs/)" + assert "${shape} has no job refs" "${got}" 0 + got="$(count_refs "${synthetic}" refs/locks/paths/)" + assert "${shape} has no path refs" "${got}" 0 + got="$(git --git-dir="${synthetic}" for-each-ref --format='%(objectname)' | sort -u | wc -l | tr -d ' ')" + assert "${shape} retains the expected distinct records" "${got}" "${records}" + got="$(signature "${synthetic}")" + want="$(signature "${actual}")" + assert "${shape} matches actual CLI claim/release records and refs" "${got}" "${want}" + bash "${BENCH}" verify "${synthetic}" "${dirs}" 0 + GIT_LOCKS_STORE="${synthetic}" GIT_LOCKS_NOW=1000000 "${ROOT}/bin/git-locks" doctor >/dev/null + printf 'ok %s synthetic fixture is healthy according to the real doctor\n' "${shape}" +done +bash "${BENCH}" fixture "${TMP}/empty.git" wide 0 +bash "${BENCH}" verify "${TMP}/empty.git" 0 0 +bash "${BENCH}" fixture "${TMP}/live.git" wide 3 live +bash "${BENCH}" verify "${TMP}/live.git" 3 3 +got="$(count_refs "${TMP}/live.git" refs/locks/jobs/)" +assert 'live control has independent job count' "${got}" 3 +GIT_LOCKS_STORE="${TMP}/live.git" GIT_LOCKS_NOW=1000000 "${ROOT}/bin/git-locks" doctor >/dev/null +printf 'ok live control passes the real doctor\n' +# Deliberate contamination must make the gate fail, rather than time the wrong state. +oid="$(git --git-dir="${TMP}/wide.git" for-each-ref --format='%(objectname)' | head -1)" +git --git-dir="${TMP}/wide.git" update-ref refs/locks/jobs/contamination "${oid}" +if bash "${BENCH}" verify "${TMP}/wide.git" 3 0; then + printf 'FAIL verifier accepted a live-ref contamination\n' >&2 + exit 1 +fi +printf 'ok verifier rejects a contaminated released fixture\n' +# Fixed input corpus prevents oversized/ambiguous setup from consuming the host. +for bad in -1 1x 10001 999999999999999999999999 1.5; do + if bash "${BENCH}" fixture "${TMP}/invalid-${bad}" wide "${bad}"; then + printf 'FAIL accepted count %s\n' "${bad}" >&2 + exit 1 + fi + [[ ! -e "${TMP}/invalid-${bad}" ]] || { + printf 'FAIL invalid count created a store\n' >&2 + exit 1 + } +done +if bash "${BENCH}" fixture "${TMP}/deep-invalid.git" deep 11; then + printf 'FAIL accepted incomplete deep shape\n' >&2 + exit 1 +fi +before="$(signature "${TMP}/wide.git")" +if bash "${BENCH}" fixture "${TMP}/wide.git" wide 3; then + printf 'FAIL overwrote an existing fixture\n' >&2 + exit 1 +fi +got="$(signature "${TMP}/wide.git")" +assert 'refusing an existing store preserves it' "${got}" "${before}" +if bash "${BENCH}" verify "${TMP}/missing.git" 0 0 >"${TMP}/out" 2>"${TMP}/err"; then + printf 'FAIL missing store passed the fixture gate\n' >&2 + exit 1 +fi +printf 'ok missing store fails the fixture gate\n' +if bash "${BENCH}" run "${TMP}/quick-results" quick >"${TMP}/out" 2>"${TMP}/err"; then + rows="$(wc -l <"${TMP}/quick-results/observations.csv" | tr -d ' ')" + assert 'quick matrix retains all 25 raw observations' "${rows}" 26 +else + printf 'FAIL quick matrix must run calibrated command paths\n' >&2 + cat "${TMP}/err" >&2 + exit 1 +fi +# Seeded shape samples use hand-counted oracles, independent of the generator. +shape_cases=('wide:0:0:0' 'wide:1:1:1' 'wide:7:7:7' 'deep:10:10:1' 'deep:30:30:3' 'reuse:0:0:0' 'reuse:1:10:1' 'reuse:9:10:1') +fuzz_state=39 +for ((sample = 0; sample < 12; sample++)); do + fuzz_state=$(((fuzz_state * 1103515245 + 12345) % 2147483648)) + IFS=: read -r shape count dirs records <<<"${shape_cases[$((fuzz_state % ${#shape_cases[@]}))]}" + store="${TMP}/fuzz-${sample}.git" + bash "${BENCH}" fixture "${store}" "${shape}" "${count}" + bash "${BENCH}" verify "${store}" "${dirs}" 0 >/dev/null + got="$(git --git-dir="${store}" for-each-ref --format='%(objectname)' | sort -u | wc -l | tr -d ' ')" + assert "seed39 shape sample ${sample} reachable records" "${got}" "${records}" +done +printf 'directory-token calibration passed\n'