The native mark sweep space only ever allocates fixed-sized blocks from the page resource. It is fully eligible for using BlockPageResource just like ImmixSpace.
The problem with using raw FreeListPageResource is that FreeListPageResource::release_pages needs to acquire a mutex (FreeListPageResource::sync). The more GC workers there are, the worse the problem becomes.
When using a single GC worker thread:
When using two GC worker threads (running the same workload):
When using 16 GC worker threads:
And it is taking up a significant proportion of the GC time when running multiple workers.
The native mark sweep space only ever allocates fixed-sized blocks from the page resource. It is fully eligible for using
BlockPageResource
just likeImmixSpace
.The problem with using raw
FreeListPageResource
is thatFreeListPageResource::release_pages
needs to acquire a mutex (FreeListPageResource::sync
). The more GC workers there are, the worse the problem becomes.When using a single GC worker thread:
When using two GC worker threads (running the same workload):
When using 16 GC worker threads:
And it is taking up a significant proportion of the GC time when running multiple workers.