- tune.quic.be.cc.cubic-min-losses
- tune.quic.be.cc.hystart
- tune.quic.be.cc.max-frame-loss
+ - tune.quic.be.cc.max-win-size
- tune.quic.be.cc.reorder-ratio
- tune.quic.be.max-idle-timeout
- tune.quic.be.sec.glitches-threshold
- tune.quic.fe.cc.cubic-min-losses
- tune.quic.fe.cc.hystart
- tune.quic.fe.cc.max-frame-loss
+ - tune.quic.fe.cc.max-win-size
- tune.quic.fe.cc.reorder-ratio
- tune.quic.fe.max-idle-timeout
- tune.quic.fe.sec.glitches-threshold
- tune.quic.frontend.max-streams-bidi
- tune.quic.frontend.max-tx-mem (deprecated)
- tune.quic.frontend.stream-data-ratio
- - tune.quic.frontend.default-max-window-size
+ - tune.quic.frontend.default-max-window-size (deprecated)
- tune.quic.listen
- tune.quic.max-frame-loss (deprecated)
- tune.quic.mem.tx-max
part of the streamlining process apply on QUIC configuration. If used, this
setting will only be applied on frontend connections.
+tune.quic.be.cc.max-win-size <size>
+tune.quic.fe.cc.max-win-size <size>
+ Sets the default maximum window size for the congestion controller of a
+ single QUIC connection either on frontend or backend side. The value must be
+ written as an integer with an 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 480k.
+
+ See also the "quic-cc-algo" bind option.
+
+tune.quic.frontend.default-max-window-size <size> (deprecated)
+ This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
+ part of the streamlining process apply on QUIC configuration. If used, this
+ setting will only be applied on frontend connections.
+
tune.quic.be.cc.reorder-ratio <0..100, in percent>
tune.quic.fe.cc.reorder-ratio <0..100, in percent>
The ratio applied to the packet reordering threshold calculated. It may
See also: "tune.quic.frontend.max-data-size",
"tune.quic.frontend.max-streams-bidi"
-tune.quic.frontend.default-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.
-
- 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 480k.
-
- See also the "quic-cc-algo" bind option.
-
tune.quic.listen { on | off }
Disable QUIC transport protocol on the frontend side. All the QUIC listeners
will still be created, but they won't listen for incoming datagrams. Hence,
comma. Each argument is optional and can be empty if needed. Here is the
mandatory order of each parameters :
- maximum window size in bytes. It must be greater than 10k and smaller than
- 4g. By default "tune.quic.frontend.default-max-window-size" value is used.
+ 4g. By default "tune.quic.fe.cc.max-win-size" value is used.
Example:
# newreno congestion control algorithm
struct quic_tune quic_tune = {
.fe = {
.cc_max_frame_loss = QUIC_DFLT_CC_MAX_FRAME_LOSS,
+ .cc_max_win_size = QUIC_DFLT_CC_MAX_WIN_SIZE,
.cc_reorder_ratio = QUIC_DFLT_CC_REORDER_RATIO,
.max_idle_timeout = QUIC_DFLT_FE_MAX_IDLE_TIMEOUT,
.sec_retry_threshold = QUIC_DFLT_SEC_RETRY_THRESHOLD,
},
.be = {
.cc_max_frame_loss = QUIC_DFLT_CC_MAX_FRAME_LOSS,
+ .cc_max_win_size = QUIC_DFLT_CC_MAX_WIN_SIZE,
.cc_reorder_ratio = QUIC_DFLT_CC_REORDER_RATIO,
.max_idle_timeout = QUIC_DFLT_BE_MAX_IDLE_TIMEOUT,
.fb_opts = QUIC_TUNE_FB_TX_PACING|QUIC_TUNE_FB_TX_UDP_GSO,
&quic_tune.fe.cc_max_frame_loss;
*ptr = arg;
}
+ else if (strcmp(suffix, "be.cc.max-win-size") == 0 ||
+ strcmp(suffix, "fe.cc.max-win-size") == 0) {
+ size_t *ptr = (suffix[0] == 'b') ? &quic_tune.be.cc_max_win_size :
+ &quic_tune.fe.cc_max_win_size;
+ 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;
+ }
+
+ *ptr = cwnd;
+ }
else if (strcmp(suffix, "be.cc.reorder-ratio") == 0 ||
strcmp(suffix, "fe.cc.reorder-ratio") == 0) {
uint *ptr = (suffix[0] == 'b') ? &quic_tune.be.cc_reorder_ratio :
}
else if (strcmp(suffix, "frontend.max-streams-bidi") == 0)
global.tune.quic_frontend_max_streams_bidi = arg;
- else if (strcmp(suffix, "frontend.default-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, "frontend.stream-data-ratio") == 0) {
if (arg < 1 || arg > 100) {
memprintf(err, "'%s' expects an integer argument between 1 and 100.", args[0]);
quic_tune.fe.cc_cubic_min_losses = arg - 1;
ret = 1;
}
+ else if (strcmp(suffix, "frontend.default-max-window-size") == 0) {
+ unsigned long cwnd;
+ char *end_opt;
+
+ memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
+ "Please use the newer keyword syntax 'tune.quic.fe.cc.max-win-size'.", args[0]);
+
+ 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;
+ }
+
+ quic_tune.fe.cc_max_win_size = cwnd;
+ ret = 1;
+ }
else if (strcmp(suffix, "frontend.glitches-threshold") == 0) {
memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
"Please use the newer keyword syntax 'tune.quic.fe.sec.glitches-threshold'.", args[0]);
{ CFG_GLOBAL, "tune.quic.mem.tx-max", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.frontend.max-data-size", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.frontend.max-streams-bidi", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.frontend.default-max-window-size", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.frontend.stream-data-ratio", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.zero-copy-fwd-send", cfg_parse_quic_tune_on_off },
{ CFG_GLOBAL, "tune.quic.fe.cc.cubic-min-losses", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.fe.cc.hystart", cfg_parse_quic_tune_on_off },
{ CFG_GLOBAL, "tune.quic.fe.cc.max-frame-loss", cfg_parse_quic_tune_setting },
+ { CFG_GLOBAL, "tune.quic.fe.cc.max-win-size", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.fe.cc.reorder-ratio", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.fe.max-idle-timeout", cfg_parse_quic_time },
{ CFG_GLOBAL, "tune.quic.fe.sec.glitches-threshold", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.be.cc.cubic-min-losses", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.be.cc.hystart", cfg_parse_quic_tune_on_off },
{ CFG_GLOBAL, "tune.quic.be.cc.max-frame-loss", cfg_parse_quic_tune_setting },
+ { CFG_GLOBAL, "tune.quic.be.cc.max-win-size", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.be.cc.reorder-ratio", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.be.max-idle-timeout", cfg_parse_quic_time },
{ CFG_GLOBAL, "tune.quic.be.sec.glitches-threshold", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.cc.cubic.min-losses", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.disable-tx-pacing", cfg_parse_quic_tune_setting0 },
{ CFG_GLOBAL, "tune.quic.disable-udp-gso", cfg_parse_quic_tune_setting0 },
+ { CFG_GLOBAL, "tune.quic.frontend.default-max-window-size", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.frontend.glitches-threshold", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.frontend.max-idle-timeout", cfg_parse_quic_time },
{ CFG_GLOBAL, "tune.quic.frontend.max-tx-mem", cfg_parse_quic_tune_setting },