Modifying the "StgHeader" struct

Adithya Kumar adi.obilisetty at gmail.com
Mon Feb 26 03:22:05 UTC 2024


Hello,

Appreciate the swift responses.

I need this feature in GHC 8.10.7. This, I believe is only available post
9.10. I can try replicating the same kind of behavior in GHC 8.10.7.

Some more context to the problem at hand:

The overhead of the profiling I want to enable should be as minimal as
possible
as we plan to run this build in production.
The memory leak I'm trying to debug happens over a few days after over a
million
requests and we aren't able to replicate it offline.

I can take inspiration from the work done in 9.10 and replicate it in
8.10.7 in
a way that it can be used without other features of profiling.

This is what I was trying to do. Ie. Add a new field "era" in the
"StgHeader"
instead of "StgProfHeader". Making the follow-up changes was the problem as
I
might've missed the bookkeeping in a few places. But now I can look at
9.10. So
I have a baseline to compare with.

I will try this, and get back to this thread.

Best,
Adithya

On Sun, Feb 25, 2024 at 9:33 PM Rodrigo Mesquita <
rodrigo.m.mesquita at gmail.com> wrote:

> Hello Adithya,
>
> This sounds just like what has been implemented as the default mode for
> eras profiling: https://well-typed.com/blog/2024/01/ghc-eras-profiling> which tracks an “era” for each heap object — and, by default, uses a major
> garbage collection as the increment trigger.
> Could you check it out and see if it would supersede what you are trying
> to do?
>
> Cheers,
> Rodrigo
>
> On 25 Feb 2024, at 12:58, Adithya Kumar <adi.obilisetty at gmail.com> wrote:
>
> Hello,
>
> I want to add a field for collecting information about the number of GCs a
> particular heap object survived.
>
> I've done the following to implement this:
> - Add a field "StgWord gc_id" to struct "StgHeader" and "StgThunkHeader"
> - Update "SET_HDR" macro in "ClosureMacros.h" to update the "gc_id"
> - Update the "closureTypeHeaderSize" function in "Heap/ClosureTypes.hs" to
>   account for that 1 extra word.
>
> Compilation leads to a segmentation fault. The stage 2 compiler is built.
> But
> usage of it leads to a segmentation fault.
>
> Build output:
> ```
> chmod +x
> inplace/bin/ghc-stage2
> "inplace/bin/ghc-stage2" -hisuf dyn_hi -osuf  dyn_o -hcsuf dyn_hc -fPIC
> -dynamic  -O0 -H64m -Wall      -hide-all-packages -package-env - -i
> -iutils/check-api-annotations/.
> -iutils/check-api-annotations/dist-install/build
> -Iutils/check-api-annotations/dist-install/build
> -iutils/check-api-annotations/dist-install/build/check-api-annotations/autogen
> -Iutils/check-api-annotations/dist-install/build/check-api-annotations/autogen
>     -optP-include
> -optPutils/check-api-annotations/dist-install/build/check-api-annotations/autogen/cabal_macros.h
> -package-id Cabal-3.2.1.0 -package-id base-4.14.3.0 -package-id
> containers-0.6.5.1 -package-id directory-1.3.6.0 -package-id
> ghc-8.10.7.20240224 -Wall -XHaskell2010  -no-user-package-db -rtsopts
> -Wnoncanonical-monad-instances  -outputdir
> utils/check-api-annotations/dist-install/build   -c
> utils/check-api-annotations/./Main.hs -o
> utils/check-api-annotations/dist-install/build/Main.dyn_o
> utils/check-api-annotations/ghc.mk:18: recipe for target
> 'utils/check-api-annotations/dist-install/build/Main.dyn_o' failed
> make[1]: *** [utils/check-api-annotations/dist-install/build/Main.dyn_o]
> Segmentation fault (core dumped)
> Makefile:123: recipe for target 'all' failed
> make: *** [all] Error 2
> ```
>
> Is there any other place I've missed follow-up modifications?
>
> I appreciate any help provided.
>
> Best,
> Adithya
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20240226/6c76cb53/attachment.html>


More information about the ghc-devs mailing list