Target: 1.4.0 (Tier 1 — earn the benchmark)
There is no benchmark anywhere in the repo — no timeit, no
perf_counter, no pytest-benchmark, no performance job in CI. The
Tier 1 work (#82, #83, #84, #85) is worth roughly 2.4× end to end,
and nothing would stop it silently regressing.
This issue closes Tier 1 and is the gate on publishing any performance
claim.
What to do
- A benchmark script that walks the existing 97-frame corpus and
reports frames/sec — the corpus is already the right workload
because it exercises DNS, DHCP and IPv6 extension headers rather
than one synthetic TCP frame. - Optional comparison mode against
dpkt and scapy, with both as
dev-only extras so the zero-dependency guarantee is untouched. - A CI job that fails on a significant regression against a committed
baseline.
Why it is worth doing properly
Every published benchmark in this space is unusable: self-published by
the winner, run on a Core 2 Duo, or comparing CPython 3.6 against
CPython 2.7. A neutral, reproducible, CI-run comparison does not
currently exist for Python packet parsers, and publishing one is a
contribution independent of where NETProtocols places in it.
Acceptance criteria
Target: 1.4.0 (Tier 1 — earn the benchmark)
There is no benchmark anywhere in the repo — no
timeit, noperf_counter, nopytest-benchmark, no performance job in CI. TheTier 1 work (#82, #83, #84, #85) is worth roughly 2.4× end to end,
and nothing would stop it silently regressing.
This issue closes Tier 1 and is the gate on publishing any performance
claim.
What to do
reports frames/sec — the corpus is already the right workload
because it exercises DNS, DHCP and IPv6 extension headers rather
than one synthetic TCP frame.
dpktandscapy, with both asdev-only extras so the zero-dependency guarantee is untouched.
baseline.
Why it is worth doing properly
Every published benchmark in this space is unusable: self-published by
the winner, run on a Core 2 Duo, or comparing CPython 3.6 against
CPython 2.7. A neutral, reproducible, CI-run comparison does not
currently exist for Python packet parsers, and publishing one is a
contribution independent of where NETProtocols places in it.
Acceptance criteria
uv runone command reproduces the numbers.