mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 15:47:01 +02:00
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:
parent
1b2dba531d
commit
97e84c6c69
@ -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
|
||||||
|
@ -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 */
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user