diag(quic-interop): dump first 10 packets fully + add live-driver-flow synth test
Two adds for the multiplex investigation.
(1) inspect-multiplexing.sh: previous histograms aggregate over the
whole run. Add full-frame-array dump of the first 10 packet_sent
AND first 10 packet_received events so we can see whether the
FIRST chunk burst (~13 streams in one packet) or dribbled (1 per).
(2) MultiplexingAioquicTpsTest: synchronous drain test using EXACTLY
the TPs aioquic gave us in the failing run (initial_max_data=1MB,
initial_max_stream_data_bidi_remote=1MB, initial_max_streams_bidi=
128) and ~80-byte HEADERS-frame-sized payloads. PASSES with 7
packets / 9.1 streams per packet — proving the writer's coalescing
is fine under aioquic's flow-control budget. So the bug is NOT in
the writer; it's in the live driver flow that
MultiplexingCoalescingTest doesn't exercise (concurrent send loop
+ parser + real socket).
The first-10 dump from inspect should localize this further:
- if first packet has 13 stream frames → writer burst, bug is
server-side timing or driver-loop scheduling
- if first packet has 1 stream frame → writer producing 1 per call
in production for some condition my synchronous test doesn't
cover
https://claude.ai/code/session_01HcvfQq1ttPV9PkRoJb4nyT
This commit is contained in:
@@ -76,7 +76,19 @@ if [[ -n "$QLOG" ]]; then
|
||||
| sort -n | uniq -c
|
||||
|
||||
echo
|
||||
echo "=============== peer transport_parameters (initial_max_data is the key) ==============="
|
||||
echo "=============== first 10 packet_sent events (full) ==============="
|
||||
# The very first stream-bearing packets reveal whether we burst
|
||||
# the chunk's 64 streams OR dribbled them out one per RTT. Look
|
||||
# at the `frames` array — if it has 13 stream entries, writer
|
||||
# is bursting; if 1, writer is regressed.
|
||||
grep '"name":"transport:packet_sent"' "$QLOG" | head -n 10
|
||||
|
||||
echo
|
||||
echo "=============== first 10 packet_received events (full) ==============="
|
||||
# If we sent N streams in burst, server should respond with N
|
||||
# responses interleaved as it processes them. Spread tells us
|
||||
# server-side serial cost.
|
||||
grep '"name":"transport:packet_received"' "$QLOG" | head -n 10
|
||||
# If initial_max_data is small (e.g. < 1000 bytes), our writer
|
||||
# gets throttled to one stream per packet because connBudget
|
||||
# exhausts after the first stream. Each subsequent stream has to
|
||||
|
||||
Reference in New Issue
Block a user