MINOR: sample: Add bc_rtt and bc_rttvar

This Patch adds fetch samples for backends round trip time.
This commit is contained in:
Aleksandar Lazic 2023-04-28 11:39:12 +02:00 committed by Willy Tarreau
parent c05d30e9d8
commit 5529c9985e
3 changed files with 87 additions and 0 deletions

View File

@ -19642,6 +19642,22 @@ be_name : string
frontends with responses to check which backend processed the request. It can
also be used in a tcp-check or an http-check ruleset.
bc_rtt(<unit>) : integer
Returns the Round Trip Time (RTT) measured by the kernel for the backend
connection. <unit> is facultative, by default the unit is milliseconds. <unit>
can be set to "ms" for milliseconds or "us" for microseconds. If the server
connection is not established, if the connection is not TCP or if the
operating system does not support TCP_INFO, for example Linux kernels before
2.4, the sample fetch fails.
bc_rttvar(<unit>) : integer
Returns the Round Trip Time (RTT) variance measured by the kernel for the
backend connection. <unit> is facultative, by default the unit is milliseconds.
<unit> can be set to "ms" for milliseconds or "us" for microseconds. If the
server connection is not established, if the connection is not TCP or if the
operating system does not support TCP_INFO, for example Linux kernels before
2.4, the sample fetch fails.
be_server_timeout : integer
Returns the configuration value in millisecond for the server timeout of the
current backend. This timeout can be overwritten by a "set-timeout" rule. See

View File

@ -0,0 +1,39 @@
varnishtest "Test declaration of TCP rtt fetches"
# feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(v2.8-dev8)'"
feature ignore_unknown_macro
server s1 {
rxreq
txresp
} -start
haproxy h1 -conf {
defaults common
mode http
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
frontend fe from common
bind "fd@${feh1}"
default_backend be
backend be from common
http-response set-header x-test1 "%[fc_rtt]"
http-response set-header x-test2 "%[bc_rtt(us)]"
http-response set-header x-test3 "%[fc_rttvar]"
http-response set-header x-test4 "%[bc_rttvar]"
server s1 ${s1_addr}:${s1_port}
} -start
client c1 -connect ${h1_feh1_sock} {
txreq -req GET -url /
rxresp
expect resp.status == 200
expect resp.http.x-test2 ~ "[0-9]+"
} -run

View File

@ -401,6 +401,35 @@ smp_fetch_fc_rttvar(const struct arg *args, struct sample *smp, const char *kw,
return 1;
}
/* get the mean rtt of a backend connection */
static int
smp_fetch_bc_rtt(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
if (!get_tcp_info(args, smp, 1, 0))
return 0;
/* By default or if explicitly specified, convert rtt to ms */
if (!args || args[0].type == ARGT_STOP || args[0].data.sint == TIME_UNIT_MS)
smp->data.u.sint = (smp->data.u.sint + 500) / 1000;
return 1;
}
/* get the variance of the mean rtt of a backend connection */
static int
smp_fetch_bc_rttvar(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
if (!get_tcp_info(args, smp, 1, 1))
return 0;
/* By default or if explicitly specified, convert rttvar to ms */
if (!args || args[0].type == ARGT_STOP || args[0].data.sint == TIME_UNIT_MS)
smp->data.u.sint = (smp->data.u.sint + 500) / 1000;
return 1;
}
#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
/* get the unacked counter on a client connection */
static int
@ -497,6 +526,9 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
#ifdef TCP_INFO
{ "fc_rtt", smp_fetch_fc_rtt, ARG1(0,STR), val_fc_time_value, SMP_T_SINT, SMP_USE_L4CLI },
{ "fc_rttvar", smp_fetch_fc_rttvar, ARG1(0,STR), val_fc_time_value, SMP_T_SINT, SMP_USE_L4CLI },
{ "bc_rtt", smp_fetch_bc_rtt, ARG1(0,STR), val_fc_time_value, SMP_T_SINT, SMP_USE_L4CLI },
{ "bc_rttvar", smp_fetch_bc_rttvar, ARG1(0,STR), val_fc_time_value, SMP_T_SINT, SMP_USE_L4CLI },
#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
{ "fc_unacked", smp_fetch_fc_unacked, ARG1(0,STR), var_fc_counter, SMP_T_SINT, SMP_USE_L4CLI },
#endif