Thread (45 messages) 45 messages, 8 authors, 2018-06-06

Re: [RFC PATCH 00/18] Multi-pack index (MIDX)

From: Johannes Schindelin <hidden>
Date: 2018-01-08 13:43:27

Hi Peff,

On Mon, 8 Jan 2018, Jeff King wrote:
On Sun, Jan 07, 2018 at 07:08:54PM -0500, Derrick Stolee wrote:
quoted
quoted
(Not a critique of this, just a (stupid) question)

What's the practical use-case for this feature? Since it doesn't
help with --abbrev=40 the speedup is all in the part that ensures we
don't show an ambiguous SHA-1.
The point of including the --abbrev=40 is to point out that object
lookups do not get slower with the MIDX feature. Using these "git log"
options is a good way to balance object lookups and abbreviations with
object parsing and diff machinery. And while the public data shape I
shared did not show a difference, our private testing of the Windows
repository did show a valuable improvement when isolating to object
lookups and ignoring abbreviation calculations.
Just to make sure I'm parsing this correctly: normal lookups do get
faster when you have a single index, given the right setup?

I'm curious what that setup looked like. Is it just tons and tons of
packs? Is it ones where the packs do not follow the mru patterns very
well?

I think it's worth thinking a bit about, because...
quoted
quoted
If something cares about both throughput and e.g. is saving the
abbreviated SHA-1s isn't it better off picking some arbitrary size
(e.g. --abbrev=20), after all the default abbreviation is going to show
something as small as possible, which may soon become ambigous after the
next commit.
Unfortunately, with the way the abbreviation algorithms work, using
--abbrev=20 will have similar performance problems because you still need to
inspect all packfiles to ensure there isn't a collision in the first 20 hex
characters.
...if what we primarily care about speeding up is abbreviations, is it
crazy to consider disabling the disambiguation step entirely?
Not crazy. But it would break stuff. Because...
The results of find_unique_abbrev are already a bit of a probability
game. They're guaranteed at the moment of generation, but as more
objects are added, ambiguities may be introduced. Likewise, what's
unambiguous for you may not be for somebody else you're communicating
with, if they have their own clone.
... this is only a probability game in the long term, when you consider
new objects to enter from *somewhere*.

But in purely local settings, when we expect no new objects to be
introduced, we do use known-unambiguous abbreviations.

Take the interactive rebase for example. It generates todo lists with
abbreviated commit names, for readability (and it is *really* important to
keep this readable). As we expect new objects to be introduced by the
interactive rebase, we convert that todo list to unabbreviated commit
names before executing the interactive rebase.

Your idea (to not care about unambiguous abbreviations) would break that.

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help