compressed weaves, and revision.weave

Michael Ellerman michael at ellerman.id.au
Thu Oct 27 08:00:20 BST 2005


On Thu, 27 Oct 2005 13:10, John A Meinel wrote:
> Michael Ellerman wrote:
> > On Tue, 25 Oct 2005 18:43, John A Meinel wrote:
>
> ...
>
> > For my kernel tree, only 47 revisions.
> >
> > 257M	working tree
> >
> > Mainline:
> > 5.3M    .bzr/inventory.weave
> > 380K    .bzr/revision-store/
> > 283M    .bzr
> >
> > Compressed weaves (compressed):
> > 1.1M    .bzr/inventory.weave.gz
> > 8.0K    .bzr/revision.weave.gz
> > 117M    .bzr
> >
> > Which is pretty impressive. Although there's not much history, it's
> > pretty nice to be storing 47 revisions in 45% the size of the working
> > tree.
>
> That is nice to see.
>
> > Having said that, it's a tad on the slow side:
> >
> > concordia ~/src/work/ckexec$ cbzr --profile st
> > 1588655 function calls (1535159 primitive calls) in 18.747 CPU seconds
> >
> > vs mainline:
> >
> > concordia ~/src/work/kexec$ bzr --profile st
> > 1368395 function calls (1314899 primitive calls) in 11.668 CPU seconds
> >
> > cheers
>
> I'm a little surprised to see it take that much longer. How long is it
> if you do "time cbzr st" rather than running --profile.
> I've found that --profile seems to be skewed by mutter() calls.
> Which should be virtually no-ops if BZR_DEBUG is not set.
>
> Otherwise can you attach the actual profile results. I'm curious why you
> would be seeing an extra 200,000 primitive calls. My first guess would
> be that it is all the extra time in Weave() for revisions.weave and the
> mutter() calls.
>
> But also, if we have compressed weaves like this, it makes it even more
> useful to keep the last inventory and revision information in some sort
> of cache, rather than hidden in the weaves.

Actually it doesn't look so bad when you run it a few times, I've got a
fair amount of RAM so I'm probably caching the whole tree.

concordia ~/src/work/ckexec$ time cbzr st
real    0m13.233s
user    0m10.874s
sys     0m1.558s
concordia ~/src/work/ckexec$ time cbzr st
real    0m13.623s
user    0m11.464s
sys     0m1.476s
concordia ~/src/work/ckexec$ time cbzr st
real    0m12.724s
user    0m10.777s
sys     0m1.535s

vs:

concordia ~/src/work/kexec$ time bzr st
real    0m9.465s
user    0m8.349s
sys     0m0.668s
concordia ~/src/work/kexec$ time bzr st
real    0m8.753s
user    0m7.914s
sys     0m0.590s
concordia ~/src/work/kexec$ time bzr st
real    0m8.037s
user    0m7.258s
sys     0m0.577s

(For the record, there are 4 modified and 3 unknown files in the
output, but I cut them out for readability).


concordia ~/src/work/ckexec$ time cbzr --profile st
modified:
  arch/powerpc/kernel/prom.c
  arch/powerpc/kernel/setup_64.c
  arch/powerpc/mm/lmb.c
  patches/ftr_early_param-earlier
unknown:
  .shelf
  ftr_vpa-unregister
  test.py
         1408745 function calls (1355257 primitive calls) in 12.226 CPU seconds

   Ordered by: cumulative time
   List reduced from 216 to 20 due to restriction <20>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000   12.226   12.226 commands.py:193(run_argv)
        1    0.000    0.000   12.225   12.225 commands.py:501(ignore_pipe)
        1    0.036    0.036   12.225   12.225 builtins.py:87(run)
        1    0.000    0.000   12.189   12.189 status.py:24(show_status)
        1    0.873    0.873    6.954    6.954 delta.py:138(compare_trees)
    37096    0.470    0.000    3.990    0.000 inventory.py:553(_read_tree_state)
        2    0.011    0.005    2.870    1.435 status.py:102(list_paths)
        1    0.131    0.131    2.401    2.401 workingtree.py:322(iter_conflicts)
    19715    0.128    0.000    2.208    0.000 workingtree.py:324(<generator expression>)
        2    0.404    0.202    2.087    1.044 xml6.py:81(read_inventory)
    19715    0.120    0.000    2.080    0.000 workingtree.py:243(list_files)
72015/19715    0.846    0.000    1.960    0.000 workingtree.py:255(descend)
    18548    0.216    0.000    1.898    0.000 workingtree.py:218(get_file_sha1)
    18548    0.833    0.000    1.496    0.000 hashcache.py:141(get_sha1)
        1    0.000    0.000    1.347    1.347 branch.py:1020(basis_tree)
        1    0.000    0.000    1.347    1.347 branch.py:996(revision_tree)
        1    0.000    0.000    1.347    1.347 branch.py:853(get_revision_inventory)
        1    0.000    0.000    1.346    1.346 branch.py:834(get_inventory)
    39380    0.483    0.000    1.340    0.000 xml6.py:112(_unpack_entry)
    96167    0.800    0.000    1.168    0.000 inventory.py:982(id2path)

real    1m4.840s
user    0m41.982s
sys     0m20.078s

concordia ~/src/work/kexec$ time bzr --profile st
modified:
  arch/powerpc/kernel/prom.c
  arch/powerpc/kernel/setup_64.c
  arch/powerpc/mm/lmb.c
  patches/ftr_early_param-earlier
unknown:
  .shelf
  ftr_vpa-unregister
  test.py
         1367889 function calls (1314399 primitive calls) in 11.507 CPU seconds

   Ordered by: cumulative time
   List reduced from 215 to 20 due to restriction <20>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000   11.507   11.507 commands.py:193(run_argv)
        1    0.000    0.000   11.507   11.507 commands.py:501(ignore_pipe)
        1    0.042    0.042   11.507   11.507 builtins.py:93(run)
        1    0.000    0.000   11.463   11.463 status.py:24(show_status)
        1    0.790    0.790    5.659    5.659 delta.py:138(compare_trees)
        2    0.011    0.005    3.136    1.568 status.py:102(list_paths)
    37096    0.474    0.000    3.117    0.000 inventory.py:553(_read_tree_state)
        1    0.139    0.139    2.665    2.665 workingtree.py:322(iter_conflicts)
    19716    0.128    0.000    2.462    0.000 workingtree.py:324(<generator expression>)
    19716    0.257    0.000    2.334    0.000 workingtree.py:243(list_files)
72016/19716    0.884    0.000    2.077    0.000 workingtree.py:255(descend)
        2    0.317    0.159    1.923    0.961 xml5.py:116(_unpack_inventory)
        1    0.000    0.000    1.476    1.476 branch.py:946(working_tree)
        1    0.011    0.011    1.476    1.476 workingtree.py:121(__init__)
    39380    0.524    0.000    1.429    0.000 xml5.py:135(_unpack_entry)
        1    0.000    0.000    1.177    1.177 branch.py:957(basis_tree)
        1    0.000    0.000    1.176    1.176 branch.py:933(revision_tree)
        1    0.001    0.001    1.176    1.176 branch.py:790(get_revision_inventory)
        1    0.000    0.000    1.175    1.175 branch.py:771(get_inventory)
    18548    0.210    0.000    1.077    0.000 workingtree.py:218(get_file_sha1)

real    1m1.275s
user    0m38.901s
sys     0m18.229s



cheers

-- 
Michael Ellerman
IBM OzLabs

email: michael:ellerman.id.au
inmsg: mpe:jabber.org
wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20051027/fabc004b/attachment.pgp 


More information about the bazaar mailing list