Skip to content

[draft] chore(plans): DPDK scope assessment — defer for now#63

Draft
skullcrushercmd wants to merge 1 commit intomainfrom
perf/portscan-dpdk
Draft

[draft] chore(plans): DPDK scope assessment — defer for now#63
skullcrushercmd wants to merge 1 commit intomainfrom
perf/portscan-dpdk

Conversation

@skullcrushercmd
Copy link
Copy Markdown
Contributor

Summary

Phase 1 scope-discovery deliverable for the DPDK kernel-bypass investigation tracked under anygpt-32. No implementation. No follow-up PR planned at this time. Memo only, opened as draft so the assessment is discoverable in repo history.

Decision

Defer. The user picked option 1 (wait on anygpt-31's AF_XDP × 8-ENI bench). If their numbers clear the 10–14 M pps target on c6in.metal, DPDK is shelved indefinitely. If they do not, this branch is the starting point for a revisit.

Why this is not getting implemented now

  • Scanner binary is built from https://github.com/Lorikazzzz/VulnScanner-zmap-alternative- — an external 3,643-LOC C repo, masscan+zmap hybrid, not under AnyVM-Tech control (resolved by package-worker-bundle.sh:519-525).
  • Zero existing DPDK code anywhere in the scanner. PF_RING ZC support exists behind USE_PFRING_ZC=1 but is commercial/license-keyed and has no documented ENA support, so it doesn't help c6in.metal.
  • Adding DPDK requires ~600–900 LOC of new C (send-dpdk.c, recv-dpdk.c, EAL bring-up, ARP/MAC resolution out-of-band, Makefile + CLI flags) plus a fork. Realistic effort: 2–3 weeks. Scope-equivalent to the original brief's "STOP and surface" category even though the language is C, not Rust.
  • AF_XDP (anygpt-31's path) is also kernel-bypass-class and is supported natively by the in-tree ENA driver — likely sufficient for the throughput target without owning a scanner fork.

What's in this PR

  • plans/2026-04-27-portscan-dpdk-scope-memo-v1.md — full Phase 1 scope memo: A/B/C classification, effort breakdown, AnyGPT-side surface that would be needed (build target, tools/setup-dpdk.sh, env knobs), coordination with anygpt-31, three forward-path options.

Test plan

  • N/A — documentation only, no code changes, no CI dependencies.

Disposition

  • Draft, do not merge.
  • Close + delete branch if anygpt-31's AF_XDP results obsolete the question.
  • Promote to non-draft + extend with a multi-week implementation plan only if a revisit is approved.

🤖 Generated with Claude Code

Phase 1 scope discovery for perf/portscan-dpdk concluded that adding
DPDK to the scanner is a 2-3 week effort on a third-party C repo
(Lorikazzzz/VulnScanner-zmap-alternative-) and scope-equivalent to
the "STOP and surface" category in the original brief.

Deferring in favor of waiting on anygpt-31's AF_XDP + multi-NIC
results. If 8x ENI AF_XDP clears the 10-14M pps target, DPDK is
shelved indefinitely; if it does not, this branch is the starting
point for a revisit.

No code changes — memo only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
skullcrushercmd added a commit that referenced this pull request Apr 28, 2026
Phase 1 design document for adding a DPDK io_engine to the bundled C
scanner (AnyVM-Tech/anyscan-engine-c). Mirrors PR #65's AF_XDP plan
structure across §1-§10.

Why now: PR #65's AF_XDP work landed but the c6in.metal bench revealed
ENA on kernel <=6.12.74 forces drv+copy (not drv+zerocopy), capping the
8-NIC ceiling at ~22 M pps — short of the 30-50 M pps projection. DPDK
via vfio-pci bypasses the ENA kernel driver entirely, projecting
50-100 M pps realistic on c6in.metal.

This supersedes PR #63's deferral recommendation (which was conditioned
on AF_XDP clearing the throughput target — it did not).

Plan scope:
- engine repo: ~1,100 LOC (send-dpdk.c, recv-dpdk.c, dpdk-eal.c,
  dpdk-defs.h, vtable slot in engine.c, USE_DPDK Makefile block)
- AnyScan-side wire-up: ~765 LOC (mirrors PR #71's ANYSCAN_USE_AF_XDP
  pattern across install-external-deps.sh / package-worker-bundle.sh /
  deploy.sh / runtime.worker.env.template / adapter.py + new
  tools/setup-dpdk.sh for hugepages and vfio-pci bind/unbind)
- NIC-binding decision: dedicated-DPDK-NIC pattern. eth0 stays on
  kernel for agentd heartbeat; ENIs eth1..eth7 (c6in.metal) go to
  vfio-pci. Single-NIC instances are DPDK-ineligible by design.
- Effort: 12-15 days implementation + canary, ~3-4 weeks total.

Phase 2 implementation is gated on user/orchestrator approval after
this plan PR merges. No engine C code, no runtime config, no submodule
bumps in this PR.

Co-authored-by: skullcmd <skullcmd@anyvm.tech>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant