]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: define global tune max-burst setting
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 16 Oct 2024 15:46:38 +0000 (17:46 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 31 Oct 2024 09:32:50 +0000 (10:32 +0100)
include/haproxy/global-t.h
src/cfgparse-quic.c
src/haproxy.c
src/quic_tx.c

index dda39705db6ee7377f307895750ddc4227e0cfb0..a969863a9456abebbe34f0bb14a4dbbb571c5a6c 100644 (file)
@@ -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;
index fe4e35682576f4fc63521118a7940ee89a6ea34b..538327c0c975c6a1529cc5824021fe6375416ecb 100644 (file)
@@ -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 },
index 80bb090b36969aa11866a08cf304160ecea9e99c..184264d9ee215f11a4b33e8438d194427f23dae3 100644 (file)
@@ -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,
index e33d74dc368f5853082d2e96fa20ffa9a3512084..fa3511475506a4a00e8b96eb72aff8f46f65281a 100644 (file)
@@ -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);