summaryrefslogtreecommitdiff
path: root/src/odb_pack.c
diff options
context:
space:
mode:
authorDavid Michael Barr <b@rr-dav.id.au>2012-09-12 14:26:31 +1000
committerDavid Michael Barr <b@rr-dav.id.au>2012-09-13 09:31:24 +1000
commitab8a0402aeac9767e5bb1b022a6c9ad27cf78f32 (patch)
tree9bdcdeaf9c3ddf5769435cd6f4097f7ac59b5711 /src/odb_pack.c
parent21d847d38ffd5055ffbcaabebf115edbee8e8b94 (diff)
downloadlibgit2-ab8a0402aeac9767e5bb1b022a6c9ad27cf78f32.tar.gz
odb_pack: try lookup before refreshing packs
This reduces the rate of syscalls for the common case of sequences of object reads from the same pack. Best of 5 timings for libgit2_clar before this patch: real 0m5.375s user 0m0.392s sys 0m3.564s After applying this patch: real 0m5.285s user 0m0.356s sys 0m3.544s 0.6% improvement in system time. 9.2% improvement in user time. 1.7% improvement in elapsed time. Confirmed a 0.6% reduction in number of system calls with strace. Expect greater improvement for graph-traversal with large packs.
Diffstat (limited to 'src/odb_pack.c')
-rw-r--r--src/odb_pack.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/odb_pack.c b/src/odb_pack.c
index 6e3d3eefd..d33d06456 100644
--- a/src/odb_pack.c
+++ b/src/odb_pack.c
@@ -268,13 +268,13 @@ static int pack_entry_find(struct git_pack_entry *e, struct pack_backend *backen
int error;
unsigned int i;
- if ((error = packfile_refresh_all(backend)) < 0)
- return error;
-
if (backend->last_found &&
git_pack_entry_find(e, backend->last_found, oid, GIT_OID_HEXSZ) == 0)
return 0;
+ if ((error = packfile_refresh_all(backend)) < 0)
+ return error;
+
for (i = 0; i < backend->packs.length; ++i) {
struct git_pack_file *p;