MINOR: cfg-quic: define tune.quic.conn-buf-limit

Add a new global configuration option to set the limit of buffers per
QUIC connection. By default, this value is set to 30.
This commit is contained in:
Amaury Denoyelle 2022-04-19 18:26:55 +02:00
parent 1b2dba531d
commit 97e84c6c69
5 changed files with 51 additions and 2 deletions

View File

@ -1109,6 +1109,7 @@ The following keywords are supported in the "global" section :
- tune.pipesize - tune.pipesize
- tune.pool-high-fd-ratio - tune.pool-high-fd-ratio
- tune.pool-low-fd-ratio - tune.pool-low-fd-ratio
- tune.quic.conn-buf-limit
- tune.rcvbuf.client - tune.rcvbuf.client
- tune.rcvbuf.server - tune.rcvbuf.server
- tune.recv_enough - tune.recv_enough
@ -2788,6 +2789,16 @@ tune.pool-low-fd-ratio <number>
use before we stop putting connection into the idle pool for reuse. The use before we stop putting connection into the idle pool for reuse. The
default is 20. default is 20.
tune.quic.conn-buf-limit <number>
Warning: QUIC support in HAProxy is currently experimental. Configuration may
change without deprecation in the future.
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.
tune.rcvbuf.client <number> tune.rcvbuf.client <number>
tune.rcvbuf.server <number> tune.rcvbuf.server <number>
Forces the kernel socket receive buffer size on the client or the server side Forces the kernel socket receive buffer size on the client or the server side

View File

@ -154,6 +154,9 @@ struct global {
int pool_low_count; /* max number of opened fd before we stop using new idle connections */ int pool_low_count; /* max number of opened fd before we stop using new idle connections */
int pool_high_count; /* max number of opened fd before we start killing idle connections when creating new connections */ int pool_high_count; /* max number of opened fd before we start killing idle connections when creating new connections */
unsigned short idle_timer; /* how long before an empty buffer is considered idle (ms) */ unsigned short idle_timer; /* how long before an empty buffer is considered idle (ms) */
#ifdef USE_QUIC
unsigned int quic_streams_buf;
#endif /* USE_QUIC */
} tune; } tune;
struct { struct {
char *prefix; /* path prefix of unix bind socket */ char *prefix; /* path prefix of unix bind socket */

View File

@ -1,6 +1,9 @@
#include <haproxy/api.h> #include <haproxy/api.h>
#include <haproxy/cfgparse.h>
#include <haproxy/global-t.h>
#include <haproxy/listener.h> #include <haproxy/listener.h>
#include <haproxy/proxy-t.h> #include <haproxy/proxy-t.h>
#include <haproxy/tools.h>
static int bind_parse_quic_force_retry(char **args, int cur_arg, struct proxy *px, struct bind_conf *conf, char **err) static int bind_parse_quic_force_retry(char **args, int cur_arg, struct proxy *px, struct bind_conf *conf, char **err)
{ {
@ -14,3 +17,33 @@ static struct bind_kw_list bind_kws = { "QUIC", { }, {
}}; }};
INITCALL1(STG_REGISTER, bind_register_keywords, &bind_kws); INITCALL1(STG_REGISTER, bind_register_keywords, &bind_kws);
static int cfg_parse_quic_conn_buf_limit(char **args, int section_type,
struct proxy *curpx,
const struct proxy *defpx,
const char *file, int line, char **err)
{
unsigned int arg = 0;
if (too_many_args(1, args, err, NULL))
return -1;
if (*(args[1]) != 0)
arg = atoi(args[1]);
if (arg < 1) {
memprintf(err, "'%s' expects a positive integer.", args[0]);
return -1;
}
global.tune.quic_streams_buf = arg;
return 0;
}
static struct cfg_kw_list cfg_kws = {ILH, {
{ CFG_GLOBAL, "tune.quic.conn-buf-limit", cfg_parse_quic_conn_buf_limit },
{ 0, NULL, NULL }
}};
INITCALL1(STG_REGISTER, cfg_register_keywords, &cfg_kws);

View File

@ -203,6 +203,9 @@ struct global global = {
#else #else
.idle_timer = 1000, /* 1 second */ .idle_timer = 1000, /* 1 second */
#endif #endif
#ifdef USE_QUIC
.quic_streams_buf = 30,
#endif /* USE_QUIC */
}, },
#ifdef USE_OPENSSL #ifdef USE_OPENSSL
#ifdef DEFAULT_MAXSSLCONN #ifdef DEFAULT_MAXSSLCONN

View File

@ -208,8 +208,7 @@ struct buffer *qc_stream_buf_get(struct qc_stream_desc *stream)
*/ */
static int qc_stream_buf_avail(struct quic_conn *qc) static int qc_stream_buf_avail(struct quic_conn *qc)
{ {
/* TODO use a global tune settings for max */ return qc->stream_buf_count < global.tune.quic_streams_buf;
return qc->stream_buf_count < 30;
} }
/* Allocate a new current buffer for <stream>. The buffer limit count for the /* Allocate a new current buffer for <stream>. The buffer limit count for the