mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 06:11:32 +02:00
MINOR: quic: Add information to "show quic" for CUBIC cc.
Add ->state_cli() new callback to quic_cc_algo struct to define a function called by the "show quic (cc|full)" commands to dump some information about the congestion algorithm internal state currently in use by the QUIC connections. Implement this callback for CUBIC algorithm to dump its internal variables: - K: (the time to reach the cubic curve inflexion point), - last_w_max: the last maximum window value reached before intering the last recovery period. This is also the window value at the inflexion point of the cubic curve, - wdiff: the difference between the current window value and last_w_max. So negative before the inflexion point, and positive after.
This commit is contained in:
parent
2dab1ba84b
commit
76ff8afa2d
@ -120,6 +120,7 @@ struct quic_cc_algo {
|
|||||||
void (*event)(struct quic_cc *cc, struct quic_cc_event *ev);
|
void (*event)(struct quic_cc *cc, struct quic_cc_event *ev);
|
||||||
void (*slow_start)(struct quic_cc *cc);
|
void (*slow_start)(struct quic_cc *cc);
|
||||||
void (*state_trace)(struct buffer *buf, const struct quic_cc *cc);
|
void (*state_trace)(struct buffer *buf, const struct quic_cc *cc);
|
||||||
|
void (*state_cli)(struct buffer *buf, const struct quic_cc_path *path);
|
||||||
void (*hystart_start_round)(struct quic_cc *cc, uint64_t pn);
|
void (*hystart_start_round)(struct quic_cc *cc, uint64_t pn);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -643,6 +643,15 @@ static void quic_cc_cubic_state_trace(struct buffer *buf, const struct quic_cc *
|
|||||||
TICKS_TO_MS(tick_remain(c->recovery_start_time, now_ms)));
|
TICKS_TO_MS(tick_remain(c->recovery_start_time, now_ms)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void quic_cc_cubic_state_cli(struct buffer *buf, const struct quic_cc_path *path)
|
||||||
|
{
|
||||||
|
struct cubic *c = quic_cc_priv(&path->cc);
|
||||||
|
|
||||||
|
chunk_appendf(buf, " cc: state=%s ssthresh=%u K=%u last_w_max=%u wdiff=%ld\n",
|
||||||
|
quic_cc_state_str(c->state), c->ssthresh, c->K, c->last_w_max,
|
||||||
|
(int64_t)(path->cwnd - c->last_w_max));
|
||||||
|
}
|
||||||
|
|
||||||
struct quic_cc_algo quic_cc_algo_cubic = {
|
struct quic_cc_algo quic_cc_algo_cubic = {
|
||||||
.type = QUIC_CC_ALGO_TP_CUBIC,
|
.type = QUIC_CC_ALGO_TP_CUBIC,
|
||||||
.init = quic_cc_cubic_init,
|
.init = quic_cc_cubic_init,
|
||||||
@ -650,6 +659,7 @@ struct quic_cc_algo quic_cc_algo_cubic = {
|
|||||||
.slow_start = quic_cc_cubic_slow_start,
|
.slow_start = quic_cc_cubic_slow_start,
|
||||||
.hystart_start_round = quic_cc_cubic_hystart_start_round,
|
.hystart_start_round = quic_cc_cubic_hystart_start_round,
|
||||||
.state_trace = quic_cc_cubic_state_trace,
|
.state_trace = quic_cc_cubic_state_trace,
|
||||||
|
.state_cli = quic_cc_cubic_state_cli,
|
||||||
};
|
};
|
||||||
|
|
||||||
void quic_cc_cubic_check(void)
|
void quic_cc_cubic_check(void)
|
||||||
|
@ -300,6 +300,9 @@ static void dump_quic_full(struct show_quic_ctx *ctx, struct quic_conn *qc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->fields & QUIC_DUMP_FLD_CC) {
|
if (ctx->fields & QUIC_DUMP_FLD_CC) {
|
||||||
|
if (qc->path->cc.algo->state_cli)
|
||||||
|
qc->path->cc.algo->state_cli(&trash, qc->path);
|
||||||
|
|
||||||
chunk_appendf(&trash, " srtt=%-4u rttvar=%-4u rttmin=%-4u ptoc=%-4u\n"
|
chunk_appendf(&trash, " srtt=%-4u rttvar=%-4u rttmin=%-4u ptoc=%-4u\n"
|
||||||
" cwnd=%-6llu mcwnd=%-6llu\n"
|
" cwnd=%-6llu mcwnd=%-6llu\n"
|
||||||
" sentbytes=%-12llu sentbytesgso=%-12llu sentpkts=%-6llu\n"
|
" sentbytes=%-12llu sentbytesgso=%-12llu sentpkts=%-6llu\n"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user