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]
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)
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]++
}
}
+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.
}
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'
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}" \