Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: git/git
base: 106298f7f9cca4158a980de149ef217751e1f943
Choose a base ref
...
head repository: git/git
compare: 54156af0d66b64cfa290ffce302af05d256d9b9c
Choose a head ref
  • 7 commits
  • 9 files changed
  • 1 contributor

Commits on Sep 14, 2021

  1. t/helper/test-bitmap.c: add 'dump-hashes' mode

    The pack-bitmap writer code is about to learn how to propagate values
    from an existing hash-cache. To prepare, teach the test-bitmap helper to
    dump the values from a bitmap's hash-cache extension in order to test
    those changes.
    
    Signed-off-by: Taylor Blau <me@ttaylorr.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    ttaylorr authored and gitster committed Sep 14, 2021
    Copy the full SHA
    a05f02b View commit details
    Browse the repository at this point in the history
  2. pack-bitmap.c: propagate namehash values from existing bitmaps

    When an old bitmap exists while writing a new one, we load it and build
    a "reposition" table which maps bit positions of objects from the old
    bitmap to their respective positions in the new bitmap. This can help
    when we encounter a commit which was selected in both the old and new
    bitmap, since we only need to permute its bit (not recompute it from
    scratch).
    
    We do not, however, repurpose existing namehash values in the case of
    the hash-cache extension. There has been thus far no good reason to do
    so, since all of the namehash values for objects in the new bitmap would
    be populated during the traversal that was just performed by
    pack-objects when generating single-pack reachability bitmaps.
    
    But this isn't the case for multi-pack bitmaps, which are written via
    `git multi-pack-index write --bitmap` and do not perform any traversal.
    In this case all namehash values are set to zero, but we don't even
    bother to check the `pack.writeBitmapHashcache` option anyway, so it
    fails to matter.
    
    There are two approaches we could take to fill in non-zero hash-cache
    values:
    
      - have either the multi-pack-index builtin run its own
        traversal to attempt to fill in some values, or let a hypothetical
        caller (like `pack-objects` when `repack` eventually drives the
        `multi-pack-index` builtin) fill in the values they found during
        their traversal
    
      - or copy any existing namehash values that were stored in an
        existing bitmap to their corresponding positions in the new bitmap
    
    In a system where a repository is generally repacked with `git repack
    --geometric=<d>` and occasionally repacked with `git repack -a`, the
    hash-cache coverage will tend towards all objects.
    
    Since populating the hash-cache is additive (i.e., doing so only helps
    our delta search), any intermediate lack of full coverage is just fine.
    So let's start by just propagating any values from the existing
    hash-cache if we see one.
    
    The next patch will respect the `pack.writeBitmapHashcache` option while
    writing MIDX bitmaps, and then test this new behavior.
    
    Signed-off-by: Taylor Blau <me@ttaylorr.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    ttaylorr authored and gitster committed Sep 14, 2021
    Copy the full SHA
    8de300e View commit details
    Browse the repository at this point in the history
  3. midx.c: respect 'pack.writeBitmapHashcache' when writing bitmaps

    In the previous commit, the bitmap writing code learned to propagate
    values from an existing hash-cache extension into the bitmap that it is
    writing.
    
    Now that that functionality exists, let's expose it by teaching the 'git
    multi-pack-index' builtin to respect the `pack.writeBitmapHashCache`
    option so that the hash-cache may be written at all.
    
    Two minor points worth noting here:
    
      - The 'git multi-pack-index write' sub-command didn't previously read
        any configuration (instead this is handled in the base command). A
        separate handler is added here to respect this write-specific
        config option.
    
      - I briefly considered adding a 'bitmap_flags' field to the static
        options struct, but decided against it since it would require
        plumbing through a new parameter to the write_midx_file() function.
    
        Instead, a new MIDX-specific flag is added, which is translated to
        the corresponding bitmap one.
    
    Signed-off-by: Taylor Blau <me@ttaylorr.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    ttaylorr authored and gitster committed Sep 14, 2021
    Copy the full SHA
    caca3c9 View commit details
    Browse the repository at this point in the history
  4. p5326: create missing 'perf-tag' tag

    Some of the tests in test_full_bitmap rely on having a tag named
    perf-tag in place. We could create it in test_full_bitmap(), but we want
    to have it in place before the repack starts.
    
    Signed-off-by: Taylor Blau <me@ttaylorr.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    ttaylorr authored and gitster committed Sep 14, 2021
    Copy the full SHA
    2082224 View commit details
    Browse the repository at this point in the history
  5. p5326: don't set core.multiPackIndex unnecessarily

    When this performance test was originally written, `core.multiPackIndex`
    was not the default and thus had to be enabled. But now that we have
    18e449f (midx: enable core.multiPackIndex by default, 2020-09-25), we
    no longer need this.
    
    Drop the unnecessary setup (even though it's not hurting anything, it is
    unnecessary at best and confusing at worst).
    
    Signed-off-by: Taylor Blau <me@ttaylorr.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    ttaylorr authored and gitster committed Sep 14, 2021
    Copy the full SHA
    97b89c8 View commit details
    Browse the repository at this point in the history

Commits on Sep 17, 2021

  1. p5326: generate pack bitmaps before writing the MIDX bitmap

    To help test the performance of permuting the contents of the hash-cache
    when generating a MIDX bitmap, we need a bitmap which has its hash-cache
    populated.
    
    And since multi-pack bitmaps don't add *new* values to the hash-cache,
    we have to rely on a single-pack bitmap to generate those values for us.
    
    Therefore, generate a pack bitmap before the MIDX one in order to ensure
    that the MIDX bitmap has entries in its hash-cache. Since we don't want
    to time generating the pack bitmap, move that to a non-perf test run
    before we try to generate the MIDX bitmap.
    
    Likewise, get rid of the pack bitmap afterwords, to make certain that we
    are not accidentally using it in the performance tests run later on.
    
    Signed-off-by: Taylor Blau <me@ttaylorr.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    ttaylorr authored and gitster committed Sep 17, 2021
    Copy the full SHA
    bf4a608 View commit details
    Browse the repository at this point in the history
  2. t5326: test propagating hashcache values

    Now that we both can propagate values from the hashcache, and respect
    the configuration to enable the hashcache at all, test that both of
    these function correctly by hardening their behavior with a test.
    
    Like the hash-cache in classic single-pack bitmaps, this helps more
    proportionally the more up-to-date your bitmap coverage is. When our
    bitmap coverage is out-of-date with the ref tips, we spend more time
    proportionally traversing, and all of that traversal gets the name-hash
    filled in.
    
    But for the up-to-date bitmaps, this helps quite a bit. These numbers
    are on git.git, with `pack.threads=1` to help see the difference
    reflected in the overall runtime.
    
        Test                            origin/tb/multi-pack-bitmaps   HEAD
        -------------------------------------------------------------------------------------
        5326.4: simulated clone         1.87(1.80+0.07)                1.46(1.42+0.03) -21.9%
        5326.5: simulated fetch         2.66(2.61+0.04)                1.47(1.43+0.04) -44.7%
        5326.6: pack to file (bitmap)   2.74(2.62+0.12)                1.89(1.82+0.07) -31.0%
    
    Signed-off-by: Taylor Blau <me@ttaylorr.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    ttaylorr authored and gitster committed Sep 17, 2021
    Copy the full SHA
    54156af View commit details
    Browse the repository at this point in the history