From: Junio C Hamano <gitster@pobox.com>
To: Stefan Beller <sbeller@google.com>
Cc: git@vger.kernel.org, ramsay@ramsayjones.plus.com,
jacob.keller@gmail.com, peff@peff.net, jrnieder@gmail.com,
johannes.schindelin@gmail.com, Jens.Lehmann@web.de,
vlovich@gmail.com, sunshine@sunshineco.com
Subject: Re: [PATCHv4 06/14] run-command: add an asynchronous parallel child processor
Date: Tue, 22 Sep 2015 23:47:41 -0700 [thread overview]
Message-ID: <xmqqa8sdzl6a.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <1442972732-12118-7-git-send-email-sbeller@google.com> (Stefan Beller's message of "Tue, 22 Sep 2015 18:45:24 -0700")
Stefan Beller <sbeller@google.com> writes:
> +static void pp_buffer_stderr(struct parallel_processes *pp)
> +{
> + int i;
> +
> + while ((i = poll(pp->pfd, pp->max_processes, 100)) < 0) {
> + if (errno == EINTR)
> + continue;
> + pp_cleanup(pp);
> + die_errno("poll");
> + }
> +
> + /* Buffer output from all pipes. */
> + for (i = 0; i < pp->max_processes; i++) {
> + if (pp->children[i].in_use &&
> + pp->pfd[i].revents & POLLIN)
> + if (strbuf_read_once(&pp->children[i].err,
> + pp->children[i].process.err, 0) < 0)
> + if (errno != EAGAIN)
> + die_errno("read");
> + }
> +}
I think it is a good thing that the caller is passing the whole pp
to this function. One thing you may want to consider is to adjust
the poll(2) timeout longer when the process slots are full.
There is nothing you can gain by returning early due to timeout
without doing anything from this function when you know you cannot
start a new process (here, I am assuming that your poll(2) would be
unblocked for a disconnect when one of the processes exits, letting
you return and letting the caller call collect_finished(), which in
turn would allow us to make some progress).
On the other hand, during the early ramp-up period, you may want to
use a shorter poll(2) timeout to give the caller a chance to spawn
more processes sooner. But that falls into performance tuning that
can and should be left to a later follow-up patch after we get the
basic machinery right.
next prev parent reply other threads:[~2015-09-23 6:47 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-23 1:45 [PATCHv4 00/14] fetch submodules in parallel and a preview on parallel "submodule update" Stefan Beller
2015-09-23 1:45 ` [PATCHv4 01/14] submodule: Send "Fetching submodule <foo>" to standard error Stefan Beller
2015-09-23 1:45 ` [PATCHv4 02/14] xread: poll on non blocking fds Stefan Beller
2015-09-23 1:45 ` [PATCHv4 03/14] xread_nonblock: add functionality to read from fds without blocking Stefan Beller
2015-09-23 1:45 ` [PATCHv4 04/14] strbuf: add strbuf_read_once to read " Stefan Beller
2015-09-23 1:45 ` [PATCHv4 05/14] run-command: factor out return value computation Stefan Beller
2015-09-23 1:45 ` [PATCHv4 06/14] run-command: add an asynchronous parallel child processor Stefan Beller
2015-09-23 6:29 ` Junio C Hamano
2015-09-23 17:53 ` Stefan Beller
2015-09-23 18:04 ` Junio C Hamano
2015-09-23 19:34 ` Junio C Hamano
2015-09-23 19:39 ` Stefan Beller
2015-09-23 19:47 ` Junio C Hamano
2015-09-23 6:47 ` Junio C Hamano [this message]
2015-09-23 14:59 ` Junio C Hamano
2015-09-23 17:54 ` Junio C Hamano
2015-09-23 23:41 ` [PATCHv5] Another squash on " Stefan Beller
2015-09-24 2:17 ` Junio C Hamano
2015-09-24 21:13 ` [PATCH 0/2] " Stefan Beller
2015-09-24 21:13 ` [PATCH 2/2] SQUASH for "fetch_populated_submodules: use new parallel job processing" Stefan Beller
2015-09-24 21:13 ` [PATCH 1/2] SQUASH??? Stefan Beller
2015-09-25 0:49 ` Junio C Hamano
2015-09-25 1:09 ` Junio C Hamano
2015-09-25 17:52 ` Stefan Beller
2015-09-25 17:56 ` Junio C Hamano
2015-09-25 1:08 ` [PATCH 0/2] Another squash on run-command: add an asynchronous parallel child processor Junio C Hamano
2015-09-25 18:56 ` Stefan Beller
2015-09-25 19:04 ` Junio C Hamano
2015-09-25 19:19 ` Stefan Beller
2015-09-25 19:32 ` Junio C Hamano
2015-09-23 1:45 ` [PATCHv4 07/14] fetch_populated_submodules: use new parallel job processing Stefan Beller
2015-09-23 1:45 ` [PATCHv4 08/14] submodules: allow parallel fetching, add tests and documentation Stefan Beller
2015-09-23 1:45 ` [PATCHv4 09/14] submodule-config: Untangle logic in parse_config Stefan Beller
2015-09-23 1:45 ` [PATCHv4 10/14] submodule config: keep update strategy around Stefan Beller
2015-09-23 1:45 ` [PATCHv4 11/14] git submodule update: cmd_update_recursive Stefan Beller
2015-09-23 1:45 ` [PATCHv4 12/14] git submodule update: cmd_update_clone Stefan Beller
2015-09-23 20:13 ` Junio C Hamano
2015-09-23 1:45 ` [PATCHv4 13/14] git submodule update: cmd_update_fetch Stefan Beller
2015-09-23 1:45 ` [PATCHv4 14/14] Rewrite submodule update in C Stefan Beller
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=xmqqa8sdzl6a.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=jacob.keller@gmail.com \
--cc=johannes.schindelin@gmail.com \
--cc=jrnieder@gmail.com \
--cc=peff@peff.net \
--cc=ramsay@ramsayjones.plus.com \
--cc=sbeller@google.com \
--cc=sunshine@sunshineco.com \
--cc=vlovich@gmail.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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.