From: Amaury Denoyelle Date: Wed, 16 Oct 2024 15:46:38 +0000 (+0200) Subject: MINOR: quic: define global tune max-burst setting X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=879dd9f985afeb864a41f43e513581de4098a158;p=thirdparty%2Fhaproxy.git MINOR: quic: define global tune max-burst setting --- diff --git a/include/haproxy/global-t.h b/include/haproxy/global-t.h index dda39705db..a969863a94 100644 --- a/include/haproxy/global-t.h +++ b/include/haproxy/global-t.h @@ -201,6 +201,7 @@ struct global { unsigned int quic_frontend_max_idle_timeout; unsigned int quic_frontend_glitches_threshold; unsigned int quic_frontend_max_streams_bidi; + unsigned int quic_frontend_max_tx_burst; size_t quic_frontend_max_window_size; unsigned int quic_retry_threshold; unsigned int quic_reorder_ratio; diff --git a/src/cfgparse-quic.c b/src/cfgparse-quic.c index fe4e356825..538327c0c9 100644 --- a/src/cfgparse-quic.c +++ b/src/cfgparse-quic.c @@ -273,6 +273,14 @@ static int cfg_parse_quic_tune_setting(char **args, int section_type, global.tune.quic_frontend_glitches_threshold = arg; else if (strcmp(suffix, "frontend.max-streams-bidi") == 0) global.tune.quic_frontend_max_streams_bidi = arg; + else if (strcmp(suffix, "frontend.max-tx-burst") == 0) { + if (arg > 1000) { + memprintf(err, "'%s' cannot be bigger than 1s.", args[0]); + return -1; + } + + global.tune.quic_frontend_max_tx_burst = arg; + } else if (strcmp(suffix, "frontend.max-window-size") == 0) { unsigned long cwnd; char *end_opt; @@ -377,6 +385,7 @@ static struct cfg_kw_list cfg_kws = {ILH, { { CFG_GLOBAL, "tune.quic.frontend.glitches-threshold", cfg_parse_quic_tune_setting }, { CFG_GLOBAL, "tune.quic.frontend.max-streams-bidi", cfg_parse_quic_tune_setting }, { CFG_GLOBAL, "tune.quic.frontend.max-idle-timeout", cfg_parse_quic_time }, + { CFG_GLOBAL, "tune.quic.frontend.max-tx-burst", cfg_parse_quic_tune_setting }, { CFG_GLOBAL, "tune.quic.frontend.max-window-size", cfg_parse_quic_tune_setting }, { CFG_GLOBAL, "tune.quic.max-frame-loss", cfg_parse_quic_tune_setting }, { CFG_GLOBAL, "tune.quic.reorder-ratio", cfg_parse_quic_tune_setting }, diff --git a/src/haproxy.c b/src/haproxy.c index 80bb090b36..184264d9ee 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -204,6 +204,7 @@ struct global global = { .quic_backend_max_idle_timeout = QUIC_TP_DFLT_BACK_MAX_IDLE_TIMEOUT, .quic_frontend_max_idle_timeout = QUIC_TP_DFLT_FRONT_MAX_IDLE_TIMEOUT, .quic_frontend_max_streams_bidi = QUIC_TP_DFLT_FRONT_MAX_STREAMS_BIDI, + .quic_frontend_max_tx_burst = 0, .quic_frontend_max_window_size = QUIC_DFLT_MAX_WINDOW_SIZE, .quic_reorder_ratio = QUIC_DFLT_REORDER_RATIO, .quic_retry_threshold = QUIC_DFLT_RETRY_THRESHOLD, diff --git a/src/quic_tx.c b/src/quic_tx.c index e33d74dc36..fa35114755 100644 --- a/src/quic_tx.c +++ b/src/quic_tx.c @@ -494,8 +494,10 @@ enum quic_tx_err qc_send_mux(struct quic_conn *qc, struct list *frms, qc_send(qc, 0, &send_list, 0); } - if (pacer) - max_dgram = 1; + if (pacer) { + const ullong ns_pkts = quic_pacing_ns_pkt(pacer); + max_dgram = global.tune.quic_frontend_max_tx_burst * 1000000 / (ns_pkts + 1) + 1; + } TRACE_STATE("preparing data (from MUX)", QUIC_EV_CONN_TXPKT, qc); qel_register_send(&send_list, qc->ael, frms);