[GHC] #8199: Get rid of HEAP_ALLOCED
GHC
ghc-devs at haskell.org
Fri Aug 30 20:57:38 UTC 2013
#8199: Get rid of HEAP_ALLOCED
----------------------------+----------------------------------------------
Reporter: ezyang | Owner: ezyang
Type: feature | Status: new
request | Milestone: 7.10.1
Priority: normal | Version: 7.7
Component: | Keywords:
Compiler | Architecture: Unknown/Multiple
Resolution: | Difficulty: Project (more than a week)
Operating System: | Blocked By:
Unknown/Multiple | Related Tickets:
Type of failure: |
None/Unknown |
Test Case: |
Blocking: |
----------------------------+----------------------------------------------
Description changed by ezyang:
Old description:
> This bug is to track progress of removing HEAP_ALLOCED from GHC,
> promising faster GC, as long as we can keep the cost of indirections
> down.
>
> The relevant wiki article:
> http://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/HeapAlloced ;
> we are implementing method 2. Version 2 of the patchset is probably
> correct.
>
> Improvements possible:
>
> * Don't pay for a double indirection when -fPIC is turned on. Probably
> the easiest way to do this is to *not* bake in the indirections into
> compiled code when it is -fPIC'd, and instead scribble over the GOT.
> However, I don't know how to go backwards from a symbol to a GOT entry,
> so we might need some heinous assembly hacks to get this working.
>
> * Closure tables should have their indirections short-circuited by the
> initialization code.
>
> * We are paying an indirection when a GC occurs when the closure is not
> in R1. According to the wiki page, technically this is not needed, but I
> don't know how to eliminate references to the closure itself from
> stg_gc_fun.
>
> * Properly handle the Windows DLL case (e.g. SRTs); this should be
> simpler now that everything is an indirection.
>
> * Bikeshed hs_main API changes (because closures are not valid prior to
> RTS initialization, so you have to pass in an indirection instead)
>
> * Improve static indirection and stable pointer registration, avoiding
> binary bloat from `__attribute(constructor)__` stubs.
>
> * ~~Need to implement a new megablock tracking structure so we can
> free/check for lost blocks~~. Now that efficient lookup is not necessary,
> perhaps we can write-optimize the megablock tracking structures.
New description:
This bug is to track progress of removing HEAP_ALLOCED from GHC, promising
faster GC, as long as we can keep the cost of indirections down.
The relevant wiki article:
http://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/HeapAlloced ;
we are implementing method 2. Version 2 of the patchset is probably
correct.
Improvements possible:
* Don't pay for a double indirection when -fPIC is turned on. Probably
the easiest way to do this is to *not* bake in the indirections into
compiled code when it is -fPIC'd, and instead scribble over the GOT.
However, I don't know how to go backwards from a symbol to a GOT entry, so
we might need some heinous assembly hacks to get this working.
* Closure tables should have their indirections short-circuited by the
initialization code.
* We are paying an indirection when a GC occurs when the closure is not in
R1. According to the wiki page, technically this is not needed, but I
don't know how to eliminate references to the closure itself from
stg_gc_fun.
* Properly handle the Windows DLL case (e.g. SRTs); this should be simpler
now that everything is an indirection.
* Bikeshed hs_main API changes (because closures are not valid prior to
RTS initialization, so you have to pass in an indirection instead)
* ~~Improve static indirection and stable pointer registration, avoiding
binary bloat from `__attribute(constructor)__` stubs.~~ After discussing
this with some folks, it seems that there isn't really a portable way to
do this when we are using the system dynamic linker to load libraries at
startup. The problem is that we need to somehow get a list of all the
GHC-compiled libraries which got loaded, and really the easiest way to get
that is to just build it ourselves.
* ~~Need to implement a new megablock tracking structure so we can
free/check for lost blocks~~. Now that efficient lookup is not necessary,
perhaps we can write-optimize the megablock tracking structures.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8199#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list