for (pp in pps) {
pn = pps[pp]
print "# PEERS+=" pn
- slotindex[pn]=0 # used to cycle thru PINGSLOTS per PEER
- have_baseline[pn]=0 # do we have enough data to make informed decisions?
- ping_min[pn]=65535 # minimum latency observed for PEER
- ping_avgs[pn]=-1 # mean of last PINGSLOTS recorded latencies per PEER
- ping_prev[pn]=-1 # latency recorded in the previous cycle
- ping_pprev[pn]=-1 # latency recorded in the previous cycle
- not_increasing_count[pn]=0 # number of consecutive cycles with no (fudged) latency increase
+ slotindex[pn] = 0 # used to cycle thru PINGSLOTS per PEER
+ have_baseline[pn] = 0 # do we have enough data to make informed decisions?
+ ping_min[pn] = 65535 # minimum latency observed for PEER
+ ping_avgs[pn] = -1 # mean of last PINGSLOTS recorded latencies per PEER
+ ping_prev[pn] = -1 # latency recorded in the previous cycle
+ ping_pprev[pn] = -1 # latency recorded in the previous cycle
+ not_increasing_count[pn] = 0 # number of consecutive cycles with no (fudged) latency increase
}
+ adjust_delta = 0
update_bw()
update_bw_min_delta = (0.02 * peer_count)
}
rx_rate=(rx_delta / (ts_delta))
tx_delta=(tx - tx_old)
tx_rate=(tx_delta / (ts_delta))
- printf("# (Kbyte/s) rx_rate=%-12.2f tx_rate=%-12.2f ts_delta=%-1.2f\n", (rx_rate / 1024), (tx_rate / 1024), ts_delta)
+ # printf("# " ts " (Kbyte/s) rx_rate=%-12.2f tx_rate=%-12.2f ts_delta=%-1.2f\n", (rx_rate / 1024), (tx_rate / 1024), ts_delta)
}
function adjust_bw(peername, latency) {
+ adjust_delta = (ts - adjust_old)
+
+ # do not try to set bw more than once a second
+ if (adjust_delta < 1.0) {
+ # print "looping too fast, skipping BW update adjust_delta=" adjust_delta
+ return
+ }
+
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 ts " CONSIDER BW DECREASE # " peername " lat=" latency " prev=" ping_prev[peername] " pprev=" ping_pprev[peername] " avg=" ping_avgs[peername] " min=" ping_min[peername]
+ print ts " " adjust_delta " 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)
+ # print "set adjust_old=" ts
+ adjust_old = ts
}
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]
+ print ts " " adjust_delta " 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)
+ # print "set adjust_old=" ts
+ adjust_old = ts
}
not_increasing_count[peername]++
}
function update_pingstats(peername, latency) {
slotindex[peername]++
- pingslot=peername ":" slotindex[peername]
- pingstats[pingslot]=latency
+ pingslot = peername ":" slotindex[peername]
+ pingstats[pingslot] = latency
if(slotindex[peername] % PINGSLOTS == 0) {
if (have_baseline[peername] == 0) {
- have_baseline[peername]=1
+ have_baseline[peername] = 1
print "# READY PEER: " peername
}
- slotindex[peername]=0
+ slotindex[peername] = 0
update_ping_avgs(peername)
# print peername " avg " ping_avgs[peername] " cur " latency
}
if (latency < ping_min[peername] && latency > FUDGE) {
- ping_min[peername]=latency
+ ping_min[peername] = latency
# print peername " lowest " latency
}
}
function update_ping_avgs(peername) {
ping_sum = 0
- for (k = 0; k<=PINGSLOTS; ++k) {
+ for (k = 0; k <= PINGSLOTS; ++k) {
ps = peername ":" k
ping_sum += pingstats[ps]
}
function set_bw(dev, kbit) {
- print "# BW CHANGE dev=" dev " kbit=" kbit
- system("echo tc qdisc change root dev " dev " cake bandwidth " kbit "Kbit")
+ #print "# BW CHANGE dev=" dev " kbit=" kbit
+ system("echo COMMAND " ts " tc qdisc change root dev " dev " cake bandwidth " kbit "Kbit")
}