Requests from Microsoft IP Addresses

Richard Biener rguenther at suse.de
Mon Jun 26 13:29:57 CEST 2023


On Mon, 26 Jun 2023, Mathias De Mar? wrote:

> Hello,
> 
> 
> 
> I?d like to give a little bit of additional information about a Mercurial
> feature that might provide some help here. My apologies if this is old news
> and doesn't add anything useful.
> 
> (Small context: I?m a Mercurial contributor and I maintain a set of
> repositories at our company that are cloned a lot at the same point in time)
> 
> 
> 
> By default, when you do a clone, Mercurial will take the repository,
> compress it and send it across the wire to the client.
> 
> I simulated similar behaviour for the gmp repository by creating a bundle:
> 
>    - it takes about 8 seconds (so approximately 1 core occupied for < 8
>    seconds, as there is a bit of overhead involved)
>    - it generates a bundle of about 14 MB
> 
> That?s not much, but it of course becomes problematic when there are 700
> clones at nearly the exact same moment, like you experienced.
> 
> 
> 
> I cannot help in reducing the bandwidth, but assuming the cpu usage is the
> problem, ?clonebundles? would help resolve the issue. Clonebundles are a
> Mercurial feature that allows the Mercurial server to reuse an existing
> bundle instead of generating a new one for every user. They would basically
> get rid of the cpu issue, the server simply points to the pre-generated
> bundle and does not actually need to do any work. More context from Gregory
> Szorc, who initially implemented this feature:
> https://gregoryszorc.com/blog/2015/05/29/faster-cloning-from-hg.mozilla.org-with-server-provided-bundles/
> 
> 
> 
> To use clonebundles for a repository (let me know if there?s anything
> missing, I have been known to make mistakes):
> 
>    1. Make sure you?re running a fairly recent Mercurial version.
>    2. Put up a cronjob that generates weekly bundles of your repository (hg
>    bundle ?all /path/to/gmp.bundle).
>    3. Make sure the bundle is placed in a location accessible to clients,
>    for example: https://gmplib.org/clonebundles/gmp.bundle.
>    4. In your repository, create a file .hg/clonebundles.manifest that
>    refers to the bundle.
>    To check what the ?BUNDLESPEC? parameter should be, you can run: hg
>    debugbundle ?spec /path/to/gmp.bundle
>    Contents could for example be:
>    https://gmplib.org/clonebundles/gmp.bundle BUNDLESPEC=bzip2-v2
>    5. In your hgrc (either $HOME/.hgrc or /path/to/repository/.hg/hgrc),
>    you will need to enable clonebundles:
>    [extensions]
>    clonebundles =
> 
> 
> The next version of Mercurial (6.5) will contain a feature (implemented by
> Mercurial developer Pierre-Yves David) to auto-generate clonebundles when
> changes are pushed to a repository. This means you don't need the above
> steps, you can purely use configuration options, as described in the help
> of the clonebundles extension:
> https://foss.heptapod.net/mercurial/mercurial-devel/-/blob/branch/default/hgext/clonebundles.py
> 
> Some additional notes:
> 1. Clonebundles reduce server load massively, in exchange for additional
> disk space. Make sure you have enough if you want to enable this.
> 2. Mercurial clients don't need to do anything to enable this feature, it
> only needs to be enabled on the server side.
> 3. I think on the Mercurial development side, we should try to make this
> feature more visible/known, as it could make the situation a lot better for
> people hosting Mercurial repositories.

I think it would catch 99% of the cases when mercurial would cache
the bundle from the "HEAD" (I don't know mercurial or bundles aka
whether each branch or revision would create a different bundle
than the complete repository state) and do that on-demand, so not
create a bundle for each commit.

Richard.

-- 
Richard Biener <rguenther at suse.de>
SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg,
Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman;
HRB 36809 (AG Nuernberg)


More information about the gmp-devel mailing list