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

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: Slow gotadmin cleanup
To:
Christian Weisgerber <naddy@mips.inka.de>
Cc:
gameoftrees@openbsd.org
Date:
Sun, 26 Jul 2026 14:14:00 +0200

Download raw body.

Thread
On Sun, Jul 26, 2026 at 01:50:40PM +0200, Christian Weisgerber wrote:
> So I started a "gotadmin cleanup" on an instance of the FreeBSD ports
> repository.
> 
> $ gotadmin info
> repository: /home/naddy/ports.git
> hashing algorithm: sha1
> default author: Christian Weisgerber <naddy@FreeBSD.org>
> remote "origin" (fetch): ssh://anongit@git.freebsd.org/ports.git
> remote "origin" (send): ssh://git@gitrepo.freebsd.org/ports.git
> pack files: 23
> packed objects: 7037127
> packed total size: 1.9G
> loose objects: 3031
> loose total size: 42.4M
> 
> After 33 hours it's still running.  Coloring commits at snail's pace.
> 
>   PID USERNAME    THR PRI NICE   SIZE    RES STATE    C   TIME    WCPU COMMAND
> 92384 naddy         1 138    0  1702M  1475M CPU0     0  31.9H  92.87% got-read-pack
> 92378 naddy         1  13    0  4687M  1344M sbwait   3 223:03  11.13% gotadmin
> 
> I stashed away a copy for some tests.  git gc finished in 11 minutes
> or so.  Running gotadmin cleanup on that optimized copy then only
> took an hour plus.

gotadmin cleanup performance should be improved. But I'm afraid doing
the work would require a bit more time than just issuing a quick fix.

There could be a bug, but my first suspicion would be IPC overhead.
Requesting individual objects one at a time from got-read-pack is quite
slow when an operation needs a lot of objects to perform the task.

For example, when gotd is enumerating commits, it is slow but doesn't
take hours, and the relevant process is doing everything in its own
address space.