* 66 patches and counting
@ 2011-10-05 21:29 Michael Haggerty
2011-10-05 21:36 ` Junio C Hamano
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Michael Haggerty @ 2011-10-05 21:29 UTC (permalink / raw)
To: git
My renovation of refs.c [1] is currently at 66 patches and counting.
What can I say?: (1) I like to make changes in the smallest irreducible
steps and (2) there is a lot that needed to be done in refs.c.
When I'm done, is it OK to dump a patch series like that on the git
mailing list? Is it pointless because nobody will review them anyway?
Is a big pile of changes like this welcome in any form? Would it be
better to convey the changes via git itself (e.g., github) rather than
via emails?
Michael
[1] hierarchical-refs at git://github.com/mhagger/git.git
--
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: 66 patches and counting
2011-10-05 21:29 66 patches and counting Michael Haggerty
@ 2011-10-05 21:36 ` Junio C Hamano
2011-10-05 21:55 ` Jonathan Nieder
2011-10-06 22:16 ` Martin Fick
2 siblings, 0 replies; 8+ messages in thread
From: Junio C Hamano @ 2011-10-05 21:36 UTC (permalink / raw)
To: Michael Haggerty; +Cc: git
Michael Haggerty <mhagger@alum.mit.edu> writes:
> When I'm done, is it OK to dump a patch series like that on the git
> mailing list?
Bits and pieces that are of digestable sizes.
I would wait sending anything large-ish (like more than 10 patches) before
'next' is rewound, which is the sign the cycle is in full swing.
> Is it pointless because nobody will review them anyway?
Bits and pieces that are of digestable sizes. Especially given:
> I like to make changes in the smallest irreducible steps
each step in your series should make sense by itself already (otherwise
you would have rebase-i'ed them to collapse too-small pieces into one that
makes sense standalone on top of the earlier steps).
> Is a big pile of changes like this welcome in any form?
Bits and pieces that are of digestable sizes.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: 66 patches and counting
2011-10-05 21:29 66 patches and counting Michael Haggerty
2011-10-05 21:36 ` Junio C Hamano
@ 2011-10-05 21:55 ` Jonathan Nieder
2011-10-06 22:16 ` Martin Fick
2 siblings, 0 replies; 8+ messages in thread
From: Jonathan Nieder @ 2011-10-05 21:55 UTC (permalink / raw)
To: Michael Haggerty; +Cc: git, Elijah Newren
(+cc: Elijah, who has more experience in this subject than I do)
Hi,
Michael Haggerty wrote:
> My renovation of refs.c [1] is currently at 66 patches and counting.
> What can I say?: (1) I like to make changes in the smallest irreducible
> steps and (2) there is a lot that needed to be done in refs.c.
>
> When I'm done
We've seen series with fifty-something patches on this list before.
My (generic) advice:
1. Send in installments, early and often. It would not be fun if the
first ten patches have a fatal flaw that means the later ones have
to be reworked.
2. Make sure the cover letter makes people want to read the later
patches. Make sure each patch has a commit message that motivates
it alone or explains how it fits into the larger picture.
3. When a patch is not intended to cause any functional change, say
so, so reviewers can check that.
4. Include test scripts declaring what effect (or lack thereof) each
patch is supposed to have.
5. "Smallest irreducible step" is not necessarily the appropriate
granularity when publishing. "Largest piece that a person would
want to review, apply, or revert independently" is.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: 66 patches and counting
2011-10-05 21:29 66 patches and counting Michael Haggerty
2011-10-05 21:36 ` Junio C Hamano
2011-10-05 21:55 ` Jonathan Nieder
@ 2011-10-06 22:16 ` Martin Fick
2011-10-07 1:59 ` Martin Fick
2011-10-07 3:14 ` Michael Haggerty
2 siblings, 2 replies; 8+ messages in thread
From: Martin Fick @ 2011-10-06 22:16 UTC (permalink / raw)
To: Michael Haggerty; +Cc: git
On Wednesday, October 05, 2011 03:29:57 pm Michael Haggerty
wrote:
> My renovation of refs.c [1] is currently at 66 patches
> and counting. What can I say?: (1) I like to make
> changes in the smallest irreducible steps and (2) there
> is a lot that needed to be done in refs.c.
>
> When I'm done, is it OK to dump a patch series like that
> on the git mailing list? Is it pointless because nobody
> will review them anyway? Is a big pile of changes like
> this welcome in any form? Would it be better to convey
> the changes via git itself (e.g., github) rather than
> via emails?
>
> Michael
>
> [1] hierarchical-refs at git://github.com/mhagger/git.git
Michael,
I downloaded your patch series and tested it on my repos.
Here are some of the timings I saw with your branch as is:
* git clone 2:50m (same)
* full fetch changes (> 1 hour) (bad!)
* git branch (unpacked, ungced) .7s (good!)
* git branch (packed, gced) .18s (~>same)
* git checkout (unpacked, ungced) 10.5s (~>same)
* git checkout (packed, gced) 9.5 (~>same)
* noop fetch changes (unpacked, ungced) 14s (~>same)
* noop fetch changes (packed, gced) 12s (same)
For the full fetch, I estimated, things were scrolling by
slow enough that after about 15 min I interrupted it. I
suspect it might be at least 6 times longer (if rate stayed
the same).
Here are the best timings for all the good patches that
others have submitted to fix many of the previous problems I
brought up:
* git clone 2:50m
* full fetch changes 4:50m
* git branch (unpacked, ungced) 9s
* git branch (packed, gced) .05s
* git checkout (unpacked, ungced) 9s
* git checkout (packed, gced) 8s
* noop fetch changes (unpacked, ungced) 12s
* noop fetch changes (packed, gced) 12s
(my internal patches bring full fetch down to 2:50m)
It would be nice if you could rebase your work on top of
some of the other patches also so that I could see those
results. I might give that a try if I have the time and it
is easy (or I might rebase those patches on yours).
Thanks,
-Martin
--
Employee of Qualcomm Innovation Center, Inc. which is a
member of Code Aurora Forum
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: 66 patches and counting
2011-10-06 22:16 ` Martin Fick
@ 2011-10-07 1:59 ` Martin Fick
2011-10-07 3:14 ` Michael Haggerty
1 sibling, 0 replies; 8+ messages in thread
From: Martin Fick @ 2011-10-07 1:59 UTC (permalink / raw)
To: Michael Haggerty; +Cc: git
On Thursday, October 06, 2011 04:16:39 pm Martin Fick wrote:
> On Wednesday, October 05, 2011 03:29:57 pm Michael
> Haggerty
> > [1] hierarchical-refs at
> > git://github.com/mhagger/git.git
>
> I downloaded your patch series and tested it on my repos.
>
> * full fetch changes (> 1 hour) (bad!)
I bisected this problem, it was introduced in this commit:
commit e12ce45b4f1bd8ed6652a742b7e6cf6f101b3604
Author: Michael Haggerty <mhagger@alum.mit.edu>
Date: Wed Oct 5 11:30:06 2011 +0200
Store references hierarchically
This slightly changes the order of iteration over
references; now
references are strictly sorted componentwise rather than
as
"/"-containing strings as before. For example,
"subspace/one" now
sorts before "subspace-x", whereas before the order was
reversed.
Tweak a test case to accept the new ordering.
Up until that point, the fetch looks pretty good,
-Martin
--
Employee of Qualcomm Innovation Center, Inc. which is a
member of Code Aurora Forum
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: 66 patches and counting
2011-10-06 22:16 ` Martin Fick
2011-10-07 1:59 ` Martin Fick
@ 2011-10-07 3:14 ` Michael Haggerty
2011-10-07 15:51 ` Scalable reference handling Michael Haggerty
1 sibling, 1 reply; 8+ messages in thread
From: Michael Haggerty @ 2011-10-07 3:14 UTC (permalink / raw)
To: Martin Fick; +Cc: git
[-- Attachment #1: Type: text/plain, Size: 2236 bytes --]
On 10/07/2011 12:16 AM, Martin Fick wrote:
> I downloaded your patch series and tested it on my repos.
Very cool (though a bit premature, as you discovered). The patch series
still has a known performance regression in the area of
do_for_each_ref(), which I hope to figure out soon. I will definitely
tell you when I think that the patch series is ready for more serious
testing (hopefully today) in the hopes that you can benchmark it against
your repo.
In the future, please tell me the SHA1 of any versions that you test, as
I am still frequently non-ff updating the hierarchical-refs branch.
> Here are the best timings for all the good patches that
> others have submitted to fix many of the previous problems I
> brought up:
What are, in your measurements, the "good patches" that you consider
contenders performance-wise? (I've lost track because there have been
so many suggestions in this area.)
It would be great if you would serve as a kind of benchmarking
referee/clearinghouse for the various suggested patches. I have been
benchmarking with some rough scripts that I wrote [1]; the current
status is appended below (the numbers are clock times in seconds). FWIW
the attached output was generated using roughly the following commands:
t/make-refperf-repo --refs=10000 --commits=20000
cp t/refperf-many .
# Adjust REFPERF_BRANCH in ./refperf-many:
$EDITOR ./refperf-many
revs="v1.7.6 v1.7.7 origin/master origin/hierarchical-refs^^
origin/hierarchical-refs^ origin/hierarchical-refs origin/master"
./refperf-many $revs
t/refperf-summary $revs >refperf-summary.out
See the comments at the top of the scripts for more details. Please
suggest more tests to be added to t/refperf!
> It would be nice if you could rebase your work on top of
> some of the other patches also so that I could see those
> results. I might give that a try if I have the time and it
> is easy (or I might rebase those patches on yours).
I believe that at least some of the other patches will be superseded by
mine. When I get my patch series done I will look into it in more detail...
Michael
[1] Branch "refperf" at git://github.com/mhagger/git.git
--
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
[-- Attachment #2: refperf-summary.out --]
[-- Type: text/plain, Size: 3535 bytes --]
=================================== ======= ======= ======= ======= ======= =======
Test name [0] [1] [2] [3] [4] [5]
=================================== ======= ======= ======= ======= ======= =======
branch-loose-cold 5.84 5.38 6.05 0.53 0.47 0.56
branch-loose-warm 0.12 0.11 0.13 0.00 0.02 0.03
for-each-ref-loose-cold 6.83 6.45 6.13 8.21 8.69 8.28
for-each-ref-loose-warm 0.25 0.25 0.25 0.84 0.84 0.84
checkout-loose-cold 4.55 5.08 5.76 0.73 0.60 0.68
checkout-loose-warm 0.11 0.11 0.12 0.03 0.02 0.04
checkout-orphan-loose 0.10 0.10 0.11 0.01 0.02 0.01
checkout-from-detached-loose 0.97 1.05 0.95 7.80 8.27 8.37
branch-contains-loose-cold 14.98 15.44 18.54 16.46 16.91 17.54
branch-contains-loose-warm 9.44 8.97 10.15 9.60 9.58 9.71
pack-refs-loose 0.97 1.00 1.37 1.69 1.62 1.65
branch-packed-cold 0.49 0.63 0.81 1.38 1.37 1.45
branch-packed-warm 0.02 0.02 0.05 0.77 0.74 0.80
for-each-ref-packed-cold 1.18 0.97 1.56 1.33 2.03 1.51
for-each-ref-packed-warm 0.15 0.15 0.16 0.52 0.52 0.50
checkout-packed-cold 0.84 0.60 0.70 0.96 0.94 1.28
checkout-packed-warm 0.02 0.09 0.04 0.41 0.41 0.44
checkout-orphan-packed 0.01 0.02 0.10 0.38 0.39 0.42
checkout-from-detached-packed 6.94 7.35 9.18 1.31 1.35 1.45
branch-contains-packed-cold 11.19 10.81 12.35 10.91 10.09 10.16
branch-contains-packed-warm 10.24 9.90 11.19 9.13 9.07 9.13
clone-loose-cold 93.77 90.65 98.07 99.03 103.72 101.85
clone-loose-warm 3.12 3.19 3.24 3.56 3.60 3.50
fetch-nothing-loose 0.85 0.84 0.87 1.20 1.18 1.21
pack-refs 0.12 0.13 0.14 0.51 0.54 0.51
fetch-nothing-packed 0.85 0.84 0.86 1.20 1.19 1.20
clone-packed-cold 2.17 2.38 2.50 2.28 2.46 2.34
clone-packed-warm 0.32 0.34 0.39 0.40 0.38 0.30
fetch-everything-cold 92.37 95.96 102.20 100.80 104.72 106.85
fetch-everything-warm 5.55 5.65 5.53 6.26 6.27 6.35
=================================== ======= ======= ======= ======= ======= =======
[0] v1.7.6 (refperf.times.d78c84e8698e750139667bc724b08eb34e795b65)
[1] v1.7.7 (refperf.times.a258e475eb74e183e9e68ca30e32c5253081356d)
[2] origin/master (refperf.times.27897d25f1b36d400b82b655701b87fd205dbc2f)
[3] origin/hierarchical-refs^^ (refperf.times.eabcf1ed884d95878f12ca5ea32a3e20c70194f2)
[4] origin/hierarchical-refs^ (refperf.times.be9118234275c4fa6002ef97d989b0d28c94c0bd)
[5] origin/hierarchical-refs (refperf.times.74d1ae38f70f4f97745caf235ef3f34b3e326ad4)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Scalable reference handling
2011-10-07 3:14 ` Michael Haggerty
@ 2011-10-07 15:51 ` Michael Haggerty
2011-10-07 18:51 ` Martin Fick
0 siblings, 1 reply; 8+ messages in thread
From: Michael Haggerty @ 2011-10-07 15:51 UTC (permalink / raw)
To: Martin Fick; +Cc: git
[-- Attachment #1: Type: text/plain, Size: 1666 bytes --]
On 10/07/2011 05:14 AM, Michael Haggerty wrote:
> On 10/07/2011 12:16 AM, Martin Fick wrote:
>> I downloaded your patch series and tested it on my repos.
>
> Very cool (though a bit premature, as you discovered). The patch series
> still has a known performance regression in the area of
> do_for_each_ref(), which I hope to figure out soon. I will definitely
> tell you when I think that the patch series is ready for more serious
> testing (hopefully today) in the hopes that you can benchmark it against
> your repo.
I just pushed versions to github that I think are ready for some
preliminary testing. There were some silly inefficiencies in the
version that you tested earlier, so this version is considerably faster
in a few key tests.
I don't have complete benchmarking results, but I have attached what I
have. I wouldn't put much weight on small differences in the numbers
because the computer was not 100% quiescent while I ran the tests. But
I think the results are impressive: the new code (columns 5-8) is a bit
slower in only a few cases but faster (sometimes by a large factor) in
many other cases.
I can't write more now, but Martin, if you have time to benchmark
9944c7faf903a95d4ed9de284ace32debe21cdc1 against your repository, I
would be very interested to learn the results.
BTW I am not asking anybody to review the patch series yet; I would like
to do some more tests and cleanup first. But of course I wouldn't
object to feedback. A good starting point would be the comments at the
top of refs.c, where the basic data structures are explained.
Michael
--
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
[-- Attachment #2: refperf-summary-3.out --]
[-- Type: text/plain, Size: 4983 bytes --]
=================================== ======= ======= ======= ======= ======= ======= ======= ======= =======
Test name [0] [1] [2] [3] [4] [5] [6] [7] [8]
=================================== ======= ======= ======= ======= ======= ======= ======= ======= =======
branch-loose-cold 5.14 5.80 4.98 4.55 5.03 0.41 0.45 0.45 0.51
branch-loose-warm 0.10 0.12 0.12 0.19 0.11 0.02 0.02 0.03 0.02
for-each-ref-loose-cold 6.02 6.36 7.48 5.62 6.27 5.32 5.02 5.24 5.01
for-each-ref-loose-warm 0.25 0.25 0.27 0.25 0.25 0.26 0.26 0.25 0.26
checkout-loose-cold 5.47 5.03 5.66 5.39 5.72 0.65 0.77 0.95 0.59
checkout-loose-warm 0.11 0.11 0.11 0.11 0.11 0.02 0.03 0.03 0.03
checkout-orphan-loose 0.09 0.09 0.10 0.10 0.10 0.03 0.01 0.01 0.02
checkout-from-detached-loose-cold N/A N/A N/A N/A N/A N/A N/A N/A N/A
checkout-from-detached-loose-warm N/A N/A N/A N/A N/A N/A N/A N/A N/A
branch-contains-loose-cold 14.69 13.95 13.76 13.84 14.07 14.08 14.12 14.01 14.77
branch-contains-loose-warm 8.99 8.89 8.74 8.82 8.80 8.81 8.84 8.76 8.91
pack-refs-loose 1.23 1.02 1.02 1.02 1.01 1.02 1.00 0.99 1.03
branch-packed-cold 0.66 0.65 0.84 0.67 0.52 0.76 0.58 0.55 0.59
branch-packed-warm 0.01 0.01 0.03 0.03 0.02 0.02 0.05 0.02 0.05
for-each-ref-packed-cold 1.38 1.29 1.07 1.13 1.05 1.08 1.26 1.05 1.27
for-each-ref-packed-warm 0.17 0.16 0.17 0.17 0.17 0.16 0.17 0.16 0.16
checkout-packed-cold 8.74 7.75 7.75 1.59 1.61 1.79 1.54 1.55 1.53
checkout-packed-warm 0.03 0.05 0.04 0.04 0.05 0.05 0.03 0.05 0.06
checkout-orphan-packed 0.04 0.01 0.01 0.03 0.02 0.02 0.05 0.05 0.02
checkout-from-detached-packed-cold 8.88 8.22 8.12 1.98 1.81 1.94 1.99 1.88 1.97
checkout-from-detached-packed-warm 6.55 6.43 6.44 0.44 0.46 0.45 0.46 0.46 0.49
branch-contains-packed-cold 11.59 10.73 10.37 9.42 9.24 9.40 9.37 9.56 9.34
branch-contains-packed-warm 10.20 9.79 9.83 8.68 8.61 8.68 8.61 8.82 9.33
clone-loose-cold 105.58 86.98 89.42 88.96 88.19 87.01 87.20 87.11 88.20
clone-loose-warm 3.26 3.11 3.18 3.10 3.17 3.14 3.14 3.21 3.16
fetch-nothing-loose 0.85 0.84 0.86 0.85 0.84 0.88 0.84 0.84 0.84
pack-refs 0.12 0.14 0.16 0.13 0.15 0.14 0.14 0.15 0.14
fetch-nothing-packed 0.84 0.84 0.86 0.85 0.89 0.85 0.84 0.84 0.83
clone-packed-cold 2.72 2.33 2.11 2.19 2.23 2.14 2.24 2.01 2.16
clone-packed-warm 0.40 0.40 0.33 0.40 0.28 0.29 0.33 0.31 0.31
fetch-everything-cold 106.28 92.92 94.12 88.76 91.62 88.75 89.49 89.78 91.43
fetch-everything-warm 5.56 5.63 5.70 5.62 5.63 5.66 5.69 5.71 5.78
=================================== ======= ======= ======= ======= ======= ======= ======= ======= =======
[0] v1.7.6 (refperf.times.d78c84e8698e750139667bc724b08eb34e795b65)
[1] v1.7.7 (refperf.times.a258e475eb74e183e9e68ca30e32c5253081356d)
[2] origin/master (refperf.times.27897d25f1b36d400b82b655701b87fd205dbc2f)
[3] 16583974c20b856bb60b5a733020425c16a19670^ (refperf.times.558b49c8489c95cf966b959c3444c95d177dc4dc)
[4] 16583974c20b856bb60b5a733020425c16a19670 (refperf.times.16583974c20b856bb60b5a733020425c16a19670)
[5] origin/hierarchical-refs^^^^ (refperf.times.5f5a126553eef88455f7deb2745c5f93073bfe69)
[6] origin/hierarchical-refs^^^ (refperf.times.a306af145856f8296bf2ff4a3ace5e86ac3b1fc8)
[7] origin/hierarchical-refs^ (refperf.times.fd53cf7a7fcc360f30ea0ec5b964cefeec70c11b)
[8] origin/hierarchical-refs (refperf.times.9944c7faf903a95d4ed9de284ace32debe21cdc1)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Scalable reference handling
2011-10-07 15:51 ` Scalable reference handling Michael Haggerty
@ 2011-10-07 18:51 ` Martin Fick
0 siblings, 0 replies; 8+ messages in thread
From: Martin Fick @ 2011-10-07 18:51 UTC (permalink / raw)
To: Michael Haggerty; +Cc: git
On Friday, October 07, 2011 09:51:46 am Michael Haggerty
wrote:
> I can't write more now, but Martin, if you have time to
> benchmark 9944c7faf903a95d4ed9de284ace32debe21cdc1
> against your repository, I would be very interested to
> learn the results.
The fetch no longer seems to suffer from the large
regression, it is now faster (~7m) than 1.7.7 (which was
+15m).
As a quick note, if I comment out the
invalidate_cached_refs() call in write_ref_sha1() on line
2065 (on top of 9944c7), it is still much faster, only ~2m.
Perhaps growing the array on the fly with many refs is still
be too inefficient?
-Martin
--
Employee of Qualcomm Innovation Center, Inc. which is a
member of Code Aurora Forum
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-10-07 18:52 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-05 21:29 66 patches and counting Michael Haggerty
2011-10-05 21:36 ` Junio C Hamano
2011-10-05 21:55 ` Jonathan Nieder
2011-10-06 22:16 ` Martin Fick
2011-10-07 1:59 ` Martin Fick
2011-10-07 3:14 ` Michael Haggerty
2011-10-07 15:51 ` Scalable reference handling Michael Haggerty
2011-10-07 18:51 ` Martin Fick
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).