[PATCH] don't let the delta cache grow unbounded in 'git repack'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I have 4GB of RAM on my system which should, in theory, be quite enough 
to repack a 600 MB repository.  However the unbounded delta cache size 
always pushes it into swap, at which point everything virtually comes to 
a halt.  So unbounded caches are never a good idea.

A default of 256MB should be a good compromize between memory usage and 
speed where medium sized repositories are still likely to fit in the 
cache with a reasonable memory usage, and larger repositories are going 
to take quite some time to repack already anyway.

While at it, clarify the associated config variable documentation 
entries a bit.

Signed-off-by: Nicolas Pitre <nico@xxxxxxx>

diff --git a/Documentation/config.txt b/Documentation/config.txt
index c6f09f8..7791c32 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1218,12 +1218,20 @@ pack.compression::
 
 pack.deltaCacheSize::
 	The maximum memory in bytes used for caching deltas in
-	linkgit:git-pack-objects[1].
-	A value of 0 means no limit. Defaults to 0.
+	linkgit:git-pack-objects[1] before writing them out to a pack.
+	This cache is used to speed up the writing object phase by not
+	having to recompute the final delta result once the best match
+	for all objects is found.  Repacking large repositories on machines
+	which are tight with memory might be badly impacted by this though,
+	especially if this cache pushes the system into swapping.
+	A value of 0 means no limit. The smallest size of 1 byte may be
+	used to virtually disable this cache. Defaults to 256 MiB.
 
 pack.deltaCacheLimit::
 	The maximum size of a delta, that is cached in
-	linkgit:git-pack-objects[1]. Defaults to 1000.
+	linkgit:git-pack-objects[1]. This cache is used to speed up the
+	writing object phase by not having to recompute the final delta
+	result once the best match for all objects is found. Defaults to 1000.
 
 pack.threads::
 	Specifies the number of threads to spawn when searching for best
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index 961b639..c433748 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -86,7 +86,7 @@ static int pack_compression_level = Z_DEFAULT_COMPRESSION;
 static int pack_compression_seen;
 
 static unsigned long delta_cache_size = 0;
-static unsigned long max_delta_cache_size = 0;
+static unsigned long max_delta_cache_size = 256 * 1024 * 1024;
 static unsigned long cache_max_small_delta_size = 1000;
 
 static unsigned long window_memory_limit = 0;
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]