- tune.pt.zero-copy-forwarding
- tune.quic.cc-hystart
- tune.quic.disable-udp-gso
- - tune.quic.frontend.conn-tx-buffers.limit
- tune.quic.frontend.glitches-threshold
- tune.quic.frontend.max-idle-timeout
- tune.quic.frontend.max-streams-bidi
transfer. It may be useful to disable it on developers suggestion when
suspecting an issue on emission.
-tune.quic.frontend.conn-tx-buffers.limit <number>
- This settings defines the maximum number of buffers allocated for a QUIC
- connection on data emission. By default, it is set to 30. QUIC buffers are
- drained on ACK reception. This setting has a direct impact on the throughput
- and memory consumption and can be adjusted according to an estimated round
- time-trip. Each buffer is tune.bufsize.
-
tune.quic.frontend.glitches-threshold <number>
Sets the threshold for the number of glitches on a frontend connection, where
that connection will automatically be killed. This allows to automatically
tune.quic.frontend.max-window-size <size>
Sets the default maximum window size for the congestion controller of a
single QUIC connection. The value must be written as an integer with an
- optional suffix 'k', 'm' or 'g'. It must be between 10k and 4g. Alternatively,
- the special value 0 can be used to automatically derive the value from
- "quic.frontend.conn-tx-buffers.limit".
+ optional suffix 'k', 'm' or 'g'. It must be between 10k and 4g.
+
+ QUIC multiplexer also uses the current congestion window size to determine if
+ it can allocate new stream buffers on data emission. As such, the maximum
+ congestion window size also serves as a limit on this allocator.
- The default value is 0.
+ The default value is 480k.
See also the "quic-cc-algo" bind option.
}
/* Parse any tune.quic.* setting with strictly positive integer values.
- * Return -1 on alert, or 0 if succeeded.
+ *
+ * Returns 0 on success, >0 on warning, <0 on fatal error.
*/
static int cfg_parse_quic_tune_setting(char **args, int section_type,
struct proxy *curpx,
}
suffix = args[0] + prefix_len;
- if (strcmp(suffix, "frontend.conn-tx-buffers.limit") == 0)
- global.tune.quic_streams_buf = arg;
+ if (strcmp(suffix, "frontend.conn-tx-buffers.limit") == 0) {
+ memprintf(err, "'%s' keyword is now obsolote and has no effect. "
+ "Use 'tune.quic.frontend.max-window-size' to limit Tx buffer allocation per connection.", args[0]);
+ return 1;
+ }
else if (strcmp(suffix, "frontend.glitches-threshold") == 0)
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-window-size") == 0) {
+ unsigned long cwnd;
+ char *end_opt;
+
+ cwnd = parse_window_size(args[0], args[1], &end_opt, err);
+ if (!cwnd)
+ return -1;
+ if (*end_opt != '\0') {
+ memprintf(err, "'%s' : expects an integer value with an optional suffix 'k', 'm' or 'g'", args[0]);
+ return -1;
+ }
+
+ global.tune.quic_frontend_max_window_size = cwnd;
+ }
else if (strcmp(suffix, "max-frame-loss") == 0)
global.tune.quic_max_frame_loss = arg;
else if (strcmp(suffix, "reorder-ratio") == 0) {
return 0;
}
-/* Parse any tune.quic.* setting accepting any integer values.
- * Return -1 on alert, or 0 if succeeded.
- */
-static int cfg_parse_quic_tune_setting1(char **args, int section_type,
- struct proxy *curpx,
- const struct proxy *defpx,
- const char *file, int line, char **err)
-{
- int prefix_len = strlen("tune.quic.");
- const char *suffix;
-
- if (too_many_args(1, args, err, NULL))
- return -1;
-
- suffix = args[0] + prefix_len;
- if (strcmp(suffix, "frontend.max-window-size") == 0) {
- unsigned long cwnd;
- char *end_opt;
-
- if (strcmp(args[1], "0") == 0) {
- /* 0 is a special value to set the limit based on quic_streams_buf */
- cwnd = 0;
- }
- else {
- cwnd = parse_window_size(args[0], args[1], &end_opt, err);
- if (!cwnd)
- return -1;
- if (*end_opt != '\0') {
- memprintf(err, "'%s' : expects an integer value with an optional suffix 'k', 'm' or 'g'", args[0]);
- return -1;
- }
- }
- global.tune.quic_frontend_max_window_size = cwnd;
- }
- else {
- memprintf(err, "'%s' keyword not unhandled (please report this bug).", args[0]);
- return -1;
- }
-
- return 0;
-}
-
static int cfg_parse_quic_tune_setting0(char **args, int section_type,
struct proxy *curpx,
const struct proxy *defpx,
{ 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-window-size", cfg_parse_quic_tune_setting1 },
+ { 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 },
{ CFG_GLOBAL, "tune.quic.retry-threshold", cfg_parse_quic_tune_setting },