Jeff King fbff95b67f index-pack: adjust default threading cap
Commit b8a2486f15 (index-pack: support multithreaded delta resolving,
2012-05-06) describes an experiment that shows that setting the number
of threads for index-pack higher than 3 does not help.

I repeated that experiment using a more modern version of Git and a more
modern CPU and got different results.

Here are timings for p5302 against linux.git run on my laptop, a Core
i9-9880H with 8 cores plus hyperthreading (so online-cpus returns 16):

  5302.3: index-pack 0 threads                   256.28(253.41+2.79)
  5302.4: index-pack 1 threads                   257.03(254.03+2.91)
  5302.5: index-pack 2 threads                   149.39(268.34+3.06)
  5302.6: index-pack 4 threads                   94.96(294.10+3.23)
  5302.7: index-pack 8 threads                   68.12(339.26+3.89)
  5302.8: index-pack 16 threads                  70.90(655.03+7.21)
  5302.9: index-pack default number of threads   116.91(290.05+3.21)

You can see that wall-clock times continue to improve dramatically up to
the number of cores, but bumping beyond that (into hyperthreading
territory) does not help (and in fact hurts a little).

Here's the same experiment on a machine with dual Xeon 6230's, totaling
40 cores (80 with hyperthreading):

  5302.3: index-pack 0 threads                    310.04(302.73+6.90)
  5302.4: index-pack 1 threads                    310.55(302.68+7.40)
  5302.5: index-pack 2 threads                    178.17(304.89+8.20)
  5302.6: index-pack 5 threads                    99.53(315.54+9.56)
  5302.7: index-pack 10 threads                   72.80(327.37+12.79)
  5302.8: index-pack 20 threads                   60.68(357.74+21.66)
  5302.9: index-pack 40 threads                   58.07(454.44+67.96)
  5302.10: index-pack 80 threads                  59.81(720.45+334.52)
  5302.11: index-pack default number of threads   134.18(309.32+7.98)

The results are similar; things stop improving at 40 threads. Curiously,
going from 20 to 40 really doesn't help much, either (and increases CPU
time considerably). So that may represent an actual barrier to
parallelism, where we lose out due to context-switching and loss of
cache locality, but don't reap the wall-clock benefits due to contention
of our coarse-grained locks.

So what's a good default value? It's clear that the current cap of 3 is
too low; our default values are 42% and 57% slower than the best times
on each machine. The results on the 40-core machine imply that 20
threads is an actual barrier regardless of the number of cores, so we'll
take that as a maximum. We get the best results on these machines at
half of the online-cpus value. That's presumably a result of the
hyperthreading. That's common on multi-core Intel processors, but not
necessarily elsewhere. But if we take it as an assumption, we can
perform optimally on hyperthreaded machines and still do much better
than the status quo on other machines, as long as we never half below
the current value of 3.

So that's what this patch does.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-08-21 12:02:36 -07:00
2020-06-17 21:54:03 -07:00
2020-06-22 11:21:07 -07:00
2020-05-01 13:39:59 -07:00
2020-03-05 10:43:02 -08:00
2020-03-25 13:57:41 -07:00
2020-03-25 13:57:41 -07:00
2020-04-28 10:47:10 -07:00
2019-09-28 14:04:16 +09:00
2019-11-20 13:29:02 +09:00
2019-11-18 15:21:28 +09:00
2019-11-18 15:21:28 +09:00
2020-03-30 10:59:08 -07:00
2020-02-19 09:37:15 -08:00
2020-04-16 15:38:06 -07:00
2020-06-08 18:06:26 -07:00
2019-07-09 15:25:44 -07:00
2020-03-24 15:04:44 -07:00
2019-12-01 09:04:36 -08:00
2020-07-06 22:09:13 -07:00
2020-07-06 22:09:13 -07:00
2019-11-10 16:00:54 +09:00
2019-05-05 15:20:10 +09:00
2020-06-25 12:27:45 -07:00
2019-12-25 11:21:58 -08:00
2020-03-10 11:41:40 -07:00
2020-07-06 22:09:13 -07:00
2020-03-24 15:04:43 -07:00
2019-07-25 13:59:20 -07:00
2020-07-26 18:01:43 -07:00
2019-11-18 15:21:28 +09:00
2019-11-10 16:00:54 +09:00
2019-12-01 09:04:35 -08:00
2020-05-12 22:02:17 -07:00
2020-06-25 12:27:47 -07:00
2020-06-25 12:27:47 -07:00
2019-04-22 11:14:43 +09:00
2020-06-08 18:06:26 -07:00
2019-11-18 15:21:28 +09:00
2020-05-01 13:39:55 -07:00
2019-12-01 09:04:35 -08:00
2020-04-15 09:20:29 -07:00
2019-05-05 15:20:10 +09:00
2020-04-29 16:15:27 -07:00
2020-04-10 09:28:02 -07:00
2019-12-16 13:08:39 -08:00
2020-07-06 22:09:13 -07:00
2020-07-06 22:09:13 -07:00
2018-11-02 12:14:21 +09:00
2020-03-24 15:04:44 -07:00
2020-03-24 15:04:44 -07:00
2018-08-15 15:08:23 -07:00
2020-07-06 22:09:17 -07:00
2020-07-06 22:09:17 -07:00
2019-04-01 11:57:39 +09:00
2020-06-02 13:35:05 -07:00
2020-07-06 22:09:13 -07:00
2019-11-10 16:00:54 +09:00
2020-04-29 16:15:27 -07:00
2020-04-29 16:15:27 -07:00
2020-07-06 22:09:13 -07:00
2019-05-05 15:20:10 +09:00
2020-04-28 15:49:56 -07:00
2019-11-13 10:09:10 +09:00
2020-05-13 12:19:18 -07:00
2019-02-05 14:26:11 -08:00
2019-11-18 15:21:29 +09:00
2018-12-09 12:37:32 +09:00
2019-09-05 14:10:18 -07:00
2020-07-06 22:09:13 -07:00
2020-07-06 22:09:13 -07:00
2020-07-06 22:09:13 -07:00
2019-11-10 16:00:54 +09:00
2020-05-08 14:25:01 -07:00
2018-10-19 13:34:02 +09:00

Build status

Git - fast, scalable, distributed revision control system

Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals.

Git is an Open Source project covered by the GNU General Public License version 2 (some parts of it are under different licenses, compatible with the GPLv2). It was originally written by Linus Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

Many Git online resources are accessible from https://git-scm.com/ including full documentation and Git related tools.

See Documentation/gittutorial.txt to get started, then see Documentation/giteveryday.txt for a useful minimum set of commands, and Documentation/git-<commandname>.txt for documentation of each command. If git has been correctly installed, then the tutorial can also be read with man gittutorial or git help tutorial, and the documentation of each command with man git-<commandname> or git help <commandname>.

CVS users may also want to read Documentation/gitcvs-migration.txt (man gitcvs-migration or git help cvs-migration if git is installed).

The user discussion and development of Git take place on the Git mailing list -- everyone is welcome to post bug reports, feature requests, comments and patches to git@vger.kernel.org (read Documentation/SubmittingPatches for instructions on patch submission). To subscribe to the list, send an email with just "subscribe git" in the body to majordomo@vger.kernel.org. The mailing list archives are available at https://lore.kernel.org/git/, http://marc.info/?l=git and other archival sites.

Issues which are security relevant should be disclosed privately to the Git Security mailing list git-security@googlegroups.com.

The maintainer frequently sends the "What's cooking" reports that list the current status of various development topics to the mailing list. The discussion following them give a good reference for project status, development direction and remaining tasks.

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your mood):

  • random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.
  • stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.
  • "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
  • "goddamn idiotic truckload of sh*t": when it breaks
Description
No description provided
Readme 582 MiB
Languages
C 50.5%
Shell 38.7%
Perl 4.5%
Tcl 3.2%
Python 0.8%
Other 2.1%