Skip to content
Snippets Groups Projects
  1. Feb 22, 2024
  2. Feb 21, 2024
  3. Feb 20, 2024
    • Pierre-Yves David's avatar
      phases: keep internal state as rev-num instead of node-id · f8bf1a8e9181
      Pierre-Yves David authored
      Node-id are expensive to work with, dealing with revision is much simple and
      faster.
      
      The fact we still used node-id here shows how few effort have been put into
      making the phase logic fast. We tend to no longer use node-id internally for
      about ten years.
      
      This has a large impact of repository with many draft roots. For example this
      Mozilla-try copy have ½ Million draft roots and `perf::unbundle` see a
      significant improvement.
      
      ### data-env-vars.name            = mozilla-try-2023-03-22-zstd-sparse-revlog
        # benchmark.name                = hg.perf.perf-unbundle
        # bin-env-vars.hg.flavor        = no-rust
        # bin-env-vars.hg.py-re2-module = default
        # benchmark.variants.issue6528  = disabled
      
        # benchmark.variants.revs = last-1
      before:: 1.746791 seconds
      after::  1.278379 seconds  (-26.82%)
      
        # benchmark.variants.revs = last-10
      before:: 3.145774 seconds
      after::  2.103735 seconds  (-33.13%)
      
        # benchmark.variants.revs = last-100
      before:: 3.487635 seconds
      after::  2.446749 seconds  (-29.85%)
      
        # benchmark.variants.revs = last-1000
      before:: 5.007568 seconds
      after::  3.989923 seconds  (-20.32%)
      f8bf1a8e9181
    • Pierre-Yves David's avatar
      phases: do filtering at read time · 12881244e48a
      Pierre-Yves David authored
      This remove the need for the `filterunknown` method at all.
      12881244e48a
    • Pierre-Yves David's avatar
      phases: always write with a repo · 04111ef08fb0
      Pierre-Yves David authored
      In the future change that move the internal representation of phase-roots from
      node-id to rev-num, we will use a repository to translate revision numbers back
      to node at write time.
      
      Since that future change is quite complicated already, we do this small API
      change beforehand.
      04111ef08fb0
    • Pierre-Yves David's avatar
      phases: mark `phasecache.phaseroots` private · 68289ed170c7
      Pierre-Yves David authored
      We are about to change its content from nodeid to revnum. So anyone directly
      using the content might be in unexpected troubles. We start by making it private
      to explicitly break any such user (and discourage them to do so).
      68289ed170c7
    • Pierre-Yves David's avatar
      phases: check secret presence the right way during discovery · 2e10ddbb9faa
      Pierre-Yves David authored
      There is an official function for this, lets use it.
      
      This will prevent the code to break in the future while we refactor the phase
      code.
      2e10ddbb9faa
    • Pierre-Yves David's avatar
      phases: explicitly filter stripped revision at strip time · 8f2ea3fa50fd
      Pierre-Yves David authored
      Explicit is better than implicit. The current logic is bit subtle and fragile.
      
      It also get in the way of using something else than node-id as internal storage.
      We replace it with a more explicit filtering while striping.
      8f2ea3fa50fd
  4. Feb 23, 2024
    • Pierre-Yves David's avatar
      debug: add a debug::unbundle command that simulate the unbundle from a push · e2dfa403452d
      Pierre-Yves David authored
      The code have different behavior when the unbundle comes from a push, so we
      introduce a command that can simulate such unbundle.
      
      For our copy of mozilla-try-2023-03-22, this make the unbundle jump from 2.5
      seconds (with `hg unbundle`) to 15 seconds (with `hg debug::unbundle`).
      
      That 15 seconds timings is consistent with the issue seen in production.
      e2dfa403452d
  5. Feb 14, 2024
  6. Feb 12, 2024
    • Arseniy Alekseyev's avatar
      revlog: add a Rust implementation of `headrevsdiff` · b01e7d97e167
      Arseniy Alekseyev authored
      Python implementation of `headrevsdiff` can be very slow in the worst
      case compared with the `heads` computation it replaces, since the
      latter is done in Rust.
      
      Even the average case of this Python implementation is still
      noticeable in the profiles.
      
      This patch makes the computation much much faster by doing it in Rust.
      b01e7d97e167
  7. Dec 21, 2023
    • Arseniy Alekseyev's avatar
      revlog: add a C implementation of `headrevsdiff` · 3f37d80d3ab4
      Arseniy Alekseyev authored
      Python implementation of `headrevsdiff` can be very slow in the worst
      case compared with the `heads` computation it replaces, since the
      latter is done in C.
      
      Even the average case of this Python implementation is still
      noticeable in the profiles.
      
      This patch makes the computation much much faster by doing it in C.
      3f37d80d3ab4
    • Arseniy Alekseyev's avatar
      unbundle: faster computation of changed heads · a0d88b021a98
      Arseniy Alekseyev authored
      To compute the set of changed heads it's sufficient to look at the recent commits,
      instead of looking at all heads currently in existence.
      a0d88b021a98
  8. Feb 21, 2024
  9. Feb 20, 2024
  10. Feb 15, 2024
  11. Feb 14, 2024
  12. Feb 15, 2024
  13. Feb 14, 2024
  14. Feb 13, 2024
    • Martin von Zweigbergk's avatar
      docs: fix broken `make` in `docs/` · 0f3a091d887b
      Martin von Zweigbergk authored
      We had some wrapped lines without blank lines between, which made the runrst
      script think the list was not a list and it got confused about the
      indentation. I added blank lines, and also some other minor styling for
      consistency with the rest of the file.
      0f3a091d887b
  15. Jan 10, 2024
    • Arseniy Alekseyev's avatar
      branchmap: use mmap for faster revbranchcache loading · 02e7d79edf62
      Arseniy Alekseyev authored
      A typical revbranchmap usage is:
      - load the entire revbranchmap file into memory
      - maybe do a few lookups
      - add a few bytes to it
      - write the addition to disk
      
      There's no reason to load the entire revbranchmap into memory.
      We can split it into a large immutable prefix and a mutable suffix,
      and then memorymap the prefix, thus saving all the useless loading.
      
      Benchmarking on some real-world pushes suggests that out of ~100s server-side
      push handling revbranchcache handling is responsible for:
      
      * ~7s with no change
      * ~1.3s with the change, without mmap
      * 0.04s with the change, with mmap
      02e7d79edf62
  16. Feb 02, 2024
  17. Feb 03, 2024
  18. Feb 02, 2024
  19. Feb 12, 2024
Loading