You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .agents/sow/current/SOW-0021-20260613-netipc-at-scale.md
+31Lines changed: 31 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1156,6 +1156,37 @@ Follow-up mapping:
1156
1156
- add any remaining broader adversarial tests from the planned matrix beyond the now-covered representative `8192`/`32768` logical-call cases, now-covered mid-logical timeout/abort cases, now-covered malformed follow-up responses after partial progress, now-covered reordered/duplicate response-item corruption, now-covered invalid status/status-dependent/label-table response corruption, now-covered huge valid label isolation cases, now-covered endpoint absence before call, now-covered endpoint disappearance after partial progress, now-covered endpoint disappearance before the first subcall, now-covered zero-item typed lookup calls, now-covered stale request-capacity reconnect cases, now-covered duplicate/unsorted request keys under request splitting, now-covered request cap-minus-one/exact/plus-one boundaries, now-covered exact response-fit plus/minus-one boundaries, now-covered no-progress overflow cases, now-covered raw no-growth overflow cases, now-covered logical response-byte ceilings, now-covered mixed-status cross-language interop cases, and now-covered lookup status codec interop cases;
1157
1157
- keep lookup-scale interop green across POSIX baseline, POSIX SHM, Windows Named Pipe, and Windows SHM; all four profiles now cover both all-known scale and mixed-status C/Rust/Go directed tests.
1158
1158
1159
+
## Performance Checkpoint - 2026-06-15
1160
+
1161
+
Context:
1162
+
1163
+
- A direct benchmark sample showed `cgroups-lookup-mixed-256` at roughly C `61.6k`, Rust `43.7k`, Go `25.9k` requests/s.
1164
+
- The gap was not accepted as normal runtime noise. The lookup hot paths were reviewed language-by-language before committing.
1165
+
1166
+
Confirmed causes fixed in this checkpoint:
1167
+
1168
+
- C, Rust, and Go all had an O(n^2)-style response-overflow suffix-fit check in lookup builders. This was replaced with precomputed suffix bytes for dispatch-owned builders.
1169
+
- Rust and Go cgroups dispatch paths called `request.Item(i)` in the payload-exceeded sizing prepass only to recover the already-validated request directory length. Both now read that length directly.
1170
+
- Go response validation built item view objects while validating each response item. Go now has validate-only lookup item paths separate from public view construction.
1171
+
- Go request views now cache the request packed-start offset instead of recomputing it on each item access.
1172
+
1173
+
Focused validation:
1174
+
1175
+
-`cd src/go && go test -count=1 ./pkg/netipc/protocol` passed.
1176
+
-`cargo test --manifest-path src/crates/netipc/Cargo.toml protocol::lookup -- --test-threads=1` passed.
Sampled benchmark evidence after fixes, using release benchmark binaries:
1180
+
1181
+
-`cgroups-lookup-mixed-256`: C about `63k`, Rust about `48k`, Go about `34k-35k` requests/s.
1182
+
-`apps-lookup-mixed-256`: C about `69k`, Rust about `62k`, Go about `40k-42k` requests/s.
1183
+
1184
+
Current interpretation:
1185
+
1186
+
- Rust is no longer broadly suspicious: `apps-lookup-mixed-256` is close to C, and the cgroups-specific avoidable overhead was reduced.
1187
+
- Go remains materially slower than C/Rust in these codec+dispatch microbenchmarks. The obvious avoidable algorithmic and allocation issues found so far are fixed, but the remaining gap still needs full-suite benchmark confirmation and, if required, profiling before declaring it inherent Go/runtime overhead.
1188
+
- This checkpoint does not close the performance gate. Full POSIX and Windows benchmark regeneration still needs to be run cleanly after commit/push.
0 commit comments