https://gitlab.synchro.net/main/sbbs/-/commit/1c8c59b14b74fa47a4e82be9
Modified Files:
src/bench/zmodem/README.md
Log Message:
bench/zmodem: record the confirmed bottleneck and the batching dead-ends
Update the README with the results of the throughput-redesign attempt:
- Confirmed the send bottleneck is the producer's per-byte RingBufWrite
(~11 MB/s vs ~85 for ztx_buf doing the same escape/CRC without the ring);
consumer-side coalescing of the output thread was tried and did nothing.
- Three distinct producer-batching prototypes (Fix A, Fix B, and a third
that flushes on a threshold inside send_byte with error propagation) each
reached ~66-88 MB/s and each FAILED the 3x error-recovery gate that the
per-byte sender passes 3/3.
- Root cause: batching decouples what zmodem believes it has sent from what
is actually on the wire; ZMODEM error recovery (ZRPOS -> seek -> resend)
assumes those track, and the buffered-but-unsent bytes are not reconciled
on a reposition. A correct fix needs an abort/reposition-aware transport
(a zmodem.c hook to purge the pending output buffer on ZRPOS/abort), which
is a coordinated zmodem.c + sexyz.c/term.c change, not a transport tweak.
No source change ships; the robust per-byte sender is retained. GitLab #1195.
Co-Authored-By: Claude Opus 4.8 (1M context) <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net