[tor-commits] [torflow/master] Alter default param values.

mikeperry at torproject.org mikeperry at torproject.org
Fri Dec 2 04:56:42 UTC 2011


commit 4a4b8a73185f763f0def3e0d30c052f3abeb6fa0
Author: Mike Perry <mikeperry-git at fscked.org>
Date:   Thu Dec 1 17:38:45 2011 -0800

    Alter default param values.
    
    These defaults should still be equivalent to Section 2 in the spec, but
    these values will keep the PID interim state from disappearing every
    time ides crashes and the consensus params disappear.
---
 NetworkScanners/BwAuthority/README.spec.txt |   73 ++++++++++++++++-----------
 NetworkScanners/BwAuthority/aggregate.py    |   24 ++++----
 2 files changed, 56 insertions(+), 41 deletions(-)

diff --git a/NetworkScanners/BwAuthority/README.spec.txt b/NetworkScanners/BwAuthority/README.spec.txt
index b8f86d4..81468b5 100644
--- a/NetworkScanners/BwAuthority/README.spec.txt
+++ b/NetworkScanners/BwAuthority/README.spec.txt
@@ -483,23 +483,59 @@
 3.6. Consensus Parameters
 
    The bandwidth auths listen for several consensus parameters to tweak
-   behavior:
+   behavior.
 
-    "bwauthpid=1"  
-       If present, enables the PID control features in Section 3.
+   In the absence of any consensus parameters, the default behavior is
+   to use the PID control code to produce values identical to Section 2,
+   by using default values of:
+
+     K_p = 1.0, K_i = 0, K_d = 0, as well as bwauthcircs=0.
+
+   This equivalence was proved in Section 3.1, and has been observed
+   in practice.
+
+   The available consensus parameters are:
+
+    "bwauthpid=0"  
+       If present, entirely disables the PID control features in 
+       Section 3 and computes bandwidths according to Section 2.
+
+       Setting this value to temporarily disable PID feedback is not
+       recommended, because it causes the PID code to lose interim
+       recorded state.
+
+       To temporarily disable PID feedback, simply remove all consensus
+       parameters, and the system will compute Section 2 values while
+       retaining PID state.
 
     "bwauthcircs=1"
        If present, F_node is multiplied by (1.0 - circ_fail_rate)
        as described in Section 3.1.
-      
+
+    "bwauthbestratio=0"
+       If absent, the larger of stream bandwidth vs filtered bandwidth
+       is used to compute F_node.
+
+       If present, only filtered stream bandwidth ratios are used.
+ 
+    "bwauthnsbw=1"
+       If present, uses consensus bandwidth to determine new bandwidth
+       values.
+
+       If absent, uses descriptor bandwidth instead of feeding back
+       PID control values. This may be functionally equivalent to NS
+       bandwidth so long as T_i is non-zero, because error will get
+       accumulated in pid_error_sum as opposed to the consensus value
+       itself.
+
     "bwauthkp=N"
-       Sets K_p to N/10000.0
+       Sets K_p to N/10000.0. If absent, K_p=1.0.
 
     "bwauthti=N"
-       Sets T_i to N/10000.0. For T_i=0, K_i is set to 0.
+       Sets T_i to N/10000.0. If T_i=0 or absent, K_i is set to 0.
 
     "bwauthtd=N"
-       Sets T_d to N/10000.0.
+       Sets T_d to N/10000.0. If absent, K_d=0.
      
     "bwauthtidecay=N"
        Sets T_i_decay to N/10000.0. T_i_decay is an parameter
@@ -513,25 +549,4 @@
        the T_i'th round has experienced a reduction by T_i_decay
        for the values of T_i that are relevant to us.
 
-       If T_i is 0, K_i_decay is set to 0.
-
-    "bwauthbestratio=1"
-       If present, the larger of stream bandwidth vs filtered bandwidth
-       is used to compute F_node.
- 
-    "bwauthdescbw=1"
-       If present, uses descriptor bandwidth instead of feeding back
-       PID control values. This may be functionally equivalent to NS
-       bandwidth so long as T_i is non-zero, because error will get
-       accumulated in pid_error_sum as opposed to the consensus value
-       itself.
-
-       It also has the advantage of allowing the PID control code to be
-       exercised, yet to still produce identical results to Section 2
-       by using the following consensus parameters:
-
-           bwauthpid=1 bwauthdescbw=1 bwauthbestratio=1 bwauthcircs=0
-           bwauthkp=10000 bwauthti=0 bwauthtd=0 
-
-       This equivalence was proved in Section 3.1, and has been observed
-       in practice. 
+       If T_i is 0 or absent, K_i_decay is set to 0.
diff --git a/NetworkScanners/BwAuthority/aggregate.py b/NetworkScanners/BwAuthority/aggregate.py
index 19697eb..6283f3f 100755
--- a/NetworkScanners/BwAuthority/aggregate.py
+++ b/NetworkScanners/BwAuthority/aggregate.py
@@ -28,19 +28,19 @@ GUARD_SAMPLE_RATE = 2*7*24*60*60 # 2wks
 K_p = 1.0
 
 # We expect to correct steady state error in 5 samples (guess)
-T_i = 5.0
+T_i = 0
 
 # T_i_decay is a weight factor to govern how fast integral sums
 # decay. For the values of T_i that we care about, T_i_decay represents
 # the fraction of integral sum that is eliminated after T_i sample rounds.
 # This decay is non-standard, but we do it to avoid overflow
-T_i_decay = 0.5
+T_i_decay = 0
 
 # We can only expect to predict less than one sample into the future, as
 # after 1 sample, clients will have migrated
 # FIXME: Our prediction ability is a function of the consensus uptake time
 # vs measurement rate
-T_d = 0.5
+T_d = 0
 
 NODE_CAP = 0.05
 
@@ -221,10 +221,10 @@ class VoteSet:
 class ConsensusJunk:
   def __init__(self, c):
     cs_bytes = c.sendAndRecv("GETINFO dir/status-vote/current/consensus\r\n")[0][2]
-    self.bwauth_pid_control = False
+    self.bwauth_pid_control = True
     self.use_circ_fails = False
-    self.use_best_ratio = False
-    self.use_desc_bw = False
+    self.use_best_ratio = True
+    self.use_desc_bw = True
 
     self.K_p = K_p
     self.T_i = T_i
@@ -235,16 +235,16 @@ class ConsensusJunk:
       cs_params = re.search("^params ((?:[\S]+=[\d]+[\s]?)+)",
                                      cs_bytes, re.M).group(1).split()
       for p in cs_params:
-        if p == "bwauthpid=1":
-          self.bwauth_pid_control = True
-        elif p == "bwauthdescbw=1":
-          self.use_desc_bw = True
+        if p == "bwauthpid=0":
+          self.bwauth_pid_control = False
+        elif p == "bwauthnsbw=1":
+          self.use_desc_bw = False
           plog("INFO", "Using descriptor bandwidth")
         elif p == "bwauthcircs=1":
           self.use_circ_fails = True
           plog("INFO", "Counting circuit failures")
-        elif p == "bwauthbestratio=1":
-          self.use_best_ratio = True
+        elif p == "bwauthbestratio=0":
+          self.use_best_ratio = False
           plog("INFO", "Choosing larger of sbw vs fbw")
         elif p.startswith("bwauthkp="):
           self.K_p = int(p.split("=")[1])/10000.0





More information about the tor-commits mailing list