fix(perf): ASTFAssociation rules= + OFFLINE TRex profile validation#107
Conversation
… port= + add OFFLINE TRex-profile validation to end the one-error-per-EC2-run cycle. Run 28549496895 (post-#106) hit 'unexpected keyword argument port'. Rather than guess again, I stood up the TRex control-plane profile module locally (its ArgVerify is pure Python — no NIC/server) and introspected the real API: - ASTFAssociation(rules=...) — NOT port=; the port goes on ASTFAssociationRule. - ASTFTCPClientTemplate DOES accept port= (my #106 guess there was fine). Fixed the association and confirmed build_tcp_profile() builds a valid ASTFProfile for all payload sizes OFFLINE in <1s. scripts/perf-tests/test/validate_tcp_profile.sh reproduces this locally (sparse-clones the TRex control-plane, shims cgi/zmq for py3.13/arm64, builds the profile). This catches ASTF-API errors instantly instead of via ~30-min EC2 runs — the fix for the 'testing at deployment is expensive' problem. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.19x (OK)
|
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.31x (OK)
|
[CI] Stage: DeployInfrastructure ready.
|
[CI] Stage: DeployInfrastructure ready.
|
[CI] Stage: SummaryAll tests PASSED. ARP seeding: kernel /proc/net/arp (automatic)
|
1 similar comment
[CI] Stage: SummaryAll tests PASSED. ARP seeding: kernel /proc/net/arp (automatic)
|
✅ Integration Tests Passed — Graviton (run)Branch: Test Results
Application Logs (last 20 lines)receiver-echo-server.log sender-echo-server.log sender-test-client.log |
✅ Integration Tests Passed (Run 28551110519)Branch: Test Results
Application Logs (last 20 lines)receiver-echo-server.log sender-echo-server.log sender-test-client.log receiver-test-client-iperf.log sender-test-client-iperf.log Full Application Logs (last 200 lines each)receiver-echo-server.logsender-echo-server.logsender-test-client.logreceiver-test-client-iperf.logsender-test-client-iperf.log
|
Follow-up to #106. Run 28549496895 hit
unexpected keyword argument 'port'. This is the 5th TRex-profile API error found one-at-a-time on EC2 — so instead of guessing again, I built the offline validator we discussed.The fix (ground-truthed, not guessed)
Stood up the TRex control-plane profile module locally (its
ArgVerifyis pure Python — no NIC/server) and introspected the real API:ASTFAssociation(rules=...)— does not takeport=; the port goes onASTFAssociationRule(port=...).ASTFTCPClientTemplatedoes acceptport=(my fix(perf): TRex ASTFIPGen.glob type + client ip_gen (profile build) #106 change there was fine).Fixed the association, and confirmed
build_tcp_profile()builds a validASTFProfilefor all payload sizes offline in <1s.The tool (ends the whack-a-mole)
scripts/perf-tests/test/validate_tcp_profile.sh— sparse-clones the TRex control-plane, shimscgi(py3.13) +zmq(arm64), and builds the profile locally. Any future ASTF-API mistake is caught in <1s instead of a ~30-min EC2 run. Directly addresses the "testing at deployment is expensive" concern. Follow-up: wire it into CI as a per-PR gate.Merge → the next EC2 run should finally get past profile-build to real CPS/throughput (or a genuine runtime issue, no longer a profile-build error).
🤖 Generated with Claude Code