From: Johannes Truschnigg Date: Sat, 12 Mar 2022 17:35:53 +0000 (+0100) Subject: Split out adjust_bw() X-Git-Url: https://johannes.truschnigg.info/gitweb/?a=commitdiff_plain;h=afd707edf020bad9cba530a51c337e596fb4aa2c;p=sqm_lagthrottle Split out adjust_bw() --- diff --git a/__lagdetect.awk b/__lagdetect.awk index 9479e74..d7e33da 100644 --- a/__lagdetect.awk +++ b/__lagdetect.awk @@ -1,8 +1,11 @@ #!/usr/bin/awk -f BEGIN { + print "# INIT=" systime() print "# THRESHOLD=" THRESHOLD print "# FUDGE=" FUDGE print "# PINGSLOTS=" PINGSLOTS + print "# BW_MAX=" BW_MAX + print "# BW_MIN=" BW_MIN split(PING_PEERS, pps, " ") for (pp in pps) { pn = pps[pp] @@ -24,7 +27,9 @@ BEGIN { seq=$3 bytes=0 lat=9999 - print "TIMEOUT for " pn + # XXX TODO what now? + process_record(pn, bytes, lat) + #print "TIMEOUT for " pn } @@ -34,35 +39,51 @@ BEGIN { seq=$3 bytes=$4 lat=$6 + process_record(pn, bytes, lat) +} + + +function process_record(pn, bytes, lat) { if (! (pn in slotindex)) { - print "FATAL: BOGUS PEER: " pn + print "FATAL: BOGUS PEER: " pn # XXX really? exit 1 } + + if (bytes == 0 && lat = 9999) { + print "# WARN: TIMEOUT: " pn + return 1 + } + #printf("%s %db in %.2fms\n", pn, bytes, lat) update_pingstats(pn, lat) - if(have_baseline[pn]) { - last2avg = (((ping_prev[pn] + lat) / 2.0)) - thresh_fudged = (FUDGE + (ping_avgs[pn] * THRESHOLD)) - if (last2avg > thresh_fudged ) { - if (lat > ping_prev[pn] && lat > ping_pprev[pn]) { - print "CONSIDER BW DECREASE # " pn " lat=" lat " prev=" ping_prev[pn] " pprev=" ping_pprev[pn] " avg=" ping_avgs[pn] " min=" ping_min[pn] - } - not_increasing_count[pn]=0 - } else { - if (not_increasing_count[pn] > (5 * PINGSLOTS)) { - print "CONSIDER BW INCREASE # " pn " lat=" lat " prev=" ping_prev[pn] " pprev=" ping_pprev[pn] " avg=" ping_avgs[pn] " min=" ping_min[pn] - not_increasing_count[pn]=0 - } - not_increasing_count[pn]++ - } - } else { - # print "NODATA" + + if (have_baseline[pn]) { + adjust_bw(pn, lat) } + ping_pprev[pn]=ping_prev[pn] ping_prev[pn]=lat } +function adjust_bw(peername, latency) { + 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]) { + print systime() " CONSIDER BW DECREASE # " peername " lat=" latency " prev=" ping_prev[peername] " pprev=" ping_pprev[peername] " avg=" ping_avgs[peername] " min=" ping_min[peername] + } + not_increasing_count[peername]=0 + } else { + if (not_increasing_count[peername] > (5 * PINGSLOTS)) { + print systime() " CONSIDER BW INCREASE # " peername " lat=" latency " prev=" ping_prev[peername] " pprev=" ping_pprev[peername] " avg=" ping_avgs[peername] " min=" ping_min[peername] + not_increasing_count[peername]=0 + } + not_increasing_count[peername]++ + } +} + + function update_pingstats(peername, latency) { slotindex[peername]++ pingslot=peername ":" slotindex[peername]