[tor-commits] [sbws/maint-1.1] chg: v3bwfile: Calculate filtered bandwidth
juga at torproject.org
juga at torproject.org
Mon Jun 29 07:49:10 UTC 2020
commit c030731ec25adeff750c8c00415b87521a10d581
Author: juga0 <juga at riseup.net>
Date: Sat May 16 17:55:50 2020 +0000
chg: v3bwfile: Calculate filtered bandwidth
for each relay, calculate the filtered mean for all relays and
calculate the filtered ratio for each relay.
---
sbws/lib/v3bwfile.py | 14 +++++++++++---
tests/unit/lib/test_scaling.py | 13 +++++++++++++
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/sbws/lib/v3bwfile.py b/sbws/lib/v3bwfile.py
index 245ffa6..9a303be 100644
--- a/sbws/lib/v3bwfile.py
+++ b/sbws/lib/v3bwfile.py
@@ -15,6 +15,7 @@ from sbws.globals import (SPEC_VERSION, BW_LINE_SIZE, SBWS_SCALE_CONSTANT,
TORFLOW_SCALING, SBWS_SCALING, TORFLOW_BW_MARGIN,
TORFLOW_OBS_LAST, TORFLOW_OBS_MEAN,
PROP276_ROUND_DIG, MIN_REPORT, MAX_BW_DIFF_PERC)
+from sbws.lib import scaling
from sbws.lib.resultdump import ResultSuccess, _ResultType
from sbws.util.filelock import DirectoryLock
from sbws.util.timestamp import (now_isodt_str, unixts_to_isodt_str,
@@ -631,8 +632,10 @@ class V3BWLine(object):
assert node_id.startswith('$')
self.node_id = node_id
self.bw = bw
+ # For now, we do not want to add ``bw_filt`` to the bandwidth file,
+ # therefore it is set here but not added to ``BWLINE_KEYS_V1``.
[setattr(self, k, v) for k, v in kwargs.items()
- if k in BWLINE_KEYS_V1]
+ if k in BWLINE_KEYS_V1 + ["bw_filt"]]
def __str__(self):
return self.bw_strv1
@@ -762,7 +765,11 @@ class V3BWLine(object):
if rtt:
kwargs['rtt'] = rtt
bw = cls.bw_median_from_results(results_recent)
+ # XXX: all the class functions could use the bw_measurements instead of
+ # obtaining them each time or use a class Measurements.
+ bw_measurements = scaling.bw_measurements_from_results(results_recent)
kwargs['bw_mean'] = cls.bw_mean_from_results(results_recent)
+ kwargs['bw_filt'] = scaling.bw_filt(bw_measurements)
kwargs['bw_median'] = cls.bw_median_from_results(
results_recent)
kwargs['desc_bw_avg'] = \
@@ -1311,7 +1318,8 @@ class V3BWFile(object):
# mean (Torflow's strm_avg)
mu = mean([l.bw_mean for l in bw_lines])
# filtered mean (Torflow's filt_avg)
- muf = mean([max(l.bw_mean, mu) for l in bw_lines])
+ muf = mean([l.bw_filt for l in bw_lines])
+
# bw sum (Torflow's tot_net_bw or tot_sbw)
sum_bw = sum([l.bw_mean for l in bw_lines])
# Torflow's clipping
@@ -1369,7 +1377,7 @@ class V3BWFile(object):
min_bandwidth = min(desc_bw, l.consensus_bandwidth)
# Torflow's scaling
ratio_stream = l.bw_mean / mu
- ratio_stream_filtered = max(l.bw_mean, mu) / muf
+ ratio_stream_filtered = l.bw_filt / muf
ratio = max(ratio_stream, ratio_stream_filtered)
bw_scaled = ratio * min_bandwidth
# round and convert to KB
diff --git a/tests/unit/lib/test_scaling.py b/tests/unit/lib/test_scaling.py
new file mode 100644
index 0000000..06fb71b
--- /dev/null
+++ b/tests/unit/lib/test_scaling.py
@@ -0,0 +1,13 @@
+"""Unit tests for scaling.py."""
+
+from sbws.lib import scaling
+
+
+def test_bw_filt():
+ bw_measurements = [
+ 96700.00922329757, 70311.63051659254, 45531.743347556374,
+ 38913.97025485627, 55656.332364676025
+ ]
+ fb = scaling.bw_filt(bw_measurements)
+ # This is greater than the mean, that is 61422.73714139576
+ assert fb == 83505.81986994506
More information about the tor-commits
mailing list