config: add new index.threads config setting

Add support for a new index.threads config setting which will be used to
control the threading code in do_read_index().  A value of 0 will tell the
index code to automatically determine the correct number of threads to use.
A value of 1 will make the code single threaded.  A value greater than 1
will set the maximum number of threads to use.

For testing purposes, this setting can be overwritten by setting the
GIT_TEST_INDEX_THREADS=<n> environment variable to a value greater than 0.

Signed-off-by: Ben Peart <benpeart@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Ben Peart 2018-10-10 11:59:35 -04:00 committed by Junio C Hamano
parent 3b1d9e045e
commit c780b9cfe8
5 changed files with 36 additions and 0 deletions

View File

@ -2413,6 +2413,13 @@ imap::
The configuration variables in the 'imap' section are described The configuration variables in the 'imap' section are described
in linkgit:git-imap-send[1]. in linkgit:git-imap-send[1].


index.threads::
Specifies the number of threads to spawn when loading the index.
This is meant to reduce index load time on multiprocessor machines.
Specifying 0 or 'true' will cause Git to auto-detect the number of
CPU's and set the number of threads accordingly. Specifying 1 or
'false' will disable multithreading. Defaults to 'true'.

index.version:: index.version::
Specify the version with which new index files should be Specify the version with which new index files should be
initialized. This does not affect existing repositories. initialized. This does not affect existing repositories.

View File

@ -2289,6 +2289,24 @@ int git_config_get_fsmonitor(void)
return 0; return 0;
} }


int git_config_get_index_threads(void)
{
int is_bool, val = 0;

val = git_env_ulong("GIT_TEST_INDEX_THREADS", 0);
if (val)
return val;

if (!git_config_get_bool_or_int("index.threads", &is_bool, &val)) {
if (is_bool)
return val ? 0 : 1;
else
return val;
}

return 0; /* auto */
}

NORETURN NORETURN
void git_die_config_linenr(const char *key, const char *filename, int linenr) void git_die_config_linenr(const char *key, const char *filename, int linenr)
{ {

View File

@ -250,6 +250,7 @@ extern int git_config_get_untracked_cache(void);
extern int git_config_get_split_index(void); extern int git_config_get_split_index(void);
extern int git_config_get_max_percent_split_change(void); extern int git_config_get_max_percent_split_change(void);
extern int git_config_get_fsmonitor(void); extern int git_config_get_fsmonitor(void);
extern int git_config_get_index_threads(void);


/* This dies if the configured or default date is in the future */ /* This dies if the configured or default date is in the future */
extern int git_config_get_expiry(const char *key, const char **output); extern int git_config_get_expiry(const char *key, const char **output);

View File

@ -327,6 +327,11 @@ GIT_TEST_COMMIT_GRAPH=<boolean>, when true, forces the commit-graph to
be written after every 'git commit' command, and overrides the be written after every 'git commit' command, and overrides the
'core.commitGraph' setting to true. 'core.commitGraph' setting to true.


GIT_TEST_INDEX_THREADS=<n> enables exercising the multi-threaded loading
of the index for the whole test suite by bypassing the default number of
cache entries and thread minimums. Setting this to 1 will make the
index loading single threaded.

Naming Tests Naming Tests
------------ ------------



View File

@ -6,7 +6,12 @@ test_description='split index mode tests'


# We need total control of index splitting here # We need total control of index splitting here
sane_unset GIT_TEST_SPLIT_INDEX sane_unset GIT_TEST_SPLIT_INDEX

# Testing a hard coded SHA against an index with an extension
# that can vary from run to run is problematic so we disable
# those extensions.
sane_unset GIT_FSMONITOR_TEST sane_unset GIT_FSMONITOR_TEST
sane_unset GIT_TEST_INDEX_THREADS


test_expect_success 'enable split index' ' test_expect_success 'enable split index' '
git config splitIndex.maxPercentChange 100 && git config splitIndex.maxPercentChange 100 &&