[tahoe-dev] Observations on Tahoe performance

Shawn Willden shawn-tahoe at willden.org
Wed Aug 12 14:42:30 UTC 2009

On Wednesday 12 August 2009 08:02:13 am Francois Deppierraz wrote:
> Hi Shawn,
> Shawn Willden wrote:
> > The first observation is that when uploading small files it is very hard
> > to keep the upstream pipe full, regardless of my configuration.  My
> > upstream connection is only about 400 kbps, but I can't sustain any more
> > than about 200 kbps usage regardless of whether I'm using a local node
> > that goes through a helper, direct to the helper, or a local node without
> > the helper.  Of course, not using the helper produces the worst effective
> > throughput, because the uploaded data volume stays about the same, but
> > the data is FEC-expanded.
> This is probably because Tahoe doesn't use a windowing protocol which
> makes it especially sensitive to the latency between nodes.
> You should have a look at Brian's description in bug #397.

Very interesting, but I don't think #397 explains what I'm seeing.  I can 
pretty well saturate my upstream connection with Tahoe when uploading a large 
file.  Actually that's consistent with #397 given the bandwidth of my 
connection and the RTT to my helper.  RTT is about 60 ms which would allow 
transfer of around 16 blocks per second, a data rate of 960 KBps -- but my 
upstream only manages about 40 KBps, so Tahoe's non-windowed helper protocol 
should easily saturate it.

No, I think the slowdown arises elsewhere.  Perhaps a lengthy connection setup 
time -- I know I often see "Connecting to Helper" status on my local node's 
status page -- or perhaps it's just the time the helper takes to create and 
deliver shares to servers.  I'm leaning toward the latter being the dominant 
factor, because the helper doesn't appear to start the server 
selection/communication process until after the upload is fully received, so 
even if creation of shares and delivery to servers is fairly quick, it's pure 
dead time from the perspective of the local node uploading to the helper.  
And depending on the responsiveness of the servers, it may not be all that 

My present solution (many parallel uploads) seems to work well, but it makes 
me wonder if there isn't some room for improvement here.  For example, if the 
local node supplies the SID to the helper, the helper can do peer selection 
before the upload is completed.


More information about the tahoe-dev mailing list