[tahoe-dev] Observations on Tahoe performance
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