From 42e69dbdba50fa30ec82f5070dc5f35cc79db172 Mon Sep 17 00:00:00 2001 From: Dave Wallace Date: Tue, 20 May 2025 21:45:46 -0400 Subject: [PATCH] quic: move ctx_pool into quic_worker_ctx_t struct - Also, update MAINTAINERS file to include quicly engine plugin Type: refactor Change-Id: I8181df05b08cbd6296599982256d050c63f53b9b Signed-off-by: Dave Wallace --- MAINTAINERS | 1 + src/plugins/quic/quic.c | 25 +++++++++++++++---------- src/plugins/quic/quic.h | 11 ++++++----- src/plugins/quic_quicly/quic_quicly.c | 7 ++++--- src/plugins/quic_quicly/quic_quicly.h | 4 ++-- 5 files changed, 28 insertions(+), 20 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 124a197a73e..01fc7b1bff5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -672,6 +672,7 @@ M: Dave Wallace M: Florin Coras Y: src/plugins/quic/FEATURE.yaml F: src/plugins/quic/ +F: src/plugins/quic_quicly/ Plugin - snort plugin I: snort diff --git a/src/plugins/quic/quic.c b/src/plugins/quic/quic.c index 355ed730dba..1daf78b58f3 100644 --- a/src/plugins/quic/quic.c +++ b/src/plugins/quic/quic.c @@ -142,7 +142,8 @@ done: static_always_inline quic_ctx_t * quic_ctx_get (u32 ctx_index, clib_thread_index_t thread_index) { - return pool_elt_at_index (quic_main.ctx_pool[thread_index], ctx_index); + return pool_elt_at_index ( + quic_wrk_ctx_get (&quic_main, thread_index)->ctx_pool, ctx_index); } /* Transport proto functions */ @@ -886,8 +887,6 @@ quic_init (vlib_main_t * vm) return clib_error_return (0, "failed to attach quic app"); } - vec_validate (qm->ctx_pool, qm->num_threads - 1); - qm->app_index = a->app_index; transport_register_protocol (TRANSPORT_PROTO_QUIC, &quic_proto, @@ -903,22 +902,28 @@ static void quic_engine_init () { quic_main_t *qm = &quic_main; + quic_worker_ctx_t *wrk_ctx; + quic_ctx_t *ctx; crypto_context_t *crctx; int i; vec_validate (quic_main.wrk_ctx, qm->num_threads - 1); - vec_validate (quic_main.ctx_pool, qm->num_threads - 1); QUIC_DBG (1, "Initializing quic engine to %s", quic_engine_type_str (qm->engine_type)); for (i = 0; i < qm->num_threads; i++) { - pool_get_aligned_safe (quic_wrk_ctx_get (qm, i)->crypto_ctx_pool, crctx, + wrk_ctx = quic_wrk_ctx_get (qm, i); + pool_get_aligned_safe (wrk_ctx->crypto_ctx_pool, crctx, CLIB_CACHE_LINE_BYTES); - pool_program_safe_realloc ( - (void **) &quic_wrk_ctx_get (qm, i)->crypto_ctx_pool, - QUIC_CRYPTO_CTX_POOL_PER_THREAD_SIZE, CLIB_CACHE_LINE_BYTES); + pool_program_safe_realloc ((void **) &wrk_ctx->crypto_ctx_pool, + QUIC_CRYPTO_CTX_POOL_PER_THREAD_SIZE, + CLIB_CACHE_LINE_BYTES); + pool_get_aligned_safe (wrk_ctx->ctx_pool, ctx, CLIB_CACHE_LINE_BYTES); + pool_program_safe_realloc ((void **) &wrk_ctx->ctx_pool, + QUIC_CTX_POOL_PER_THREAD_SIZE, + CLIB_CACHE_LINE_BYTES); } quic_eng_engine_init (qm); @@ -1039,7 +1044,7 @@ quic_show_aggregated_stats (vlib_main_t * vm) clib_memset (&agg_stats, 0, sizeof (agg_stats)); for (i = 0; i < num_workers + 1; i++) { - pool_foreach (ctx, quic_main.ctx_pool[i]) + pool_foreach (ctx, quic_main.wrk_ctx[i].ctx_pool) { if (quic_ctx_is_conn (ctx) && ctx->conn) { @@ -1181,7 +1186,7 @@ quic_show_connections_command_fn (vlib_main_t *vm, unformat_input_t *input, for (int i = 0; i < num_workers + 1; i++) { - pool_foreach (ctx, quic_main.ctx_pool[i]) + pool_foreach (ctx, quic_main.wrk_ctx[i].ctx_pool) { if (quic_ctx_is_stream (ctx) && show_stream) vlib_cli_output (vm, "%U", quic_format_stream_ctx, ctx); diff --git a/src/plugins/quic/quic.h b/src/plugins/quic/quic.h index 8f5b25085c5..40c0bc0c53c 100644 --- a/src/plugins/quic/quic.h +++ b/src/plugins/quic/quic.h @@ -40,6 +40,7 @@ #define QUIC_DECRYPT_PACKET_ERROR 2 #define DEFAULT_MAX_PACKETS_PER_KEY 16777216 +#define QUIC_CTX_POOL_PER_THREAD_SIZE 256 #define QUIC_CRYPTO_CTX_POOL_PER_THREAD_SIZE 256 #if QUIC_DEBUG @@ -227,6 +228,7 @@ typedef struct quic_worker_ctx_ CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); int64_t time_now; tw_timer_wheel_1t_3w_1024sl_ov_t timer_wheel; + quic_ctx_t *ctx_pool; crypto_context_t *crypto_ctx_pool; } quic_worker_ctx_t; @@ -234,7 +236,6 @@ typedef struct quic_main_ { vlib_node_registration_t *quic_input_node; u32 app_index; - quic_ctx_t **ctx_pool; quic_worker_ctx_t *wrk_ctx; u8 default_crypto_engine; /**< Used if you do connect with CRYPTO_ENGINE_NONE @@ -264,15 +265,15 @@ quic_ctx_alloc (quic_main_t *qm, clib_thread_index_t thread_index) { quic_ctx_t *ctx; - pool_get_aligned_safe (qm->ctx_pool[thread_index], ctx, + pool_get_aligned_safe (qm->wrk_ctx[thread_index].ctx_pool, ctx, CLIB_CACHE_LINE_BYTES); clib_memset (ctx, 0, sizeof (quic_ctx_t)); ctx->c_thread_index = thread_index; ctx->timer_handle = QUIC_TIMER_HANDLE_INVALID; QUIC_DBG (3, "Allocated quic_ctx %u on thread %u", - ctx - qm->ctx_pool[thread_index], thread_index); - return ctx - qm->ctx_pool[thread_index]; + ctx - qm->wrk_ctx[thread_index].ctx_pool, thread_index); + return ctx - qm->wrk_ctx[thread_index].ctx_pool; } static_always_inline void @@ -283,7 +284,7 @@ quic_ctx_free (quic_main_t *qm, quic_ctx_t *ctx) QUIC_ASSERT (ctx->timer_handle == QUIC_TIMER_HANDLE_INVALID); if (CLIB_DEBUG) clib_memset (ctx, 0xfb, sizeof (*ctx)); - pool_put (qm->ctx_pool[thread_index], ctx); + pool_put (qm->wrk_ctx[thread_index].ctx_pool, ctx); } static_always_inline void diff --git a/src/plugins/quic_quicly/quic_quicly.c b/src/plugins/quic_quicly/quic_quicly.c index 1eb0b7d1aaa..e621b0445e0 100644 --- a/src/plugins/quic_quicly/quic_quicly.c +++ b/src/plugins/quic_quicly/quic_quicly.c @@ -710,11 +710,12 @@ static_always_inline quic_ctx_t * quic_quicly_get_quic_ctx_if_valid (u32 ctx_index, clib_thread_index_t thread_index) { - quic_main_t *qm = quic_quicly_main.qm; + quic_worker_ctx_t *wrk_ctx = + quic_wrk_ctx_get (quic_quicly_main.qm, thread_index); - if (pool_is_free_index (qm->ctx_pool[thread_index], ctx_index)) + if (pool_is_free_index (wrk_ctx->ctx_pool, ctx_index)) return 0; - return pool_elt_at_index (qm->ctx_pool[thread_index], ctx_index); + return pool_elt_at_index (wrk_ctx->ctx_pool, ctx_index); } static void diff --git a/src/plugins/quic_quicly/quic_quicly.h b/src/plugins/quic_quicly/quic_quicly.h index 5b739c9def2..516e542064c 100644 --- a/src/plugins/quic_quicly/quic_quicly.h +++ b/src/plugins/quic_quicly/quic_quicly.h @@ -74,8 +74,8 @@ extern void quic_quicly_check_quic_session_connected (quic_ctx_t *ctx); static_always_inline quic_ctx_t * quic_quicly_get_quic_ctx (u32 ctx_index, u32 thread_index) { - return pool_elt_at_index (quic_quicly_main.qm->ctx_pool[thread_index], - ctx_index); + return pool_elt_at_index ( + quic_wrk_ctx_get (quic_quicly_main.qm, thread_index)->ctx_pool, ctx_index); } static_always_inline quic_session_connected_t -- 2.16.6