- tune.quic.max-frame-loss
- tune.quic.retry-threshold
- tune.quic.socket-owner
+ - tune.quic.zero-copy-fwd-send
- tune.rcvbuf.backend
- tune.rcvbuf.client
- tune.rcvbuf.frontend
See also: tune.pt.zero-copy-forwarding,
tune.h1.zero-copy-fwd-recv, tune.h1.zero-copy-fwd-send,
- tune.h2.zero-copy-fwd-send
+ tune.h2.zero-copy-fwd-send, tune.quic.zero-copy-fwd-send
tune.events.max-events-at-once <number>
Sets the number of events that may be processed at once by an asynchronous
is used globally, it will be forced on every listener instance, regardless of
their individual configuration.
+tune.quit.zero-copy-fwd-send { on | off }
+ Enables ('on') of disabled ('off') the zero-copy sends of data for the QUIC
+ multiplexer. It is enabled by default.
+
+ See also: tune.disable-zero-copy-forwarding
+
tune.rcvbuf.backend <number>
tune.rcvbuf.frontend <number>
For the kernel socket receive buffer size on non-connected sockets to this
return 0;
}
+/* config parser for global "tune.quic.zero-copy-fwd-send" */
+static int cfg_parse_quic_zero_copy_fwd_snd(char **args, int section_type, struct proxy *curpx,
+ const struct proxy *defpx, const char *file, int line,
+ char **err)
+{
+ if (too_many_args(1, args, err, NULL))
+ return -1;
+
+ if (strcmp(args[1], "on") == 0)
+ global.tune.no_zero_copy_fwd &= ~NO_ZERO_COPY_FWD_QUIC_SND;
+ else if (strcmp(args[1], "off") == 0)
+ global.tune.no_zero_copy_fwd |= NO_ZERO_COPY_FWD_QUIC_SND;
+ else {
+ memprintf(err, "'%s' expects 'on' or 'off'.", args[0]);
+ return -1;
+ }
+ return 0;
+}
+
static struct cfg_kw_list cfg_kws = {ILH, {
{ CFG_GLOBAL, "tune.quic.socket-owner", cfg_parse_quic_tune_socket_owner },
{ CFG_GLOBAL, "tune.quic.backend.max-idle-timeou", cfg_parse_quic_time },
{ CFG_GLOBAL, "tune.quic.frontend.max-idle-timeout", cfg_parse_quic_time },
{ CFG_GLOBAL, "tune.quic.max-frame-loss", cfg_parse_quic_tune_setting },
{ CFG_GLOBAL, "tune.quic.retry-threshold", cfg_parse_quic_tune_setting },
+ { CFG_GLOBAL, "tune.quic.zero-copy-fwd-send", cfg_parse_quic_zero_copy_fwd_snd },
{ 0, NULL, NULL }
}};
/* stream layer has been detached so no transfer must occur after. */
BUG_ON_HOT(qcs->flags & QC_SF_DETACH);
+ if (global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_QUIC_SND) {
+ qcs->sd->iobuf.flags |= IOBUF_FL_NO_FF;
+ goto end;
+ }
+
if (!qcs->qcc->app_ops->nego_ff || !qcs->qcc->app_ops->done_ff) {
/* Fast forwading is not supported by the QUIC application layer */
qcs->sd->iobuf.flags |= IOBUF_FL_NO_FF;