From: Johannes Truschnigg Date: Wed, 16 Mar 2022 21:23:43 +0000 (+0100) Subject: Try to account for FUDGE in bw increase path X-Git-Url: https://johannes.truschnigg.info/gitweb/?a=commitdiff_plain;h=e3b00e198ed44c0a171d88d4dd4cb9295ae553e6;p=sqm_lagthrottle Try to account for FUDGE in bw increase path --- diff --git a/__lagdetect.awk b/__lagdetect.awk index ea3ade4..5c723f6 100644 --- a/__lagdetect.awk +++ b/__lagdetect.awk @@ -162,7 +162,7 @@ function adjust_sqm(peername, latency) { if (consec_timeouts > ((1.5 * peer_count) + 2)) { # print "# " ts " too many TIMEOUTS in a row, decreasing SQM bw" bw_cur_step_rx = 0 - set_bw(IFACE_RX, STEPS_RX[bw_cur_step_rx]) # XXX TODO + set_bw(IFACE_RX, STEPS_RX[bw_cur_step_rx]) return } @@ -172,15 +172,15 @@ function adjust_sqm(peername, latency) { return } - # XXX this logic needs fixing - # if ( rx_rate < (rx_rate_max * 0.1) || tx_rate < (tx_rate_max * 0.1) ) { - + # XXX TODO - this needs to get MUCH better! + # 1.) FUDGE needs to be properly accounted in BW increase path + # 2.) Try to dynamically compute/adapt FUDGE in no-load condition? # Try to determine the latency trend over the last few samples last2avg = (((ping_prev[peername] + latency) / 2.0)) thresh_fudged = (FUDGE + (ping_avgs[peername] * THRESHOLD)) if (last2avg > thresh_fudged ) { if (latency > ping_prev[peername] && latency > ping_pprev[peername]) { - if ( rx_rate < (rx_rate_max * 0.1)) { + if ( rx_rate < (rx_rate_max * 0.1)) { # XXX TODO is this correct? print "# " ts " line does not appear to be loaded, skipping SQM bw downgrade" } else { # print ts " " adjust_ts_delta " CONSIDER BW DECREASE # " peername " lat=" latency " prev=" ping_prev[peername] " pprev=" ping_pprev[peername] " avg=" ping_avgs[peername] " min=" ping_min[peername] @@ -197,7 +197,7 @@ function adjust_sqm(peername, latency) { adjust_old = ts } not_increasing_count[peername]=0 - } else if (latency < ping_prev[peername] && latency < ping_pprev[peername] && ping_prev[peername] < ping_pprev[peername]) { + } else if (latency < (ping_prev[peername] + FUDGE/2) && latency < (ping_pprev[peername] + FUDGE / 2) && ping_prev[peername] < (ping_pprev[peername] + FUDGE/2)) { if (not_increasing_count[peername] > (5 * PINGSLOTS)) { # print ts " " adjust_ts_delta " CONSIDER BW INCREASE # " peername " lat=" latency " prev=" ping_prev[peername] " pprev=" ping_pprev[peername] " avg=" ping_avgs[peername] " min=" ping_min[peername] if (bw_cur_step_rx < bw_maxindex_rx) { @@ -213,14 +213,13 @@ function adjust_sqm(peername, latency) { } not_increasing_count[peername]++ } else { - peer_stats_print(peername) + peer_stats_print(peername, "# adjst_sqm noop") } } -function peer_stats_print(pn) { - printf("%-12.1f %12s lat=%04.1f plat=%04.1f pplat=%04.1f avg=%04.1f\n", ts, pn, lat, ping_prev[pn], ping_pprev[pn], ping_avgs[pn]) - #print ts " " adjust_ts_delta " BW NOOP # " peername " lat=" latency " prev=" ping_prev[peername] " pprev=" ping_pprev[peername] " avg=" ping_avgs[peername] " min=" ping_min[peername] +function peer_stats_print(pn, affix) { + printf("%-12.1f %12s lat=%04.1f plat=%04.1f pplat=%04.1f avg=%04.1f %s\n", ts, pn, lat, ping_prev[pn], ping_pprev[pn], ping_avgs[pn], affix) }