diff options
author | 2024-05-03 05:42:29 +0000 | |
---|---|---|
committer | 2024-05-10 17:39:05 +0000 | |
commit | 2a8a527e90aa3b9a4c5418b60ada60c9c58ceb78 (patch) | |
tree | f060b5db8efac9989250badb0cbbbe250559f313 /runtime/class_table.cc | |
parent | 14be0bbe4b8ed0af6dfbccc84de0af94fed4cd9d (diff) |
Register only the used portion of moving space in compaction pause
The unused portion of the moving space is where new TLABs are allocated.
In order to avoid userfaults during compaction in this portion, we were
mapping a zero-page and then unregistering the unused portion after
concurrent compaction has begun. Prior to that, during comapction pause,
we were registering the entire space.
Since gc-thread takes mmap_lock in write-mode for unregister, the
concurrent COPY ioctls from mutators get serialized. We can solve this
by simply faulting in a page in the space before registering in the
compaction pause. This way we can directly register only the used
portion.
In order to minimize mmap_lock read and write acquisitions, the CL also
reorders the sequence in which gc-thread processes linear-alloc, and
unregisters moving-space and linear-alloc space.
Bug: 320478828
Test: manual
Change-Id: I299bba8f6ba48ae05dc2c61cdb7783c6f2d01a81
Diffstat (limited to 'runtime/class_table.cc')
0 files changed, 0 insertions, 0 deletions