Objective 3: Evaluate and implement selected research solutions for performance and scalability with the highest impact for our users.
A community of academic researchers surround the Tor Project and our tools.1 Many researchers have published papers on improving Tor network performance. Two research topic areas stand out as providing the most overall performance benefit in the research literature so far: congestion control and traffic splitting (Conflux).
Congestion control2 allows multiple connections to fairly share the full capacity of a dataflow path, without causing overload or delay at any bottleneck on that path. Lack of congestion control is the reason why Tor has a speed limit of approximately 500KB/sec for bulk data transfer, regardless of how much spare relay capacity is available on the Tor network. Lack of congestion control also contributes to the high variability in Tor latency, as congestion builds up at these bottlenecks.
Traffic splitting, also known as Conflux,3 allows data to be sent along two or more paths, split in proportion to which path has more spare capacity. Traffic splitting is a complementary extension to congestion control--as congestion control algorithms detect congestion on one path, traffic splitting can shift traffic to another path. The total throughput of a user’s Tor connection is then the sum of all available capacity on these paths.
Once deployed, these two systems will vastly improve the experience of video streaming, file transfer, and interactive application usage over Tor, for both censored and uncensored users. We expect congestion control to provide large improvements to average and best-case Tor download throughput metrics, as well as reduce worst-case latency, jitter, and variations in Tor performance metrics. We expect that traffic splitting will further improve these results, especially for throughput. We expect all of these results to be visible in simulation. More importantly, we expect that simulation will guide our choice of algorithm and parameters for live network deployment.
To successfully deploy these systems, we will break work into two phases: first simulation, then live network tuning: