Skip to content

perf: eliminate spawn_blocking overhead in Tokio async wrapper - #38

Merged
gspivey merged 5 commits into
mainfrom
claude/synthetic-udp-perf-test-Wef0p
Apr 14, 2026
Merged

gspivey merged 5 commits into
mainfrom
claude/synthetic-udp-perf-test-Wef0p

Conversation

@gspivey

@gspivey gspivey commented Apr 13, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add synthetic performance benchmark (apps/synthetic-bench/) that measures framework overhead of the async Tokio wrapper vs sync dpdk_udp::UdpSocket. Runs in CI on every push with no AWS credentials needed (~20s).
  • Add try_recv_from() to dpdk_udp::UdpSocket: non-blocking single-poll receive that returns Ok(None) immediately instead of sleeping in a loop. Includes both pipeline and inline paths.
  • Rewrite Tokio async wrappers (DpdkUdpSocket and compat::tokio::UdpSocket) to eliminate three sources of overhead that capped throughput at ~50K ops/sec:
    1. spawn_blocking dispatch (~10-20μs per call)
    2. tokio::sync::Mutex async locking overhead → replaced with std::sync::Mutex
    3. buf.to_vec() heap allocation on every send/recv → eliminated

Only connect (ARP resolution) and disable_perf_reporting (thread join) retain spawn_blocking.

Synthetic benchmark results (sync vs async, same backend)

Test Sync PPS Async PPS Ratio
TX 64B 9.3M 8.3M 1.1x
RX 64B 2.4M 2.9M 0.8x
TX 1400B 1.6M 1.6M 1.0x
RX 1400B 856K 911K 0.9x

Average ratio: 1.0x — framework overhead eliminated. Previously ~50K pps async, now millions.

Test plan

  • cargo build passes
  • cargo test — all 365 tests pass, 0 failures
  • Synthetic bench runs in ~20s, shows async at parity with sync
  • CI integration tests pass
  • Performance tests pass (to be triggered after CI clears)

https://claude.ai/code/session_01EpC1AocdV7TkvTiMXmtCkm

claude added 2 commits April 13, 2026 12:53
…ughput

Adds a new `synthetic-bench` binary that measures the pure framework
overhead of the Tokio async wrapper (spawn_blocking + Mutex + buf.to_vec)
vs the sync dpdk_udp::UdpSocket. Uses a mock PacketBackend with ARP
auto-reply so no real NIC is needed — runs in ~20 seconds.

Benchmarks: TX send_to and RX recv_from at 64B and 1400B payloads.
Initial results show the async wrapper is 20-188x slower than sync,
with ~20us/op overhead dominated by spawn_blocking.

CI integration: adds a `synthetic-perf` job to integration-tests.yml
that runs on every PR, posts results as a PR comment for fast
regression detection.

https://claude.ai/code/session_01EpC1AocdV7TkvTiMXmtCkm
The Tokio async wrapper (DpdkUdpSocket and compat::tokio::UdpSocket)
previously used spawn_blocking + tokio::sync::Mutex + buf.to_vec() for
every send/recv operation, capping throughput at ~50K ops/sec due to
~20μs dispatch overhead per call.

Changes:
- Add try_recv_from() to dpdk_udp::UdpSocket: non-blocking single-poll
  that returns Ok(None) immediately instead of sleeping in a loop.
  Includes both pipeline and inline paths mirroring recv_from.
- Replace tokio::sync::Mutex with std::sync::Mutex in DpdkUdpSocket
  and compat::tokio::DpdkAsyncSocket (safe because critical sections
  are short CPU-only ops that never await).
- Remove spawn_blocking from send_to, send, recv_from, recv hot paths.
  Only connect (ARP resolution) and disable_perf_reporting (thread join)
  still use spawn_blocking.
- Remove per-call buf.to_vec() allocations.
- Update synthetic bench to measure the new pattern.

Synthetic benchmark results (sync vs async, same backend):
  TX 64B:   9.3M vs 8.3M pps (1.1x ratio)
  RX 64B:   2.4M vs 2.9M pps (0.8x — async faster)
  TX 1400B: 1.6M vs 1.6M pps (1.0x — identical)
  RX 1400B: 856K vs 911K pps (0.9x — async faster)
  Average ratio: 1.0x — framework overhead eliminated.

https://claude.ai/code/session_01EpC1AocdV7TkvTiMXmtCkm
@github-actions

Copy link
Copy Markdown

Synthetic Performance Results (run)

Commit: 9071749c

✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)

Synthetic UDP Performance Results

Measures framework overhead: sync dpdk_udp::UdpSocket vs async (std::sync::Mutex + try_recv_from).

Test Payload Sync PPS Async PPS Ratio (sync/async) Async ns/op
TX send_to 64B 12.2M 11.4M 1.1x 87
RX recv_from 64B 3.7M 4.9M 0.7x 205
TX send_to 1400B 1.8M 1.8M 1.0x 550
RX recv_from 1400B 1.2M 1.2M 0.9x 802

Avg sync/async ratio: 0.9x, worst: 1.1x

Good: Async wrapper is within 1.1x of sync — minimal framework overhead.

@github-actions

Copy link
Copy Markdown

[CI] Stage: Deploy

Infrastructure ready.

  • Sender: i-04cf9f2902b974078 (DPDK ENI: 10.0.1.143)
  • Receiver: i-0cf909de357586ab7 (DPDK ENI: 10.0.1.107)
  • Both instances SSM-ready.

@github-actions

Copy link
Copy Markdown

[CI] Stage: Summary

All tests PASSED.

ARP seeding: kernel /proc/net/arp (automatic)

  • tier1-dpdk-echo: 6 tests, 0 failures
  • tier2-kernel-interop: 4 tests, 0 failures
  • tier3-iperf-interop: 1 tests, 0 failures
  • tier3-iperf-interop: 1 tests, 0 failures

@github-actions

Copy link
Copy Markdown

✅ Integration Tests Passed (Run 24350601300)

Branch: 38/merge | Commit: 9071749c

Test Results

  • tier1-dpdk-echo.xml: 6 tests, 0 failures, skipped
  • tier2-kernel-interop.xml: 4 tests, 0 failures, skipped
  • tier3-iperf-sends.xml: 1 tests, 0 failures, skipped
  • tier3-our-app-sends.xml: 1 tests, 0 failures, skipped

Application Logs (last 20 lines)

receiver-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.107:9000 (MAC: 02:c7:57:f1:3f:61)
echo listening on 10.0.1.107:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.143:9000 (MAC: 02:b0:52:3b:15:c9)
echo listening on 10.0.1.143:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-test-client.log

EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
DPDK bind failed (Port init failed: Invalid port ID: 0), falling back to tokio
Backend: tokio
Sending packets...
Sent 12 bytes: 'arp-probe #1'
Received 12 bytes from 10.0.1.107:9000: 'arp-probe #1'
Test complete
[2026-04-13T15:19:01Z] INFO: ARP resolution succeeded (got response from peer)
[2026-04-13T15:19:01Z] INFO: Test: udp_send_receive
[2026-04-13T15:19:02Z] INFO: UDP send/receive succeeded
[2026-04-13T15:19:02Z] INFO: Test: echo_roundtrip
[2026-04-13T15:19:03Z] INFO: Echo roundtrip succeeded: 5/5 responses received
[2026-04-13T15:19:03Z] INFO: Test: payload_integrity
[2026-04-13T15:19:03Z] INFO: Response received, checking payload match...
[2026-04-13T15:19:03Z] INFO: Payload integrity verified (found in response)
[2026-04-13T15:19:03Z] INFO: JUnit XML written to: /tmp/test-results/tier2-kernel-interop.xml
[2026-04-13T15:19:03Z] INFO: Tier 2 sender tests complete. Results: /tmp/test-results/tier2-kernel-interop.xml

receiver-test-client-iperf.log

[2026-04-13T15:26:05Z] INFO: iperf-sends: sent 10 packets, received 10 responses
[2026-04-13T15:26:05Z] INFO: iperf-sends: PASS (sent >= 5 packets)
[2026-04-13T15:26:05Z] INFO: JUnit XML written to: /tmp/test-results/tier3-iperf-sends.xml
[2026-04-13T15:26:05Z] INFO: iperf-sends test complete

sender-test-client-iperf.log

Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #3'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #4'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #4'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #5'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #5'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #6'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #6'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #7'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #7'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #8'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #8'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #9'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #9'
Sent 31 bytes: 'dpdk-to-kernel-test-payload #10'
Received 31 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #10'
Test complete
[2026-04-13T15:25:04Z] INFO: our-app-sends: sent 10 packets, received 10 responses
[2026-04-13T15:25:04Z] INFO: our-app-sends: PASS (sent >= 5 packets)
[2026-04-13T15:25:04Z] INFO: JUnit XML written to: /tmp/test-results/tier3-our-app-sends.xml
[2026-04-13T15:25:04Z] INFO: our-app-sends test complete
Full Application Logs (last 200 lines each)

receiver-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.107:9000 (MAC: 02:c7:57:f1:3f:61)
echo listening on 10.0.1.107:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.143:9000 (MAC: 02:b0:52:3b:15:c9)
echo listening on 10.0.1.143:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-test-client.log

[2026-04-13T15:12:05Z] INFO: Test: arp_resolution
UDP Test Client
Target: 10.0.1.107:9000
Bind address: 10.0.1.143:0
Message: 'arp-probe'
Count: 1
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.143:32768 (MAC: 02:b0:52:3b:15:c9)
Backend: dpdk
Sending packets...
Sent 12 bytes: 'arp-probe #1'
Received 12 bytes from 10.0.1.107:9000: 'arp-probe #1'
Test complete
[2026-04-13T15:12:07Z] INFO: ARP resolution succeeded (got response from peer)
[2026-04-13T15:12:07Z] INFO: Test: udp_send_receive
[2026-04-13T15:12:09Z] INFO: UDP send/receive succeeded
[2026-04-13T15:12:09Z] INFO: Test: echo_roundtrip
[2026-04-13T15:12:10Z] INFO: Echo roundtrip succeeded: 5/5 responses received
[2026-04-13T15:12:10Z] INFO: Test: payload_integrity
[2026-04-13T15:12:11Z] INFO: Response received, checking payload match...
[2026-04-13T15:12:11Z] INFO: Payload integrity verified (found in response)
[2026-04-13T15:12:11Z] INFO: Test: jumbo_diagnostics
[2026-04-13T15:12:11Z] INFO: === JUMBO FRAME DIAGNOSTICS ===
[2026-04-13T15:12:11Z] INFO: Interface MTU:
  1500
  9001
  65536
[2026-04-13T15:12:11Z] INFO:   docker0: MTU=1500
[2026-04-13T15:12:11Z] INFO:   ens5: MTU=9001
[2026-04-13T15:12:11Z] INFO:   lo: MTU=65536
[2026-04-13T15:12:11Z] INFO: Routing table MTU column:
Iface	Destination	Gateway 	Flags	RefCnt	Use	Metric	Mask		MTU	Window	IRTT                                                       
ens5	00000000	0101000A	0003	0	0	512	00000000	0	0	0                                                                             
ens5	0200000A	0101000A	0007	0	0	512	FFFFFFFF	0	0	0                                                                             
ens5	0001000A	00000000	0001	0	0	512	00FFFFFF	0	0	0                                                                             
ens5	0101000A	00000000	0005	0	0	512	FFFFFFFF	0	0	0                                                                             
[2026-04-13T15:12:11Z] INFO: DPDK port config (from echo server log):
[2026-04-13T15:12:11Z] INFO:   (no MTU info in echo log)
[2026-04-13T15:12:11Z] INFO: === END JUMBO DIAGNOSTICS ===
[2026-04-13T15:12:11Z] INFO: Test: jumbo_echo_8000
[2026-04-13T15:12:13Z] INFO: Jumbo output: UDP Test Client
Target: 10.0.1.107:9000
Bind address: 10.0.1.143:0
Payload size: 8000 bytes
Count: 3
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.143:32768 (MAC: 02:b0:52:3b:15:c9)
Backend: dpdk
Sending packets...
Sent 8000 bytes (binary payload)
Received 8000 bytes from 10.0.1.107:9000 (expected 8000, OK)
Sent 8000 bytes (binary payload)
Received 8000 bytes from 10.0.1.107:9000 (expected 8000, OK)
Sent 8000 bytes (binary payload)
Received 8000 bytes from 10.0.1.107:9000 (expected 8000, OK)
Test complete
[2026-04-13T15:12:13Z] INFO: Jumbo frame echo succeeded: 3/3 responses with correct size
[2026-04-13T15:12:13Z] INFO: JUnit XML written to: /tmp/test-results/tier1-dpdk-echo.xml
[2026-04-13T15:12:13Z] INFO: Tier 1 sender tests complete. Results: /tmp/test-results/tier1-dpdk-echo.xml
[2026-04-13T15:19:01Z] INFO: Test: arp_resolution
UDP Test Client
Target: 10.0.1.107:9000
Bind address: 0.0.0.0:0
Message: 'arp-probe'
Count: 1
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
DPDK bind failed (Port init failed: Invalid port ID: 0), falling back to tokio
Backend: tokio
Sending packets...
Sent 12 bytes: 'arp-probe #1'
Received 12 bytes from 10.0.1.107:9000: 'arp-probe #1'
Test complete
[2026-04-13T15:19:01Z] INFO: ARP resolution succeeded (got response from peer)
[2026-04-13T15:19:01Z] INFO: Test: udp_send_receive
[2026-04-13T15:19:02Z] INFO: UDP send/receive succeeded
[2026-04-13T15:19:02Z] INFO: Test: echo_roundtrip
[2026-04-13T15:19:03Z] INFO: Echo roundtrip succeeded: 5/5 responses received
[2026-04-13T15:19:03Z] INFO: Test: payload_integrity
[2026-04-13T15:19:03Z] INFO: Response received, checking payload match...
[2026-04-13T15:19:03Z] INFO: Payload integrity verified (found in response)
[2026-04-13T15:19:03Z] INFO: JUnit XML written to: /tmp/test-results/tier2-kernel-interop.xml
[2026-04-13T15:19:03Z] INFO: Tier 2 sender tests complete. Results: /tmp/test-results/tier2-kernel-interop.xml

receiver-test-client-iperf.log

[2026-04-13T15:26:05Z] INFO: iperf-sends: sent 10 packets, received 10 responses
[2026-04-13T15:26:05Z] INFO: iperf-sends: PASS (sent >= 5 packets)
[2026-04-13T15:26:05Z] INFO: JUnit XML written to: /tmp/test-results/tier3-iperf-sends.xml
[2026-04-13T15:26:05Z] INFO: iperf-sends test complete

sender-test-client-iperf.log

[2026-04-13T15:25:01Z] INFO: Pre-flight: checking DPDK state and ARP cache...
[2026-04-13T15:25:01Z] INFO: Local IP: 10.0.1.143, Peer IP: 10.0.1.107, Port: 9000
[2026-04-13T15:25:01Z] INFO: /proc/net/arp contents:
IP address       HW type     Flags       HW address            Mask     Device
10.0.1.107       0x1         0x2         02:c7:57:f1:3f:61     *        ens5
10.0.1.1         0x1         0x2         02:cb:76:10:5b:ed     *        ens5
10.0.1.143       0x1         0x2         02:b0:52:3b:15:c9     *        ens5
10.0.1.74        0x1         0x2         02:58:99:36:c2:7b     *        ens5
10.0.1.189       0x1         0x2         02:ef:f3:53:9e:9d     *        ens5
[2026-04-13T15:25:01Z] INFO: DPDK runtime state:
No /var/run/dpdk/ directory
[2026-04-13T15:25:01Z] INFO: vfio-pci bindings:
0000:00:06.0
bind
module
new_id
remove_id
uevent
unbind
[2026-04-13T15:25:01Z] INFO: Test binary: /opt/dpdk-stdlib/target/release/test-client
-rwxr-xr-x. 2 root root 1860096 Apr 13 15:10 /opt/dpdk-stdlib/target/release/test-client
[2026-04-13T15:25:01Z] INFO: Launching test-client: /opt/dpdk-stdlib/target/release/test-client --target 10.0.1.107 --port 9000 --bind-ip 10.0.1.143 --count 10 --delay 200
[2026-04-13T15:25:04Z] INFO: Test client output: UDP Test Client
Target: 10.0.1.107:9000
Bind address: 10.0.1.143:0
Message: 'dpdk-to-kernel-test-payload'
Count: 10
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.143:32768 (MAC: 02:b0:52:3b:15:c9)
Backend: dpdk
Sending packets...
Sent 30 bytes: 'dpdk-to-kernel-test-payload #1'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #1'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #2'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #2'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #3'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #3'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #4'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #4'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #5'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #5'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #6'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #6'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #7'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #7'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #8'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #8'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #9'
Received 30 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #9'
Sent 31 bytes: 'dpdk-to-kernel-test-payload #10'
Received 31 bytes from 10.0.1.107:9000: 'dpdk-to-kernel-test-payload #10'
Test complete
[2026-04-13T15:25:04Z] INFO: our-app-sends: sent 10 packets, received 10 responses
[2026-04-13T15:25:04Z] INFO: our-app-sends: PASS (sent >= 5 packets)
[2026-04-13T15:25:04Z] INFO: JUnit XML written to: /tmp/test-results/tier3-our-app-sends.xml
[2026-04-13T15:25:04Z] INFO: our-app-sends test complete
⚠️ SSM Command Failures (receiver-ssm-failure.log)
=== Polling timeout after 30s ===
Status: InProgress
Instance: i-0cf909de357586ab7 (receiver)
Command ID: cc062ed3-70ba-4c0a-9ec1-29dc426d456e

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-0cf909de357586ab7 (receiver)
Command ID: e17fb88c-bb79-4a72-9dee-0d520c57e94a

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-0cf909de357586ab7 (receiver)
Command ID: b3685284-82f8-4fad-ac1f-b46c250f9525

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-0cf909de357586ab7 (receiver)
Command ID: 09388900-d684-415c-b373-5151b3a9eb00

=== STDOUT ===


=== STDERR ===


⚠️ SSM Command Failures (sender-ssm-failure.log)
=== Polling timeout after 30s ===
Status: InProgress
Instance: i-04cf9f2902b974078 (sender)
Command ID: 01c2a641-7db3-404e-91e7-b71c826c80de

=== STDOUT ===


=== STDERR ===


Network & PCI State

receiver-network-interfaces.log

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:c9:6d:d8:c3:b1 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-035f2453dc16f0ac1
    altname device-number-0.0
    inet 10.0.1.42/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 1897sec preferred_lft 1897sec
    inet6 fe80::c9:6dff:fed8:c3b1/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:be:6a:a0:e7 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

sender-network-interfaces.log

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:78:d7:29:0e:59 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-0b3b8834776c64264
    altname device-number-0.0
    inet 10.0.1.207/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 1921sec preferred_lft 1921sec
    inet6 fe80::78:d7ff:fe29:e59/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:ee:03:80:15 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

receiver-networking-diag-baseline.txt

=== NETWORKING DIAGNOSTICS ===
timestamp: 2026-04-13T15:11:24Z
hostname: ip-10-0-1-42.ec2.internal
kernel: 6.1.166-197.305.amzn2023.x86_64

=== DPDK PORT STATUS ===

Network devices using DPDK-compatible driver
============================================
0000:00:06.0 'Elastic Network Adapter (ENA) ec20' drv=vfio-pci unused=ena

Network devices using kernel driver
===================================
0000:00:05.0 'Elastic Network Adapter (ENA) ec20' if=ens5 drv=ena unused=vfio-pci *Active*

No 'Baseband' devices detected
==============================

No 'Crypto' devices detected
============================

No 'DMA' devices detected
=========================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

No 'Misc (rawdev)' devices detected
===================================

No 'Regex' devices detected
===========================

=== IP ADDRESSES ===
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:c9:6d:d8:c3:b1 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-035f2453dc16f0ac1
    altname device-number-0.0
    inet 10.0.1.42/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 3323sec preferred_lft 3323sec
    inet6 fe80::c9:6dff:fed8:c3b1/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:be:6a:a0:e7 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

=== ARP TABLE ===
10.0.1.1 dev ens5 lladdr 02:cb:76:10:5b:ed REACHABLE 
10.0.1.189 dev ens5 lladdr 02:ef:f3:53:9e:9d REACHABLE 

=== ROUTE TABLE ===
default via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.42 metric 512 
10.0.0.2 via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.42 metric 512 
10.0.1.0/24 dev ens5 proto kernel scope link src 10.0.1.42 metric 512 
10.0.1.1 dev ens5 proto dhcp scope link src 10.0.1.42 metric 512 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 

=== IMDS: ENI INFORMATION ===
ENI MACs found: 02:c7:57:f1:3f:61/ 02:c9:6d:d8:c3:b1/ 

--- ENI: 02:c7:57:f1:3f:61/ ---
  device-number: 1
  local-ipv4s: 10.0.1.107
  subnet-id: subnet-0ee8d57d2a646d4e3
  subnet-cidr: 10.0.1.0/24

--- ENI: 02:c9:6d:d8:c3:b1/ ---
  device-number: 0
  local-ipv4s: 10.0.1.42
  subnet-id: subnet-0ee8d57d2a646d4e3
  subnet-cidr: 10.0.1.0/24


=== GATEWAY ARP TEST ===
Gateway IP: 10.0.1.1
Gateway ARP entry:
10.0.1.1 dev ens5 lladdr 02:cb:76:10:5b:ed REACHABLE 

arping result:
ARPING 10.0.1.1 from 10.0.1.42 ens5
Unicast reply from 10.0.1.1 [02:CB:76:10:5B:ED]  0.535ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

=== HUGEPAGE STATUS ===
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         2097152 kB

=== VFIO STATUS ===
total 0
drwxr-xr-x.  2 root root       80 Apr 13 15:11 .
drwxr-xr-x. 14 root root     3100 Apr 13 15:10 ..
crw-------.  1 root root 243,   0 Apr 13 15:11 noiommu-0
crw-rw-rw-.  1 root root  10, 196 Apr 13 15:06 vfio

noiommu mode:
Y

=== DPDK SHARED MEMORY ===
no /var/run/dpdk/ directory (clean state)

=== DPDK-RELATED DMESG (last 30 lines) ===
[    0.068922] x86/fpu: Enabled xstate features 0x2ff, context size is 2568 bytes, using 'compacted' format.
[    0.075017] audit: type=2000 audit(1776092799.821:1): state=initialized audit_enabled=0 res=1
[    0.077496] kprobes: kprobe jump-optimization is enabled. All kprobes are optimized if possible.
[    0.102353] ACPI: Interpreter enabled
[    0.102353] ACPI: Enabled 2 GPEs in block 00 to 0F
[    0.127344] pci 0000:00:05.0: enabling Extended Tags
[    0.149184] SGI XFS with ACLs, security attributes, quota, no debug enabled
[    0.178489] ACPI: \_SB_.LNKD: Enabled at IRQ 11
[    0.285737] IPI shorthand broadcast: enabled
[    0.285799] AES CTR mode by8 optimization enabled
[    3.535210] systemd[1]: Mounting dev-hugepages.mount - Huge Pages File System...
[    3.571378] systemd[1]: Mounted dev-hugepages.mount - Huge Pages File System.
[    3.646903] VFIO - User Level meta-driver version: 0.3
[    4.908710] ena 0000:00:05.0: Elastic Network Adapter (ENA) v2.16.1g
[    4.920085] ena 0000:00:05.0: ENA device version: 0.10
[    4.920886] ena 0000:00:05.0: ENA controller version: 0.0.1 implementation version 1
[    5.022292] ena 0000:00:05.0: ENA Large LLQ is disabled
[    5.035424] ena 0000:00:05.0: Elastic Network Adapter (ENA) found at mem c0500000, mac addr 02:c9:6d:d8:c3:b1
[    5.155063] ena 0000:00:05.0 ens5: renamed from eth0
[    6.613727] ena 0000:00:05.0 ens5: Local page cache is disabled for less than 16 channels
[  211.382005] pci 0000:00:06.0: enabling Extended Tags
[  211.385908] ena 0000:00:06.0: enabling device (0000 -> 0002)
[  211.395429] ena 0000:00:06.0: ENA device version: 0.10
[  211.396182] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  211.494504] ena 0000:00:06.0: ENA Large LLQ is disabled
[  211.506620] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:c7:57:f1:3f:61
[  211.554588] ena 0000:00:06.0 ens6: renamed from eth0
[  211.926311] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  271.018796] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  271.020135] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device

=== DPDK-RELATED PROCESSES ===
no DPDK processes running

=== END DIAGNOSTICS ===

sender-networking-diag-baseline.txt

=== NETWORKING DIAGNOSTICS ===
timestamp: 2026-04-13T15:11:16Z
hostname: ip-10-0-1-207.ec2.internal
kernel: 6.1.166-197.305.amzn2023.x86_64

=== DPDK PORT STATUS ===

Network devices using DPDK-compatible driver
============================================
0000:00:06.0 'Elastic Network Adapter (ENA) ec20' drv=vfio-pci unused=ena

Network devices using kernel driver
===================================
0000:00:05.0 'Elastic Network Adapter (ENA) ec20' if=ens5 drv=ena unused=vfio-pci *Active*

No 'Baseband' devices detected
==============================

No 'Crypto' devices detected
============================

No 'DMA' devices detected
=========================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

No 'Misc (rawdev)' devices detected
===================================

No 'Regex' devices detected
===========================

=== IP ADDRESSES ===
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:78:d7:29:0e:59 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-0b3b8834776c64264
    altname device-number-0.0
    inet 10.0.1.207/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 3332sec preferred_lft 3332sec
    inet6 fe80::78:d7ff:fe29:e59/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:ee:03:80:15 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

=== ARP TABLE ===
10.0.1.1 dev ens5 lladdr 02:cb:76:10:5b:ed REACHABLE 
10.0.1.189 dev ens5 lladdr 02:ef:f3:53:9e:9d REACHABLE 

=== ROUTE TABLE ===
default via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.207 metric 512 
10.0.0.2 via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.207 metric 512 
10.0.1.0/24 dev ens5 proto kernel scope link src 10.0.1.207 metric 512 
10.0.1.1 dev ens5 proto dhcp scope link src 10.0.1.207 metric 512 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 

=== IMDS: ENI INFORMATION ===
ENI MACs found: 02:78:d7:29:0e:59/ 02:b0:52:3b:15:c9/ 

--- ENI: 02:78:d7:29:0e:59/ ---
  device-number: 0
  local-ipv4s: 10.0.1.207
  subnet-id: subnet-0ee8d57d2a646d4e3
  subnet-cidr: 10.0.1.0/24

--- ENI: 02:b0:52:3b:15:c9/ ---
  device-number: 1
  local-ipv4s: 10.0.1.143
  subnet-id: subnet-0ee8d57d2a646d4e3
  subnet-cidr: 10.0.1.0/24


=== GATEWAY ARP TEST ===
Gateway IP: 10.0.1.1
Gateway ARP entry:
10.0.1.1 dev ens5 lladdr 02:cb:76:10:5b:ed REACHABLE 

arping result:
ARPING 10.0.1.1 from 10.0.1.207 ens5
Unicast reply from 10.0.1.1 [02:CB:76:10:5B:ED]  0.536ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

=== HUGEPAGE STATUS ===
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         2097152 kB

=== VFIO STATUS ===
total 0
drwxr-xr-x.  2 root root       80 Apr 13 15:11 .
drwxr-xr-x. 14 root root     3100 Apr 13 15:10 ..
crw-------.  1 root root 243,   0 Apr 13 15:11 noiommu-0
crw-rw-rw-.  1 root root  10, 196 Apr 13 15:06 vfio

noiommu mode:
Y

=== DPDK SHARED MEMORY ===
no /var/run/dpdk/ directory (clean state)

=== DPDK-RELATED DMESG (last 30 lines) ===
[    0.067905] x86/fpu: Enabled xstate features 0x2ff, context size is 2568 bytes, using 'compacted' format.
[    0.074122] audit: type=2000 audit(1776092801.504:1): state=initialized audit_enabled=0 res=1
[    0.076509] kprobes: kprobe jump-optimization is enabled. All kprobes are optimized if possible.
[    0.100977] ACPI: Interpreter enabled
[    0.100977] ACPI: Enabled 2 GPEs in block 00 to 0F
[    0.125301] pci 0000:00:05.0: enabling Extended Tags
[    0.148992] SGI XFS with ACLs, security attributes, quota, no debug enabled
[    0.178321] ACPI: \_SB_.LNKD: Enabled at IRQ 11
[    0.269273] IPI shorthand broadcast: enabled
[    0.269334] AES CTR mode by8 optimization enabled
[    2.865090] systemd[1]: Mounting dev-hugepages.mount - Huge Pages File System...
[    2.904745] systemd[1]: Mounted dev-hugepages.mount - Huge Pages File System.
[    2.961899] VFIO - User Level meta-driver version: 0.3
[    3.948267] ena 0000:00:05.0: Elastic Network Adapter (ENA) v2.16.1g
[    3.968256] ena 0000:00:05.0: ENA device version: 0.10
[    3.969591] ena 0000:00:05.0: ENA controller version: 0.0.1 implementation version 1
[    4.121394] ena 0000:00:05.0: ENA Large LLQ is disabled
[    4.134299] ena 0000:00:05.0: Elastic Network Adapter (ENA) found at mem c0500000, mac addr 02:78:d7:29:0e:59
[    4.205030] ena 0000:00:05.0 ens5: renamed from eth0
[    5.503513] ena 0000:00:05.0 ens5: Local page cache is disabled for less than 16 channels
[  230.885478] pci 0000:00:06.0: enabling Extended Tags
[  230.889411] ena 0000:00:06.0: enabling device (0000 -> 0002)
[  230.902887] ena 0000:00:06.0: ENA device version: 0.10
[  230.903687] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  231.002865] ena 0000:00:06.0: ENA Large LLQ is disabled
[  231.014929] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:b0:52:3b:15:c9
[  231.052976] ena 0000:00:06.0 ens6: renamed from eth0
[  231.506815] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  262.307088] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  262.308522] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device

=== DPDK-RELATED PROCESSES ===
no DPDK processes running

=== END DIAGNOSTICS ===
⚠️ Crash Diagnostics

receiver-dmesg-crashes.log

[    0.074994] pid_max: default: 32768 minimum: 301
[    0.129581] iommu: Default domain type: Translated 
[    0.130332] NetLabel:  unlabeled traffic allowed by default
[    0.135058] PCI: CLS 0 bytes, default 64
[    0.190019] nvme nvme0: 2/0/0 default/read/poll queues
[    0.455897] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[    0.455997] systemd[1]: No hostname configured, using default hostname.
[    0.550426] systemd[1]: Queued start job for default target initrd.target.
[    2.367698] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[   11.159356] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[  310.916737] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:6946)
[  725.665394] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:25622)
[ 1566.182768] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:42800)

sender-dmesg-crashes.log

[    0.074112] pid_max: default: 32768 minimum: 301
[    0.127390] iommu: Default domain type: Translated 
[    0.128107] NetLabel:  unlabeled traffic allowed by default
[    0.134112] PCI: CLS 0 bytes, default 64
[    0.197272] nvme nvme0: 2/0/0 default/read/poll queues
[    0.436088] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[    0.436183] systemd[1]: No hostname configured, using default hostname.
[    0.517296] systemd[1]: Queued start job for default target initrd.target.
[    1.954556] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[    9.919684] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[ 1146.606317] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:20408)
Kernel Console (dmesg)

receiver-console-output.log (PCI/driver events only)

[  211.384888] pci 0000:00:06.0: BAR 0: assigned [mem 0xc0508000-0xc050bfff]
[  211.385908] ena 0000:00:06.0: enabling device (0000 -> 0002)
[  211.395429] ena 0000:00:06.0: ENA device version: 0.10
[  211.396182] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  211.494504] ena 0000:00:06.0: ENA Large LLQ is disabled
[  211.506620] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:c7:57:f1:3f:61
[  211.554588] ena 0000:00:06.0 ens6: renamed from eth0
[  211.926311] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  271.018796] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  271.020135] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  310.916737] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:6946)
[  393.595380] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  394.603825] ena 0000:00:06.0: ENA device version: 0.10
[  394.604618] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  394.703853] ena 0000:00:06.0: ENA Large LLQ is disabled
[  394.715936] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:c7:57:f1:3f:61
[  394.726599] ena 0000:00:06.0 eth0: Local page cache is disabled for less than 16 channels
[  487.917665] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  487.918996] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  725.665394] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:25622)
[  803.473255] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  804.482530] ena 0000:00:06.0: ENA device version: 0.10
[  804.483311] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  804.582512] ena 0000:00:06.0: ENA Large LLQ is disabled
[  804.594831] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:c7:57:f1:3f:61
[  804.662661] ena 0000:00:06.0 ens6: renamed from eth0
[  804.715258] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[ 1430.164530] vfio-pci 0000:00:06.0: Adding to iommu group 0
[ 1430.165881] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[ 1566.182768] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:42800)

sender-console-output.log (PCI/driver events only)

[  262.307088] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  262.308522] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  325.364559] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6600)
[  326.184273] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6857)
[  327.984270] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6879)
[  329.604274] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6902)
[  330.464238] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6962)
[  381.603402] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  382.611356] ena 0000:00:06.0: ENA device version: 0.10
[  382.612128] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  382.711360] ena 0000:00:06.0: ENA Large LLQ is disabled
[  382.723576] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:b0:52:3b:15:c9
[  382.781366] ena 0000:00:06.0 ens6: renamed from eth0
[  382.833062] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  822.931416] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  822.932788] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[ 1100.616722] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:19615)
[ 1146.606317] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:20408)
[ 1210.415508] vfio-pci 0000:00:06.0: Removing from iommu group 0
[ 1211.429025] ena 0000:00:06.0: ENA device version: 0.10
[ 1211.429857] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[ 1211.531145] ena 0000:00:06.0: ENA Large LLQ is disabled
[ 1211.544456] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:b0:52:3b:15:c9
[ 1211.555209] ena 0000:00:06.0 eth0: Local page cache is disabled for less than 16 channels
[ 1331.245450] vfio-pci 0000:00:06.0: Adding to iommu group 0
[ 1331.246992] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[ 1580.521893] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:40826)
[ 1581.311749] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:41055)
[ 1583.141802] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:41148)
[ 1584.951725] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:41239)

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Deploy

Deploying PerfTestStack...
Configs: plain-rust,rust-dpdk,tokio-dpdk,native-dpdk
Packet sizes: 64,512,1400,8500

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Instances Ready

  • TRex: i-0bf0c2466cdab08e4 (10.0.1.106)
  • DUT: i-0c3fd7c8b4a9dfc59 (10.0.1.45)
  • Instance type: unknown

@github-actions

Copy link
Copy Markdown

[Perf] Stage: TRex Config

Starting TRex configuration (MAC discovery + NIC binding)...

@github-actions

Copy link
Copy Markdown

[Perf] Stage: TRex Config OK

  • TX: 0000:00:06.0 MAC: 02:36:ce:ab:da:8d
  • RX: 0000:00:07.0 MAC: 02:d6:a6:70:cd:6f
  • Gateway MAC: 02:12:b0:b7:c1:97
    Starting TRex server...

@github-actions

Copy link
Copy Markdown

[Perf] Stage: TRex Started

TRex server running. Beginning benchmarks...

@github-actions

Copy link
Copy Markdown

[Perf] DUT Ready

DUT instance i-0c3fd7c8b4a9dfc59 SSM working, build complete.

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Benchmark (1/4)

Running plain-rust benchmark...
Packet sizes: 64,512,1400,8500 | Duration: 30s/step | Target PPS: 70000,140000,350000,700000

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: plain-rust preflight

TRex API OK: 2 ports
  Port 0: 02:36:ce:ab:da:8d
  Port 1: 02:d6:a6:70:cd:6f
PREFLIGHT_OK

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: plain-rust result

SSM exit: 0

Output (last 30 lines)
Duration per step: 30s
Source MAC: 02:36:ce:ab:da:8d

--- Packet size: 64B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 68,999 pps, Drop: 1.4304%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,970 pps, Drop: 0.7355%, Lat avg: 246.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 345,680 pps, Drop: 1.2342%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 460,189 pps, Drop: 34.2587%, Lat avg: 0.0 us

--- Packet size: 512B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 68,997 pps, Drop: 1.4323%, Lat avg: 246.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,999 pps, Drop: 0.715%, Lat avg: 251.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 346,116 pps, Drop: 1.1098%, Lat avg: 261.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 440,036 pps, Drop: 37.1377%, Lat avg: 0.0 us

--- Packet size: 1400B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 68,998 pps, Drop: 1.4316%, Lat avg: 260.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,974 pps, Drop: 0.7328%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 332,851 pps, Drop: 4.8997%, Lat avg: 270.0 us
  Target: 700,000 pps ... TX: 476,650 pps, RX: 345,258 pps, Drop: 27.5656%, Lat avg: 0.0 us

--- Packet size: 8500B ---
  (jumbo: capping at 418,133 pps for 30.0 Gbps limit)
  Target: 70,000 pps ... TX: 70,000 pps, RX: 54,901 pps, Drop: 21.5696%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 78,355 pps, RX: 77,676 pps, Drop: 0.8667%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 78,338 pps, RX: 69,092 pps, Drop: 11.8026%, Lat avg: 0.0 us
  Target: 700,000 pps ... SKIPPED (exceeds 30.0 Gbps cap)

Results written to /tmp/perf-results/plain-rust.json
EXIT_CODE=0

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Benchmark (2/4)

Running rust-dpdk benchmark...
Packet sizes: 64,512,1400,8500 | Duration: 30s/step | Target PPS: 70000,140000,350000,700000

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: rust-dpdk preflight

TRex API OK: 2 ports
  Port 0: 02:36:ce:ab:da:8d
  Port 1: 02:d6:a6:70:cd:6f
PREFLIGHT_OK

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: rust-dpdk result

SSM exit: 0

Output (last 30 lines)
Duration per step: 30s
Source MAC: 02:36:ce:ab:da:8d

--- Packet size: 64B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4293%, Lat avg: 242.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,978 pps, Drop: 0.73%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 348,787 pps, Drop: 0.3466%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 697,295 pps, Drop: 0.3864%, Lat avg: 0.0 us

--- Packet size: 512B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4286%, Lat avg: 167.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,967 pps, Drop: 0.7376%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 348,950 pps, Drop: 0.3%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 689,904 pps, Drop: 1.4423%, Lat avg: 325.0 us

--- Packet size: 1400B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 68,997 pps, Drop: 1.4331%, Lat avg: 258.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,974 pps, Drop: 0.7331%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 348,994 pps, Drop: 0.2875%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 476,680 pps, RX: 475,390 pps, Drop: 0.2705%, Lat avg: 0.0 us

--- Packet size: 8500B ---
  (jumbo: capping at 418,133 pps for 30.0 Gbps limit)
  Target: 70,000 pps ... TX: 70,000 pps, RX: 68,998 pps, Drop: 1.4314%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 78,347 pps, RX: 77,738 pps, Drop: 0.7761%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 78,355 pps, RX: 75,607 pps, Drop: 3.5076%, Lat avg: 0.0 us
  Target: 700,000 pps ... SKIPPED (exceeds 30.0 Gbps cap)

Results written to /tmp/perf-results/rust-dpdk.json
EXIT_CODE=0

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Benchmark (3/4)

Running tokio-dpdk benchmark...
Packet sizes: 64,512,1400,8500 | Duration: 30s/step | Target PPS: 70000,140000,350000,700000

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: tokio-dpdk preflight

TRex API OK: 2 ports
  Port 0: 02:36:ce:ab:da:8d
  Port 1: 02:d6:a6:70:cd:6f
PREFLIGHT_OK

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: tokio-dpdk result

SSM exit: 0

Output (last 30 lines)
Duration per step: 30s
Source MAC: 02:36:ce:ab:da:8d

--- Packet size: 64B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4286%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 139,000 pps, Drop: 0.7143%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 342,529 pps, Drop: 2.1345%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 343,487 pps, Drop: 50.9304%, Lat avg: 0.0 us

--- Packet size: 512B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4286%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 139,000 pps, Drop: 0.7143%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 244,816 pps, Drop: 30.0525%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 243,885 pps, Drop: 65.1593%, Lat avg: 0.0 us

--- Packet size: 1400B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4286%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,987 pps, Drop: 0.7236%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 159,913 pps, Drop: 54.3106%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 476,672 pps, RX: 170,034 pps, Drop: 64.3289%, Lat avg: 0.0 us

--- Packet size: 8500B ---
  (jumbo: capping at 418,133 pps for 30.0 Gbps limit)
  Target: 70,000 pps ... TX: 70,000 pps, RX: 57,364 pps, Drop: 18.0521%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 78,346 pps, RX: 60,307 pps, Drop: 23.0241%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 78,286 pps, RX: 61,092 pps, Drop: 21.9631%, Lat avg: 0.0 us
  Target: 700,000 pps ... SKIPPED (exceeds 30.0 Gbps cap)

Results written to /tmp/perf-results/tokio-dpdk.json
EXIT_CODE=0

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Benchmark (4/4)

Running native-dpdk benchmark...
Packet sizes: 64,512,1400,8500 | Duration: 30s/step | Target PPS: 70000,140000,350000,700000

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: native-dpdk preflight

TRex API OK: 2 ports
  Port 0: 02:36:ce:ab:da:8d
  Port 1: 02:d6:a6:70:cd:6f
PREFLIGHT_OK

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: native-dpdk result

SSM exit: 0

Output (last 30 lines)
Duration per step: 30s
Source MAC: 02:36:ce:ab:da:8d

--- Packet size: 64B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 70,000 pps, Drop: 0.0%, Lat avg: 111.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 140,000 pps, Drop: 0.0%, Lat avg: 122.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 350,000 pps, Drop: 0.0%, Lat avg: 135.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 699,734 pps, Drop: 0.038%, Lat avg: 180.0 us

--- Packet size: 512B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 70,000 pps, Drop: 0.0%, Lat avg: 117.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 140,000 pps, Drop: 0.0%, Lat avg: 135.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 349,982 pps, Drop: 0.0053%, Lat avg: 148.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 694,591 pps, Drop: 0.7727%, Lat avg: 467.0 us

--- Packet size: 1400B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 70,000 pps, Drop: 0.0%, Lat avg: 126.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 140,000 pps, Drop: 0.0%, Lat avg: 142.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 349,993 pps, Drop: 0.0021%, Lat avg: 146.0 us
  Target: 700,000 pps ... TX: 476,649 pps, RX: 476,640 pps, Drop: 0.002%, Lat avg: 2504.0 us

--- Packet size: 8500B ---
  (jumbo: capping at 418,133 pps for 30.0 Gbps limit)
  Target: 70,000 pps ... TX: 70,000 pps, RX: 70,000 pps, Drop: 0.0%, Lat avg: 128.0 us
  Target: 140,000 pps ... TX: 78,356 pps, RX: 77,743 pps, Drop: 0.7816%, Lat avg: 13945.0 us
  Target: 350,000 pps ... TX: 78,344 pps, RX: 76,199 pps, Drop: 2.738%, Lat avg: 14300.0 us
  Target: 700,000 pps ... SKIPPED (exceeds 30.0 Gbps cap)

Results written to /tmp/perf-results/native-dpdk.json
EXIT_CODE=0

@github-actions

Copy link
Copy Markdown

[Perf] Diag: testpmd log

testpmd output (last 30 lines)
=== testpmd stats (last 30 lines) ===
  ############################################################################
Telling cores to stop...
Waiting for lcores to finish...

  ---------------------- Forward statistics for port 0  ----------------------
  RX-packets: 113405795      RX-dropped: 0             RX-total: 113405795
  RX-error: 403510
  RX-nombufs: 0             
  TX-packets: 113405795      TX-dropped: 0             TX-total: 113405795
  ----------------------------------------------------------------------------

  +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
  RX-packets: 113405795      RX-dropped: 0             RX-total: 113405795
  TX-packets: 113405795      TX-dropped: 0             TX-total: 113405795
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Done.

Stopping port 0...
Stopping ports...
Done

Shutting down port 0...
ena_rx_queue_release(): Rx queue 0:0 released
ena_tx_queue_release(): Tx queue 0:0 released
Closing ports...
Port 0 is closed
Done

Bye...
=== ENA port stats ===
N/A (vfio-pci)

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Results

[16:42:31] INFO Generating markdown summary...

Performance Test Results — unknown

Commit: 4d90538e
Timestamp: 2026-04-13T16:42:31.303655+00:00

64B packets

Config Target PPS TX pps RX pps Drop % NIC imissed NIC ierrors NIC nombuf App Drops Lat Avg (us) Lat Max (us) TX Mbps RX Mbps
native-dpdk 70,000 70,000 70,000 0.00% — — — — 111.0 1425.0 35.8 35.8
native-dpdk 140,000 140,000 140,000 0.00% — — — — 122.0 2837.0 71.7 71.7
native-dpdk 350,000 350,000 350,000 0.00% — — — — 135.0 1923.0 179.2 179.2
native-dpdk 700,000 700,000 699,734 0.04% — — — — 180.0 1449.0 358.4 358.3
rust-dpdk 70,000 70,000 69,000 1.43% 0 32,314 0 0 242.0 0.0 35.8 35.3
rust-dpdk 140,000 140,000 138,978 0.73% 0 41,885 0 0 0.0 0.0 71.7 71.2
rust-dpdk 350,000 350,000 348,787 0.35% 0 34,180 0 0 0.0 0.0 179.2 178.6
rust-dpdk 700,000 700,000 697,295 0.39% 0 31,859 0 0 0.0 0.0 358.4 357.0
tokio-dpdk 70,000 70,000 69,000 1.43% 0 31,127 0 0 0.0 0.0 35.8 38.6
tokio-dpdk 140,000 140,000 139,000 0.71% 0 41,546 0 0 0.0 0.0 71.7 77.8
tokio-dpdk 350,000 350,000 342,529 2.13% 0 29,825 0 0 0.0 0.0 179.2 191.8
tokio-dpdk 700,000 700,000 343,487 50.93% 0 26,470 0 0 0.0 0.0 358.4 192.3
plain-rust 70,000 70,000 68,999 1.43% — — — — 0.0 0.0 35.8 35.3
plain-rust 140,000 140,000 138,970 0.74% — — — — 246.0 0.0 71.7 71.2
plain-rust 350,000 350,000 345,680 1.23% — — — — 0.0 0.0 179.2 177.0
plain-rust 700,000 700,000 460,189 34.26% — — — — 0.0 0.0 358.4 235.6

512B packets

Config Target PPS TX pps RX pps Drop % NIC imissed NIC ierrors NIC nombuf App Drops Lat Avg (us) Lat Max (us) TX Mbps RX Mbps
native-dpdk 70,000 70,000 70,000 0.00% — — — — 117.0 1112.0 286.7 286.7
native-dpdk 140,000 140,000 140,000 0.00% — — — — 135.0 1722.0 573.4 573.4
native-dpdk 350,000 350,000 349,982 0.01% — — — — 148.0 1483.0 1433.6 1433.5
native-dpdk 700,000 700,000 694,591 0.77% — — — — 467.0 4614.0 2867.2 2845.1
rust-dpdk 70,000 70,000 69,000 1.43% 0 41,881 0 0 167.0 0.0 286.7 282.6
rust-dpdk 140,000 140,000 138,967 0.74% 0 32,025 0 0 0.0 0.0 573.4 569.2
rust-dpdk 350,000 350,000 348,950 0.30% 0 41,883 0 0 0.0 0.0 1433.6 1429.3
rust-dpdk 700,000 700,000 689,904 1.44% 0 33,883 0 0 325.0 0.0 2867.2 2825.8
tokio-dpdk 70,000 70,000 69,000 1.43% 0 34,920 0 0 0.0 0.0 286.7 285.9
tokio-dpdk 140,000 140,000 139,000 0.71% 0 31,530 0 0 0.0 0.0 573.4 576.0
tokio-dpdk 350,000 350,000 244,816 30.05% 0 23,987 0 0 0.0 0.0 1433.6 1014.5
tokio-dpdk 700,000 700,000 243,885 65.16% 0 12,955 0 0 0.0 0.0 2867.2 1010.7
plain-rust 70,000 70,000 68,997 1.43% — — — — 246.0 0.0 286.7 282.6
plain-rust 140,000 140,000 138,999 0.71% — — — — 251.0 0.0 573.4 569.3
plain-rust 350,000 350,000 346,116 1.11% — — — — 261.0 0.0 1433.6 1417.7
plain-rust 700,000 700,000 440,036 37.14% — — — — 0.0 0.0 2867.2 1802.4

1400B packets

Config Target PPS TX pps RX pps Drop % NIC imissed NIC ierrors NIC nombuf App Drops Lat Avg (us) Lat Max (us) TX Mbps RX Mbps
native-dpdk 70,000 70,000 70,000 0.00% — — — — 126.0 840.0 784.0 784.0
native-dpdk 140,000 140,000 140,000 0.00% — — — — 142.0 243.0 1568.0 1568.0
native-dpdk 350,000 350,000 349,993 0.00% — — — — 146.0 1029.0 3920.0 3919.9
native-dpdk 700,000 476,649 476,640 0.00% — — — — 2504.0 3249.0 5338.5 5338.4
rust-dpdk 70,000 70,000 68,997 1.43% 0 41,885 0 0 258.0 0.0 784.0 772.8
rust-dpdk 140,000 140,000 138,974 0.73% 0 35,832 0 0 0.0 0.0 1568.0 1556.5
rust-dpdk 350,000 350,000 348,994 0.29% 0 31,268 0 0 0.0 0.0 3920.0 3908.7
rust-dpdk 700,000 476,680 475,390 0.27% 0 32,141 0 0 0.0 0.0 5338.8 5324.4
tokio-dpdk 70,000 70,000 69,000 1.43% 0 39,759 0 0 0.0 0.0 784.0 776.1
tokio-dpdk 140,000 140,000 138,987 0.72% 0 31,565 0 0 0.0 0.0 1568.0 1563.3
tokio-dpdk 350,000 350,000 159,913 54.31% 0 13,222 0 0 0.0 0.0 3920.0 1798.7
tokio-dpdk 700,000 476,672 170,034 64.33% 0 13,225 0 0 0.0 0.0 5338.7 1912.5
plain-rust 70,000 70,000 68,998 1.43% — — — — 260.0 0.0 784.0 772.8
plain-rust 140,000 140,000 138,974 0.73% — — — — 0.0 0.0 1568.0 1556.5
plain-rust 350,000 350,000 332,851 4.90% — — — — 270.0 0.0 3920.0 3727.9
plain-rust 700,000 476,650 345,258 27.57% — — — — 0.0 0.0 5338.5 3866.9

8500B packets

Config Target PPS TX pps RX pps Drop % NIC imissed NIC ierrors NIC nombuf App Drops Lat Avg (us) Lat Max (us) TX Mbps RX Mbps
native-dpdk 70,000 70,000 70,000 0.00% — — — — 128.0 2852.0 4760.0 4760.0
native-dpdk 140,000 78,356 77,743 0.78% — — — — 13945.0 15379.0 5328.2 5286.6
native-dpdk 350,000 78,344 76,199 2.74% — — — — 14300.0 17534.0 5327.4 5181.6
rust-dpdk 70,000 70,000 68,998 1.43% 0 31,955 0 0 0.0 0.0 4760.0 4691.9
rust-dpdk 140,000 78,347 77,738 0.78% 0 20,950 0 0 0.0 0.0 5327.6 5286.2
rust-dpdk 350,000 78,355 75,607 3.51% 0 6,678 0 0 0.0 0.0 5328.2 5141.3
tokio-dpdk 70,000 70,000 57,364 18.05% 0 15,982 0 0 0.0 0.0 4760.0 3903.5
tokio-dpdk 140,000 78,346 60,307 23.02% 0 16,121 0 0 0.0 0.0 5327.5 4103.8
tokio-dpdk 350,000 78,286 61,092 21.96% 0 5,215 0 0 0.0 0.0 5323.4 4157.2
plain-rust 70,000 70,000 54,901 21.57% — — — — 0.0 0.0 4760.0 3733.3
plain-rust 140,000 78,355 77,676 0.87% — — — — 0.0 0.0 5328.1 5281.9
plain-rust 350,000 78,338 69,092 11.80% — — — — 0.0 0.0 5327.0 4698.2

NIC Drops Instrumentation Self-Check

Compares (NIC-FINAL − NIC-BASELINE) one-shot snapshots against the sum of per-tick [PERF] deltas over the reporter's lifetime. These MUST match exactly — a mismatch means per-tick delta bookkeeping is losing data.

Config Status imissed (expected / actual / Δ) ierrors (expected / actual / Δ) rx_nombuf (expected / actual / Δ)
native-dpdk no instrumentation — — —
rust-dpdk OK 0 / 0 / 0 403,547 / 403,547 / 0 0 / 0 / 0
tokio-dpdk OK 0 / 0 / 0 302,408 / 302,408 / 0 0 / 0 / 0
plain-rust no instrumentation — — —

expected = FINAL − BASELINE (raw NIC counter delta across reporter lifetime). actual = sum of per-tick [PERF] delta fields. Any Δ ≠ 0 is a bug in the tick loop's bookkeeping.

plain-rust Kernel NIC Drops (ethtool -S delta)

ethtool snapshots not available — baseline or final file missing in $LOGS_DIR/dut-plain-rust-ethtool-*.txt.

Full results artifact

Records hardware benchmark results from the spawn_blocking elimination.
tokio-dpdk improved from ~40K pps (Run #9) to 343K pps at 700K/64B (8.6x).
Matches sync DPDK at ≤140K pps; remaining gap at >350K pps is from
Tokio yield_now() scheduling latency, not framework overhead.

https://claude.ai/code/session_01EpC1AocdV7TkvTiMXmtCkm
@github-actions

Copy link
Copy Markdown

Synthetic Performance Results (run)

Commit: cf0d7419

✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)

Synthetic UDP Performance Results

Measures framework overhead: sync dpdk_udp::UdpSocket vs async (std::sync::Mutex + try_recv_from).

Test Payload Sync PPS Async PPS Ratio (sync/async) Async ns/op
TX send_to 64B 12.2M 11.4M 1.1x 87
RX recv_from 64B 3.7M 4.8M 0.8x 206
TX send_to 1400B 1.8M 1.8M 1.0x 549
RX recv_from 1400B 1.2M 1.3M 0.9x 780

Avg sync/async ratio: 0.9x, worst: 1.1x

Good: Async wrapper is within 1.1x of sync — minimal framework overhead.

@github-actions

Copy link
Copy Markdown

[CI] Stage: Deploy

Infrastructure ready.

  • Sender: i-0daf6ccdf13a44df2 (DPDK ENI: 10.0.1.145)
  • Receiver: i-09ec9949d1c31afff (DPDK ENI: 10.0.1.40)
  • Both instances SSM-ready.

@github-actions

Copy link
Copy Markdown

[CI] Stage: Summary

All tests PASSED.

ARP seeding: kernel /proc/net/arp (automatic)

  • tier1-dpdk-echo: 6 tests, 0 failures
  • tier2-kernel-interop: 4 tests, 0 failures
  • tier3-iperf-interop: 1 tests, 0 failures
  • tier3-iperf-interop: 1 tests, 0 failures

@github-actions

Copy link
Copy Markdown

[CI] Stage: Summary

All tests PASSED.

ARP seeding: kernel /proc/net/arp (automatic)

  • tier1-dpdk-echo: 6 tests, 0 failures
  • tier2-kernel-interop: 4 tests, 0 failures
  • tier3-iperf-interop: 1 tests, 0 failures
  • tier3-iperf-interop: 1 tests, 0 failures

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Deploy

Deploying PerfTestStack...
Configs: plain-rust,rust-dpdk,tokio-dpdk,native-dpdk
Packet sizes: 64,512,1400,8500

@github-actions

Copy link
Copy Markdown

✅ Integration Tests Passed (Run 24370003640)

Branch: 38/merge | Commit: bb38d44f

Test Results

  • tier1-dpdk-echo.xml: 6 tests, 0 failures, skipped
  • tier2-kernel-interop.xml: 4 tests, 0 failures, skipped
  • tier3-iperf-sends.xml: 1 tests, 0 failures, skipped
  • tier3-our-app-sends.xml: 1 tests, 0 failures, skipped

Application Logs (last 20 lines)

receiver-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.116:9000 (MAC: 02:b6:cd:3d:a2:2b)
echo listening on 10.0.1.116:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.160:9000 (MAC: 02:ca:a4:b2:55:f3)
echo listening on 10.0.1.160:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-test-client.log

EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
DPDK bind failed (Port init failed: Invalid port ID: 0), falling back to tokio
Backend: tokio
Sending packets...
Sent 12 bytes: 'arp-probe #1'
Received 12 bytes from 10.0.1.116:9000: 'arp-probe #1'
Test complete
[2026-04-13T22:42:47Z] INFO: ARP resolution succeeded (got response from peer)
[2026-04-13T22:42:47Z] INFO: Test: udp_send_receive
[2026-04-13T22:42:49Z] INFO: UDP send/receive succeeded
[2026-04-13T22:42:49Z] INFO: Test: echo_roundtrip
[2026-04-13T22:42:49Z] INFO: Echo roundtrip succeeded: 5/5 responses received
[2026-04-13T22:42:49Z] INFO: Test: payload_integrity
[2026-04-13T22:42:50Z] INFO: Response received, checking payload match...
[2026-04-13T22:42:50Z] INFO: Payload integrity verified (found in response)
[2026-04-13T22:42:50Z] INFO: JUnit XML written to: /tmp/test-results/tier2-kernel-interop.xml
[2026-04-13T22:42:50Z] INFO: Tier 2 sender tests complete. Results: /tmp/test-results/tier2-kernel-interop.xml

receiver-test-client-iperf.log

[2026-04-13T22:49:59Z] INFO: iperf-sends: sent 10 packets, received 10 responses
[2026-04-13T22:49:59Z] INFO: iperf-sends: PASS (sent >= 5 packets)
[2026-04-13T22:49:59Z] INFO: JUnit XML written to: /tmp/test-results/tier3-iperf-sends.xml
[2026-04-13T22:49:59Z] INFO: iperf-sends test complete

sender-test-client-iperf.log

Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #3'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #4'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #4'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #5'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #5'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #6'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #6'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #7'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #7'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #8'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #8'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #9'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #9'
Sent 31 bytes: 'dpdk-to-kernel-test-payload #10'
Received 31 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #10'
Test complete
[2026-04-13T22:48:56Z] INFO: our-app-sends: sent 10 packets, received 10 responses
[2026-04-13T22:48:56Z] INFO: our-app-sends: PASS (sent >= 5 packets)
[2026-04-13T22:48:56Z] INFO: JUnit XML written to: /tmp/test-results/tier3-our-app-sends.xml
[2026-04-13T22:48:56Z] INFO: our-app-sends test complete
Full Application Logs (last 200 lines each)

receiver-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.116:9000 (MAC: 02:b6:cd:3d:a2:2b)
echo listening on 10.0.1.116:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.160:9000 (MAC: 02:ca:a4:b2:55:f3)
echo listening on 10.0.1.160:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-test-client.log

[2026-04-13T22:34:31Z] INFO: Test: arp_resolution
UDP Test Client
Target: 10.0.1.116:9000
Bind address: 10.0.1.160:0
Message: 'arp-probe'
Count: 1
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.160:32768 (MAC: 02:ca:a4:b2:55:f3)
Backend: dpdk
Sending packets...
Sent 12 bytes: 'arp-probe #1'
Received 12 bytes from 10.0.1.116:9000: 'arp-probe #1'
Test complete
[2026-04-13T22:34:33Z] INFO: ARP resolution succeeded (got response from peer)
[2026-04-13T22:34:33Z] INFO: Test: udp_send_receive
[2026-04-13T22:34:35Z] INFO: UDP send/receive succeeded
[2026-04-13T22:34:35Z] INFO: Test: echo_roundtrip
[2026-04-13T22:34:36Z] INFO: Echo roundtrip succeeded: 5/5 responses received
[2026-04-13T22:34:36Z] INFO: Test: payload_integrity
[2026-04-13T22:34:37Z] INFO: Response received, checking payload match...
[2026-04-13T22:34:37Z] INFO: Payload integrity verified (found in response)
[2026-04-13T22:34:37Z] INFO: Test: jumbo_diagnostics
[2026-04-13T22:34:37Z] INFO: === JUMBO FRAME DIAGNOSTICS ===
[2026-04-13T22:34:37Z] INFO: Interface MTU:
  1500
  9001
  65536
[2026-04-13T22:34:37Z] INFO:   docker0: MTU=1500
[2026-04-13T22:34:37Z] INFO:   ens5: MTU=9001
[2026-04-13T22:34:37Z] INFO:   lo: MTU=65536
[2026-04-13T22:34:37Z] INFO: Routing table MTU column:
Iface	Destination	Gateway 	Flags	RefCnt	Use	Metric	Mask		MTU	Window	IRTT                                                       
ens5	00000000	0101000A	0003	0	0	512	00000000	0	0	0                                                                             
ens5	0200000A	0101000A	0007	0	0	512	FFFFFFFF	0	0	0                                                                             
ens5	0001000A	00000000	0001	0	0	512	00FFFFFF	0	0	0                                                                             
ens5	0101000A	00000000	0005	0	0	512	FFFFFFFF	0	0	0                                                                             
[2026-04-13T22:34:37Z] INFO: DPDK port config (from echo server log):
[2026-04-13T22:34:37Z] INFO:   (no MTU info in echo log)
[2026-04-13T22:34:37Z] INFO: === END JUMBO DIAGNOSTICS ===
[2026-04-13T22:34:37Z] INFO: Test: jumbo_echo_8000
[2026-04-13T22:34:39Z] INFO: Jumbo output: UDP Test Client
Target: 10.0.1.116:9000
Bind address: 10.0.1.160:0
Payload size: 8000 bytes
Count: 3
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.160:32768 (MAC: 02:ca:a4:b2:55:f3)
Backend: dpdk
Sending packets...
Sent 8000 bytes (binary payload)
Received 8000 bytes from 10.0.1.116:9000 (expected 8000, OK)
Sent 8000 bytes (binary payload)
Received 8000 bytes from 10.0.1.116:9000 (expected 8000, OK)
Sent 8000 bytes (binary payload)
Received 8000 bytes from 10.0.1.116:9000 (expected 8000, OK)
Test complete
[2026-04-13T22:34:39Z] INFO: Jumbo frame echo succeeded: 3/3 responses with correct size
[2026-04-13T22:34:39Z] INFO: JUnit XML written to: /tmp/test-results/tier1-dpdk-echo.xml
[2026-04-13T22:34:39Z] INFO: Tier 1 sender tests complete. Results: /tmp/test-results/tier1-dpdk-echo.xml
[2026-04-13T22:42:47Z] INFO: Test: arp_resolution
UDP Test Client
Target: 10.0.1.116:9000
Bind address: 0.0.0.0:0
Message: 'arp-probe'
Count: 1
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
DPDK bind failed (Port init failed: Invalid port ID: 0), falling back to tokio
Backend: tokio
Sending packets...
Sent 12 bytes: 'arp-probe #1'
Received 12 bytes from 10.0.1.116:9000: 'arp-probe #1'
Test complete
[2026-04-13T22:42:47Z] INFO: ARP resolution succeeded (got response from peer)
[2026-04-13T22:42:47Z] INFO: Test: udp_send_receive
[2026-04-13T22:42:49Z] INFO: UDP send/receive succeeded
[2026-04-13T22:42:49Z] INFO: Test: echo_roundtrip
[2026-04-13T22:42:49Z] INFO: Echo roundtrip succeeded: 5/5 responses received
[2026-04-13T22:42:49Z] INFO: Test: payload_integrity
[2026-04-13T22:42:50Z] INFO: Response received, checking payload match...
[2026-04-13T22:42:50Z] INFO: Payload integrity verified (found in response)
[2026-04-13T22:42:50Z] INFO: JUnit XML written to: /tmp/test-results/tier2-kernel-interop.xml
[2026-04-13T22:42:50Z] INFO: Tier 2 sender tests complete. Results: /tmp/test-results/tier2-kernel-interop.xml

receiver-test-client-iperf.log

[2026-04-13T22:49:59Z] INFO: iperf-sends: sent 10 packets, received 10 responses
[2026-04-13T22:49:59Z] INFO: iperf-sends: PASS (sent >= 5 packets)
[2026-04-13T22:49:59Z] INFO: JUnit XML written to: /tmp/test-results/tier3-iperf-sends.xml
[2026-04-13T22:49:59Z] INFO: iperf-sends test complete

sender-test-client-iperf.log

[2026-04-13T22:48:53Z] INFO: Pre-flight: checking DPDK state and ARP cache...
[2026-04-13T22:48:53Z] INFO: Local IP: 10.0.1.160, Peer IP: 10.0.1.116, Port: 9000
[2026-04-13T22:48:53Z] INFO: /proc/net/arp contents:
IP address       HW type     Flags       HW address            Mask     Device
10.0.1.160       0x1         0x2         02:ca:a4:b2:55:f3     *        ens5
10.0.1.116       0x1         0x2         02:b6:cd:3d:a2:2b     *        ens5
10.0.1.245       0x1         0x2         02:bd:69:de:ea:77     *        ens5
10.0.1.178       0x1         0x2         02:8d:a0:7c:de:3b     *        ens5
10.0.1.1         0x1         0x2         02:e3:cf:ce:97:3b     *        ens5
[2026-04-13T22:48:53Z] INFO: DPDK runtime state:
No /var/run/dpdk/ directory
[2026-04-13T22:48:53Z] INFO: vfio-pci bindings:
0000:00:06.0
bind
module
new_id
remove_id
uevent
unbind
[2026-04-13T22:48:53Z] INFO: Test binary: /opt/dpdk-stdlib/target/release/test-client
-rwxr-xr-x. 2 root root 1860096 Apr 13 22:32 /opt/dpdk-stdlib/target/release/test-client
[2026-04-13T22:48:53Z] INFO: Launching test-client: /opt/dpdk-stdlib/target/release/test-client --target 10.0.1.116 --port 9000 --bind-ip 10.0.1.160 --count 10 --delay 200
[2026-04-13T22:48:56Z] INFO: Test client output: UDP Test Client
Target: 10.0.1.116:9000
Bind address: 10.0.1.160:0
Message: 'dpdk-to-kernel-test-payload'
Count: 10
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.160:32768 (MAC: 02:ca:a4:b2:55:f3)
Backend: dpdk
Sending packets...
Sent 30 bytes: 'dpdk-to-kernel-test-payload #1'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #1'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #2'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #2'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #3'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #3'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #4'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #4'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #5'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #5'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #6'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #6'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #7'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #7'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #8'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #8'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #9'
Received 30 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #9'
Sent 31 bytes: 'dpdk-to-kernel-test-payload #10'
Received 31 bytes from 10.0.1.116:9000: 'dpdk-to-kernel-test-payload #10'
Test complete
[2026-04-13T22:48:56Z] INFO: our-app-sends: sent 10 packets, received 10 responses
[2026-04-13T22:48:56Z] INFO: our-app-sends: PASS (sent >= 5 packets)
[2026-04-13T22:48:56Z] INFO: JUnit XML written to: /tmp/test-results/tier3-our-app-sends.xml
[2026-04-13T22:48:56Z] INFO: our-app-sends test complete
⚠️ SSM Command Failures (receiver-ssm-failure.log)
=== Polling timeout after 30s ===
Status: InProgress
Instance: i-05ea85ac31d02b95d (receiver)
Command ID: 7b29827b-8c9f-4430-8414-02d35b0b2ab6

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-05ea85ac31d02b95d (receiver)
Command ID: 0713fb4c-7e24-44ee-afb5-4a99e64f9d94

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-05ea85ac31d02b95d (receiver)
Command ID: fb326af0-6d6e-4655-93d3-b2b7655d029a

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-05ea85ac31d02b95d (receiver)
Command ID: 563bafca-0999-48fd-8cbf-ee9b27c3a52f

=== STDOUT ===


=== STDERR ===


⚠️ SSM Command Failures (sender-ssm-failure.log)
=== Polling timeout 120s (SSM timeout: 90s, command: pkill -f 'target/release/echo' 2>/dev/null || true; pkill -f 'target/release/test-client' 2>/dev/null || true; pkill -f 'target/release/tokio-echo' 2>/dev/null || true; pkill -f 'python3.*udp_echo' 2>/dev/null || true; sleep 2; rm -rf /var/run/dpdk/ 2>/dev/null || true; cd /opt/dpdk-stdlib && bash scripts/integration-tests/configure-eni.sh --action unbind && bash scripts/integration-tests/configure-eni.sh --action assign-ip --ip 10.0.1.160) ===
Status: InProgress
Instance: i-0c6b57db9b18df8a6 (sender)
Command ID: d543fc6e-216c-4ef8-a43b-f6f581766841

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-0c6b57db9b18df8a6 (sender)
Command ID: 5ccd6c6e-5726-48a4-8216-461a1bb91cbf

=== STDOUT ===


=== STDERR ===


Network & PCI State

receiver-network-interfaces.log

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:d3:d1:3e:5e:55 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-0e084209923dff2a8
    altname device-number-0.0
    inet 10.0.1.82/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 3575sec preferred_lft 3575sec
    inet6 fe80::d3:d1ff:fe3e:5e55/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:f3:dc:a9:27 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

sender-network-interfaces.log

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:2a:25:d7:51:4d brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-0df3f26877768e45b
    altname device-number-0.0
    inet 10.0.1.175/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 1802sec preferred_lft 1802sec
    inet6 fe80::2a:25ff:fed7:514d/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:e0:1d:94:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

receiver-networking-diag-baseline.txt

=== NETWORKING DIAGNOSTICS ===
timestamp: 2026-04-13T22:33:49Z
hostname: ip-10-0-1-82.ec2.internal
kernel: 6.1.166-197.305.amzn2023.x86_64

=== DPDK PORT STATUS ===

Network devices using DPDK-compatible driver
============================================
0000:00:06.0 'Elastic Network Adapter (ENA) ec20' drv=vfio-pci unused=ena

Network devices using kernel driver
===================================
0000:00:05.0 'Elastic Network Adapter (ENA) ec20' if=ens5 drv=ena unused=vfio-pci *Active*

No 'Baseband' devices detected
==============================

No 'Crypto' devices detected
============================

No 'DMA' devices detected
=========================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

No 'Misc (rawdev)' devices detected
===================================

No 'Regex' devices detected
===========================

=== IP ADDRESSES ===
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:d3:d1:3e:5e:55 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-0e084209923dff2a8
    altname device-number-0.0
    inet 10.0.1.82/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 3278sec preferred_lft 3278sec
    inet6 fe80::d3:d1ff:fe3e:5e55/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:f3:dc:a9:27 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

=== ARP TABLE ===
10.0.1.1 dev ens5 lladdr 02:e3:cf:ce:97:3b REACHABLE 
10.0.1.245 dev ens5 lladdr 02:bd:69:de:ea:77 REACHABLE 
10.0.1.178 dev ens5 lladdr 02:8d:a0:7c:de:3b REACHABLE 

=== ROUTE TABLE ===
default via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.82 metric 512 
10.0.0.2 via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.82 metric 512 
10.0.1.0/24 dev ens5 proto kernel scope link src 10.0.1.82 metric 512 
10.0.1.1 dev ens5 proto dhcp scope link src 10.0.1.82 metric 512 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 

=== IMDS: ENI INFORMATION ===
ENI MACs found: 02:b6:cd:3d:a2:2b/ 02:d3:d1:3e:5e:55/ 

--- ENI: 02:b6:cd:3d:a2:2b/ ---
  device-number: 1
  local-ipv4s: 10.0.1.116
  subnet-id: subnet-05357b028b239b77a
  subnet-cidr: 10.0.1.0/24

--- ENI: 02:d3:d1:3e:5e:55/ ---
  device-number: 0
  local-ipv4s: 10.0.1.82
  subnet-id: subnet-05357b028b239b77a
  subnet-cidr: 10.0.1.0/24


=== GATEWAY ARP TEST ===
Gateway IP: 10.0.1.1
Gateway ARP entry:
10.0.1.1 dev ens5 lladdr 02:e3:cf:ce:97:3b REACHABLE 

arping result:
ARPING 10.0.1.1 from 10.0.1.82 ens5
Unicast reply from 10.0.1.1 [02:E3:CF:CE:97:3B]  0.537ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

=== HUGEPAGE STATUS ===
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         2097152 kB

=== VFIO STATUS ===
total 0
drwxr-xr-x.  2 root root       80 Apr 13 22:33 .
drwxr-xr-x. 14 root root     3100 Apr 13 22:32 ..
crw-------.  1 root root 243,   0 Apr 13 22:33 noiommu-0
crw-rw-rw-.  1 root root  10, 196 Apr 13 22:28 vfio

noiommu mode:
Y

=== DPDK SHARED MEMORY ===
no /var/run/dpdk/ directory (clean state)

=== DPDK-RELATED DMESG (last 30 lines) ===
[    0.068590] x86/fpu: Enabled xstate features 0x2ff, context size is 2568 bytes, using 'compacted' format.
[    0.074674] audit: type=2000 audit(1776119302.068:1): state=initialized audit_enabled=0 res=1
[    0.077095] kprobes: kprobe jump-optimization is enabled. All kprobes are optimized if possible.
[    0.101663] ACPI: Interpreter enabled
[    0.101663] ACPI: Enabled 2 GPEs in block 00 to 0F
[    0.125843] pci 0000:00:05.0: enabling Extended Tags
[    0.159378] SGI XFS with ACLs, security attributes, quota, no debug enabled
[    0.188804] ACPI: \_SB_.LNKD: Enabled at IRQ 11
[    0.279723] IPI shorthand broadcast: enabled
[    0.279786] AES CTR mode by8 optimization enabled
[    2.255152] systemd[1]: Mounting dev-hugepages.mount - Huge Pages File System...
[    2.300189] systemd[1]: Mounted dev-hugepages.mount - Huge Pages File System.
[    2.341839] VFIO - User Level meta-driver version: 0.3
[    3.409435] ena 0000:00:05.0: Elastic Network Adapter (ENA) v2.16.1g
[    3.434021] ena 0000:00:05.0: ENA device version: 0.10
[    3.434769] ena 0000:00:05.0: ENA controller version: 0.0.1 implementation version 1
[    3.535124] ena 0000:00:05.0: ENA Large LLQ is disabled
[    3.547153] ena 0000:00:05.0: Elastic Network Adapter (ENA) found at mem c0500000, mac addr 02:d3:d1:3e:5e:55
[    3.595224] ena 0000:00:05.0 ens5: renamed from eth0
[    4.583294] ena 0000:00:05.0 ens5: Local page cache is disabled for less than 16 channels
[  231.279847] pci 0000:00:06.0: enabling Extended Tags
[  231.283561] ena 0000:00:06.0: enabling device (0000 -> 0002)
[  231.293061] ena 0000:00:06.0: ENA device version: 0.10
[  231.293842] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  231.393070] ena 0000:00:06.0: ENA Large LLQ is disabled
[  231.405271] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:b6:cd:3d:a2:2b
[  231.453096] ena 0000:00:06.0 ens6: renamed from eth0
[  231.747471] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  313.227241] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  313.228566] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device

=== DPDK-RELATED PROCESSES ===
no DPDK processes running

=== END DIAGNOSTICS ===

sender-networking-diag-baseline.txt

=== NETWORKING DIAGNOSTICS ===
timestamp: 2026-04-13T22:33:41Z
hostname: ip-10-0-1-175.ec2.internal
kernel: 6.1.166-197.305.amzn2023.x86_64

=== DPDK PORT STATUS ===

Network devices using DPDK-compatible driver
============================================
0000:00:06.0 'Elastic Network Adapter (ENA) ec20' drv=vfio-pci unused=ena

Network devices using kernel driver
===================================
0000:00:05.0 'Elastic Network Adapter (ENA) ec20' if=ens5 drv=ena unused=vfio-pci *Active*

No 'Baseband' devices detected
==============================

No 'Crypto' devices detected
============================

No 'DMA' devices detected
=========================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

No 'Misc (rawdev)' devices detected
===================================

No 'Regex' devices detected
===========================

=== IP ADDRESSES ===
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:2a:25:d7:51:4d brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-0df3f26877768e45b
    altname device-number-0.0
    inet 10.0.1.175/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 3288sec preferred_lft 3288sec
    inet6 fe80::2a:25ff:fed7:514d/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:e0:1d:94:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

=== ARP TABLE ===
10.0.1.245 dev ens5 lladdr 02:bd:69:de:ea:77 REACHABLE 
10.0.1.178 dev ens5 lladdr 02:8d:a0:7c:de:3b STALE 
10.0.1.1 dev ens5 lladdr 02:e3:cf:ce:97:3b REACHABLE 

=== ROUTE TABLE ===
default via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.175 metric 512 
10.0.0.2 via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.175 metric 512 
10.0.1.0/24 dev ens5 proto kernel scope link src 10.0.1.175 metric 512 
10.0.1.1 dev ens5 proto dhcp scope link src 10.0.1.175 metric 512 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 

=== IMDS: ENI INFORMATION ===
ENI MACs found: 02:2a:25:d7:51:4d/ 02:ca:a4:b2:55:f3/ 

--- ENI: 02:2a:25:d7:51:4d/ ---
  device-number: 0
  local-ipv4s: 10.0.1.175
  subnet-id: subnet-05357b028b239b77a
  subnet-cidr: 10.0.1.0/24

--- ENI: 02:ca:a4:b2:55:f3/ ---
  device-number: 1
  local-ipv4s: 10.0.1.160
  subnet-id: subnet-05357b028b239b77a
  subnet-cidr: 10.0.1.0/24


=== GATEWAY ARP TEST ===
Gateway IP: 10.0.1.1
Gateway ARP entry:
10.0.1.1 dev ens5 lladdr 02:e3:cf:ce:97:3b REACHABLE 

arping result:
ARPING 10.0.1.1 from 10.0.1.175 ens5
Unicast reply from 10.0.1.1 [02:E3:CF:CE:97:3B]  0.536ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

=== HUGEPAGE STATUS ===
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         2097152 kB

=== VFIO STATUS ===
total 0
drwxr-xr-x.  2 root root       80 Apr 13 22:33 .
drwxr-xr-x. 14 root root     3100 Apr 13 22:32 ..
crw-------.  1 root root 243,   0 Apr 13 22:33 noiommu-0
crw-rw-rw-.  1 root root  10, 196 Apr 13 22:28 vfio

noiommu mode:
Y

=== DPDK SHARED MEMORY ===
no /var/run/dpdk/ directory (clean state)

=== DPDK-RELATED DMESG (last 30 lines) ===
[    0.068672] x86/fpu: Enabled xstate features 0x2ff, context size is 2568 bytes, using 'compacted' format.
[    0.074857] audit: type=2000 audit(1776119302.348:1): state=initialized audit_enabled=0 res=1
[    0.077302] kprobes: kprobe jump-optimization is enabled. All kprobes are optimized if possible.
[    0.101892] ACPI: Interpreter enabled
[    0.101892] ACPI: Enabled 2 GPEs in block 00 to 0F
[    0.125999] pci 0000:00:05.0: enabling Extended Tags
[    0.149658] SGI XFS with ACLs, security attributes, quota, no debug enabled
[    0.195073] ACPI: \_SB_.LNKD: Enabled at IRQ 11
[    0.273754] IPI shorthand broadcast: enabled
[    0.273816] AES CTR mode by8 optimization enabled
[    3.485259] systemd[1]: Mounting dev-hugepages.mount - Huge Pages File System...
[    3.539996] systemd[1]: Mounted dev-hugepages.mount - Huge Pages File System.
[    3.584956] VFIO - User Level meta-driver version: 0.3
[    4.746415] ena 0000:00:05.0: Elastic Network Adapter (ENA) v2.16.1g
[    4.755077] ena 0000:00:05.0: ENA device version: 0.10
[    4.755842] ena 0000:00:05.0: ENA controller version: 0.0.1 implementation version 1
[    4.866130] ena 0000:00:05.0: ENA Large LLQ is disabled
[    4.877560] ena 0000:00:05.0: Elastic Network Adapter (ENA) found at mem c0500000, mac addr 02:2a:25:d7:51:4d
[    4.985100] ena 0000:00:05.0 ens5: renamed from eth0
[    6.474642] ena 0000:00:05.0 ens5: Local page cache is disabled for less than 16 channels
[  271.049136] pci 0000:00:06.0: enabling Extended Tags
[  271.052920] ena 0000:00:06.0: enabling device (0000 -> 0002)
[  271.062317] ena 0000:00:06.0: ENA device version: 0.10
[  271.063083] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  271.162253] ena 0000:00:06.0: ENA Large LLQ is disabled
[  271.174486] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:ca:a4:b2:55:f3
[  271.242780] ena 0000:00:06.0 ens6: renamed from eth0
[  271.705867] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  305.706295] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  305.707632] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device

=== DPDK-RELATED PROCESSES ===
no DPDK processes running

=== END DIAGNOSTICS ===
⚠️ Crash Diagnostics

receiver-dmesg-crashes.log

[    0.074661] pid_max: default: 32768 minimum: 301
[    0.127921] iommu: Default domain type: Translated 
[    0.128654] NetLabel:  unlabeled traffic allowed by default
[    0.144572] PCI: CLS 0 bytes, default 64
[    0.207901] nvme nvme0: 2/0/0 default/read/poll queues
[    0.447069] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[    0.447165] systemd[1]: No hostname configured, using default hostname.
[    0.538017] systemd[1]: Queued start job for default target initrd.target.
[    1.622907] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[    7.629572] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[  353.374511] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:7481)
[  849.820020] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:24892)
[ 1681.292424] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:69490)

sender-dmesg-crashes.log

[    0.074836] pid_max: default: 32768 minimum: 301
[    0.128154] iommu: Default domain type: Translated 
[    0.128893] NetLabel:  unlabeled traffic allowed by default
[    0.134836] PCI: CLS 0 bytes, default 64
[    0.214780] nvme nvme0: 2/0/0 default/read/poll queues
[    0.442695] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[    0.442796] systemd[1]: No hostname configured, using default hostname.
[    0.529209] systemd[1]: Queued start job for default target initrd.target.
[    2.479443] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[   11.892752] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[ 1278.874082] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:53690)
Kernel Console (dmesg)

receiver-console-output.log (PCI/driver events only)

[  231.281528] pci 0000:00:06.0: BAR 2: assigned [mem 0xc0600000-0xc06fffff pref]
[  231.282544] pci 0000:00:06.0: BAR 0: assigned [mem 0xc0508000-0xc050bfff]
[  231.283561] ena 0000:00:06.0: enabling device (0000 -> 0002)
[  231.293061] ena 0000:00:06.0: ENA device version: 0.10
[  231.293842] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  231.393070] ena 0000:00:06.0: ENA Large LLQ is disabled
[  231.405271] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:b6:cd:3d:a2:2b
[  231.453096] ena 0000:00:06.0 ens6: renamed from eth0
[  231.747471] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  313.227241] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  313.228566] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  353.374511] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:7481)
[  581.471899] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  582.481488] ena 0000:00:06.0: ENA device version: 0.10
[  582.482241] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  582.579836] ena 0000:00:06.0: ENA Large LLQ is disabled
[  582.591978] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:b6:cd:3d:a2:2b
[  582.603749] ena 0000:00:06.0 eth0: Local page cache is disabled for less than 16 channels
[  718.803370] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  718.804688] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  849.820020] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:24892)
[  928.463401] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  929.476649] ena 0000:00:06.0: ENA device version: 0.10
[  929.477405] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  929.576631] ena 0000:00:06.0: ENA Large LLQ is disabled
[  929.589014] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:b6:cd:3d:a2:2b
[  929.600824] ena 0000:00:06.0 eth0: Local page cache is disabled for less than 16 channels
[ 1548.378501] vfio-pci 0000:00:06.0: Adding to iommu group 0
[ 1548.379808] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[ 1681.292424] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:69490)

sender-console-output.log (PCI/driver events only)

[  271.705867] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  305.706295] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  305.707632] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  370.453845] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:7087)
[  371.263741] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:7107)
[  373.073733] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:7129)
[  374.693719] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:7392)
[  375.533662] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:7452)
[  427.935221] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  428.948284] ena 0000:00:06.0: ENA device version: 0.10
[  428.949062] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  429.050306] ena 0000:00:06.0: ENA Large LLQ is disabled
[  429.062701] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:ca:a4:b2:55:f3
[  429.073039] ena 0000:00:06.0 eth0: Local page cache is disabled for less than 16 channels
[ 1077.977477] vfio-pci 0000:00:06.0: Adding to iommu group 0
[ 1077.978839] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[ 1231.604613] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:51051)
[ 1278.874082] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:53690)
[ 1343.940749] vfio-pci 0000:00:06.0: Removing from iommu group 0
[ 1344.950676] ena 0000:00:06.0: ENA device version: 0.10
[ 1344.951460] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[ 1345.050663] ena 0000:00:06.0: ENA Large LLQ is disabled
[ 1345.062914] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:ca:a4:b2:55:f3
[ 1345.073937] ena 0000:00:06.0 eth0: Local page cache is disabled for less than 16 channels
[ 1449.070077] vfio-pci 0000:00:06.0: Adding to iommu group 0
[ 1449.071440] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[ 1697.149532] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:72569)
[ 1697.949421] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:72603)
[ 1699.749397] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:72903)
[ 1701.529359] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:72960)

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Instances Ready

  • TRex: i-06625a5d820dbb04a (10.0.1.60)
  • DUT: i-0855cb6e131118d67 (10.0.1.233)
  • Instance type: unknown

@github-actions

Copy link
Copy Markdown

[Perf] Stage: TRex Config

Starting TRex configuration (MAC discovery + NIC binding)...

@github-actions

Copy link
Copy Markdown

[Perf] Stage: TRex Config OK

  • TX: 0000:00:06.0 MAC: 02:4a:0d:ef:25:e3
  • RX: 0000:00:07.0 MAC: 02:56:f1:2d:89:d9
  • Gateway MAC: 02:dc:88:59:87:47
    Starting TRex server...

@github-actions

Copy link
Copy Markdown

[Perf] Stage: TRex Started

TRex server running. Beginning benchmarks...

@github-actions

Copy link
Copy Markdown

[Perf] DUT Ready

DUT instance i-0855cb6e131118d67 SSM working, build complete.

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Benchmark (1/4)

Running plain-rust benchmark...
Packet sizes: 64,512,1400,8500 | Duration: 30s/step | Target PPS: 70000,140000,350000,700000

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: plain-rust preflight

TRex API OK: 2 ports
  Port 0: 02:4a:0d:ef:25:e3
  Port 1: 02:56:f1:2d:89:d9
PREFLIGHT_OK

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: plain-rust result

SSM exit: 0

Output (last 30 lines)
Duration per step: 30s
Source MAC: 02:4a:0d:ef:25:e3

--- Packet size: 64B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 68,996 pps, Drop: 1.4338%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,898 pps, Drop: 0.787%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 345,369 pps, Drop: 1.3231%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 500,155 pps, Drop: 28.5493%, Lat avg: 0.0 us

--- Packet size: 512B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 68,999 pps, Drop: 1.4297%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,998 pps, Drop: 0.7155%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 346,351 pps, Drop: 1.0425%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 469,140 pps, Drop: 32.9799%, Lat avg: 0.0 us

--- Packet size: 1400B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 68,988 pps, Drop: 1.446%, Lat avg: 228.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,967 pps, Drop: 0.738%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 346,547 pps, Drop: 0.9865%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 476,545 pps, RX: 384,573 pps, Drop: 19.2997%, Lat avg: 0.0 us

--- Packet size: 8500B ---
  (jumbo: capping at 418,133 pps for 30.0 Gbps limit)
  Target: 70,000 pps ... TX: 70,000 pps, RX: 30,709 pps, Drop: 56.1302%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 78,354 pps, RX: 77,717 pps, Drop: 0.8121%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 78,356 pps, RX: 71,535 pps, Drop: 8.7055%, Lat avg: 0.0 us
  Target: 700,000 pps ... SKIPPED (exceeds 30.0 Gbps cap)

Results written to /tmp/perf-results/plain-rust.json
EXIT_CODE=0

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Benchmark (2/4)

Running rust-dpdk benchmark...
Packet sizes: 64,512,1400,8500 | Duration: 30s/step | Target PPS: 70000,140000,350000,700000

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: rust-dpdk preflight

TRex API OK: 2 ports
  Port 0: 02:4a:0d:ef:25:e3
  Port 1: 02:56:f1:2d:89:d9
PREFLIGHT_OK

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: rust-dpdk result

SSM exit: 0

Output (last 30 lines)
Duration per step: 30s
Source MAC: 02:4a:0d:ef:25:e3

--- Packet size: 64B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4286%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,986 pps, Drop: 0.7246%, Lat avg: 273.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 348,895 pps, Drop: 0.3156%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 681,176 pps, Drop: 2.6892%, Lat avg: 560.0 us

--- Packet size: 512B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4293%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,958 pps, Drop: 0.7445%, Lat avg: 303.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 348,737 pps, Drop: 0.3608%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 674,914 pps, Drop: 3.5838%, Lat avg: 0.0 us

--- Packet size: 1400B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4291%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,978 pps, Drop: 0.7299%, Lat avg: 274.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 348,975 pps, Drop: 0.293%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 476,324 pps, RX: 468,895 pps, Drop: 1.5598%, Lat avg: 0.0 us

--- Packet size: 8500B ---
  (jumbo: capping at 418,133 pps for 30.0 Gbps limit)
  Target: 70,000 pps ... TX: 70,000 pps, RX: 68,999 pps, Drop: 1.4303%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 78,301 pps, RX: 77,102 pps, Drop: 1.5315%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 78,351 pps, RX: 76,537 pps, Drop: 2.3147%, Lat avg: 0.0 us
  Target: 700,000 pps ... SKIPPED (exceeds 30.0 Gbps cap)

Results written to /tmp/perf-results/rust-dpdk.json
EXIT_CODE=0

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Benchmark (3/4)

Running tokio-dpdk benchmark...
Packet sizes: 64,512,1400,8500 | Duration: 30s/step | Target PPS: 70000,140000,350000,700000

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: tokio-dpdk preflight

TRex API OK: 2 ports
  Port 0: 02:4a:0d:ef:25:e3
  Port 1: 02:56:f1:2d:89:d9
PREFLIGHT_OK

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: tokio-dpdk result

SSM exit: 0

Output (last 30 lines)
Duration per step: 30s
Source MAC: 02:4a:0d:ef:25:e3

--- Packet size: 64B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4286%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,993 pps, Drop: 0.7194%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 343,087 pps, Drop: 1.9752%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 345,594 pps, Drop: 50.6295%, Lat avg: 0.0 us

--- Packet size: 512B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4285%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 139,000 pps, Drop: 0.7143%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 241,018 pps, Drop: 31.1378%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 239,645 pps, Drop: 65.7651%, Lat avg: 0.0 us

--- Packet size: 1400B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,000 pps, Drop: 1.4286%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 138,964 pps, Drop: 0.7397%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 156,932 pps, Drop: 55.1623%, Lat avg: 0.0 us
  Target: 700,000 pps ... TX: 476,307 pps, RX: 166,224 pps, Drop: 65.1016%, Lat avg: 0.0 us

--- Packet size: 8500B ---
  (jumbo: capping at 418,133 pps for 30.0 Gbps limit)
  Target: 70,000 pps ... TX: 70,000 pps, RX: 52,514 pps, Drop: 24.9799%, Lat avg: 0.0 us
  Target: 140,000 pps ... TX: 78,342 pps, RX: 55,919 pps, Drop: 28.6216%, Lat avg: 0.0 us
  Target: 350,000 pps ... TX: 78,347 pps, RX: 55,498 pps, Drop: 29.1646%, Lat avg: 0.0 us
  Target: 700,000 pps ... SKIPPED (exceeds 30.0 Gbps cap)

Results written to /tmp/perf-results/tokio-dpdk.json
EXIT_CODE=0

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Benchmark (4/4)

Running native-dpdk benchmark...
Packet sizes: 64,512,1400,8500 | Duration: 30s/step | Target PPS: 70000,140000,350000,700000

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: native-dpdk preflight

TRex API OK: 2 ports
  Port 0: 02:4a:0d:ef:25:e3
  Port 1: 02:56:f1:2d:89:d9
PREFLIGHT_OK

@github-actions

Copy link
Copy Markdown

[Perf] Benchmark Diag: native-dpdk result

SSM exit: 0

Output (last 30 lines)
Duration per step: 30s
Source MAC: 02:4a:0d:ef:25:e3

--- Packet size: 64B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 70,000 pps, Drop: 0.0%, Lat avg: 134.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 140,000 pps, Drop: 0.0%, Lat avg: 156.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 349,996 pps, Drop: 0.0011%, Lat avg: 173.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 685,340 pps, Drop: 2.0943%, Lat avg: 356.0 us

--- Packet size: 512B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 70,000 pps, Drop: 0.0%, Lat avg: 127.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 140,000 pps, Drop: 0.0%, Lat avg: 161.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 350,000 pps, Drop: 0.0%, Lat avg: 168.0 us
  Target: 700,000 pps ... TX: 700,000 pps, RX: 649,445 pps, Drop: 7.2222%, Lat avg: 1022.0 us

--- Packet size: 1400B ---
  Target: 70,000 pps ... TX: 70,000 pps, RX: 70,000 pps, Drop: 0.0%, Lat avg: 178.0 us
  Target: 140,000 pps ... TX: 140,000 pps, RX: 139,980 pps, Drop: 0.0141%, Lat avg: 135.0 us
  Target: 350,000 pps ... TX: 350,000 pps, RX: 349,991 pps, Drop: 0.0025%, Lat avg: 151.0 us
  Target: 700,000 pps ... TX: 476,372 pps, RX: 468,843 pps, Drop: 1.5805%, Lat avg: 2563.0 us

--- Packet size: 8500B ---
  (jumbo: capping at 418,133 pps for 30.0 Gbps limit)
  Target: 70,000 pps ... TX: 70,000 pps, RX: 69,997 pps, Drop: 0.0037%, Lat avg: 144.0 us
  Target: 140,000 pps ... TX: 78,351 pps, RX: 78,326 pps, Drop: 0.0317%, Lat avg: 14110.0 us
  Target: 350,000 pps ... TX: 78,303 pps, RX: 77,009 pps, Drop: 1.6518%, Lat avg: 14133.0 us
  Target: 700,000 pps ... SKIPPED (exceeds 30.0 Gbps cap)

Results written to /tmp/perf-results/native-dpdk.json
EXIT_CODE=0

@github-actions

Copy link
Copy Markdown

[Perf] Diag: testpmd log

testpmd output (last 30 lines)
=== testpmd stats (last 30 lines) ===
  ############################################################################
Telling cores to stop...
Waiting for lcores to finish...

  ---------------------- Forward statistics for port 0  ----------------------
  RX-packets: 113490639      RX-dropped: 0             RX-total: 113490639
  RX-error: 403633
  RX-nombufs: 0             
  TX-packets: 113490639      TX-dropped: 0             TX-total: 113490639
  ----------------------------------------------------------------------------

  +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
  RX-packets: 113490639      RX-dropped: 0             RX-total: 113490639
  TX-packets: 113490639      TX-dropped: 0             TX-total: 113490639
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Done.

Stopping port 0...
Stopping ports...
Done

Shutting down port 0...
ena_rx_queue_release(): Rx queue 0:0 released
ena_tx_queue_release(): Tx queue 0:0 released
Closing ports...
Port 0 is closed
Done

Bye...
=== ENA port stats ===
N/A (vfio-pci)

@github-actions

Copy link
Copy Markdown

[Perf] Stage: Results

[23:55:34] INFO Generating markdown summary...

Performance Test Results — unknown

Commit: a02b7218
Timestamp: 2026-04-13T23:55:34.014114+00:00

64B packets

Config Target PPS TX pps RX pps Drop % NIC imissed NIC ierrors NIC nombuf App Drops Lat Avg (us) Lat Max (us) TX Mbps RX Mbps
native-dpdk 70,000 70,000 70,000 0.00% — — — — 134.0 347.0 35.8 35.8
native-dpdk 140,000 140,000 140,000 0.00% — — — — 156.0 1445.0 71.7 71.7
native-dpdk 350,000 350,000 349,996 0.00% — — — — 173.0 1176.0 179.2 179.2
native-dpdk 700,000 700,000 685,340 2.09% — — — — 356.0 2324.0 358.4 350.9
rust-dpdk 70,000 70,000 69,000 1.43% 0 30,157 0 0 0.0 0.0 35.8 35.3
rust-dpdk 140,000 140,000 138,986 0.72% 0 41,900 0 0 273.0 0.0 71.7 71.2
rust-dpdk 350,000 350,000 348,895 0.32% 0 32,028 0 0 0.0 0.0 179.2 178.6
rust-dpdk 700,000 700,000 681,176 2.69% 0 41,871 0 0 560.0 0.0 358.4 348.8
tokio-dpdk 70,000 70,000 69,000 1.43% 0 30,371 0 0 0.0 0.0 35.8 38.6
tokio-dpdk 140,000 140,000 138,993 0.72% 0 41,259 0 0 0.0 0.0 71.7 77.8
tokio-dpdk 350,000 350,000 343,087 1.98% 0 29,282 0 0 0.0 0.0 179.2 192.1
tokio-dpdk 700,000 700,000 345,594 50.63% 0 26,378 0 0 0.0 0.0 358.4 193.5
plain-rust 70,000 70,000 68,996 1.43% — — — — 0.0 0.0 35.8 35.3
plain-rust 140,000 140,000 138,898 0.79% — — — — 0.0 0.0 71.7 71.1
plain-rust 350,000 350,000 345,369 1.32% — — — — 0.0 0.0 179.2 176.8
plain-rust 700,000 700,000 500,155 28.55% — — — — 0.0 0.0 358.4 256.1

512B packets

Config Target PPS TX pps RX pps Drop % NIC imissed NIC ierrors NIC nombuf App Drops Lat Avg (us) Lat Max (us) TX Mbps RX Mbps
native-dpdk 70,000 70,000 70,000 0.00% — — — — 127.0 5967.0 286.7 286.7
native-dpdk 140,000 140,000 140,000 0.00% — — — — 161.0 403.0 573.4 573.4
native-dpdk 350,000 350,000 350,000 0.00% — — — — 168.0 1374.0 1433.6 1433.6
native-dpdk 700,000 700,000 649,445 7.22% — — — — 1022.0 3463.0 2867.2 2660.1
rust-dpdk 70,000 70,000 69,000 1.43% 0 33,913 0 0 0.0 0.0 286.7 282.6
rust-dpdk 140,000 140,000 138,958 0.74% 0 41,872 0 0 303.0 0.0 573.4 569.2
rust-dpdk 350,000 350,000 348,737 0.36% 0 35,726 0 0 0.0 0.0 1433.6 1428.4
rust-dpdk 700,000 700,000 674,914 3.58% 0 31,834 0 0 0.0 0.0 2867.2 2764.4
tokio-dpdk 70,000 70,000 69,000 1.43% 0 34,180 0 0 0.0 0.0 286.7 285.9
tokio-dpdk 140,000 140,000 139,000 0.71% 0 31,824 0 0 0.0 0.0 573.4 576.0
tokio-dpdk 350,000 350,000 241,018 31.14% 0 31,036 0 0 0.0 0.0 1433.6 998.8
tokio-dpdk 700,000 700,000 239,645 65.77% 0 12,141 0 0 0.0 0.0 2867.2 993.1
plain-rust 70,000 70,000 68,999 1.43% — — — — 0.0 0.0 286.7 282.6
plain-rust 140,000 140,000 138,998 0.72% — — — — 0.0 0.0 573.4 569.3
plain-rust 350,000 350,000 346,351 1.04% — — — — 0.0 0.0 1433.6 1418.7
plain-rust 700,000 700,000 469,140 32.98% — — — — 0.0 0.0 2867.2 1921.6

1400B packets

Config Target PPS TX pps RX pps Drop % NIC imissed NIC ierrors NIC nombuf App Drops Lat Avg (us) Lat Max (us) TX Mbps RX Mbps
native-dpdk 70,000 70,000 70,000 0.00% — — — — 178.0 2075.0 784.0 784.0
native-dpdk 140,000 140,000 139,980 0.01% — — — — 135.0 404.0 1568.0 1567.8
native-dpdk 350,000 350,000 349,991 0.00% — — — — 151.0 1646.0 3920.0 3919.9
native-dpdk 700,000 476,372 468,843 1.58% — — — — 2563.0 4932.0 5335.4 5251.0
rust-dpdk 70,000 70,000 69,000 1.43% 0 41,962 0 0 0.0 0.0 784.0 772.8
rust-dpdk 140,000 140,000 138,978 0.73% 0 33,619 0 0 274.0 0.0 1568.0 1556.6
rust-dpdk 350,000 350,000 348,975 0.29% 0 38,425 0 0 0.0 0.0 3920.0 3908.5
rust-dpdk 700,000 476,324 468,895 1.56% 0 25,738 0 0 0.0 0.0 5334.8 5251.6
tokio-dpdk 70,000 70,000 69,000 1.43% 0 39,276 0 0 0.0 0.0 784.0 776.1
tokio-dpdk 140,000 140,000 138,964 0.74% 0 31,298 0 0 0.0 0.0 1568.0 1563.1
tokio-dpdk 350,000 350,000 156,932 55.16% 0 16,295 0 0 0.0 0.0 3920.0 1765.2
tokio-dpdk 700,000 476,307 166,224 65.10% 0 9,736 0 0 0.0 0.0 5334.6 1869.7
plain-rust 70,000 70,000 68,988 1.45% — — — — 228.0 0.0 784.0 772.7
plain-rust 140,000 140,000 138,967 0.74% — — — — 0.0 0.0 1568.0 1556.4
plain-rust 350,000 350,000 346,547 0.99% — — — — 0.0 0.0 3920.0 3881.3
plain-rust 700,000 476,545 384,573 19.30% — — — — 0.0 0.0 5337.3 4307.2

8500B packets

Config Target PPS TX pps RX pps Drop % NIC imissed NIC ierrors NIC nombuf App Drops Lat Avg (us) Lat Max (us) TX Mbps RX Mbps
native-dpdk 70,000 70,000 69,997 0.00% — — — — 144.0 3373.0 4760.0 4759.8
native-dpdk 140,000 78,351 78,326 0.03% — — — — 14110.0 15662.0 5327.9 5326.2
native-dpdk 350,000 78,303 77,009 1.65% — — — — 14133.0 16086.0 5324.6 5236.6
rust-dpdk 70,000 70,000 68,999 1.43% 0 32,210 0 0 0.0 0.0 4760.0 4691.9
rust-dpdk 140,000 78,301 77,102 1.53% 0 22,691 0 0 0.0 0.0 5324.5 5242.9
rust-dpdk 350,000 78,351 76,537 2.31% 0 6,980 0 0 0.0 0.0 5327.8 5204.5
tokio-dpdk 70,000 70,000 52,514 24.98% 0 14,570 0 0 0.0 0.0 4760.0 3573.5
tokio-dpdk 140,000 78,342 55,919 28.62% 0 14,924 0 0 0.0 0.0 5327.3 3805.2
tokio-dpdk 350,000 78,347 55,498 29.16% 0 4,809 0 0 0.0 0.0 5327.6 3776.5
plain-rust 70,000 70,000 30,709 56.13% — — — — 0.0 0.0 4760.0 2088.2
plain-rust 140,000 78,354 77,717 0.81% — — — — 0.0 0.0 5328.0 5284.8
plain-rust 350,000 78,356 71,535 8.71% — — — — 0.0 0.0 5328.2 4864.4

NIC Drops Instrumentation Self-Check

Compares (NIC-FINAL − NIC-BASELINE) one-shot snapshots against the sum of per-tick [PERF] deltas over the reporter's lifetime. These MUST match exactly — a mismatch means per-tick delta bookkeeping is losing data.

Config Status imissed (expected / actual / Δ) ierrors (expected / actual / Δ) rx_nombuf (expected / actual / Δ)
native-dpdk no instrumentation — — —
rust-dpdk OK 0 / 0 / 0 403,492 / 403,492 / 0 0 / 0 / 0
tokio-dpdk OK 0 / 0 / 0 305,397 / 305,397 / 0 0 / 0 / 0
plain-rust no instrumentation — — —

expected = FINAL − BASELINE (raw NIC counter delta across reporter lifetime). actual = sum of per-tick [PERF] delta fields. Any Δ ≠ 0 is a bug in the tick loop's bookkeeping.

plain-rust Kernel NIC Drops (ethtool -S delta)

ethtool snapshots not available — baseline or final file missing in $LOGS_DIR/dut-plain-rust-ethtool-*.txt.

Full results artifact

The spin-poll optimization (commit a02b721) did not close the high-rate
tokio-dpdk performance gap. Hardware perf tests showed essentially flat
results vs Run #17, and the NIC counters (imissed=0) disprove the
original hypothesis that yield_now() scheduler latency was causing ring
overflow.

The real bottleneck is per-packet CPU cost in the async echo path
(~1.4 μs overhead per packet vs sync DPDK), likely from 2× Mutex
lock/unlock per packet and async_trait vtable dispatch. Spin-polling
doesn't help because the empty-poll idle path is not what's limiting
throughput.

Reverts the spin-poll change in DpdkUdpSocket::recv_from and the matching
benchmark code. Adds Run #18 to docs/perf-test-log.md documenting the
negative result and future directions that could actually help
(lock-free Arc<UdpSocket>, batch APIs, dedicated poll thread + mpsc).

https://claude.ai/code/session_01EpC1AocdV7TkvTiMXmtCkm
@github-actions

Copy link
Copy Markdown

Synthetic Performance Results (run)

Commit: 01ec41bc

✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)
✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01)

Synthetic UDP Performance Results

Measures framework overhead: sync dpdk_udp::UdpSocket vs async (std::sync::Mutex + try_recv_from).

Test Payload Sync PPS Async PPS Ratio (sync/async) Async ns/op
TX send_to 64B 12.2M 11.4M 1.1x 87
RX recv_from 64B 3.6M 4.9M 0.7x 203
TX send_to 1400B 1.8M 1.8M 1.0x 549
RX recv_from 1400B 1.1M 1.2M 0.9x 818

Avg sync/async ratio: 0.9x, worst: 1.1x

Good: Async wrapper is within 1.1x of sync — minimal framework overhead.

@github-actions

Copy link
Copy Markdown

[CI] Stage: Deploy

Infrastructure ready.

  • Sender: i-044b69250b67c6adf (DPDK ENI: 10.0.1.183)
  • Receiver: i-05a43e730ae1a41f0 (DPDK ENI: 10.0.1.201)
  • Both instances SSM-ready.

@github-actions

Copy link
Copy Markdown

[CI] Stage: Summary

All tests PASSED.

ARP seeding: kernel /proc/net/arp (automatic)

  • tier1-dpdk-echo: 6 tests, 0 failures
  • tier2-kernel-interop: 4 tests, 0 failures
  • tier3-iperf-interop: 1 tests, 0 failures
  • tier3-iperf-interop: 1 tests, 0 failures

@github-actions

Copy link
Copy Markdown

✅ Integration Tests Passed (Run 24373229952)

Branch: 38/merge | Commit: 01ec41bc

Test Results

  • tier1-dpdk-echo.xml: 6 tests, 0 failures, skipped
  • tier2-kernel-interop.xml: 4 tests, 0 failures, skipped
  • tier3-iperf-sends.xml: 1 tests, 0 failures, skipped
  • tier3-our-app-sends.xml: 1 tests, 0 failures, skipped

Application Logs (last 20 lines)

receiver-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.201:9000 (MAC: 02:bf:a5:6a:4d:51)
echo listening on 10.0.1.201:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.183:9000 (MAC: 02:da:02:0f:64:e5)
echo listening on 10.0.1.183:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-test-client.log

EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
DPDK bind failed (Port init failed: Invalid port ID: 0), falling back to tokio
Backend: tokio
Sending packets...
Sent 12 bytes: 'arp-probe #1'
Received 12 bytes from 10.0.1.201:9000: 'arp-probe #1'
Test complete
[2026-04-14T00:11:28Z] INFO: ARP resolution succeeded (got response from peer)
[2026-04-14T00:11:28Z] INFO: Test: udp_send_receive
[2026-04-14T00:11:29Z] INFO: UDP send/receive succeeded
[2026-04-14T00:11:29Z] INFO: Test: echo_roundtrip
[2026-04-14T00:11:30Z] INFO: Echo roundtrip succeeded: 5/5 responses received
[2026-04-14T00:11:30Z] INFO: Test: payload_integrity
[2026-04-14T00:11:30Z] INFO: Response received, checking payload match...
[2026-04-14T00:11:30Z] INFO: Payload integrity verified (found in response)
[2026-04-14T00:11:30Z] INFO: JUnit XML written to: /tmp/test-results/tier2-kernel-interop.xml
[2026-04-14T00:11:30Z] INFO: Tier 2 sender tests complete. Results: /tmp/test-results/tier2-kernel-interop.xml

receiver-test-client-iperf.log

[2026-04-14T00:18:00Z] INFO: iperf-sends: sent 10 packets, received 10 responses
[2026-04-14T00:18:00Z] INFO: iperf-sends: PASS (sent >= 5 packets)
[2026-04-14T00:18:00Z] INFO: JUnit XML written to: /tmp/test-results/tier3-iperf-sends.xml
[2026-04-14T00:18:00Z] INFO: iperf-sends test complete

sender-test-client-iperf.log

Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #3'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #4'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #4'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #5'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #5'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #6'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #6'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #7'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #7'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #8'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #8'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #9'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #9'
Sent 31 bytes: 'dpdk-to-kernel-test-payload #10'
Received 31 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #10'
Test complete
[2026-04-14T00:16:59Z] INFO: our-app-sends: sent 10 packets, received 10 responses
[2026-04-14T00:16:59Z] INFO: our-app-sends: PASS (sent >= 5 packets)
[2026-04-14T00:16:59Z] INFO: JUnit XML written to: /tmp/test-results/tier3-our-app-sends.xml
[2026-04-14T00:16:59Z] INFO: our-app-sends test complete
Full Application Logs (last 200 lines each)

receiver-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.201:9000 (MAC: 02:bf:a5:6a:4d:51)
echo listening on 10.0.1.201:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-echo-server.log

EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.183:9000 (MAC: 02:da:02:0f:64:e5)
echo listening on 10.0.1.183:9000 (MTU=9001, max_udp_payload=8973)
Shutting down gracefully...

sender-test-client.log

[2026-04-14T00:07:45Z] INFO: Test: arp_resolution
UDP Test Client
Target: 10.0.1.201:9000
Bind address: 10.0.1.183:0
Message: 'arp-probe'
Count: 1
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.183:32768 (MAC: 02:da:02:0f:64:e5)
Backend: dpdk
Sending packets...
Sent 12 bytes: 'arp-probe #1'
Received 12 bytes from 10.0.1.201:9000: 'arp-probe #1'
Test complete
[2026-04-14T00:07:46Z] INFO: ARP resolution succeeded (got response from peer)
[2026-04-14T00:07:46Z] INFO: Test: udp_send_receive
[2026-04-14T00:07:48Z] INFO: UDP send/receive succeeded
[2026-04-14T00:07:48Z] INFO: Test: echo_roundtrip
[2026-04-14T00:07:50Z] INFO: Echo roundtrip succeeded: 5/5 responses received
[2026-04-14T00:07:50Z] INFO: Test: payload_integrity
[2026-04-14T00:07:50Z] INFO: Response received, checking payload match...
[2026-04-14T00:07:50Z] INFO: Payload integrity verified (found in response)
[2026-04-14T00:07:50Z] INFO: Test: jumbo_diagnostics
[2026-04-14T00:07:50Z] INFO: === JUMBO FRAME DIAGNOSTICS ===
[2026-04-14T00:07:50Z] INFO: Interface MTU:
  1500
  9001
  65536
[2026-04-14T00:07:50Z] INFO:   docker0: MTU=1500
[2026-04-14T00:07:50Z] INFO:   ens5: MTU=9001
[2026-04-14T00:07:50Z] INFO:   lo: MTU=65536
[2026-04-14T00:07:50Z] INFO: Routing table MTU column:
Iface	Destination	Gateway 	Flags	RefCnt	Use	Metric	Mask		MTU	Window	IRTT                                                       
ens5	00000000	0101000A	0003	0	0	512	00000000	0	0	0                                                                             
ens5	0200000A	0101000A	0007	0	0	512	FFFFFFFF	0	0	0                                                                             
ens5	0001000A	00000000	0001	0	0	512	00FFFFFF	0	0	0                                                                             
ens5	0101000A	00000000	0005	0	0	512	FFFFFFFF	0	0	0                                                                             
[2026-04-14T00:07:50Z] INFO: DPDK port config (from echo server log):
[2026-04-14T00:07:50Z] INFO:   (no MTU info in echo log)
[2026-04-14T00:07:50Z] INFO: === END JUMBO DIAGNOSTICS ===
[2026-04-14T00:07:50Z] INFO: Test: jumbo_echo_8000
[2026-04-14T00:07:52Z] INFO: Jumbo output: UDP Test Client
Target: 10.0.1.201:9000
Bind address: 10.0.1.183:0
Payload size: 8000 bytes
Count: 3
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.183:32768 (MAC: 02:da:02:0f:64:e5)
Backend: dpdk
Sending packets...
Sent 8000 bytes (binary payload)
Received 8000 bytes from 10.0.1.201:9000 (expected 8000, OK)
Sent 8000 bytes (binary payload)
Received 8000 bytes from 10.0.1.201:9000 (expected 8000, OK)
Sent 8000 bytes (binary payload)
Received 8000 bytes from 10.0.1.201:9000 (expected 8000, OK)
Test complete
[2026-04-14T00:07:52Z] INFO: Jumbo frame echo succeeded: 3/3 responses with correct size
[2026-04-14T00:07:52Z] INFO: JUnit XML written to: /tmp/test-results/tier1-dpdk-echo.xml
[2026-04-14T00:07:52Z] INFO: Tier 1 sender tests complete. Results: /tmp/test-results/tier1-dpdk-echo.xml
[2026-04-14T00:11:28Z] INFO: Test: arp_resolution
UDP Test Client
Target: 10.0.1.201:9000
Bind address: 0.0.0.0:0
Message: 'arp-probe'
Count: 1
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
DPDK bind failed (Port init failed: Invalid port ID: 0), falling back to tokio
Backend: tokio
Sending packets...
Sent 12 bytes: 'arp-probe #1'
Received 12 bytes from 10.0.1.201:9000: 'arp-probe #1'
Test complete
[2026-04-14T00:11:28Z] INFO: ARP resolution succeeded (got response from peer)
[2026-04-14T00:11:28Z] INFO: Test: udp_send_receive
[2026-04-14T00:11:29Z] INFO: UDP send/receive succeeded
[2026-04-14T00:11:29Z] INFO: Test: echo_roundtrip
[2026-04-14T00:11:30Z] INFO: Echo roundtrip succeeded: 5/5 responses received
[2026-04-14T00:11:30Z] INFO: Test: payload_integrity
[2026-04-14T00:11:30Z] INFO: Response received, checking payload match...
[2026-04-14T00:11:30Z] INFO: Payload integrity verified (found in response)
[2026-04-14T00:11:30Z] INFO: JUnit XML written to: /tmp/test-results/tier2-kernel-interop.xml
[2026-04-14T00:11:30Z] INFO: Tier 2 sender tests complete. Results: /tmp/test-results/tier2-kernel-interop.xml

receiver-test-client-iperf.log

[2026-04-14T00:18:00Z] INFO: iperf-sends: sent 10 packets, received 10 responses
[2026-04-14T00:18:00Z] INFO: iperf-sends: PASS (sent >= 5 packets)
[2026-04-14T00:18:00Z] INFO: JUnit XML written to: /tmp/test-results/tier3-iperf-sends.xml
[2026-04-14T00:18:00Z] INFO: iperf-sends test complete

sender-test-client-iperf.log

[2026-04-14T00:16:57Z] INFO: Pre-flight: checking DPDK state and ARP cache...
[2026-04-14T00:16:57Z] INFO: Local IP: 10.0.1.183, Peer IP: 10.0.1.201, Port: 9000
[2026-04-14T00:16:57Z] INFO: /proc/net/arp contents:
IP address       HW type     Flags       HW address            Mask     Device
10.0.1.183       0x1         0x2         02:da:02:0f:64:e5     *        ens5
10.0.1.169       0x1         0x2         02:dd:3d:fe:fe:53     *        ens5
10.0.1.1         0x1         0x2         02:69:81:e4:2d:59     *        ens5
10.0.1.201       0x1         0x2         02:bf:a5:6a:4d:51     *        ens5
10.0.1.125       0x1         0x2         02:6f:74:b1:77:47     *        ens5
[2026-04-14T00:16:57Z] INFO: DPDK runtime state:
No /var/run/dpdk/ directory
[2026-04-14T00:16:57Z] INFO: vfio-pci bindings:
0000:00:06.0
bind
module
new_id
remove_id
uevent
unbind
[2026-04-14T00:16:57Z] INFO: Test binary: /opt/dpdk-stdlib/target/release/test-client
-rwxr-xr-x. 2 root root 1860096 Apr 14 00:05 /opt/dpdk-stdlib/target/release/test-client
[2026-04-14T00:16:57Z] INFO: Launching test-client: /opt/dpdk-stdlib/target/release/test-client --target 10.0.1.201 --port 9000 --bind-ip 10.0.1.183 --count 10 --delay 200
[2026-04-14T00:16:59Z] INFO: Test client output: UDP Test Client
Target: 10.0.1.201:9000
Bind address: 10.0.1.183:0
Message: 'dpdk-to-kernel-test-payload'
Count: 10
EAL: Detected CPU lcores: 2
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Using IOMMU type 8 (No-IOMMU)
EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
Warning: Some RX offloads not supported by device (flags: 0x1)
Warning: Some TX offloads not supported by device (flags: 0x1)
✅ DPDK UDP socket bound to 10.0.1.183:32768 (MAC: 02:da:02:0f:64:e5)
Backend: dpdk
Sending packets...
Sent 30 bytes: 'dpdk-to-kernel-test-payload #1'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #1'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #2'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #2'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #3'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #3'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #4'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #4'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #5'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #5'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #6'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #6'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #7'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #7'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #8'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #8'
Sent 30 bytes: 'dpdk-to-kernel-test-payload #9'
Received 30 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #9'
Sent 31 bytes: 'dpdk-to-kernel-test-payload #10'
Received 31 bytes from 10.0.1.201:9000: 'dpdk-to-kernel-test-payload #10'
Test complete
[2026-04-14T00:16:59Z] INFO: our-app-sends: sent 10 packets, received 10 responses
[2026-04-14T00:16:59Z] INFO: our-app-sends: PASS (sent >= 5 packets)
[2026-04-14T00:16:59Z] INFO: JUnit XML written to: /tmp/test-results/tier3-our-app-sends.xml
[2026-04-14T00:16:59Z] INFO: our-app-sends test complete
⚠️ SSM Command Failures (receiver-ssm-failure.log)
=== Polling timeout after 30s ===
Status: InProgress
Instance: i-05a43e730ae1a41f0 (receiver)
Command ID: d9c3bb5d-f0ef-4797-b317-f2a9b37e2e88

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-05a43e730ae1a41f0 (receiver)
Command ID: fc4b6bb3-2a97-4c28-bfbb-25193ec2eca2

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-05a43e730ae1a41f0 (receiver)
Command ID: 744ff251-a2c5-4590-ab01-37db16955319

=== STDOUT ===


=== STDERR ===


=== Polling timeout after 30s ===
Status: InProgress
Instance: i-05a43e730ae1a41f0 (receiver)
Command ID: a412b2ba-84da-434b-8c3e-8dae4dd92b90

=== STDOUT ===


=== STDERR ===


⚠️ SSM Command Failures (sender-ssm-failure.log)
=== Polling timeout after 30s ===
Status: InProgress
Instance: i-044b69250b67c6adf (sender)
Command ID: 6ab710fd-4835-42f8-b44b-db78ff03310f

=== STDOUT ===


=== STDERR ===


Network & PCI State

receiver-network-interfaces.log

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:ef:07:ec:d1:77 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-0ffde923cd93c9fad
    altname device-number-0.0
    inet 10.0.1.219/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 2156sec preferred_lft 2156sec
    inet6 fe80::ef:7ff:feec:d177/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:97:42:b4:aa brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

sender-network-interfaces.log

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:2a:c1:d5:44:3d brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-09803dd2ce6142dc2
    altname device-number-0.0
    inet 10.0.1.17/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 2179sec preferred_lft 2179sec
    inet6 fe80::2a:c1ff:fed5:443d/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:7c:aa:9e:15 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

receiver-networking-diag-baseline.txt

=== NETWORKING DIAGNOSTICS ===
timestamp: 2026-04-14T00:07:06Z
hostname: ip-10-0-1-219.ec2.internal
kernel: 6.1.166-197.305.amzn2023.x86_64

=== DPDK PORT STATUS ===

Network devices using DPDK-compatible driver
============================================
0000:00:06.0 'Elastic Network Adapter (ENA) ec20' drv=vfio-pci unused=ena

Network devices using kernel driver
===================================
0000:00:05.0 'Elastic Network Adapter (ENA) ec20' if=ens5 drv=ena unused=vfio-pci *Active*

No 'Baseband' devices detected
==============================

No 'Crypto' devices detected
============================

No 'DMA' devices detected
=========================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

No 'Misc (rawdev)' devices detected
===================================

No 'Regex' devices detected
===========================

=== IP ADDRESSES ===
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:ef:07:ec:d1:77 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-0ffde923cd93c9fad
    altname device-number-0.0
    inet 10.0.1.219/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 3308sec preferred_lft 3308sec
    inet6 fe80::ef:7ff:feec:d177/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:97:42:b4:aa brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

=== ARP TABLE ===
10.0.1.125 dev ens5 lladdr 02:6f:74:b1:77:47 REACHABLE 
10.0.1.169 dev ens5 lladdr 02:dd:3d:fe:fe:53 REACHABLE 
10.0.1.1 dev ens5 lladdr 02:69:81:e4:2d:59 REACHABLE 

=== ROUTE TABLE ===
default via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.219 metric 512 
10.0.0.2 via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.219 metric 512 
10.0.1.0/24 dev ens5 proto kernel scope link src 10.0.1.219 metric 512 
10.0.1.1 dev ens5 proto dhcp scope link src 10.0.1.219 metric 512 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 

=== IMDS: ENI INFORMATION ===
ENI MACs found: 02:bf:a5:6a:4d:51/ 02:ef:07:ec:d1:77/ 

--- ENI: 02:bf:a5:6a:4d:51/ ---
  device-number: 1
  local-ipv4s: 10.0.1.201
  subnet-id: subnet-07e435a0192a8e1af
  subnet-cidr: 10.0.1.0/24

--- ENI: 02:ef:07:ec:d1:77/ ---
  device-number: 0
  local-ipv4s: 10.0.1.219
  subnet-id: subnet-07e435a0192a8e1af
  subnet-cidr: 10.0.1.0/24


=== GATEWAY ARP TEST ===
Gateway IP: 10.0.1.1
Gateway ARP entry:
10.0.1.1 dev ens5 lladdr 02:69:81:e4:2d:59 REACHABLE 

arping result:
ARPING 10.0.1.1 from 10.0.1.219 ens5
Unicast reply from 10.0.1.1 [02:69:81:E4:2D:59]  0.533ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

=== HUGEPAGE STATUS ===
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         2097152 kB

=== VFIO STATUS ===
total 0
drwxr-xr-x.  2 root root       80 Apr 14 00:06 .
drwxr-xr-x. 14 root root     3100 Apr 14 00:06 ..
crw-------.  1 root root 243,   0 Apr 14 00:06 noiommu-0
crw-rw-rw-.  1 root root  10, 196 Apr 14 00:02 vfio

noiommu mode:
Y

=== DPDK SHARED MEMORY ===
no /var/run/dpdk/ directory (clean state)

=== DPDK-RELATED DMESG (last 30 lines) ===
[    0.068456] x86/fpu: Enabled xstate features 0x2ff, context size is 2568 bytes, using 'compacted' format.
[    0.074757] audit: type=2000 audit(1776124925.758:1): state=initialized audit_enabled=0 res=1
[    0.077216] kprobes: kprobe jump-optimization is enabled. All kprobes are optimized if possible.
[    0.102023] ACPI: Interpreter enabled
[    0.102023] ACPI: Enabled 2 GPEs in block 00 to 0F
[    0.125889] pci 0000:00:05.0: enabling Extended Tags
[    0.149525] SGI XFS with ACLs, security attributes, quota, no debug enabled
[    0.189923] ACPI: \_SB_.LNKD: Enabled at IRQ 11
[    0.270070] IPI shorthand broadcast: enabled
[    0.270132] AES CTR mode by8 optimization enabled
[    3.845161] systemd[1]: Mounting dev-hugepages.mount - Huge Pages File System...
[    3.879661] systemd[1]: Mounted dev-hugepages.mount - Huge Pages File System.
[    3.947612] VFIO - User Level meta-driver version: 0.3
[    5.067034] ena 0000:00:05.0: Elastic Network Adapter (ENA) v2.16.1g
[    5.075275] ena 0000:00:05.0: ENA device version: 0.10
[    5.076027] ena 0000:00:05.0: ENA controller version: 0.0.1 implementation version 1
[    5.174942] ena 0000:00:05.0: ENA Large LLQ is disabled
[    5.187016] ena 0000:00:05.0: Elastic Network Adapter (ENA) found at mem c0500000, mac addr 02:ef:07:ec:d1:77
[    5.335023] ena 0000:00:05.0 ens5: renamed from eth0
[    6.942908] ena 0000:00:05.0 ens5: Local page cache is disabled for less than 16 channels
[  250.787978] pci 0000:00:06.0: enabling Extended Tags
[  250.791769] ena 0000:00:06.0: enabling device (0000 -> 0002)
[  250.803604] ena 0000:00:06.0: ENA device version: 0.10
[  250.804387] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  250.901584] ena 0000:00:06.0: ENA Large LLQ is disabled
[  250.914617] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:bf:a5:6a:4d:51
[  250.973622] ena 0000:00:06.0 ens6: renamed from eth0
[  251.298261] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  287.007536] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  287.008855] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device

=== DPDK-RELATED PROCESSES ===
no DPDK processes running

=== END DIAGNOSTICS ===

sender-networking-diag-baseline.txt

=== NETWORKING DIAGNOSTICS ===
timestamp: 2026-04-14T00:06:58Z
hostname: ip-10-0-1-17.ec2.internal
kernel: 6.1.166-197.305.amzn2023.x86_64

=== DPDK PORT STATUS ===

Network devices using DPDK-compatible driver
============================================
0000:00:06.0 'Elastic Network Adapter (ENA) ec20' drv=vfio-pci unused=ena

Network devices using kernel driver
===================================
0000:00:05.0 'Elastic Network Adapter (ENA) ec20' if=ens5 drv=ena unused=vfio-pci *Active*

No 'Baseband' devices detected
==============================

No 'Crypto' devices detected
============================

No 'DMA' devices detected
=========================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

No 'Misc (rawdev)' devices detected
===================================

No 'Regex' devices detected
===========================

=== IP ADDRESSES ===
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:2a:c1:d5:44:3d brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-09803dd2ce6142dc2
    altname device-number-0.0
    inet 10.0.1.17/24 metric 512 brd 10.0.1.255 scope global dynamic ens5
       valid_lft 3316sec preferred_lft 3316sec
    inet6 fe80::2a:c1ff:fed5:443d/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:7c:aa:9e:15 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

=== ARP TABLE ===
10.0.1.169 dev ens5 lladdr 02:dd:3d:fe:fe:53 REACHABLE 
10.0.1.1 dev ens5 lladdr 02:69:81:e4:2d:59 REACHABLE 
10.0.1.125 dev ens5 lladdr 02:6f:74:b1:77:47 REACHABLE 

=== ROUTE TABLE ===
default via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.17 metric 512 
10.0.0.2 via 10.0.1.1 dev ens5 proto dhcp src 10.0.1.17 metric 512 
10.0.1.0/24 dev ens5 proto kernel scope link src 10.0.1.17 metric 512 
10.0.1.1 dev ens5 proto dhcp scope link src 10.0.1.17 metric 512 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 

=== IMDS: ENI INFORMATION ===
ENI MACs found: 02:2a:c1:d5:44:3d/ 02:da:02:0f:64:e5/ 

--- ENI: 02:2a:c1:d5:44:3d/ ---
  device-number: 0
  local-ipv4s: 10.0.1.17
  subnet-id: subnet-07e435a0192a8e1af
  subnet-cidr: 10.0.1.0/24

--- ENI: 02:da:02:0f:64:e5/ ---
  device-number: 1
  local-ipv4s: 10.0.1.183
  subnet-id: subnet-07e435a0192a8e1af
  subnet-cidr: 10.0.1.0/24


=== GATEWAY ARP TEST ===
Gateway IP: 10.0.1.1
Gateway ARP entry:
10.0.1.1 dev ens5 lladdr 02:69:81:e4:2d:59 REACHABLE 

arping result:
ARPING 10.0.1.1 from 10.0.1.17 ens5
Unicast reply from 10.0.1.1 [02:69:81:E4:2D:59]  0.534ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

=== HUGEPAGE STATUS ===
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         2097152 kB

=== VFIO STATUS ===
total 0
drwxr-xr-x.  2 root root       80 Apr 14 00:06 .
drwxr-xr-x. 14 root root     3100 Apr 14 00:06 ..
crw-------.  1 root root 243,   0 Apr 14 00:06 noiommu-0
crw-rw-rw-.  1 root root  10, 196 Apr 14 00:02 vfio

noiommu mode:
Y

=== DPDK SHARED MEMORY ===
no /var/run/dpdk/ directory (clean state)

=== DPDK-RELATED DMESG (last 30 lines) ===
[    0.076319] audit: type=2000 audit(1776124926.339:1): state=initialized audit_enabled=0 res=1
[    0.078758] kprobes: kprobe jump-optimization is enabled. All kprobes are optimized if possible.
[    0.103178] ACPI: Interpreter enabled
[    0.103178] ACPI: Enabled 2 GPEs in block 00 to 0F
[    0.127453] pci 0000:00:05.0: enabling Extended Tags
[    0.151384] SGI XFS with ACLs, security attributes, quota, no debug enabled
[    0.180798] ACPI: \_SB_.LNKD: Enabled at IRQ 11
[    0.273685] IPI shorthand broadcast: enabled
[    0.273747] AES CTR mode by8 optimization enabled
[    4.025120] systemd[1]: Mounting dev-hugepages.mount - Huge Pages File System...
[    4.058394] systemd[1]: Mounted dev-hugepages.mount - Huge Pages File System.
[    4.121590] VFIO - User Level meta-driver version: 0.3
[    5.236112] audit: type=1305 audit(1776124930.549:126): op=set audit_enabled=1 old=1 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1
[    5.322945] ena 0000:00:05.0: Elastic Network Adapter (ENA) v2.16.1g
[    5.375007] ena 0000:00:05.0: ENA device version: 0.10
[    5.375766] ena 0000:00:05.0: ENA controller version: 0.0.1 implementation version 1
[    5.475007] ena 0000:00:05.0: ENA Large LLQ is disabled
[    5.486693] ena 0000:00:05.0: Elastic Network Adapter (ENA) found at mem c0500000, mac addr 02:2a:c1:d5:44:3d
[    5.605047] ena 0000:00:05.0 ens5: renamed from eth0
[    7.266816] ena 0000:00:05.0 ens5: Local page cache is disabled for less than 16 channels
[  250.399011] pci 0000:00:06.0: enabling Extended Tags
[  250.402926] ena 0000:00:06.0: enabling device (0000 -> 0002)
[  250.415909] ena 0000:00:06.0: ENA device version: 0.10
[  250.416730] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  250.512609] ena 0000:00:06.0: ENA Large LLQ is disabled
[  250.520964] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:da:02:0f:64:e5
[  250.577053] ena 0000:00:06.0 ens6: renamed from eth0
[  250.911946] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  279.971141] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  279.972752] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device

=== DPDK-RELATED PROCESSES ===
no DPDK processes running

=== END DIAGNOSTICS ===
⚠️ Crash Diagnostics

receiver-dmesg-crashes.log

[    0.074737] pid_max: default: 32768 minimum: 301
[    0.128002] iommu: Default domain type: Translated 
[    0.128726] NetLabel:  unlabeled traffic allowed by default
[    0.134737] PCI: CLS 0 bytes, default 64
[    0.208887] nvme nvme0: 2/0/0 default/read/poll queues
[    0.438103] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[    0.438201] systemd[1]: No hostname configured, using default hostname.
[    0.527973] systemd[1]: Queued start job for default target initrd.target.
[    2.633271] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[   12.406750] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[  325.995788] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:6392)
[  546.774473] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:10198)
[ 1306.699902] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:48051)

sender-dmesg-crashes.log

[    0.076297] pid_max: default: 32768 minimum: 301
[    0.129535] iommu: Default domain type: Translated 
[    0.130232] NetLabel:  unlabeled traffic allowed by default
[    0.136297] PCI: CLS 0 bytes, default 64
[    0.204952] nvme nvme0: 2/0/0 default/read/poll queues
[    0.441117] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[    0.441213] systemd[1]: No hostname configured, using default hostname.
[    0.537894] systemd[1]: Queued start job for default target initrd.target.
[    2.792210] systemd[1]: systemd 252.23-11.amzn2023 running in system mode (+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 -BZIP2 -LZ4 +XZ +ZLIB -ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[   14.643077] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[  936.092259] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:35927)
Kernel Console (dmesg)

receiver-console-output.log (PCI/driver events only)

[  250.790768] pci 0000:00:06.0: BAR 0: assigned [mem 0xc0508000-0xc050bfff]
[  250.791769] ena 0000:00:06.0: enabling device (0000 -> 0002)
[  250.803604] ena 0000:00:06.0: ENA device version: 0.10
[  250.804387] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  250.901584] ena 0000:00:06.0: ENA Large LLQ is disabled
[  250.914617] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:bf:a5:6a:4d:51
[  250.973622] ena 0000:00:06.0 ens6: renamed from eth0
[  251.298261] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  287.007536] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  287.008855] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  325.995788] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:6392)
[  494.116711] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  495.129583] ena 0000:00:06.0: ENA device version: 0.10
[  495.130382] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  495.231617] ena 0000:00:06.0: ENA Large LLQ is disabled
[  495.244203] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:bf:a5:6a:4d:51
[  495.312146] ena 0000:00:06.0 ens6: renamed from eth0
[  495.363983] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  515.036383] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  515.037697] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  546.774473] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:10198)
[  622.307804] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  623.321102] ena 0000:00:06.0: ENA device version: 0.10
[  623.321885] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  623.421351] ena 0000:00:06.0: ENA Large LLQ is disabled
[  623.433433] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:bf:a5:6a:4d:51
[  623.443498] ena 0000:00:06.0 eth0: Local page cache is disabled for less than 16 channels
[ 1214.271196] vfio-pci 0000:00:06.0: Adding to iommu group 0
[ 1214.272533] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[ 1306.699902] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:48051)

sender-console-output.log (PCI/driver events only)

[  250.911946] ena 0000:00:06.0 ens6: Local page cache is disabled for less than 16 channels
[  279.971141] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  279.972752] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  339.845996] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6179)
[  340.665813] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6199)
[  342.475784] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6221)
[  344.085829] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6244)
[  344.925817] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:6304)
[  395.166932] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  396.179821] ena 0000:00:06.0: ENA device version: 0.10
[  396.180608] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  396.281238] ena 0000:00:06.0: ENA Large LLQ is disabled
[  396.293322] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:da:02:0f:64:e5
[  396.304283] ena 0000:00:06.0 eth0: Local page cache is disabled for less than 16 channels
[  707.682350] vfio-pci 0000:00:06.0: Adding to iommu group 0
[  707.683677] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[  891.034048] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:33418)
[  936.092259] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (echo:35927)
[  998.862101] vfio-pci 0000:00:06.0: Removing from iommu group 0
[  999.875512] ena 0000:00:06.0: ENA device version: 0.10
[  999.876324] ena 0000:00:06.0: ENA controller version: 0.0.1 implementation version 1
[  999.977194] ena 0000:00:06.0: ENA Large LLQ is disabled
[  999.989078] ena 0000:00:06.0: Elastic Network Adapter (ENA) found at mem c0508000, mac addr 02:da:02:0f:64:e5
[  999.999485] ena 0000:00:06.0 eth0: Local page cache is disabled for less than 16 channels
[ 1118.176374] vfio-pci 0000:00:06.0: Adding to iommu group 0
[ 1118.177897] vfio-pci 0000:00:06.0: Adding kernel taint for vfio-noiommu group on device
[ 1322.027358] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:56943)
[ 1322.886960] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:57209)
[ 1324.706709] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:57327)
[ 1326.526783] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (tokio-rt-worker:57417)

@gspivey
gspivey merged commit 7c9e3d7 into main Apr 14, 2026
5 checks passed
@gspivey
gspivey deleted the claude/synthetic-udp-perf-test-Wef0p branch April 14, 2026 04:01
gspivey pushed a commit that referenced this pull request Jun 9, 2026
Append GitHub Actions performance test results (Run 27190137350) to
docs/perf-test-log.md. No regressions: native-dpdk 0% drop at 350K PPS
for 64B/512B/1400B packets.

Mark ROADMAP item #11 (dpdk-stdlib-quic: Benchmark binary) as complete
with PR #75.
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.

2 participants