[tahoe-lafs-trac-stream] [tahoe-lafs] #1264: Performance regression for large values of K

tahoe-lafs trac at tahoe-lafs.org
Thu Sep 15 10:28:08 PDT 2011


#1264: Performance regression for large values of K
-----------------------------+---------------------------------------------
     Reporter:  francois     |      Owner:  francois
         Type:  defect       |     Status:  new
     Priority:  major        |  Milestone:  soon
    Component:  code-        |    Version:  1.8.0
  network                    |   Keywords:  performance regression download
   Resolution:               |
Launchpad Bug:               |
-----------------------------+---------------------------------------------

Comment (by warner):

 I just finshed doing the first batch of comparative performance tests on
 the Atlas Networks hardware, and uploaded my tools and the graphs. I'm
 calling this environment "atlasperf1". It consists of four machines (one
 client, the others are storage servers, two server nodes per machine) on
 fast local connections. The CPUs are dual-core Pentium4s at 3.00GHz, the
 average ping time is 420us. The client is running tahoe-1.8.2 (the servers
 are a mix of versions: 1.8.2, 1.7.1, 1.6.1).

 I uploaded 1MB/10MB/100MB immutable files with various encodings (from
 1-of-1 to 60-of-60, all with k=N). Then I ran a program to download random
 ones over and over. I graphed the k-vs-time curve for about 1700 trials.

 The graph shows a nearly-perfect linear slowdown with increasing k. For a
 100MB file, k=5 yields a 50s download, k=30 takes 250s, and k=60 takes
 about 500s. The same shape holds for 1MB and 10MB files too.

 The next test is to try various segment sizes. I've got a few pet theories
 about the slowdown: the number of foolscap messages being sent, or the
 limited pipelining of small requests. Both would have a correlation with
 number of segments. For a fast network, our current one-segment pipeline
 isn't very big. And with high 'k', the amount of data we're getting from
 each block can get quite small (k=60 means each block is 128k/60=2.2k,
 which is scarcely a whole packet), so we've got a lot of tiny little
 requests flying around.

 Possibly mitigations include:

  * when segsize/k is small, accept the memory-footprint hit and use a
 deeper pipeline, to keep the pipes full
  * implement a {{{readv()}}} method on the storage servers to reduce the
 foolscap overhead (if that's in fact an issue)
  * advise larger segsize on fast networks

-- 
Ticket URL: <http://tahoe-lafs.org/trac/tahoe-lafs/ticket/1264#comment:17>
tahoe-lafs <http://tahoe-lafs.org>
secure decentralized storage


More information about the tahoe-lafs-trac-stream mailing list