diff options
author | Mike Perry <mikeperry-git@fscked.org> | 2008-08-12 18:23:38 +0000 |
---|---|---|
committer | Mike Perry <mikeperry-git@fscked.org> | 2008-08-12 18:23:38 +0000 |
commit | 5166e5ff553827891ce07e8079aa48720fff76c1 (patch) | |
tree | eec3f0fa84dac3109dc018b7c28438c6572f9072 /doc/spec | |
parent | 97245376d9df488fadf0b8cff2e9845b7d5357fc (diff) | |
download | tor-5166e5ff553827891ce07e8079aa48720fff76c1.tar tor-5166e5ff553827891ce07e8079aa48720fff76c1.tar.gz |
Updated to remove dropping of failing guards and just focus
on the specifics of recording, storing, and learning
circuitbuildtimeout parameters.
svn:r16511
Diffstat (limited to 'doc/spec')
-rw-r--r-- | doc/spec/proposals/151-path-selection-improvements.txt | 138 |
1 files changed, 79 insertions, 59 deletions
diff --git a/doc/spec/proposals/151-path-selection-improvements.txt b/doc/spec/proposals/151-path-selection-improvements.txt index 3362efbe2..fd24a9c21 100644 --- a/doc/spec/proposals/151-path-selection-improvements.txt +++ b/doc/spec/proposals/151-path-selection-improvements.txt @@ -10,8 +10,8 @@ Overview The performance of paths selected can be improved by adjusting the CircuitBuildTimeout and avoiding failing guard nodes. This proposal - describes a method of tracking buildtime statistics, and using those - statistics to adjust the CircuitBuildTimeout and the number of guards. + describes a method of tracking buildtime statistics at the client, and + using those statistics to adjust the CircuitBuildTimeout. Motivation @@ -22,71 +22,91 @@ Motivation Implementation + Storing Build Times + + Circuit build times will be stored in the circular array + 'circuit_build_times' consisting of uint16_t elements as milliseconds. + The total size of this array will be based on the number of circuits + it takes to converge on a good fit of the long term distribution of + the circuit builds for a fixed link. We do not want this value to be + too large, because it will make it difficult for clients to adapt to + moving between different links. + + From our initial observations, this value appears to be on the order + of 1000, but will be configurable in a #define NCIRCUITS_TO_OBSERVE. + + Long Term Storage + + The long-term storage representation will be implemented by storing a + histogram with BUILDTIME_BIN_WIDTH millisecond buckets (default 50) when + writing out the statistics to disk. The format of this histogram on disk + is yet to be finalized, but it will likely be of the format + 'CircuitBuildTime <bin> <count>'. + Example: + + CircuitBuildTimeBin 1 100 + CircuitBuildTimeBin 2 50 + ... + + Reading the histogram in will entail multiplying each bin by the + BUILDTIME_BIN_WIDTH and then inserting <count> values into the + circuit_build_times array each with the value of + <bin>*BUILDTIME_BIN_WIDTH. + Learning the CircuitBuildTimeout Based on studies of build times, we found that the distribution of - circuit buildtimes appears to be a Pareto distribution. The number - of circuits to observe (ncircuits_to_cutoff) before changing the - CircuitBuildTimeout will be tunable. From out measurements, - ncircuits_to_cuttoff appears to be on the order of 100. - - In addition, the total number of circuits gathered - (ncircuits_to_observe) will also be tunable. It is likely that - ncircuits_to_observe will be somewhere on the order of 1000. The values - can be represented compactly in Tor in milliseconds as a circular array - of 16 bit integers. More compact long-term storage representations can - be implemented by simply storing a histogram with 50 millisecond buckets - when writing out the statistics to disk. - - Calculating the preferred CircuitBuildTimeout - - Circuits that have longer buildtimes than some x% of the estimated - CDF of the Pareto distribution will be excluded. x will be tunable - as well. - - Circuit timeouts - - In the event of a timeout, backoff values should include the 100-x% - of expected CDF of timeouts. Also, in the event of network failure, - the observation mechanism should stop collecting timeout data. - - Dropping Failed Guards - - In addition, we have noticed that some entry guards are much more - failure prone than others. In particular, the circuit failure rates for - the fastest entry guards was approximately 20-25%, where as slower - guards exhibit failure rates as high as 45-50%. In [1], it was - demonstrated that failing guard nodes can deliberately bias path - selection to improve their success at capturing traffic. For both these - reasons, failing guards should be avoided. - - We propose increasing the number of entry guards to five, and gathering - circuit failure statistics on each entry guard. Any guards that exceed - the average failure rate of all guards by 10% after we have - gathered ncircuits_to_observe circuits will be replaced. - + circuit buildtimes appears to be a Pareto distribution. -Issues + We will calculate the parameters for a Pareto distribution + fitting the data using the estimators at + http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation. - Impact on anonymity + The timeout itself will be calculated by solving the CDF for the + a percentile cutoff BUILDTIME_PERCENT_CUTOFF. This value + represents the percentage of paths the Tor client will accept out of + the total number of paths. We have not yet determined a good + cutoff for this mathematically, but 85% seems a good choice for now. - Since this follows a Pareto distribution, large reductions on the - timeout can be achieved without cutting off a great number of the - total paths. However, hard statistics on which cutoff percentage - gives optimal performance have not yet been gathered. + From http://en.wikipedia.org/wiki/Pareto_distribution#Definition, + the calculation we need is pow(BUILDTIME_PERCENT_CUTOFF/100.0, k)/Xm. + + When to Begin Calculation + + The number of circuits to observe (NCIRCUITS_TO_CUTOFF) before + changing the CircuitBuildTimeout will be tunable via a #define. From + our measurements, a good value for NCIRCUITS_TO_CUTOFF appears to be + on the order of 100. + + Dealing with Timeouts + + Timeouts should be counted as the expectation of the region of + of the Pareto distribution beyond the cutoff. The proposal will + be updated with this value soon. + + Also, in the event of network failure, the observation mechanism + should stop collecting timeout data. - Guard Turnover + Circuits that timeout will be destroyed, as this indicates one + or more of their respective nodes are currently overloaded. - We contend that the risk from failing guards biasing path selection - outweighs the risk of exposure to larger portions of the network - for the first hop. Furthermore, from our observations, it appears - that circuit failure is strongly correlated to node load. Allowing - clients to migrate away from failing guards should naturally - rebalance the network, and eventually clients should converge on - a stable set of reliable guards. It is also likely that once clients - begin to migrate away from failing guards, their load should go - down, causing their failure rates to drop as well. + Client Hints + Some research still needs to be done to provide initial values + for CircuitBuildTimeout based on values learned from modem + users, DSL users, Cable Modem users, and dedicated links. A + radiobutton in Vidalia should eventually be provided that + sets CircuitBuildTimeout to one of these values and also + provide the option of purging all learned data, should any exist. -[1] http://www.crhc.uiuc.edu/~nikita/papers/relmix-ccs07.pdf + These values can either be published in the directory, or + shipped hardcoded for a particular Tor version. + +Issues + + Impact on anonymity + Since this follows a Pareto distribution, large reductions on the + timeout can be achieved without cutting off a great number of the + total paths. This will eliminate a great deal of the performance + variation of Tor usage. |