git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Gummerer <t.gummerer@gmail.com>
To: erik@vger.kernel.org,
	=?iso-8859-1?Q?elfstr=F6m_=3Cerik=2Eelfstrom=40gmail=2Ecom=3E?=@vger.kernel.org
Cc: Git List <git@vger.kernel.org>
Subject: Re: [PATCH v2 2/3] p7300: add performance tests for clean
Date: Sun, 12 Apr 2015 18:52:57 +0200	[thread overview]
Message-ID: <20150412165257.GA5793@hank> (raw)
In-Reply-To: <CAMpP7NZyHBMZ5omT+fPGfkRR56HQPNP3n6cXD7S8voVvqrG6eg@mail.gmail.com>

On 04/12, erik elfström wrote:
> On Sat, Apr 11, 2015 at 7:59 PM, Thomas Gummerer <t.gummerer@gmail.com> wrote:
> > On 04/11, Erik Elfström wrote:
> >> Signed-off-by: Erik Elfström <erik.elfstrom@gmail.com>
> >> ---
> >>  t/perf/p7300-clean.sh | 37 +++++++++++++++++++++++++++++++++++++
> >>  1 file changed, 37 insertions(+)
> >>  create mode 100755 t/perf/p7300-clean.sh
> >>
> >> diff --git a/t/perf/p7300-clean.sh b/t/perf/p7300-clean.sh
> >> new file mode 100755
> >> index 0000000..af50d5d
> >> --- /dev/null
> >> +++ b/t/perf/p7300-clean.sh
> >> @@ -0,0 +1,37 @@
> >> +#!/bin/sh
> >> +
> >> +test_description="Test git-clean performance"
> >> +
> >> +. ./perf-lib.sh
> >> +
> >> +test_perf_large_repo
> >> +test_checkout_worktree
> >> +
> >> +test_expect_success 'setup untracked directory with many sub dirs' '
> >> +     rm -rf 500_sub_dirs 50000_sub_dirs clean_test_dir &&
> >> +     mkdir 500_sub_dirs 50000_sub_dirs clean_test_dir &&
> >> +     for i in $(test_seq 1 500)
> >> +     do
> >> +             mkdir 500_sub_dirs/dir$i || return $?
> >> +     done &&
> >> +     for i in $(test_seq 1 100)
> >> +     do
> >> +             cp -r 500_sub_dirs 50000_sub_dirs/dir$i || return $?
> >> +     done
> >> +'
> >> +
> >> +test_perf 'clean many untracked sub dirs, check for nested git' '
> >> +     rm -rf clean_test_dir/50000_sub_dirs_cpy &&
> >> +     cp -r 50000_sub_dirs clean_test_dir/50000_sub_dirs_cpy &&
> >
> > Maybe this would be a good place to use test_perf_cleanup, which I
> > introduced a while ago and you can find in the
> > tg/perf-lib-test-perf-cleanup branch?  It probably won't influence the
> > performance a lot, but still better separate the code that actually
> > needs to be tested from the cleanup/preparation code.  Ditto in the
> > other test.
> >
>
> Yes, that would be a clear improvement. I was looking for something like
> this, the copy takes more time than the clean currently.
>
> The cleanup hook is maybe not exactly the right fit here though. I would
> need to do one initial copy in the setup test and then a copy in the
> cleanup, something like this:
>
> test_expect_success 'setup untracked directory with many sub dirs' '
>     ...
>     cp -r 50000_sub_dirs clean_test_dir/50000_sub_dirs_cpy
> '
>
> test_perf_cleanup 'clean many untracked sub dirs, check for nested git' '
>     git clean -q -f -d  clean_test_dir/
> ' '
>     test_dir_is_empty clean_test_dir &&
>     rm -rf clean_test_dir/50000_sub_dirs_cpy &&
>     cp -r 50000_sub_dirs clean_test_dir/50000_sub_dirs_cpy
> '
>
> This works better than my original code but maybe we can do even better
> with something like:
>
> test_setup_perf_cleanup 'clean many untracked sub dirs, check for nested git' '
>     rm -rf clean_test_dir/50000_sub_dirs_cpy &&
>     cp -r 50000_sub_dirs clean_test_dir/50000_sub_dirs_cpy
> ' '
>     git clean -q -f -d  clean_test_dir/
> ' '
>     test_dir_is_empty clean_test_dir
> '
>
> Having a setup phase avoids the initial copy in the setup test making
> things a little easier to follow. I'm not sure its worth the extra complexity
> in perf-lib though (and I'm not sure I would be able to implement it either).

Yeah, you're right, that would look even better.  In order to avoid
the extra complexity we might actually go the other route that was
proposed by Junio in the discussion back then
(http://thread.gmane.org/gmane.comp.version-control.git/234874/focus=235241).

Using that and adding a setup option we could have something like:

test_perf --setup '
	rm -rf clean_test_dir/50000_sub_dirs_cpy &&
	cp -r 50000_sub_dirs clean_test_dir/50000_sub_dirs_cpy
' --cleanup '
	test_dir_is_empty clean_test_dir
' 'clean many untracked sub dirs, check for nested git' '
	git clean -q -f -d clean_test_dir
'

> Also, what would the implications be if I were to use your new cleanup
> function that is not yet on master? Should I rebase on top of your topic
> or make a follow up patch to switch over?

If the consensus is to go that route, I think you could just rebase
the topic onto my topic.  If we introduce the "modern" test style as
described before it might be worth merging this series first and then
switch over to the new style.  You should probably wait for other
opinions before changing it though.

> >> +     git clean -q -f -d  clean_test_dir/ &&
> >> +     test_dir_is_empty clean_test_dir
> >> +'
> >> +
> >> +test_perf 'clean many untracked sub dirs, ignore nested git' '
> >> +     rm -rf clean_test_dir/50000_sub_dirs_cpy &&
> >> +     cp -r 50000_sub_dirs clean_test_dir/50000_sub_dirs_cpy &&
> >> +     git clean -q -f -f -d  clean_test_dir/ &&
> >> +     test_dir_is_empty clean_test_dir
> >> +'
> >> +
> >> +test_done
> >> --
> >> 2.4.0.rc0.37.ga3b75b3
> >>
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe git" in
> >> the body of a message to majordomo@vger.kernel.org
> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
Thomas Gummerer

  reply	other threads:[~2015-04-12 16:53 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-11 16:43 [PATCH v2 0/3] Improving performance of git clean Erik Elfström
2015-04-11 16:43 ` Erik Elfström
2015-04-11 16:43 ` [PATCH v2 1/3] t7300: add tests to document behavior of clean and nested git Erik Elfström
2015-04-11 16:43 ` [PATCH v2 2/3] p7300: add performance tests for clean Erik Elfström
2015-04-11 17:59   ` Thomas Gummerer
2015-04-12 15:31     ` erik elfström
2015-04-12 16:52       ` Thomas Gummerer [this message]
2015-04-11 16:43 ` [PATCH v2 3/3] clean: improve performance when removing lots of directories Erik Elfström
2015-04-15 17:56   ` Junio C Hamano
2015-04-17 18:15     ` erik elfström
2015-04-17 19:00       ` Jeff King
2015-04-17 19:13         ` Junio C Hamano
2015-04-15  3:33 ` [PATCH v2 0/3] Improving performance of git clean Eric Sunshine

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150412165257.GA5793@hank \
    --to=t.gummerer@gmail.com \
    --cc==?iso-8859-1?Q?elfstr=F6m_=3Cerik=2Eelfstrom=40gmail=2Ecom=3E?=@vger.kernel.org \
    --cc=erik@vger.kernel.org \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).