]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: Add missing traces in cubic algorithm implementation
authorFrédéric Lécaille <flecaille@haproxy.com>
Sun, 2 Apr 2023 08:49:35 +0000 (10:49 +0200)
committerFrédéric Lécaille <flecaille@haproxy.com>
Sun, 2 Apr 2023 11:10:08 +0000 (13:10 +0200)
May be useful to debug.

Must be backported to 2.7 and 2.6.

src/quic_cc_cubic.c

index e91b76608a0907144a31b4226cc6512c8b050d3c..e04cd3e0138fe040af774fc59774eb2a8562acf7 100644 (file)
@@ -38,6 +38,7 @@ static void quic_cc_cubic_reset(struct quic_cc *cc)
 {
        struct cubic *c = quic_cc_priv(cc);
 
+       TRACE_ENTER(QUIC_EV_CONN_CC, cc->qc);
        cc->algo->state = QUIC_CC_ST_SS;
 
        c->ssthresh = QUIC_CC_INFINITE_SSTHESH;
@@ -49,6 +50,7 @@ static void quic_cc_cubic_reset(struct quic_cc *cc)
        c->last_w_max = 0;
        c->tcp_wnd = 0;
        c->recovery_start_time = 0;
+       TRACE_LEAVE(QUIC_EV_CONN_CC, cc->qc);
 }
 
 static int quic_cc_cubic_init(struct quic_cc *cc)
@@ -100,6 +102,7 @@ static inline void quic_cubic_update(struct quic_cc *cc, uint32_t acked)
        uint32_t t, target, inc, inc_diff;
        uint64_t delta, diff;
 
+       TRACE_ENTER(QUIC_EV_CONN_CC, cc->qc);
        if (!c->epoch_start) {
                c->epoch_start = now_ms;
                if (c->last_w_max <= path->cwnd) {
@@ -133,7 +136,7 @@ static inline void quic_cubic_update(struct quic_cc *cc, uint32_t acked)
                 * control algorithm reset.
                 */
                quic_cc_cubic_reset(cc);
-               return;
+               goto leave;
        }
 
        delta = path->mtu * ((CUBIC_C * diff * diff * diff) >> (10 + 3 * TIME_SCALE_FACTOR_SHIFT));
@@ -165,11 +168,15 @@ static inline void quic_cubic_update(struct quic_cc *cc, uint32_t acked)
        }
 
        path->cwnd += inc;
+ leave:
+       TRACE_LEAVE(QUIC_EV_CONN_CC, cc->qc);
 }
 
 static void quic_cc_cubic_slow_start(struct quic_cc *cc)
 {
+       TRACE_ENTER(QUIC_EV_CONN_CC, cc->qc);
        quic_cc_cubic_reset(cc);
+       TRACE_LEAVE(QUIC_EV_CONN_CC, cc->qc);
 }
 
 static void quic_enter_recovery(struct quic_cc *cc)
@@ -178,6 +185,7 @@ static void quic_enter_recovery(struct quic_cc *cc)
        struct cubic *c = quic_cc_priv(cc);
        /* Current cwnd as number of packets */
 
+       TRACE_ENTER(QUIC_EV_CONN_CC, cc->qc);
        c->epoch_start = 0;
        c->recovery_start_time = now_ms;
        /* Fast convergence */
@@ -191,6 +199,7 @@ static void quic_enter_recovery(struct quic_cc *cc)
        path->cwnd = (CUBIC_BETA * path->cwnd) >> CUBIC_BETA_SCALE_SHIFT;
        c->ssthresh =  QUIC_MAX(path->cwnd, path->min_cwnd);
        cc->algo->state = QUIC_CC_ST_RP;
+       TRACE_LEAVE(QUIC_EV_CONN_CC, cc->qc, NULL, cc);
 }
 
 /* Congestion slow-start callback. */
@@ -252,7 +261,7 @@ static void quic_cc_cubic_rp_cb(struct quic_cc *cc, struct quic_cc_event *ev)
        struct cubic *c = quic_cc_priv(cc);
 
        TRACE_ENTER(QUIC_EV_CONN_CC, cc->qc, ev);
-       TRACE_PROTO("CC cubic", QUIC_EV_CONN_CC, cc->qc, ev);
+       TRACE_PROTO("CC cubic", QUIC_EV_CONN_CC, cc->qc, ev, cc);
 
        BUG_ON(!tick_isset(c->recovery_start_time));