Limit the size of the new delta_base_cache
authorShawn O. Pearce <spearce@spearce.org>
Mon, 19 Mar 2007 05:14:37 +0000 (01:14 -0400)
committerJunio C Hamano <junkio@cox.net>
Mon, 19 Mar 2007 05:43:37 +0000 (22:43 -0700)
commit18bdec1118df92649b70ce126aff2f147deecad5
treeb4b4221974d0f4f48b32c3168365807e652caf5e
parent3635a187704ed30b32eb11f5098496e5e435a19d
Limit the size of the new delta_base_cache

The new configuration variable core.deltaBaseCacheLimit allows the
user to control how much memory they are willing to give to Git for
caching base objects of deltas.  This is not normally meant to be
a user tweakable knob; the "out of the box" settings are meant to
be suitable for almost all workloads.

We default to 16 MiB under the assumption that the cache is not
meant to consume all of the user's available memory, and that the
cache's main purpose was to cache trees, for faster path limiters
during revision traversal.  Since trees tend to be relatively small
objects, this relatively small limit should still allow a large
number of objects.

On the other hand we don't want the cache to start storing 200
different versions of a 200 MiB blob, as this could easily blow
the entire address space of a 32 bit process.

We evict OBJ_BLOB from the cache first (credit goes to Junio) as
we want to favor OBJ_TREE within the cache.  These are the objects
that have the highest inflate() startup penalty, as they tend to
be small and thus don't have that much of a chance to ammortize
that penalty over the entire data.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/config.txt
cache.h
config.c
environment.c
sha1_file.c