Merge branch 'jk/delta-base-cache'

The delta-base-cache mechanism has been a key to the performance in
a repository with a tightly packed packfile, but it did not scale
well even with a larger value of core.deltaBaseCacheLimit.

* jk/delta-base-cache:
  t/perf: add basic perf tests for delta base cache
  delta_base_cache: use hashmap.h
  delta_base_cache: drop special treatment of blobs
  delta_base_cache: use list.h for LRU
  release_delta_base_cache: reuse existing detach function
  clear_delta_base_cache_entry: use a more descriptive name
  cache_or_unpack_entry: drop keep_cache parameter
This commit is contained in:
Junio C Hamano
2016-09-08 21:49:46 -07:00
2 changed files with 111 additions and 73 deletions

View File

@ -0,0 +1,31 @@
#!/bin/sh
test_description='Test operations that emphasize the delta base cache.
We look at both "log --raw", which should put only trees into the delta cache,
and "log -Sfoo --raw", which should look at both trees and blobs.
Any effects will be emphasized if the test repository is fully packed (loose
objects obviously do not use the delta base cache at all). It is also
emphasized if the pack has long delta chains (e.g., as produced by "gc
--aggressive"), though cache is still quite noticeable even with the default
depth of 50.
The setting of core.deltaBaseCacheLimit in the source repository is also
relevant (depending on the size of your test repo), so be sure it is consistent
between runs.
'
. ./perf-lib.sh
test_perf_large_repo
# puts mostly trees into the delta base cache
test_perf 'log --raw' '
git log --raw >/dev/null
'
test_perf 'log -S' '
git log --raw -Sfoo >/dev/null
'
test_done