git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Stefan Beller <sbeller@google.com>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	Junio C Hamano <gitster@pobox.com>,
	"git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: Drastic jump in the time required for the test suite
Date: Thu, 20 Oct 2016 19:20:53 -0400	[thread overview]
Message-ID: <20161020232052.uggm2w7qitrj5f7g@sigill.intra.peff.net> (raw)
In-Reply-To: <20161020210013.57wkyhmf2ism6vt2@sigill.intra.peff.net>

On Thu, Oct 20, 2016 at 05:00:13PM -0400, Jeff King wrote:

> > I am not an expert on perl nor tracing, but is it feasible to find out
> > how many internal calls there are? i.e. either some shell script (rebase,
> > submodule) calling git itself a couple of times or even from compile/git/git
> > itself, e.g. some submodule operations use forking in there.
> 
> The script below is my attempt, though I think it is not quite right, as
> "make" should be the single apex of the graph. You can run it like:
> 
>   strace -f -o /tmp/foo.out -e clone,execve make test
>   perl graph.pl /tmp/foo.out | less -S

Ah, I see why it is sometimes wrong. We may see parent/child
interactions out of order. E.g., we may see:

  1. Process B execs "git".

  2. Process B exits.

  3. Process A forks pid B.

because strace does not manage to ptrace "A" before "B" finishes
running. It's hard to tell in step 3 if this is the same "A" we saw
earlier. You cannot just go by PID, because the tests run enough
processes that we end up reusing PIDs. My script has a hack which
increments a counter when processes go away, but that happens in step 2
above (and steps 1 and 3 think they are seeing different processes, even
though they are the same).

I'm sure it could be cleverly hacked around, but the easiest thing is
probably to just make sure the tests are not run in parallel. High load
makes that kind of out-of-order sequence much more likely.

Making sure I run it with "make -j1", the script I posted earlier gives
pretty reasonable output. I won't post mine here, as it's double-digit
megabytes, but you should be able to recreate it yourself.

Of course, the call graph by itself isn't that interesting. But you
might be able to do some interesting analysis, or just find spots of
interest to you (like git-submodule).

-Peff

  reply	other threads:[~2016-10-20 23:21 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-19  9:18 Drastic jump in the time required for the test suite Johannes Schindelin
2016-10-19 17:32 ` Junio C Hamano
2016-10-19 20:56   ` Jeff King
2016-10-20 10:50     ` Johannes Schindelin
2016-10-20 11:39       ` Jeff King
2016-10-20 19:54       ` Stefan Beller
2016-10-20 21:38         ` Jeff King
2016-10-20 21:53           ` Stefan Beller
2016-10-20 21:57             ` Jeff King
2016-10-20 21:56           ` Jeff King
2016-10-21  5:27           ` Johannes Sixt
2016-10-21  8:24             ` Jeff King
2016-10-20 10:17   ` Johannes Schindelin
2016-10-20 12:31     ` Jeff King
2016-10-20 16:30       ` Stefan Beller
2016-10-20 21:00         ` Jeff King
2016-10-20 23:20           ` Jeff King [this message]
2016-10-20 20:38       ` Johannes Sixt
2016-10-20 21:03         ` Jeff King
2016-10-20 20:40       ` Dennis Kaarsemaker
2016-10-21 11:03         ` Duy Nguyen
2016-10-20 16:16     ` Junio C Hamano
2016-10-20 17:13       ` Matthieu Moy
2016-10-20 11:02 ` Duy Nguyen
2016-10-20 16:40   ` René Scharfe
2016-10-21 10:59     ` Duy Nguyen
2016-10-21 20:28       ` René Scharfe
2016-10-21 13:10     ` Matthieu Moy
2016-10-21 19:57       ` René Scharfe
2016-10-27 20:41 ` Eric Wong
2016-10-28  6:38   ` Duy Nguyen

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=20161020232052.uggm2w7qitrj5f7g@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=sbeller@google.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).