Skip to content
  • René Scharfe's avatar
    oidset: use khash · 8b2f8cbc
    René Scharfe authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Reimplement oidset using khash.h in order to reduce its memory footprint
    and make it faster.
    
    Performance of a command that mainly checks for duplicate objects using
    an oidset, with master and Clang 6.0.1:
    
      $ cmd="./git-cat-file --batch-all-objects --unordered --buffer --batch-check='%(objectname)'"
    
      $ /usr/bin/time $cmd >/dev/null
      0.22user 0.03system 0:00.25elapsed 99%CPU (0avgtext+0avgdata 48484maxresident)k
      0inputs+0outputs (0major+11204minor)pagefaults 0swaps
    
      $ hyperfine "$cmd"
      Benchmark #1: ./git-cat-file --batch-all-objects --unordered --buffer --batch-check='%(objectname)'
    
        Time (mean ± σ):     250.0 ms ±   6.0 ms    [User: 225.9 ms, System: 23.6 ms]
    
        Range (min … max):   242.0 ms … 261.1 ms
    
    And with this patch:
    
      $ /usr/bin/time $cmd >/dev/null
      0.14user 0.00system 0:00.15elapsed 100%CPU (0avgtext+0avgdata 41396maxresident)k
      0inputs+0outputs (0major+8318minor)pagefaults 0swaps
    
      $ hyperfine "$cmd"
      Benchmark #1: ./git-cat-file --batch-all-objects --unordered --buffer --batch-check='%(objectname)'
    
        Time (mean ± σ):     151.9 ms ±   4.9 ms    [User: 130.5 ms, System: 21.2 ms]
    
        Range (min … max):   148.2 ms … 170.4 ms
    
    Initial-patch-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarRene Scharfe <l.s.r@web.de>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    8b2f8cbc