pingora — Engineering Performance
6 engineers all time · Jan 2025 – Sep 2026 · built 2026-09-30 · GitHub
Performance snapshot
Today's rolling 90-day reading for pingora, compared with the start of the series. Pick a window to move that comparison point.
Avg. perf / dev / mo
+439.5%
0.19 → 1.04 ETV
Active engineers
+20.0%
5.0 → 6.0
Features
+35.7pp
9.0% → 44.7%
vs. Cloudflare
0.60x
−40% below Cloudflare
pingora vs. Cloudflare
Per-engineer ETV for pingora against Cloudflare as a whole. Both lines are 90-day rolling averages scaled to a 30-day month, so they share one axis and can be read against each other at any point. Pick a window to zoom the chart to it.
Performance Composition
Each month's output split by type of work: Features (new value), Maintenance (sustaining systems), Tests, Docs, and Fixes (rework). The yellow line is output per engineer, so when it rises each engineer is delivering more, whatever the team size did. Unit: Engineering Throughput Value (ETV).
Engineering capacity
Effective engineers behind pingora, against its pre-AI baseline. Each subject has its own: pingora's is 0.40 ETV / dev / mo, its first reading in Q1 2025. Per-engineer ETV divided by that gives a capacity multiple, and that multiple applied to the engineers active in the trailing 90 days turns it into engineer-equivalents. The line is the real headcount, so the gap between line and area is what the leverage is worth. Because each baseline is its own, every subject opens at 1.0x on its first day: multiples measure improvement and are not comparable between subjects.
Knowledge concentration
How dependent is this repo on a small number of engineers? Higher top-1 share = higher key-person risk.
ewang owns 56.4 % of commits.
Behind the numbers
Written summary of the work completed each month.
No monthly reports available yet.
Most impactful commits
Top 10 by ETV in the all-time window.
- 5.3ETVFix chunked trailer end parsing httparse itself does not treat the terminating chunk (0 + CRLF) any differently when parsing its chunk size, and the body reader does not validate the following CRLF required to close the body. Additionally, that current parsing scheme will not consider trailers before the end CRLF. Now the trailers are considered but simply discarded. The CRLFs between the trailers (and now, the CRLFs after the body payloads) are validated, however.Edward Wang · a88d0483 · 2025-06-02
- 4.2ETVUpgrade body mode on 101 Previously the body reader would initialize to HTTP/1.0 mode when the upgrade request header is found. Now the reader is only converted to that mode when both the upgrade header and 101 is received.Edward Wang · 824bdeef · 2025-12-29
- 3.0ETVSubrequest sessions, clear body headers if no input Subrequests are now a separate server Session type, instantiated with corresponding SubrequestHandles that can send or receive HttpTasks to or from the subrequest. This makes it possible to communicate with created subrequests. Additionally the subrequest ctx now has a BodyMode input. If unset the background subrequest will clear request headers related to the request body to prevent issues where the upstream might expect body.Edward Wang · cbb69832 · 2025-08-19
- 2.8ETVmake Lru::shard_weight a lock-free read Add a per-shard atomic shadow of total weight (shard_weights: [AtomicUsize; N]) maintained alongside the existing global weight counter at every weight-mutating site (admit, increment_weight, evict_shard_at, remove, insert_tail). Rewrite Lru::shard_weight() to read from the shadow with a Relaxed load instead of acquiring the shard's RwLock to read the LruUnit::used_weight field. This mirrors the pattern already established for shard_lens/shard_len(). Like shard_len(), the same 'best-effort, no cross-thread ordering' caveat applies: the sum of shard_weight(i) is not guaranteed to equal weight() at any single instant, since the global and per-shard atomics are updated independently with Relaxed ordering. Motivation: callers (eviction-balance heuristics, observability) that want to scan all N shards every few seconds should not pay N brief read-lock acquisitions when an atomic shadow is cheap enough to maintain on the write path. Adds a single-threaded regression test verifying the shadow stays consistent with the truth across all five weight-mutating paths.Kevin Guthrie · 8aa31cef · 2026-06-18
- 2.5ETVReject ambiguous authorities on ingress and egressAndrew Hauck · ffab8302 · 2026-08-11
- 2.5ETVShare health across load-balancing selectors Add grouped selectors with asynchronous bounded rebuilds and shared active health across backend views.ewang · d6257c16 · 2026-07-09
- 2.1ETVParameterize custom downstream sessionsewang · 6dad9c44 · 2026-08-27
- 1.9ETVidentify eviction entries with storage markers Adds a storage-provided marker to the cache and eviction APIs. This allows multiple entries for the same cache key to coexist. Active purges remove the current entry, while eviction paths target the exact entry selected by the eviction manager. Existing persisted key-only LRU data remains readable, and storage implementations without markers retain key-only behavior. This is a breaking API change.Matthew Gumport · 373140f3 · 2026-08-07
- 1.9ETVDiscard extra upstream body and disable keepalive Explicitly disable keepalive on upstream connection when excess body (content-length) is detected.Edward Wang · 60a7bcc2 · 2025-06-10
- 1.9ETVAdd cancel-safe proxy task API for Subrequest server sessions Implement the same proxy task API functionality for subrequest server sessions as HTTP/1. Also fix the regular subrequest header write path so upgrade state is only marked after the 101 task is sent.Edward Wang · 77cce2cd · 2026-05-04