aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2008-02-12 22:02:47 +0000
committerRoger Dingledine <arma@torproject.org>2008-02-12 22:02:47 +0000
commit3abafccd0eadb267401f20ef8c816c6e7f1c693e (patch)
tree7d0a5e4c28f40d1d4aaa410a401b61f4c83d7424
parentd3331b3c125697bc9f1bbd8ca1917a0702770acc (diff)
downloadtor-3abafccd0eadb267401f20ef8c816c6e7f1c693e.tar.gz
tor-3abafccd0eadb267401f20ef8c816c6e7f1c693e.zip
Start choosing which bridge to use proportional to its advertised
bandwidth, rather than uniformly at random. This should speed up Tor for bridge users. Also do this for people who set StrictEntryNodes. svn:r13486
-rw-r--r--ChangeLog5
-rw-r--r--doc/TODO1
-rw-r--r--src/or/circuitbuild.c11
-rw-r--r--src/or/routerlist.c1
4 files changed, 17 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 762f03b5bc..fe8ce8d858 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
Changes in version 0.2.0.20-?? - 2008-02-??
+ o Major features:
+ - Start choosing which bridge to use proportional to its advertised
+ bandwidth, rather than uniformly at random. This should speed up Tor
+ for bridge users. Also do this for people who set StrictEntryNodes.
+
o Minor features (performance):
- Tune parameters for cell pool allocation to minimize amount of
RAM overhead used.
diff --git a/doc/TODO b/doc/TODO
index 463b83b8f4..301641cc6a 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -127,6 +127,7 @@ P - Figure out why dll's compiled in mingw don't work right in WinXP.
P - create a "make win32-bundle" for vidalia-privoxy-tor-torbutton bundle
Planned for 0.2.1.x:
+ - router_choose_random_node() has a big pile of args. make it "flags".
- anonymity concern: since our is-consensus-fresh-enough check is
sloppy so clients will actually work when a consensus wasn't formed,
does that mean that if users are idle for 5 hours and then click on
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index bd6f504c3b..c639b843ff 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -2501,7 +2501,16 @@ choose_random_entry(cpath_build_state_t *state)
}
choose_and_finish:
- r = smartlist_choose(live_entry_guards);
+ if (entry_list_can_grow(options)) {
+ /* We choose uniformly at random here, because choose_good_entry_server()
+ * already weights its choices by bandwidth, so we don't want to
+ * *double*-weight our guard selection. */
+ r = smartlist_choose(live_entry_guards);
+ } else {
+ /* We need to weight by bandwidth, because our bridges or entryguards
+ * were not already selected proportional to their bandwidth. */
+ r = routerlist_sl_choose_by_bandwidth(live_entry_guards, WEIGHT_FOR_GUARD);
+ }
smartlist_free(live_entry_guards);
smartlist_free(exit_family);
return r;
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 46a372c1e7..d1b0e820ed 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1393,6 +1393,7 @@ get_max_believable_bandwidth(void)
* If <b>for_guard</b>, we're picking a guard node: consider all guard's
* bandwidth equally. Otherwise, weight guards proportionally less.
*
+ * XXX DOCDOC the above args aren't args anymore
*/
static void *
smartlist_choose_by_bandwidth(smartlist_t *sl, bandwidth_weight_rule_t rule,