git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 0/5] Progressing with `git submodule foreach_parallel`
@ 2015-08-27  0:52 Stefan Beller
  2015-08-27  0:52 ` [PATCH 1/5] submodule: implement `module_clone` as a builtin helper Stefan Beller
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Stefan Beller @ 2015-08-27  0:52 UTC (permalink / raw)
  To: git; +Cc: peff, jrnieder, gitster, Stefan Beller

This series applies on top of 10d0bef9981c8045b8c9aac1ca7b8761896bed0c in
the branch origin/sb/submodule-helper

The first patch is a resend of module_clone, which now contains all
memory leak fixes. 

The second patch adding the new task queue is rewritten to not
use semaphores any more, but only mutexes and condition variables
as that's what we use at other places in the code base. So it is
better to align to these places, it makes the threading pool also
easier to understand internally.
Originally there were 2 semaphores to control the queue length
(0 < queue length < number of threads), such that we don't overallocate
memory, but rather slow down the thread adding new tasks to the queue.
This has been removed and the queue may grow infinitely large.

The third patch adding `git submodule foreach_parallel` learned a
totally different behavior how to interact with the output channels
(way better for human consumption as you have early feedback and
feedback all the time, ok-ish for machine consumption, but far from
perfect).

The fourth patch rewriting index-pack was made smaller and doesn't 
rewrite the workflow any more, but only plugs in the new threading
API instead of constructing the pthreads themselves.
I started benchmarking that patch, but I seem to get only bogus results,
so I cannot tell if it still makes it 2 % slower as Jeff claimed.

The fifth patch refactors pack-objects to be *way* more understandable IMHO!
It also switches to the new threading pool, but the refactor may be
suitable also if we decide to not use the threading API there.
The reason for it being more readable is the movement of the rebalancing
into the threads themselves, which then turns out to require a lot less
of locking and communication variables.

Any feedback is welcome!
Thanks,
Stefan

Stefan Beller (5):
  submodule: implement `module_clone` as a builtin helper
  thread-utils: add a threaded task queue
  submodule: helper to run foreach in parallel
  index-pack: Use the new worker pool
  pack-objects: Use new worker pool

 builtin/index-pack.c        |  23 ++--
 builtin/pack-objects.c      | 175 ++++++++----------------
 builtin/submodule--helper.c | 318 +++++++++++++++++++++++++++++++++++++++++++-
 git-submodule.sh            |  91 ++-----------
 run-command.c               |  29 ++--
 thread-utils.c              | 227 +++++++++++++++++++++++++++++++
 thread-utils.h              |  35 +++++
 7 files changed, 677 insertions(+), 221 deletions(-)

-- 
2.5.0.264.g784836d

^ permalink raw reply	[flat|nested] 12+ messages in thread
* [RFC PATCH 0/5] Demonstrate new parallel threading API
@ 2015-08-25 17:28 Stefan Beller
  2015-08-25 17:28 ` [PATCH 5/5] pack-objects: Use new worker pool Stefan Beller
  0 siblings, 1 reply; 12+ messages in thread
From: Stefan Beller @ 2015-08-25 17:28 UTC (permalink / raw)
  To: peff; +Cc: git, jrnieder, gitster, Stefan Beller

This series build on top of origin/sb/submodule-helper.
The first patch is a fixup to the last commit in the target branch
to fix a memory leak. The patch is not really part of the series, but
as I chose to build on top of that series I can fix it up as we go.

The patch 2 adds a new API to easily use a threaded work pool.

patch 3 adds the command `submodule foreach_parallel` (completely untested, RFC!)
which was the original goal of this series. But oh well, I got tricked by Peff
to prove how awesome the new API for parallel threading is, so that's shown off
in patches 4 and 5.

Note: Both patch 4 and 5 delete more lines of code than they add, improving 
readability a lot as you can focus on the actual task and not on the threading
stuff.

Any feedback welcome!
Thanks,
Stefan

Stefan Beller (5):
  FIXUP submodule: implement `module_clone` as a builtin helper
  thread-utils: add a threaded task queue
  submodule: helper to run foreach in parallel
  index-pack: Use the new worker pool
  pack-objects: Use new worker pool

 builtin/index-pack.c        |  71 ++++++-------
 builtin/pack-objects.c      | 175 +++++++++++---------------------
 builtin/submodule--helper.c | 159 +++++++++++++++++++++++++++--
 git-submodule.sh            |   9 ++
 run-command.c               |  29 +++---
 thread-utils.c              | 237 ++++++++++++++++++++++++++++++++++++++++++++
 thread-utils.h              |  40 ++++++++
 7 files changed, 545 insertions(+), 175 deletions(-)

-- 
2.5.0.400.gff86faf

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2015-08-28 15:34 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-27  0:52 [RFC PATCH 0/5] Progressing with `git submodule foreach_parallel` Stefan Beller
2015-08-27  0:52 ` [PATCH 1/5] submodule: implement `module_clone` as a builtin helper Stefan Beller
2015-08-27 12:36   ` Johannes Schindelin
2015-08-27 21:57     ` Stefan Beller
2015-08-27  0:52 ` [PATCH 2/5] thread-utils: add a threaded task queue Stefan Beller
2015-08-27 12:59   ` Johannes Schindelin
2015-08-27 17:02     ` Stefan Beller
2015-08-28 15:34     ` Junio C Hamano
2015-08-27  0:52 ` [PATCH 3/5] submodule: helper to run foreach in parallel Stefan Beller
2015-08-27  0:52 ` [PATCH 4/5] index-pack: Use the new worker pool Stefan Beller
2015-08-27  0:52 ` [PATCH 5/5] pack-objects: Use " Stefan Beller
  -- strict thread matches above, loose matches on Subject: below --
2015-08-25 17:28 [RFC PATCH 0/5] Demonstrate new parallel threading API Stefan Beller
2015-08-25 17:28 ` [PATCH 5/5] pack-objects: Use new worker pool Stefan Beller

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).