From: MathiasRaoul Date: Fri, 6 Dec 2019 15:38:56 +0000 (+0000) Subject: quic: add more detailed statistics X-Git-Tag: v20.05-rc0~205 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=1802fcc5f1c06b78b02d5c0f1a415e0976fa14c3 quic: add more detailed statistics Type: feature Change-Id: I3df7b054ec08c7b307413d24468fc3df6a5aacc3 Signed-off-by: MathiasRaoul --- diff --git a/src/plugins/quic/quic.c b/src/plugins/quic/quic.c index 54a2d9019ba..0a70dd2e02a 100644 --- a/src/plugins/quic/quic.c +++ b/src/plugins/quic/quic.c @@ -549,6 +549,7 @@ quic_on_stream_destroy (quicly_stream_t * stream, int err) stream_session->session_state = SESSION_STATE_CLOSED; session_transport_delete_notify (&sctx->connection); + quic_increment_counter (QUIC_ERROR_CLOSED_STREAM, 1); quic_ctx_free (sctx); clib_mem_free (stream->data); } @@ -1017,6 +1018,8 @@ quic_connect_stream (session_t * quic_session, u32 opaque) QUIC_DBG (2, "Stream open failed with %d", rv); return -1; } + quic_increment_counter (QUIC_ERROR_OPENED_STREAM, 1); + sctx->stream = stream; QUIC_DBG (2, "Opened stream %d, creating session", stream->stream_id); @@ -1053,6 +1056,7 @@ quic_connect_stream (session_t * quic_session, u32 opaque) if (app_worker_connect_notify (app_wrk, stream_session, opaque)) { QUIC_ERR ("failed to notify app"); + quic_increment_counter (QUIC_ERROR_CLOSED_STREAM, 1); quicly_reset_stream (stream, QUIC_APP_CONNECT_NOTIFY_ERROR); return -1; } @@ -1157,6 +1161,8 @@ quic_proto_on_close (u32 ctx_index, u32 thread_index) quicly_conn_t *conn = ctx->conn; /* Start connection closing. Keep sending packets until quicly_send returns QUICLY_ERROR_FREE_CONNECTION */ + + quic_increment_counter (QUIC_ERROR_CLOSED_CONNECTION, 1); quicly_close (conn, QUIC_APP_ERROR_CLOSE_NOTIFY, "Closed by peer"); /* This also causes all streams to be closed (and the cb called) */ quic_send_packets (ctx); @@ -2319,12 +2325,67 @@ quic_format_ctx_stat (u8 * s, va_list * args) return s; } +u64 +quic_get_counter_value (u32 event_code) +{ + vlib_node_t *n; + vlib_main_t *vm; + vlib_error_main_t *em; + + u32 code, i; + u64 c, sum = 0; + int index = 0; + + vm = vlib_get_main (); + em = &vm->error_main; + n = vlib_get_node (vm, quic_input_node.index); + code = event_code; + /* *INDENT-OFF* */ + foreach_vlib_main(({ + em = &this_vlib_main->error_main; + i = n->error_heap_index + code; + c = em->counters[i]; + + if (i < vec_len (em->counters_last_clear)) + c -= em->counters_last_clear[i]; + sum += c; + index++; + })); + /* *INDENT-ON* */ + return sum; +} + static clib_error_t * quic_plugin_showstats_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { quic_main_t *qm = &quic_main; + + vlib_cli_output (vm, "\n-------- Connections --------\n"); + vlib_cli_output (vm, "%=20s%10Ld%=20s%10Ld", "Opened:", + quic_get_counter_value (QUIC_ERROR_OPENED_CONNECTION), + "Closed:", + quic_get_counter_value (QUIC_ERROR_CLOSED_CONNECTION)); + + vlib_cli_output (vm, "\n---------- Streams ----------\n"); + vlib_cli_output (vm, "%=20s%10Ld%=20s%10Ld", "Opened:", + quic_get_counter_value (QUIC_ERROR_OPENED_STREAM), + "Closed:", + quic_get_counter_value (QUIC_ERROR_CLOSED_STREAM)); + + vlib_cli_output (vm, "\n--------- RX Packets ---------\n"); + vlib_cli_output (vm, "%=20s%10Ld", "Total:", + quic_get_counter_value (QUIC_ERROR_RX_PACKETS)); + vlib_cli_output (vm, "%=20s%10Ld", "0RTT :", + quic_get_counter_value (QUIC_ERROR_ZERO_RTT_RX_PACKETS)); + vlib_cli_output (vm, "%=20s%10Ld", "1RTT :", + quic_get_counter_value (QUIC_ERROR_ONE_RTT_RX_PACKETS)); + + vlib_cli_output (vm, "\n-------- TX Packets --------\n"); + vlib_cli_output (vm, "%=20s%10Ld", "Total:", + quic_get_counter_value (QUIC_ERROR_TX_PACKETS)); + quic_ctx_t *ctx = NULL; u32 num_workers = vlib_num_workers (); diff --git a/src/plugins/quic/quic_error.def b/src/plugins/quic/quic_error.def index ecfcd677b46..2d2a5d6c8b2 100644 --- a/src/plugins/quic/quic_error.def +++ b/src/plugins/quic/quic_error.def @@ -18,5 +18,11 @@ quic_error (NONE, "no error") quic_error (TX_PACKETS, "quic TX packets") quic_error (RX_PACKETS, "quic RX packets") +quic_error (OPENED_STREAM, "quic opened streams number") +quic_error (CLOSED_STREAM, "quic closed streams number") +quic_error (OPENED_CONNECTION, "quic opened connections number") +quic_error (CLOSED_CONNECTION, "quic closed connections number") +quic_error (ZERO_RTT_RX_PACKETS, "0RTT RX packets number") +quic_error (ONE_RTT_RX_PACKETS, "1RTT RX packets number") quic_error (PACKET_DROP, "quic packet drops")