]> johannes.truschnigg.info Git - sqm_lagthrottle/commitdiff
Implement (faux) bw adjustment stubs
authorJohannes Truschnigg <johannes@truschnigg.info>
Tue, 15 Mar 2022 18:52:58 +0000 (19:52 +0100)
committerJohannes Truschnigg <johannes@truschnigg.info>
Tue, 15 Mar 2022 18:52:58 +0000 (19:52 +0100)
__lagdetect.awk
lagdetect.sh

index 691085b576ea1de964594b86e8e92aff37768607..827264d5efaab7c32c413d953c44828be4d1a628 100644 (file)
@@ -6,8 +6,10 @@ BEGIN {
   print "# PINGSLOTS=" PINGSLOTS
   print "# BW_MAX=" BW_MAX
   print "# BW_MIN=" BW_MIN
-  print "# FILE_TX=" FILE_TX
-  print "# FILE_RX=" FILE_RX
+  print "# STATS_TX=" STATS_TX
+  print "# IFACE_TX=" IFACE_TX
+  print "# STATS_RX=" STATS_RX
+  print "# IFACE_RX=" IFACE_RX
   split(PING_PEERS, pps, " ")
   for (pp in pps) {
     pn = pps[pp]
@@ -74,11 +76,11 @@ function update_bw() {
   tx_old=tx
   rx_old=rx
 
-  getline tx < FILE_TX
-  close(FILE_TX)
+  getline tx < STATS_TX
+  close(STATS_TX)
 
-  getline rx < FILE_RX
-  close(FILE_RX)
+  getline rx < STATS_RX
+  close(STATS_RX)
 
   rxdelta=(rx - rx_old)
   txdelta=(tx - tx_old)
@@ -115,12 +117,16 @@ function adjust_bw(peername, latency) {
   if (last2avg > thresh_fudged ) {
     if (latency > ping_prev[peername] && latency > ping_pprev[peername]) {
       print ts " CONSIDER BW DECREASE # " peername " lat=" latency " prev=" ping_prev[peername] " pprev=" ping_pprev[peername] " avg=" ping_avgs[peername] " min=" ping_min[peername]
+      set_bw(IFACE_TX, 5000)
+      set_bw(IFACE_RX, 5000)
     }
     not_increasing_count[peername]=0
   } else {
     if (not_increasing_count[peername] > (5 * PINGSLOTS)) {
       print ts " 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
+      set_bw(IFACE_TX, 10000)
+      set_bw(IFACE_RX, 10000)
     }
     not_increasing_count[peername]++
   }
@@ -159,6 +165,12 @@ function update_ping_avgs(peername) {
 }
 
 
+function set_bw(dev, kbit) {
+  print "# BW CHANGE dev=" dev " kbit=" kbit
+  system("echo tc qdisc change root dev " dev " cake bandwidth " kbit "Kbit")
+}
+
+
 END {
   # Usually not reached.
 }
index d9cd0e549c6e9834ae1a5124fef8405a369bde64..e68d07b31885b9762993fc659f43c83b03f3eab4 100755 (executable)
@@ -6,8 +6,10 @@ PING_GW_IPV4=no
 PING_GW_IPV6=no
 PING_SLOTS_PER_PEER=5
 PING_INTERVAL=500
-FILE_RX='/sys/class/net/eth1/statistics/rx_bytes'
-FILE_TX='/sys/class/net/eth1/statistics/tx_bytes'
+STATS_RX='/sys/class/net/eth1/statistics/rx_bytes'
+IFACE_RX='eth1'
+STATS_TX='/sys/class/net/eth1/statistics/tx_bytes'
+IFACE_TX='eth1'
 
 
 
@@ -108,8 +110,10 @@ set -u
 
 fping --loop --retry=1 --size=1280 --period="${PING_INTERVAL}" --random ${PING_PEERS} 2>/dev/null \
 | awk \
-  -v FILE_RX="${FILE_RX}" \
-  -v FILE_TX="${FILE_TX}" \
+  -v STATS_RX="${STATS_RX}" \
+  -v IFACE_RX="${IFACE_RX}" \
+  -v STATS_TX="${STATS_TX}" \
+  -v IFACE_TX="${IFACE_TX}" \
   -v THRESHOLD="${THRESHOLD}" \
   -v PINGSLOTS="${PING_SLOTS_PER_PEER}" \
   -v FUDGE="${FUDGE_MS}" \