Skip to content

Commit

The performance notes record pushes after no-thin shipped: nothing is read for bases any more and large pushes stop tripping the store's breaker, but the scan now reads the parent's trees from the store, so a small push is not faster yet; the next step is keeping each accepted push's trees in the data centre's cache.

syntaqxcommitted Parent180b34aBrowse files
1 file+28−10/1 viewed
+28−1
489489 2026-10-09 answered 503 twice and took 23 s the third time. The next step
490490 is to stop needing bases: see "Pushes" in docs/ARTIFACTS.md.
491491
492−Step 1 of that, built and not yet deployed: the receive-pack advertisement
492+Step 1 of that, deployed 2026-10-09 22:46 UTC (180b34af): the receive-pack advertisement
493493 g1t forwards says `no-thin` (`git_http.rs` `with_no_thin`), so git sends
494494 every delta's base in the pack and `read` has nothing to fetch: it should
495495 fall from 267–318 ms to the few milliseconds it takes to parse the pack,
502502 (the 503 above came from all of them at once tripping the store's
503503 breaker; see docs/ARTIFACTS.md).
504504
505+Measured after it shipped (2026-10-09 ~23:10 UTC, three pushes of 5 small
506+files to flagon-io/automation-lab, the first in a cold isolate):
507+
508+| `receive-pack` step | After step 1 |
509+| --- | --- |
510+| `thin` | `no` on all three |
511+| `read` | 0 ms |
512+| `scan` | 329, 737, 954 ms |
513+| `rules` | 233 (cold), 43, 47 ms |
514+| `upload` | 586, 499, 1,118 ms |
515+| `refs` | 56, 1,774, 51 ms |
516+| Total | 1,089, 3,223, 2,256 ms |
517+
518+`read` is gone, and a large push no longer fans out into store reads that
519+trip the breaker: a 27-commit push of main sent with `--no-thin` just before
520+this deploy took 9 s where the thin one answered 503. A small push is not
521+faster yet. The scan diffs each commit against its parent, so it reads the
522+parent's tree and every older subtree it walks from the store; a thin pack
523+used to bring those trees in as delta bases, so the reads moved from `read`
524+into `scan`. The store was also slow during these runs (`upload` up to
525+1.1 s, an `info/refs` store step of 1.08 s), so the figures are noisy.
526+
527+The next step for small pushes: after a push is accepted, keep the trees it
528+carried in the data centre's cache under their hashes (the cache
529+`read_tree` already looks in), so the next push to the branch finds its
530+parent's trees there instead of in the store.
531+
505532 ## Client navigation
506533
507534 - `<Link prefetch="intent">` on the sidebar, project tabs, breadcrumbs,