git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 3/3] index-pack: adjust default threading cap

From
Jeff King <peff@peff.net>
Date
Aug 24, 2020, 17:37 UTC
Message-ID
<20200824173735.GA673908@coredump.intra.peff.net>
In-Reply-To
<20200822011607.GX8085@camp.crustytoothpaste.net>
On Sat, Aug 22, 2020 at 01:16:07AM +0000, brian m. carlson wrote:
Show 16 quoted lines
> > +		if (nr_threads < 4)
> > +			; /* too few cores to consider capping */
> > +		else if (nr_threads < 6)
> > +			nr_threads = 3; /* historic cap */
> > +		else if (nr_threads < 40)
> > +			nr_threads /= 2;
> 
> I was going to ask if we could make the halving conditional on x86_64,
> but it turns out POWER and UltraSPARC also have SMT, so that doesn't
> make sense.  I expect that most users who have more than 6 "cores" are
> going to be on one of those systems or possibly ARM64, and since the
> performance penalty of using half as many cores isn't that significant,
> I'm not sure it's worth worrying about further.  This will be an
> improvement regardless.
> 
> Which is just a long way of saying, this patch seems fine to me.

OK, good. :) I agree there may be room for more improvement on those systems. But lacking access to any, my goal was to make things better on systems I _could_ test on, and not make things worse on other systems. So I'd be very happy if people on other platforms (especially non-intel ones) wanted to run:

  cd t/perf
  GIT_PERF_EXTRA=1 \
  GIT_PERF_LARGE_REPO=/path/to/clone/of/linux.git \
  ./p5302-pack-index.sh
and report the results.

I do have a slightly-old AMD machine with 4 cores (an A8-7600). Here's what it says:

  5302.3: index-pack 0 threads                   447.67(436.62+6.57)
  5302.4: index-pack 1 threads                   450.80(441.26+7.20)
  5302.5: index-pack 2 threads                   265.62(459.56+7.30)
  5302.6: index-pack 4 threads                   177.06(477.56+8.22)
  5302.7: index-pack default number of threads   202.60(473.15+7.61)

So it does get better with 4 threads (but we continue to cap it at 3). I wonder whether we should just do:

diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 9721bf1ffe..d7453d0c09 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -1809,7 +1809,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
 		if (nr_threads < 4)
 			; /* too few cores to consider capping */
 		else if (nr_threads < 6)
-			nr_threads = 3; /* historic cap */
+			nr_threads = nr_threads;
 		else if (nr_threads < 40)
 			nr_threads /= 2;
 		else

That does probably make things slightly worse for a 6-core hyperthreaded
Intel machine. And it doesn't help an actual 8-core AMD machine at all.

-Peff
Previous: brian m. carlsonNext: Eric Sunshine
Message 9 of 13 in “index-pack threading defaults”
  1. 0/3 index-pack threading defaultsJeff King, Aug 21, 2020
  2. 1/3 p5302: disable thread-count parameter tests by defaultJeff King, Aug 21, 2020
  3. 2/3 p5302: count up to online-cpus for thread testsJeff King, Aug 21, 2020
  4. Jeff KingAug 21, 2020
  5. 3/3 index-pack: adjust default threading capJeff King, Aug 21, 2020
  6. Eric SunshineAug 21, 2020
  7. Jeff KingAug 21, 2020
  8. brian m. carlsonAug 22, 2020
  9. Jeff KingAug 24, 2020
  10. Eric SunshineAug 24, 2020
  11. Jeff KingAug 21, 2020
  12. Junio C HamanoAug 21, 2020
  13. Jeff KingAug 21, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.