Skip to content
Snippets Groups Projects
Verified Commit 7abb46d6 authored by Rodrigo Mesquita's avatar Rodrigo Mesquita :seedling:
Browse files

driver: Store the HomePackageTable in a mutable reference


This commit refactors the HomePackageTable and HomeUnitGraph:

(1) It fixes a quadratic-in-the-number-of-modules space leak in upsweep (#25511)

(2) And it reworks these structures into their own modules to simplify
    the driver. The refactor is driven by the introduction of IO in the HPT
    interface, but is a bit more aggressive in simplifying the
    interfaces to enforce correct usage (ie to avoid performance
    pitfalls).

Specifically:

- The `HomeUnitGraph` (HUG) is now in `GHC.Unit.Home.Graph`
- The `HomePackageTable` (HPT) is now in `GHC.Unit.Home.PackageTable`
    - The HPT now stores an `IORef` with the table of loaded home package modules.
    - The interface to the HPT now requires IO
    - The interface now enforces that the HPT is a datastructure that
      only grows
    - This is not enforced in the interface, but, clients of the HPT
      should never care about there being more or less entries in the
      HPT when these additional entries are not relevant to their result.
    - The exception to the invariant that the HPT is monotonically
      increasing is `restrictHpt`, a function which is called at a
      "barrier point" (during which there are no other threads
      inspecting or inserting in the HPT). The invariant can be
      temporarily broken at this point (currently, after upsweep).
      This is safe because a single thread holds control over the
      structure (thus the invariant being broken is never observed).

The hug_var and associated structures in the driver, which aimed to
improve memory usage in the driver by updating in place a HUG during
upsweep, are no longer required as the HPT entries in the HUG are now
themselves mutable by construction. This was previously explained in
Note [ModuleNameSet, efficiency and space leaks], which is no longer
relevant and was deleted.

Fixes #25511

Co-authored-by: default avatarMatthew Pickering <matthewtpickering@gmail.com>

-------------------------
Metric Decrease:
    MultiComponentModulesRecomp
    MultiLayerModulesRecomp
-------------------------
parent 185f17e4
No related branches found
No related tags found
No related merge requests found
Pipeline #105364 passed
Showing
with 346 additions and 370 deletions
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment