Potential GSoC project - GC improvements
Rainer Schuetze via Digitalmars-d
digitalmars-d at puremagic.com
Sat Mar 19 01:39:30 PDT 2016
On 18.03.2016 22:04, Jeremy deHaan wrote:
> On Friday, 18 March 2016 at 16:41:21 UTC, Rainer Schuetze wrote:
>>
>>
>> On 15.03.2016 02:34, Jeremy DeHaan wrote:
>>> [...]
>>
>> Being always way behind reading the forum these days, I'm a little
>> late and have not read all the messages in this thread thoroughly.
>> Here are some thoughts:
>>
>> [...]
>
> Thank you for the feedback. I'm still working on my proposal so nothing
> is set in stone just yet. I'm very interested in working on the GC for
> this GSoC, so what would you suggest be my main focus? It sounds like
> you already have a GC that is more or less what I was planning on
> implementing...
Well, there are a number of unfinished parts left:
- as far as I understand the precise GC PR
https://github.com/D-Programming-Language/druntime/pull/1022 is
currently stalled because it doesn't yield better overall performance
than the current GC in most situations. The reasoning is that it should
be able compensate the additional time during allocation (saving pointer
information) by improved scanning using that information to skip
non-pointers. That didn't work out yet, though.
- last time I checked generating RTInfo (which contains the pointer
info) was a bit unreliable, see
https://github.com/D-Programming-Language/dmd/pull/2480 and
https://github.com/D-Programming-Language/dmd/pull/3958.
- I only implemented the DATA and TLS section TypeInfo emission for the
OMF backend, this needs to be ported to other platforms. Martin Nowak
recently considered to just emit pointer locations. This would make the
scanning function a bit simpler, but might need a bit more memory in the
binary.
Regarding the concurrent GC: I consider my implementation a prototype
with rough edges and a lot of optimization opportunities. I'm not sure
whether page protection is good enough to implement a generational GC,
but it might still be possible to take advantage of the information that
a page hasn't been written to.
Judging from https://blog.golang.org/go15gc Go 1.5 seems to be using a
similar GC (concurrent mark-and-sweep), though with proper write
barriers. I guess there is a lot of stuff that can be used from their
experience.
> so what would you suggest be my main focus?
Given that 32-bit applications are becoming legacy, and false pointers
are not a common problem in 64-bit processes (they do happen eventually,
though) I suspect that concurrency of the GC would make a much larger
impact on the D language than preciseness. A good target should be to
reduce stop-the-world-time to something acceptable for interactive
programs, i.e. well below 50ms.
More information about the Digitalmars-d
mailing list