Skip to main content

IOG GHC Update #32

ยท 2 min read

Triweekly update from the GHC DevX team at IOG.

Previous updates can be found here.

High-level Summaryโ€‹

The team is working on characterizing and upstreaming some GHC patches that are only present in haskell.nix-provided GHCs. The process isn't straightforward as some patches are too controversial to be upstreamed and some other need to be modified to be acceptable upstream (adding CPP for architecture independance, fixing documentation, etc.).

The team is also helping update cardano-addresses to GHC JS backend (see https://github.com/IntersectMBO/cardano-addresses/pull/267) and making progresses in upstreaming a new profiling method that we used to debug a performance regression in cardano-ledger.

Detailsโ€‹

Sylvain: fixed RTS linker on AArch64 to use the M32 allocator to avoid an excessive amount of calls to mmap and fragmentation. See GHC#24432 and GHC!12914. This was done in the process to update patches from haskell.nix to GHC upstream. This patch however is different from its haskell.nix counterpart which introduces a new allocator memory pool based allocator with different tradeoffs.

Sylvain: helped with debugging of performance issue in GHC#25055, which was fixed by Simon PJ in GHC!13038. In the process I've found another unrelated bug GHC#25096 being fixed by Simon in GHC!13060. Sadly the former bug doesn't explain the cardano-ledger performance regression we were investigating a few weeks ago. We'll check if the second one explains it when it will be fixed.

Luite: Worked on dynamic allocation of cost centre stacks to allow breaking down time and allocation profiles in more flexible ways. See GHC#25098.

Jeff: haskell.nix patches triage and branch creation in https://github.com/stable-haskell/ghc/ repository