• src/bench/zmodem/README.md fixA.patch fixB.patch matrix.sh zbench.py z

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Thursday, July 23, 2026 23:03:46
    https://gitlab.synchro.net/main/sbbs/-/commit/5c5ad4d427e47dce536082cc
    Added Files:
    src/bench/zmodem/README.md fixA.patch fixB.patch matrix.sh zbench.py zbench_pty.py zbench_sock.py ztx_buf.c
    Log Message:
    bench/zmodem: add the ZMODEM benchmark harness

    Tooling behind docs/zmodem_comparison.md and the (reverted) sexyz
    throughput work, kept for the eventual redesign tracked in GitLab #1195:

    - zbench_sock.py: the main harness (userspace relay with latency,
    bandwidth-asymmetry, and forward bit-corruption injection; one
    bidirectional socket per endpoint so it drives sexyz, lrzsz, and
    Forsberg sz).
    - zbench_pty.py / zbench.py: pty and two-pipe variants.
    - ztx_buf.c: a SyncTERM-model sender linking the real zmodem.o behind a
    buffered send_byte, to separate the zmodem.c cost from the sexyz.c cost.
    - matrix.sh: block-size / CRC / latency / bandwidth / error sweeps.
    - fixA.patch, fixB.patch: the reverted batching prototypes.

    The README captures the design constraint the first attempt missed: a
    correct batched sender must keep servicing the back-channel while sending
    (the reverted prototypes blocked on a whole-subpacket flush and starved
    ZRPOS handling under errors), and it must be gated on multi-run
    error-recovery, not a single pass.

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net