Re: [PATCH] pack-objects: no crc check when the cached version is used
From: Thomas Rast <hidden>
Date: 2016-06-15 22:58:45
Junio C Hamano [off-list ref] writes:
Nguyễn Thái Ngọc Duy [off-list ref] writes:quoted
Current code makes pack-objects always do check_pack_crc() in unpack_entry() even if right after that we find out there's a cached version and pack access is not needed. Swap two code blocks, search for cached version first, then check crc.
[...]
Interesting. This is only triggered inside pack-objects, which would read a lot of data from existing packs, and the overhead for looking up the entry from the revindex, faulting in the actual packdata, and computing and comparing the crc would not be trivial, especially as the cost is incurred over many objects we need to untangle in the delta chain. If you have interesting numbers to show how much this improves the performance, I am curious to see it.
I can't see anything wrong with the patch, but then I haven't stared too hard. (It seems that my conversion around abe601b (sha1_file: remove recursion in unpack_entry, 2013-03-27) was faithful on this point, the problem has existed for longer than that.) I tried the perf script below, but at least for the git repo the only thing I can see is noise.
--- 8< --- t/perf/p5300-pack-object.sh --- 8< ---#!/bin/sh test_description="Tests object packing performance" . ./perf-lib.sh test_perf_default_repo test_perf 'pack-objects on commits in HEAD' ' git rev-list HEAD | git pack-objects --stdout >/dev/null ' test_perf 'pack-objects on all of HEAD' ' git rev-list --objects HEAD | git pack-objects --stdout >/dev/null ' test_done