Repository navigation
feat: add quic-tcp-ec2-integration spec and ROADMAP items 37-38 - #122
Conversation
Synthetic Performance Results — Graviton (run)Commit: ✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01) Synthetic UDP Performance ResultsMeasures framework overhead: sync IPv4 Baseline
IPv6
IPv6 vs IPv4 Comparison (sync path)
IPv4 avg sync/async ratio: 1.0x, worst: 1.1x | IPv6 vs IPv4 worst ratio: 1.23x (OK)
|
Integration Test Failure — Graviton (Run 33505065517)Branch: failure-summary.json{
"failed_step": "deploy_infrastructure",
"error": "Infrastructure deployment failed",
"exit_code": 2,
"timestamp": "2026-09-01T12:09:19.887053Z",
"sender_instance_id": "i-0b8664dad5014cf4d",
"receiver_instance_id": "i-09d42a02c9cf7bd55",
"commit": "1d308388331a74d510f3271cc58febf6c492337a",
"run_url": "https://github.com/gspivey/dpdk-stdlib-rust/actions/runs/33505065517"
}```
### receiver-console-output.log (65117 bytes, last 80 lines)[ 2332.997695] __mutex_lock.constprop.0+0x2cc/0x91c (console output unavailable) |
❌ Integration Tests Failed — Graviton (run)Branch: Test ResultsApplication Logs (last 20 lines) |
TCP Synthetic Performance Results (run)Commit: TCP Synthetic Performance ResultsMeasures TCP engine framework overhead using a mock PacketBackend.
conn_est=1881ns, throughput=4412.1Mbps, tick=709ns |
Synthetic Performance Results (run)Commit: ✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01) Synthetic UDP Performance ResultsMeasures framework overhead: sync IPv4 Baseline
IPv6
IPv6 vs IPv4 Comparison (sync path)
IPv4 avg sync/async ratio: 0.9x, worst: 1.0x | IPv6 vs IPv4 worst ratio: 1.32x (OK)
|
[CI] Stage: DeployInfrastructure ready.
|
Integration Tests —
|
| Tier | Test | Result | Time | Reason |
|---|---|---|---|---|
| tier1-dpdk-echo | arp_resolution | ✅ pass | 2.412s | |
| tier1-dpdk-echo | udp_send_receive | ✅ pass | 1.752s | |
| tier1-dpdk-echo | echo_roundtrip | ✅ pass | 1.551s | |
| tier1-dpdk-echo | payload_integrity | ✅ pass | 0.744s | |
| tier1-dpdk-echo | jumbo_diagnostics | ✅ pass | 0.025s | |
| tier1-dpdk-echo | jumbo_echo_8000 | ✅ pass | 1.746s | |
| tier1-tcp-echo-async | execution | 0.000s | ENI bind failed on receiver instance | |
| tier1-tcp-echo | bidir_echo | ✅ pass | 0.736s | |
| tier1-tcp-echo | bidir_multi | ✅ pass | 0.771s | |
| tier2-kernel-interop | arp_resolution | ✅ pass | 0.064s | |
| tier2-kernel-interop | udp_send_receive | ✅ pass | 1.079s | |
| tier2-kernel-interop | echo_roundtrip | ✅ pass | 0.871s | |
| tier2-kernel-interop | payload_integrity | ✅ pass | 0.068s | |
| tier2-tcp-echo | execution | 0.000s | ENI bind failed on receiver instance | |
| tier3-iperf-interop | our_app_sends | ✅ pass | 2.568s |
⚠️ Infra flakes (2) — SSM/ENI setup, not code (task #10)
- tier1-tcp-echo-async / execution — ENI bind failed on receiver instance
- tier2-tcp-echo / execution — ENI bind failed on receiver instance
❌ Integration Tests Failed (Run 33505065263)Branch: Test Results
Application Logs (last 20 lines)sender-echo-server.log sender-test-client.log sender-test-client-iperf.log Full Application Logs (last 200 lines each)sender-echo-server.logsender-test-client.logsender-test-client-iperf.log
|
|
Wire the existing QUIC Tier 1 harness into the shared integration orchestrator, add QUIC integration and performance CI, and define evidence-based gates for graduating TCP and QUIC from non-blocking to blocking CI. Spec includes: - requirements.md: 10 functional requirements, 4 review rounds - design.md: orchestrator pseudocode, CI workflow structure, gate runbook - tasks.md: 19 implementation tasks split into 2 ROADMAP items Review: 4 Claude opus-5 rounds (SHIPPABLE, 0 CRITICAL / 0 HIGH remaining) EARS: clean
276be5a to
8394723
Compare
Synthetic Performance Results — Graviton (run)Commit: ✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01) Synthetic UDP Performance ResultsMeasures framework overhead: sync IPv4 Baseline
IPv6
IPv6 vs IPv4 Comparison (sync path)
IPv4 avg sync/async ratio: 0.9x, worst: 1.1x | IPv6 vs IPv4 worst ratio: 1.32x (OK)
|
TCP Synthetic Performance Results (run)Commit: TCP Synthetic Performance ResultsMeasures TCP engine framework overhead using a mock PacketBackend.
conn_est=1223ns, throughput=6181.2Mbps, tick=481ns |
Synthetic Performance Results (run)Commit: ✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01) Synthetic UDP Performance ResultsMeasures framework overhead: sync IPv4 Baseline
IPv6
IPv6 vs IPv4 Comparison (sync path)
IPv4 avg sync/async ratio: 0.9x, worst: 1.1x | IPv6 vs IPv4 worst ratio: 1.32x (OK)
|
[CI] Stage: DeployInfrastructure ready.
|
Integration Tests — ❌ 3 real failures
❌ Real failures (3) — code/test issues
detailsdetails |
Integration Test Failure — Graviton (Run 38105318120)Branch: receiver-user-data.log (7305 bytes, last 80 lines)sender-user-data.log (7305 bytes, last 80 lines)receiver-console-output.log (45235 bytes, last 80 lines)sender-console-output.log (45697 bytes, last 80 lines) |
❌ Integration Tests Failed — Graviton (run)Branch: Test Results
Application Logs (last 20 lines)receiver-echo-server.log sender-echo-server.log sender-test-client.log |
[CI] Stage: DeployInfrastructure ready.
|
|
## ROADMAP items 39–42 Spec for the 3 root-caused TCP integration-test failures that were found after PR #122 merged. ## Root causes (confirmed against actual code) **Bug 1 — RFC 6191 TIME_WAIT (engine.rs lines ~1557–1578)** `handle_time_wait` only handles FIN retransmits; any other packet including SYN is silently dropped. Fix: add RST handling (remove TCB), SYN > rcv_nxt handling (new incarnation), SYN ≤ rcv_nxt (re-ACK to trigger RST→SYN-retransmit cycle). **Note:** ISN generator uses per-process random secret (confirmed in isn.rs), so RFC 6191 ISN comparison alone is ~50/50 — full RST recovery path is required. **Bug 2 — Asymmetric routing (Phase C kernel_to_dpdk_echo)** Kernel client sends from eth0 (management IP); DPDK receiver's SYN-ACK returns to eth1 subnet; rp_filter=1 drops it. Fix: add `--bind-ip` to tcp-test-client, pass ETH1_IP in Phase C harness. **Bug 3 — vfio-pci bind race (Graviton-specific)** EAL init fires before /dev/vfio/noiommu-* node appears after dpdk-devbind.py. Fix: poll driver symlink + device node with 60s timeout before launching any DPDK binary. ## SOP exception Item 39 (known-failures gate) is a prerequisite. Once merged, items 40–42 each remove one entry from `ci/known-failures.txt`. CI is green when the target test passes AND all remaining listed tests fail as expected. ## Review history Spec designed with Claude opus-5.5 + actual code inspection (isn.rs, engine.rs). Key finding: the ISN coin-flip issue changes the engine fix from a one-liner to the full RFC 1122 §4.2.2.13 recovery sequence. <!-- no-visual-delta --> **Why no screenshot:** spec + ROADMAP only.
Summary
Adds spec for QUIC + TCP EC2 integration and performance CI gaps.
What's Missing Today (and What This Spec Fixes)
run_quic_tier1function--tier quicfilter + cert transfer via SSMquic-integration-tests.ymlworkflowcontinue-on-erroruntil 10 clean runsquic-perf-tests.ymlworkflowrun-perf-tests.sh --configs quic-native-dpdk-niccontinue-on-errorgate: no defined removal procedureSpec Contents
run_quic_tier1,quic_transfer_cert,quic_verify_build; CI workflow YAML structure; gate counting runbookReview History
ROADMAP Items Added
Key Design Decisions
quic-only: not part of run-all, so primaryintegration-testsjob is unchangedconcurrency.group: integration-tests(can't useneeds:across workflow files)run-quic-integration-tests.shsed-escaping approach (which is vulnerable to%in cert content)ssm_run_get_outputarg order:(instance_id, timeout, cmd)— deliberately reordered fromrun-quic-perf.sh:175's(instance_id, cmd, timeout)to match the orchestrator convention