diff --git a/book/api/metrics-generated.md b/book/api/metrics-generated.md index 81c8ebe9e68..23885d86449 100644 --- a/book/api/metrics-generated.md +++ b/book/api/metrics-generated.md @@ -125,6 +125,7 @@ | quic_​pkt_​oversz | `counter` | Number of QUIC packets dropped due to being too large. | | quic_​pkt_​verneg | `counter` | Number of QUIC version negotiation packets received. | | quic_​retry_​sent | `counter` | Number of QUIC Retry packets sent. | +| quic_​pkt_​retransmissions | `counter` | Number of QUIC packets that retransmitted. | ## Bundle Tile | Metric | Type | Description | diff --git a/src/disco/metrics/generated/fd_metrics_quic.c b/src/disco/metrics/generated/fd_metrics_quic.c index eba4df8a6ce..cd0fe61dbd2 100644 --- a/src/disco/metrics/generated/fd_metrics_quic.c +++ b/src/disco/metrics/generated/fd_metrics_quic.c @@ -78,4 +78,5 @@ const fd_metrics_meta_t FD_METRICS_QUIC[FD_METRICS_QUIC_TOTAL] = { DECLARE_METRIC( QUIC_PKT_OVERSZ, COUNTER ), DECLARE_METRIC( QUIC_PKT_VERNEG, COUNTER ), DECLARE_METRIC( QUIC_RETRY_SENT, COUNTER ), + DECLARE_METRIC( QUIC_PKT_RETRANSMISSIONS, COUNTER ), }; diff --git a/src/disco/metrics/generated/fd_metrics_quic.h b/src/disco/metrics/generated/fd_metrics_quic.h index 37107cef90c..987520b71bf 100644 --- a/src/disco/metrics/generated/fd_metrics_quic.h +++ b/src/disco/metrics/generated/fd_metrics_quic.h @@ -313,5 +313,11 @@ #define FD_METRICS_COUNTER_QUIC_RETRY_SENT_DESC "Number of QUIC Retry packets sent." #define FD_METRICS_COUNTER_QUIC_RETRY_SENT_CVT (FD_METRICS_CONVERTER_NONE) -#define FD_METRICS_QUIC_TOTAL (76UL) +#define FD_METRICS_COUNTER_QUIC_PKT_RETRANSMISSIONS_OFF (124UL) +#define FD_METRICS_COUNTER_QUIC_PKT_RETRANSMISSIONS_NAME "quic_pkt_retransmissions" +#define FD_METRICS_COUNTER_QUIC_PKT_RETRANSMISSIONS_TYPE (FD_METRICS_TYPE_COUNTER) +#define FD_METRICS_COUNTER_QUIC_PKT_RETRANSMISSIONS_DESC "Number of QUIC packets that retransmitted." +#define FD_METRICS_COUNTER_QUIC_PKT_RETRANSMISSIONS_CVT (FD_METRICS_CONVERTER_NONE) + +#define FD_METRICS_QUIC_TOTAL (77UL) extern const fd_metrics_meta_t FD_METRICS_QUIC[FD_METRICS_QUIC_TOTAL]; diff --git a/src/disco/metrics/metrics.xml b/src/disco/metrics/metrics.xml index aaf73329b32..95420e027be 100644 --- a/src/disco/metrics/metrics.xml +++ b/src/disco/metrics/metrics.xml @@ -176,6 +176,7 @@ metric introduced. + diff --git a/src/disco/quic/fd_quic_tile.c b/src/disco/quic/fd_quic_tile.c index b414540657d..8cc0a92b661 100644 --- a/src/disco/quic/fd_quic_tile.c +++ b/src/disco/quic/fd_quic_tile.c @@ -157,6 +157,7 @@ metrics_write( fd_quic_ctx_t * ctx ) { FD_MCNT_SET( QUIC, PKT_UNDERSZ, ctx->quic->metrics.pkt_undersz_cnt ); FD_MCNT_SET( QUIC, PKT_OVERSZ, ctx->quic->metrics.pkt_oversz_cnt ); FD_MCNT_SET( QUIC, PKT_VERNEG, ctx->quic->metrics.pkt_verneg_cnt ); + FD_MCNT_SET( QUIC, PKT_META_RETRY, ctx->quic->metrics.pkt_meta_retry_cnt ); FD_MCNT_SET( QUIC, HANDSHAKES_CREATED, ctx->quic->metrics.hs_created_cnt ); FD_MCNT_SET( QUIC, HANDSHAKE_ERROR_ALLOC_FAIL, ctx->quic->metrics.hs_err_alloc_fail_cnt ); diff --git a/src/disco/quic/test_quic_metrics.txt b/src/disco/quic/test_quic_metrics.txt index edf2d9bda70..5601c245b8e 100644 --- a/src/disco/quic/test_quic_metrics.txt +++ b/src/disco/quic/test_quic_metrics.txt @@ -236,3 +236,7 @@ quic_pkt_verneg{kind="quic",kind_id="0"} 122 # HELP quic_retry_sent Number of QUIC Retry packets sent. # TYPE quic_retry_sent counter quic_retry_sent{kind="quic",kind_id="0"} 123 + +# HELP quic_pkt_retransmissions Number of QUIC packets that retransmitted. +# TYPE quic_pkt_retransmissions counter +quic_pkt_retransmissions{kind="quic",kind_id="0"} 124 diff --git a/src/waltz/quic/fd_quic.c b/src/waltz/quic/fd_quic.c index 9805a373d55..0e371674bf9 100644 --- a/src/waltz/quic/fd_quic.c +++ b/src/waltz/quic/fd_quic.c @@ -3232,6 +3232,7 @@ fd_quic_gen_handshake_done_frame( fd_quic_conn_t * conn, uchar * payload_end, fd_quic_pkt_meta_t * pkt_meta, ulong now ) { + FD_DTRACE_PROBE_1( quic_gen_handshake_done_frame, conn->our_conn_id ); if( conn->handshake_done_send==0 ) return 0UL; conn->handshake_done_send = 0; if( FD_UNLIKELY( conn->handshake_done_ackd ) ) return 0UL; @@ -3673,6 +3674,7 @@ fd_quic_conn_tx( fd_quic_t * quic, hdr_sz = fd_quic_encode_initial( cur_ptr, cur_sz, &initial ); hdr_len_field = cur_ptr + hdr_sz - 6; /* 2 byte len, 4 byte packet number */ + FD_DTRACE_PROBE_2( quic_encode_initial, initial.src_conn_id, initial.dst_conn_id ); break; } @@ -3694,6 +3696,7 @@ fd_quic_conn_tx( fd_quic_t * quic, hdr_sz = fd_quic_encode_handshake( cur_ptr, cur_sz, &handshake ); hdr_len_field = cur_ptr + hdr_sz - 6; /* 2 byte len, 4 byte packet number */ + FD_DTRACE_PROBE_2( quic_encode_handshake, handshake.src_conn_id, handshake.dst_conn_id ); break; } @@ -3709,6 +3712,7 @@ fd_quic_conn_tx( fd_quic_t * quic, one_rtt.pkt_num = pkt_number; hdr_sz = fd_quic_encode_one_rtt( cur_ptr, cur_sz, &one_rtt ); + FD_DTRACE_PROBE_2( quic_encode_one_rtt, one_rtt.dst_conn_id, one_rtt.pkt_num ); break; } @@ -4514,6 +4518,10 @@ fd_quic_pkt_meta_retry( fd_quic_t * quic, continue; } + quic->metrics.pkt_meta_retry_cnt++; + + FD_DTRACE_PROBE_4( quic_pkt_meta_retry, conn->our_conn_id, pkt_meta->pkt_number, pkt_meta->expiry, pkt_meta->flags); + /* set the data to retry */ uint flags = pkt_meta->flags; if( flags & FD_QUIC_PKT_META_FLAGS_HS_DATA ) { diff --git a/src/waltz/quic/fd_quic.h b/src/waltz/quic/fd_quic.h index 04e9510f0e2..758881495bb 100644 --- a/src/waltz/quic/fd_quic.h +++ b/src/waltz/quic/fd_quic.h @@ -324,6 +324,7 @@ union fd_quic_metrics { ulong pkt_no_conn_cnt; /* number of packets with unknown conn ID (excl. Initial) */ ulong pkt_tx_alloc_fail_cnt; /* number of pkt_meta alloc fails */ ulong pkt_verneg_cnt; /* number of QUIC version negotiation packets or packets with wrong version */ + ulong pkt_meta_retry_cnt; /* number of pkt_meta retries */ /* Frame metrics */ ulong frame_rx_cnt[ 22 ]; /* number of frames received (indexed by implementation-defined IDs) */