MPS issue job003976

TitleCan't scan parts of segments allocated by buffers
Assigned userRichard Brooksby
DescriptionWe want large allocation buffers to support fast in-line allocation of the nursery, in particular. With the current code, a buffer is a whole segment, and so that means we must scan and protect the whole nursery at once. We can't easily subdivide the allocated segment because we don't know where the objects are inside, since they were allocated contiguously by the mutator using the reserve/commit protocol.
AnalysisUse the reserve/commit protocol to align objects within a segment to useful boundaries. For example, suppose we have a 2MiB segment, we could set the allocation point limit to base + 64KiB. When the limit is hit, we round up and pad the allocation point in it to the next 64KiB boundary without taking a lock or allocating more memory. Only when the true limit at 2MiB is reached do we need to enter the MPS. This gives us useful fingers into the objects at every 64KiB. (For example, we could then split the segment in 16 segments if we wanted.)
How foundunknown
Created byRichard Brooksby
Created on2016-03-08 11:33:43
Last modified byGareth Rees
Last modified on2016-03-11 21:31:40
History2016-03-08 RB Created.