Index | Thread | Search

From:
Klemens Nanni <kn@openbsd.org>
Subject:
Re: git parallel threads revisited
To:
Benoit Lecocq <benoit@openbsd.org>, ports <ports@openbsd.org>, Claudio Jeker <claudio@openbsd.org>
Date:
Wed, 4 Jun 2025 18:31:57 +0000

Download raw body.

Thread
04.06.2025 14:52, Stuart Henderson пишет:
> claudio noticed that at least 'git checkout' still spawns a lot of
> threads; does this seem more reasonable?

So git limits itself to #define MAX_PARALLEL (20) threads and you just
add a first cap to what we can reasonably run at most - makes sense.

With 7.7-stable, I see 21 'git checkout ...' in top(1) on this box:
	hw.machine=sparc64
	hw.ncpuonline=16

Haven't tested the patch there, but pretty sure there will be one proc
and 16 additional threads in top, which, I guess, is quite similar to
what claudio runs into.

It might make sense to limit this further, but your clamp additional
clamp is certainly OK with me, thanks.


> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/git/Makefile,v
> diff -u -p -r1.287 Makefile
> --- Makefile	19 May 2025 14:23:44 -0000	1.287
> +++ Makefile	4 Jun 2025 11:51:02 -0000
> @@ -3,7 +3,7 @@ COMMENT-svn =	subversion interoperabilit
>  COMMENT-x11 =	graphical tools
>  
>  V =		2.49.0
> -REVISION =	1
> +REVISION =	2
>  DISTNAME =	git-${V}
>  CATEGORIES =	devel
>  
> Index: patches/patch-preload-index_c
> ===================================================================
> RCS file: patches/patch-preload-index_c
> diff -N patches/patch-preload-index_c
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ patches/patch-preload-index_c	4 Jun 2025 11:51:02 -0000
> @@ -0,0 +1,12 @@
> +Index: preload-index.c
> +--- preload-index.c.orig
> ++++ preload-index.c
> +@@ -124,6 +124,8 @@ void preload_index(struct index_state *index,
> + 	trace2_region_enter("index", "preload", NULL);
> + 
> + 	trace_performance_enter();
> ++	if (threads > online_cpus())
> ++		threads = online_cpus();
> + 	if (threads > MAX_PARALLEL)
> + 		threads = MAX_PARALLEL;
> + 	offset = 0;
>