mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-10-26 14:10:59 +01:00
MINOR: quic: rename max Tx mem setting
QUIC global memory can be limited across the entire process via a global tune setting. Previously, this setting used to misleading "frontend" prefix. As this is applied as a sum between all QUIC connections, both from frontend and backend sides, remove the prefix. The new option name is "tune.quic.mem.tx-max". The older option name is deprecated and will be removed in 3.5.
This commit is contained in:
parent
9bfe9b9e21
commit
d248c5bd21
@ -1909,11 +1909,12 @@ The following keywords are supported in the "global" section :
|
||||
- tune.quic.frontend.max-data-size
|
||||
- tune.quic.frontend.max-idle-timeout
|
||||
- tune.quic.frontend.max-streams-bidi
|
||||
- tune.quic.frontend.max-tx-mem
|
||||
- tune.quic.frontend.max-tx-mem (deprecated)
|
||||
- tune.quic.frontend.stream-data-ratio
|
||||
- tune.quic.frontend.default-max-window-size
|
||||
- tune.quic.listen
|
||||
- tune.quic.max-frame-loss (deprecated)
|
||||
- tune.quic.mem.tx-max
|
||||
- tune.quic.reorder-ratio (deprecated)
|
||||
- tune.quic.retry-threshold
|
||||
- tune.quic.socket-owner
|
||||
@ -4849,14 +4850,6 @@ tune.quic.frontend.max-streams-bidi <number>
|
||||
See also: "tune.quic.frontend.max-data-size",
|
||||
"tune.quic.frontend.stream-data-ratio"
|
||||
|
||||
tune.quic.frontend.max-tx-mem <size>
|
||||
Sets the maximum amount of memory usable by QUIC stack at the transport layer
|
||||
for emission. This serves both as a limit of in flight bytes and multiplexer
|
||||
output buffers. Note that to prevent threads contention this limit is not
|
||||
strictly enforced so it can be exceeded on some occasions. Also, each
|
||||
connection will always be able to use a window of at least 2 datagrams, so a
|
||||
proper maxconn should be used in conjunction.
|
||||
|
||||
tune.quic.frontend.stream-data-ratio <0..100, in percent>
|
||||
This setting allows to configure the hard limit of the number of data bytes
|
||||
in flight over each stream. It is expressed as a percentage relative to
|
||||
@ -4900,6 +4893,19 @@ tune.quic.listen { on | off }
|
||||
|
||||
See also "quic_enabled" sample fetch.
|
||||
|
||||
tune.quic.mem.tx-max <size>
|
||||
Sets the maximum amount of memory usable by QUIC stack at the transport layer
|
||||
for emission. This serves both as a limit of in flight bytes and multiplexer
|
||||
output buffers. Note that to prevent threads contention this limit is not
|
||||
strictly enforced so it can be exceeded on some occasions. Also, each
|
||||
connection will always be able to use a window of at least 2 datagrams, so a
|
||||
proper maxconn should be used in conjunction.
|
||||
|
||||
tune.quic.frontend.max-tx-mem <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.retry-threshold <number>
|
||||
Dynamically enables the Retry feature for all the configured QUIC listeners
|
||||
as soon as this number of half open connections is reached. A half open
|
||||
|
||||
@ -219,7 +219,6 @@ struct global {
|
||||
unsigned int quic_frontend_max_idle_timeout;
|
||||
unsigned int quic_frontend_max_data;
|
||||
unsigned int quic_frontend_max_streams_bidi;
|
||||
uint64_t quic_frontend_max_tx_mem;
|
||||
size_t quic_frontend_max_window_size;
|
||||
unsigned int quic_frontend_stream_data_ratio;
|
||||
unsigned int quic_retry_threshold;
|
||||
|
||||
@ -39,6 +39,7 @@ struct quic_tune {
|
||||
uint fb_opts; /* QUIC_TUNE_FB_* options shared by both side */
|
||||
} be;
|
||||
|
||||
uint64_t mem_tx_max;
|
||||
uint options;
|
||||
};
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ struct quic_tune quic_tune = {
|
||||
.cc_reorder_ratio = QUIC_DFLT_CC_REORDER_RATIO,
|
||||
.fb_opts = QUIC_TUNE_FB_TX_PACING|QUIC_TUNE_FB_TX_UDP_GSO,
|
||||
},
|
||||
.mem_tx_max = QUIC_MAX_TX_MEM,
|
||||
};
|
||||
|
||||
static int bind_parse_quic_force_retry(char **args, int cur_arg, struct proxy *px, struct bind_conf *conf, char **err)
|
||||
@ -309,7 +310,18 @@ static int cfg_parse_quic_tune_setting(char **args, int section_type,
|
||||
}
|
||||
|
||||
suffix = args[0] + prefix_len;
|
||||
if (strcmp(suffix, "be.cc.cubic-min-losses") == 0 ||
|
||||
if (strcmp(suffix, "mem.tx-max") == 0) {
|
||||
ullong mem_max;
|
||||
|
||||
if ((errptr = parse_size_err(args[1], &mem_max))) {
|
||||
memprintf(err, "'%s': unexpected character '%c' in size argument '%s'.",
|
||||
args[0], *errptr, args[1]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
quic_tune.mem_tx_max = mem_max;
|
||||
}
|
||||
else if (strcmp(suffix, "be.cc.cubic-min-losses") == 0 ||
|
||||
strcmp(suffix, "fe.cc.cubic-min-losses") == 0) {
|
||||
uint *ptr = (suffix[0] == 'b') ? &quic_tune.be.cc_cubic_min_losses :
|
||||
&quic_tune.fe.cc_cubic_min_losses;
|
||||
@ -344,17 +356,6 @@ static int cfg_parse_quic_tune_setting(char **args, int section_type,
|
||||
}
|
||||
else if (strcmp(suffix, "frontend.max-streams-bidi") == 0)
|
||||
global.tune.quic_frontend_max_streams_bidi = arg;
|
||||
else if (strcmp(suffix, "frontend.max-tx-mem") == 0) {
|
||||
ullong max_mem;
|
||||
|
||||
if ((errptr = parse_size_err(args[1], &max_mem))) {
|
||||
memprintf(err, "'%s': unexpected character '%c' in size argument '%s'.",
|
||||
args[0], *errptr, args[1]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
global.tune.quic_frontend_max_tx_mem = max_mem;
|
||||
}
|
||||
else if (strcmp(suffix, "frontend.default-max-window-size") == 0) {
|
||||
unsigned long cwnd;
|
||||
char *end_opt;
|
||||
@ -392,6 +393,21 @@ static int cfg_parse_quic_tune_setting(char **args, int section_type,
|
||||
quic_tune.fe.sec_glitches_threshold = arg;
|
||||
ret = 1;
|
||||
}
|
||||
else if (strcmp(suffix, "frontend.max-tx-mem") == 0) {
|
||||
ullong max_mem;
|
||||
|
||||
memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
|
||||
"Please use the newer keyword syntax 'tune.quic.mem.tx-max'.", args[0]);
|
||||
|
||||
if ((errptr = parse_size_err(args[1], &max_mem))) {
|
||||
memprintf(err, "'%s': unexpected character '%c' in size argument '%s'.",
|
||||
args[0], *errptr, args[1]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
quic_tune.mem_tx_max = max_mem;
|
||||
ret = 1;
|
||||
}
|
||||
else if (strcmp(suffix, "max-frame-loss") == 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.cc.max-frame-loss'.", args[0]);
|
||||
@ -527,11 +543,11 @@ static int cfg_parse_quic_tune_on_off(char **args, int section_type, struct prox
|
||||
|
||||
static struct cfg_kw_list cfg_kws = {ILH, {
|
||||
{ CFG_GLOBAL, "tune.quic.listen", cfg_parse_quic_tune_on_off },
|
||||
{ CFG_GLOBAL, "tune.quic.mem.tx-max", cfg_parse_quic_tune_setting },
|
||||
{ CFG_GLOBAL, "tune.quic.socket-owner", cfg_parse_quic_tune_socket_owner },
|
||||
{ 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.max-idle-timeout", cfg_parse_quic_time },
|
||||
{ CFG_GLOBAL, "tune.quic.frontend.max-tx-mem", 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.retry-threshold", cfg_parse_quic_tune_setting },
|
||||
@ -559,6 +575,7 @@ static struct cfg_kw_list cfg_kws = {ILH, {
|
||||
{ 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.glitches-threshold", cfg_parse_quic_tune_setting },
|
||||
{ CFG_GLOBAL, "tune.quic.frontend.max-tx-mem", 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 },
|
||||
|
||||
|
||||
@ -203,7 +203,6 @@ struct global global = {
|
||||
.quic_frontend_max_idle_timeout = QUIC_TP_DFLT_FRONT_MAX_IDLE_TIMEOUT,
|
||||
.quic_frontend_max_data = 0,
|
||||
.quic_frontend_max_streams_bidi = QUIC_TP_DFLT_FRONT_MAX_STREAMS_BIDI,
|
||||
.quic_frontend_max_tx_mem = QUIC_MAX_TX_MEM,
|
||||
.quic_frontend_max_window_size = QUIC_DFLT_MAX_WINDOW_SIZE,
|
||||
.quic_frontend_stream_data_ratio = QUIC_DFLT_FRONT_STREAM_DATA_RATIO,
|
||||
.quic_retry_threshold = QUIC_DFLT_RETRY_THRESHOLD,
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
#include <haproxy/proto_quic.h>
|
||||
#include <haproxy/quic_cc.h>
|
||||
#include <haproxy/quic_pacing.h>
|
||||
#include <haproxy/quic_tune.h>
|
||||
#include <haproxy/thread.h>
|
||||
|
||||
struct quic_cc_algo *default_quic_cc_algo = &quic_cc_algo_cubic;
|
||||
@ -85,11 +86,11 @@ static int quic_cc_max_win_ratio(void)
|
||||
uint64_t tot, free = 0;
|
||||
int ratio = 100;
|
||||
|
||||
if (global.tune.quic_frontend_max_tx_mem) {
|
||||
if (quic_tune.mem_tx_max) {
|
||||
tot = cshared_read(&quic_mem_diff);
|
||||
if (global.tune.quic_frontend_max_tx_mem > tot)
|
||||
free = global.tune.quic_frontend_max_tx_mem - tot;
|
||||
ratio = free * 100 / global.tune.quic_frontend_max_tx_mem;
|
||||
if (quic_tune.mem_tx_max > tot)
|
||||
free = quic_tune.mem_tx_max - tot;
|
||||
ratio = free * 100 / quic_tune.mem_tx_max;
|
||||
}
|
||||
|
||||
return ratio;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user