crates/storage-git-gix/parked-gix/assets/mashup_forge_bakeoff.svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1180 1519.5" font-family="'DejaVu Sans', 'Segoe UI', sans-serif">
<!-- GENERATED. Do not hand-edit: every number here carries a measurement, and
editing the picture instead of the datum is how a diagram starts lying. -->
<defs>
<linearGradient id="board" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#0b1c2e"/><stop offset="1" stop-color="#06111d"/>
</linearGradient>
<linearGradient id="chip" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#14384f"/><stop offset="1" stop-color="#0e2a3e"/>
</linearGradient>
<linearGradient id="rail" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#173d57"/><stop offset="1" stop-color="#0c2438"/>
</linearGradient>
<linearGradient id="slot" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#123448"/><stop offset="1" stop-color="#0a2032"/>
</linearGradient>
<linearGradient id="hot" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#1c5a3a"/><stop offset="1" stop-color="#0f3a26"/>
</linearGradient>
<linearGradient id="cold" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#3a2320"/><stop offset="1" stop-color="#281414"/>
</linearGradient>
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
<path d="M0 0 L10 5 L0 10 z" fill="context-stroke"/>
</marker>
</defs>
<rect x="0" y="0" width="1180" height="1519.5" fill="url(#board)"/>
<g stroke="#143a52" stroke-width="1">
<line x1="0" y1="76" x2="1180" y2="76"/>
<line x1="0" y1="1471.5" x2="1180" y2="1471.5"/>
</g>
<g fill="#16415c">
<circle cx="40" cy="40" r="2"/><circle cx="1140" cy="40" r="2"/>
<circle cx="40" cy="1491.5" r="2"/><circle cx="1140" cy="1491.5" r="2"/>
</g>
<text x="40" y="44" fill="#eaf6ff" font-size="22" font-weight="700">gunnar vs gitea vs Forgejo</text>
<text x="407.2" y="38" fill="#9fc9e0" font-size="13">stock git is the client for all three · same box, same fixture, one counting relay</text>
<text x="407.2" y="56" fill="#7fa8c4" font-size="10.5">iceberg bench_runs · oden · 32 cores · 2026-08-05T01:57:09.874732+00:00 · 3 interleaved rounds · loadavg 155.23</text>
<!-- ==================== -->
<!-- PANEL 1 - one bar group per operation, two bars each -->
<text x="40" y="100" fill="#6fd3f5" font-size="15" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">1</text>
<text x="74" y="100" fill="#eaf6ff" font-size="15" text-anchor="start" font-weight="700">Bytes on the wire, and what the operation cost the box</text>
<text x="74" y="117" fill="#9fc9e0" font-size="11" text-anchor="start">bars are bytes · the line under them is net CPU s and peak RSS · green = gunnar spends less, coral = gunnar spends more</text>
<line x1="40" y1="126" x2="1140" y2="126" stroke="#143a52" stroke-width="1"/>
<text x="40" y="146" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">clone</text>
<text x="122" y="146" fill="#9fc9e0" font-size="9.5" text-anchor="start">pack copy against git's own pack-objects · pack and protocol, server to client</text>
<text x="96" y="170" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="158" width="649.8" height="16" rx="3" fill="url(#chip)" stroke="#bfe6ff" stroke-width="1.2"/>
<text x="759.8" y="170" fill="#bfe6ff" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">24.55 MB</text>
<text x="96" y="192" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="180" width="650" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="760" y="192" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">24.56 MB</text>
<text x="1140" y="170" fill="#bfe6ff" font-size="11" text-anchor="end" font-weight="700">tie, within 2% — 0.9997x</text>
<text x="1140" y="210" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">year · 28 893 objects · other corpora: large 0.9992x, real 0.9995x, small 0.9996x, xl 0.9988x · ms 1009/1043</text>
<text x="102" y="224" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 0.234 vs 0.260 1.11x less CPU</text>
<text x="432" y="224" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 304 vs 655 2.16x less RSS</text>
<text x="40" y="252" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">fetch</text>
<text x="122" y="252" fill="#9fc9e0" font-size="9.5" text-anchor="start">no server-side delta compression — S-003 · the answer to a negotiation, server to client</text>
<text x="96" y="276" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="264" width="650" height="16" rx="3" fill="url(#cold)" stroke="#f0a9a0" stroke-width="1.2"/>
<text x="760" y="276" fill="#f0a9a0" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">344.6 kB</text>
<text x="96" y="298" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="286" width="559.61" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="669.61" y="298" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">296.7 kB</text>
<text x="1140" y="276" fill="#f0a9a0" font-size="11" text-anchor="end" font-weight="700">gunnar 1.16x more bytes</text>
<text x="1140" y="316" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">diverge · 2 912 objects · one corpus measured · ms 81/101</text>
<text x="102" y="330" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 0.027 vs 0.059 2.23x less CPU</text>
<text x="432" y="330" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 21 vs 262 12.68x less RSS</text>
<text x="40" y="358" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">fetch, gc'd</text>
<text x="136.09" y="358" fill="#9fc9e0" font-size="9.5" text-anchor="start">gunnar preserves the deltas it was given and computes none · the same negotiation off a maintained repository</text>
<text x="96" y="382" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="370" width="468.05" height="16" rx="3" fill="url(#hot)" stroke="#8fe6b8" stroke-width="1.2"/>
<text x="578.05" y="382" fill="#8fe6b8" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">238.7 kB</text>
<text x="96" y="404" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="392" width="650" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="760" y="404" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">331.5 kB</text>
<text x="1140" y="382" fill="#8fe6b8" font-size="11" text-anchor="end" font-weight="700">gunnar 1.39x fewer bytes</text>
<text x="1140" y="422" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">diverge-gcx · 2 912 objects · other corpora: diverge-gc 0.9965x · ms 78/70</text>
<text x="102" y="436" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 0.023 vs 0.026 1.13x less CPU</text>
<text x="432" y="436" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 13 vs 252 19.93x less RSS</text>
<text x="40" y="464" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">clone/fetch, ordered gc</text>
<text x="230" y="464" fill="#9fc9e0" font-size="9.5" text-anchor="start">clone and fetch respond differently to the same delta ordering · one repository per delta ordering, both operations off it</text>
<text x="96" y="488" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="476" width="650" height="16" rx="3" fill="url(#cold)" stroke="#f0a9a0" stroke-width="1.2"/>
<text x="760" y="488" fill="#f0a9a0" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">344.6 kB</text>
<text x="96" y="510" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="498" width="625.19" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="735.19" y="510" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">331.5 kB</text>
<text x="1140" y="488" fill="#f0a9a0" font-size="11" text-anchor="end" font-weight="700">gunnar 1.04x more bytes</text>
<text x="1140" y="528" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">nh2-fetch · 2 912 objects · other corpora: nh1-clone 1.1454x, nh1-fetch 1.0397x, nh2-clone 1.1455x, pw-clone 1.1456x, pw-fetch 1.0395x, size-clone 1.1454x, size-fetch 1.0399x · ms 76/71</text>
<text x="102" y="542" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 0.021 vs 0.026 1.23x less CPU</text>
<text x="432" y="542" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 15 vs 273 17.97x less RSS</text>
<text x="40" y="570" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">clone/fetch, ordered gc</text>
<text x="230" y="570" fill="#9fc9e0" font-size="9.5" text-anchor="start">clone and fetch respond differently to the same delta ordering · one repository per delta ordering, both operations off it</text>
<text x="96" y="594" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="582" width="650" height="16" rx="3" fill="url(#cold)" stroke="#f0a9a0" stroke-width="1.2"/>
<text x="760" y="594" fill="#f0a9a0" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">1.62 MB</text>
<text x="96" y="616" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="604" width="567.39" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="677.39" y="616" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">1.41 MB</text>
<text x="1140" y="594" fill="#f0a9a0" font-size="11" text-anchor="end" font-weight="700">gunnar 1.15x more bytes</text>
<text x="1140" y="634" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">pw-clone · 14 667 objects · other corpora: nh1-clone 1.1454x, nh1-fetch 1.0397x, nh2-clone 1.1455x, nh2-fetch 1.0397x, pw-fetch 1.0395x, size-clone 1.1454x, size-fetch 1.0399x · ms 108/95</text>
<text x="102" y="648" fill="#f0a9a0" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 0.033 vs 0.015 2.28x more CPU</text>
<text x="432" y="648" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 16 vs 274 17.60x less RSS</text>
<text x="40" y="676" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">push</text>
<text x="122" y="676" fill="#9fc9e0" font-size="9.5" text-anchor="start">the write path; gunnar does not run git's packer · the server's response to 2 MB in</text>
<text x="96" y="700" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="688" width="400.21" height="16" rx="3" fill="url(#hot)" stroke="#8fe6b8" stroke-width="1.2"/>
<text x="510.21" y="700" fill="#8fe6b8" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">1.3 kB</text>
<text x="96" y="722" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="710" width="650" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="760" y="722" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">2.1 kB</text>
<text x="1140" y="700" fill="#8fe6b8" font-size="11" text-anchor="end" font-weight="700">gunnar 1.62x fewer bytes</text>
<text x="1140" y="740" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">base · 0 objects · one corpus measured · ms 187/831</text>
<text x="102" y="754" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 0.301 vs 0.397 1.32x less CPU</text>
<text x="432" y="754" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 91 vs 334 3.67x less RSS</text>
<text x="40" y="782" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">ls-remote</text>
<text x="122" y="782" fill="#9fc9e0" font-size="9.5" text-anchor="start">the smallest request in the protocol, and no pack · the ref advertisement</text>
<text x="96" y="806" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="794" width="641.9" height="16" rx="3" fill="url(#chip)" stroke="#bfe6ff" stroke-width="1.2"/>
<text x="751.9" y="806" fill="#bfe6ff" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">17.9 kB</text>
<text x="96" y="828" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="816" width="650" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="760" y="828" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">18.1 kB</text>
<text x="1140" y="806" fill="#bfe6ff" font-size="11" text-anchor="end" font-weight="700">tie, within 2% — 0.9875x</text>
<text x="1140" y="846" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">year · 0 objects · other corpora: real 0.9719x, small 0.8626x · ms 13/15</text>
<text x="102" y="860" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 0.003 vs 0.007 1.94x less CPU</text>
<text x="432" y="860" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 74 vs 332 4.49x less RSS</text>
<text x="40" y="888" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">clone, ramped</text>
<text x="151.74" y="888" fill="#9fc9e0" font-size="9.5" text-anchor="start">cost per operation at N clients, not at one · one batch of N concurrent clients</text>
<text x="96" y="912" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="900" width="649.89" height="16" rx="3" fill="url(#chip)" stroke="#bfe6ff" stroke-width="1.2"/>
<text x="759.89" y="912" fill="#bfe6ff" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">98.22 MB</text>
<text x="96" y="934" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="922" width="650" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="760" y="934" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">98.23 MB</text>
<text x="1140" y="912" fill="#bfe6ff" font-size="11" text-anchor="end" font-weight="700">tie, within 2% — 0.9998x</text>
<text x="1140" y="952" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">c4 · 115 572 objects · other corpora: c1 0.9997x, c1-pin 0.9996x, c16 1.0001x, c16-pin 1.0002x, c4-pin 0.9998x · ms 1337/889</text>
<text x="102" y="966" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 0.930 vs 1.010 1.09x less CPU</text>
<text x="432" y="966" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 315 vs 541 1.72x less RSS</text>
<text x="40" y="994" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">clone, ramped</text>
<text x="151.74" y="994" fill="#9fc9e0" font-size="9.5" text-anchor="start">cost per operation at N clients, not at one · one batch of N concurrent clients</text>
<text x="96" y="1018" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="1006" width="649.85" height="16" rx="3" fill="url(#chip)" stroke="#bfe6ff" stroke-width="1.2"/>
<text x="759.85" y="1018" fill="#bfe6ff" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">98.22 MB</text>
<text x="96" y="1040" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="1028" width="650" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="760" y="1040" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">98.24 MB</text>
<text x="1140" y="1018" fill="#bfe6ff" font-size="11" text-anchor="end" font-weight="700">tie, within 2% — 0.9998x</text>
<text x="1140" y="1058" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">c4-pin · 115 572 objects · other corpora: c1 0.9997x, c1-pin 0.9996x, c16 1.0001x, c16-pin 1.0002x, c4 0.9998x · ms 907/798</text>
<text x="102" y="1072" fill="#bfe6ff" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 0.965 vs 0.969 tie 0.995x</text>
<text x="432" y="1072" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 480 vs 545 1.14x less RSS</text>
<text x="40" y="1100" fill="#eaf6ff" font-size="13" text-anchor="start" font-family="'DejaVu Sans Mono', monospace" font-weight="700">clone+fetch+push</text>
<text x="175.22" y="1100" fill="#9fc9e0" font-size="9.5" text-anchor="start">a read-only ramp does not exercise the write path · reads and writes at once on one repository</text>
<text x="96" y="1124" fill="#eaf6ff" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gunnar</text>
<rect x="102" y="1112" width="650" height="16" rx="3" fill="url(#cold)" stroke="#f0a9a0" stroke-width="1.2"/>
<text x="760" y="1124" fill="#f0a9a0" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">38.74 MB</text>
<text x="96" y="1146" fill="#9fc9e0" font-size="9.5" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">gitea + Forgejo</text>
<rect x="102" y="1134" width="509.17" height="16" rx="3" fill="url(#rail)" stroke="#4a6f88" stroke-width="1.2"/>
<text x="619.17" y="1146" fill="#86b3cc" font-size="9.4" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">30.34 MB</text>
<text x="1140" y="1124" fill="#f0a9a0" font-size="11" text-anchor="end" font-weight="700">gunnar 1.28x more bytes</text>
<text x="1140" y="1164" fill="#5f8ba6" font-size="8.8" text-anchor="end" font-family="'DejaVu Sans Mono', monospace">mix8 · 144 688 objects · one corpus measured · ms 587/678</text>
<text x="102" y="1178" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">net CPU s 1.297 vs 2.603 2.01x less CPU</text>
<text x="432" y="1178" fill="#8fe6b8" font-size="9.6" text-anchor="start" font-family="'DejaVu Sans Mono', monospace">peak RSS MB 189 vs 537 2.85x less RSS</text>
<rect x="40" y="1212" width="1100" height="63" rx="8" fill="url(#rail)" stroke="#6fd3f5" stroke-width="2"/>
<text x="56" y="1233" fill="#a7e6c2" font-size="12" text-anchor="start" font-weight="700">Conditions these bytes were produced under, read off the same rows</text>
<text x="56" y="1248" fill="#bcd9ec" font-size="9.5" text-anchor="start">3 interleaved rounds · loadavg 155.23 at the end of the run · device read-ahead 2048 kB · gunnar cgroup 8.00 cpus / 8192 MB · gitea cgroup 8.00 cpus / 8192 MB · forgejo cgroup 8.00 cpus / 8192 MB ·</text>
<text x="56" y="1260.5" fill="#bcd9ec" font-size="9.5" text-anchor="start">znippy cold tier not wired — gunnar on the filesystem</text>
<rect x="40" y="1285" width="1100" height="88" rx="8" fill="url(#rail)" stroke="#f0a9a0" stroke-width="2" stroke-dasharray="3 4"/>
<text x="56" y="1306" fill="#f0a9a0" font-size="12" text-anchor="start" font-weight="700">What these bars do not show</text>
<text x="56" y="1321" fill="#bcd9ec" font-size="9.5" text-anchor="start">Forgejo is a gitea fork. Under `podman top` during a clone both containers exec the same `/usr/bin/git-upload-pack` → `git pack-objects --revs --thin --stdout --delta-base-offset --include-tag`, so</text>
<text x="56" y="1333.5" fill="#bcd9ec" font-size="9.5" text-anchor="start">drawing both would be one Go engine drawn twice; the rival bar is whichever of the two sent fewer bytes. gunnar's server process spawned no children under the same probe. · The znippy cold tier was not</text>
<text x="56" y="1346" fill="#bcd9ec" font-size="9.5" text-anchor="start">running: `pack_tier` returns an empty vector, `RepackOptions::cold_tier()` (crates/gunnar-store/src/repack.rs:277) has no call sites in any server crate, and the control plane prints: no znippy cold tier is</text>
<text x="56" y="1358.5" fill="#bcd9ec" font-size="9.5" text-anchor="start">built. Objects are gix-odb packs on disk, the same place gitea's are. No bar above speaks to the tier; the arm records that in its `znippy_wired` column.</text>
<rect x="40" y="1383" width="1100" height="100.5" rx="8" fill="url(#rail)" stroke="#6fd3f5" stroke-width="2"/>
<text x="56" y="1404" fill="#a7e6c2" font-size="12" text-anchor="start" font-weight="700">Method</text>
<text x="56" y="1419" fill="#bcd9ec" font-size="9.5" text-anchor="start">Client: stock git for all three servers, so no engine is measured through its own client; the version it ran is a column on every row. Fixture: real history off this box, pushed to all three from one bare</text>
<text x="56" y="1431.5" fill="#bcd9ec" font-size="9.5" text-anchor="start">repo; tip oid and each clone's object set are compared against the fixture before anything is scored, and the object counts beside each group are that check. Instrument: the counting relay in `cargo xtask</text>
<text x="56" y="1444" fill="#bcd9ec" font-size="9.5" text-anchor="start">wireproxy`, in front of every engine, same read/write loop. Order: within a round the three engines run back to back on one fixture. Quotas: `parity.rs` reads each container's own cgroup back and aborts</text>
<text x="56" y="1456.5" fill="#bcd9ec" font-size="9.5" text-anchor="start">unless the quotas that applied match; those read-back figures are the conditions row. A server that never started, one serving the wrong repository, or a relay that stopped counting aborts the run instead</text>
<text x="56" y="1469" fill="#bcd9ec" font-size="9.5" text-anchor="start">of scoring a zero. Recipe `.nornir/bench/forge-bakeoff.sh`, arms in `bench/examples/forge/`.</text>
</svg>