Skip to content

Commit

Permalink
Increase packedGit{Limit,WindowSize} on 64 bit systems.
Browse files Browse the repository at this point in the history
If we have a 64 bit address space we can easily afford to commit
a larger amount of virtual address space to pack file access.
So on these platforms we should increase the default settings of
core.packedGit{Limit,WindowSize} to something that will better
handle very large projects.

Thanks to Andy Whitcroft for pointing out that we can safely
increase these defaults on such systems.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Shawn O. Pearce authored and Junio C Hamano committed Jan 6, 2007
1 parent eb92242 commit 22bac0e
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
16 changes: 10 additions & 6 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,12 @@ core.packedGitWindowSize::
more quickly. Smaller window sizes will negatively affect
performance due to increased calls to the operating system's
memory manager, but may improve performance when accessing
a large number of large pack files. Default is 32 MiB,
which should be reasonable for all users/operating systems.
You probably do not need to adjust this value.
a large number of large pack files.
+
Default is 1 MiB if NO_MMAP was set at compile time, otherwise 32
MiB on 32 bit platforms and 1 GiB on 64 bit platforms. This should
be reasonable for all users/operating systems. You probably do
not need to adjust this value.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.

Expand All @@ -136,9 +139,10 @@ core.packedGitLimit::
from pack files. If Git needs to access more than this many
bytes at once to complete an operation it will unmap existing
regions to reclaim virtual address space within the process.
Default is 256 MiB, which should be reasonable for all
users/operating systems, except on the largest projects.
You probably do not need to adjust this value.
+
Default is 256 MiB on 32 bit platforms and 8 GiB on 64 bit platforms.
This should be reasonable for all users/operating systems, except on
the largest projects. You probably do not need to adjust this value.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.

Expand Down
10 changes: 8 additions & 2 deletions git-compat-util.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,17 @@ extern int git_munmap(void *start, size_t length);
#else /* NO_MMAP */

#include <sys/mman.h>
#define DEFAULT_PACKED_GIT_WINDOW_SIZE (32 * 1024 * 1024)
#define DEFAULT_PACKED_GIT_WINDOW_SIZE \
(sizeof(void*) >= 8 \
? 1 * 1024 * 1024 * 1024 \
: 32 * 1024 * 1024)

#endif /* NO_MMAP */

#define DEFAULT_PACKED_GIT_LIMIT (256 * 1024 * 1024)
#define DEFAULT_PACKED_GIT_LIMIT \
(sizeof(void*) >= 8 \
? 8 * 1024 * 1024 * 1024 \
: 256 * 1024 * 1024)

#ifdef NO_SETENV
#define setenv gitsetenv
Expand Down

0 comments on commit 22bac0e

Please sign in to comment.