"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Christian Weisgerber <naddy@mips.inka.de>
Subject:
Re: Got is kinda slow
To:
gameoftrees@openbsd.org
Date:
Mon, 17 Apr 2023 23:34:33 +0200

Download raw body.

Thread
Stefan Sperling:

> Below is a patch which implements caching of parsed trees in got-read-pack.
> Unfortunately, this does not seem to help your case much, if at all.

Baseline:
   12m35.32s real    12m03.32s user     0m32.00s system

With this patch (!):
   24m02.20s real    21m58.82s user     2m03.75s system

> On my x250 it usally completes with a one minute or two for ports with
> much history like devel/gmake. Not great, but not catastrophic either
> given that people rarely go digging into the history of a specific path
> during most workflows.

I don't know.  For me, "cd /usr/ports/foo/bar && tog log ." is
pretty natural.  However, in a repository the size of FreeBSD
ports.git, it can be painfully slow.  Think of somebody who's new
to Got and just wants to try it out for a bit.  They'll stop right
there.

Anyway, I only wanted to point out an issue to be aware of.  I didn't
think you'd right away try to work on this.

> I am afraid the only way I see to speed this up is to get rid of entry
> sorting in the tree parser and then deal with the consequences of doing so.
> Which isn't going to be pretty. Does anyone else have other ideas?

If I understand the profiling graph correctly, got spends 1/3 of
its time in inflate().  I would naively think that git also needs
to decompress the same data, but its total runtime is a fraction
of the time got spends decompressing.  How can that be?  And git
log is not multithreaded.

git:
    0m50.69s real     0m44.59s user     0m05.81s system

(Those figure are now on OpenBSD.  got built in non-release mode,
i.e. -O0.)

-- 
Christian "naddy" Weisgerber                          naddy@mips.inka.de