Removing the Lock for Small GC Allocations: Clarification of GC Design?
Martin Nowak
dawg at dawgfoto.de
Sun Jan 1 12:44:17 PST 2012
On Sat, 31 Dec 2011 23:28:09 +0100, dsimcha <dsimcha at yahoo.com> wrote:
> I have a plan to avoid the GC lock for most small (<1 page) GC
> allocations. I hope to have a pull request within a week or two, in
> time for the next release. There's one detail I need clarified by Sean,
> Walter or someone who designed the D GC.
>
> Currently small allocations are handled by popping a block off a free
> list, if a block is available. I plan to make each page owned by a
> single thread, and make the free lists thread-local. The array of free
> lists (one for each power of two size) is stored in the Gcx struct. The
> easiest way to make this array thread-local is to move it out of the Gcx
> struct and make it global. Is there any reason why >1 instance of Gcx
> would exist (maybe as an implementation detail of shared libraries,
> etc.)? If not, what's to point of having the Gcx struct instead of just
> making its variables global?
Not for shared libraries.
You should probably wrap multiple TLS variables in a struct and put only
a reference into TLS to reduce the expense of thread local access.
More information about the Digitalmars-d
mailing list