]> johannes.truschnigg.info Git - sqm_lagthrottle/commitdiff
Try to account for FUDGE in bw increase path
authorJohannes Truschnigg <johannes@truschnigg.info>
Wed, 16 Mar 2022 21:23:43 +0000 (22:23 +0100)
committerJohannes Truschnigg <johannes@truschnigg.info>
Wed, 16 Mar 2022 21:23:43 +0000 (22:23 +0100)
__lagdetect.awk

index ea3ade4e2d92d1554a35f33e5ef31b0aa9c09358..5c723f6663ae06db42828d8313ce574128b8e354 100644 (file)
@@ -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)
 }