• Samuel Groß's avatar
    [sandbox] Implement external pointer table compaction · 76d74489
    Samuel Groß authored
    The external pointer table is already to some degree self-compacting: as
    the freelist is sorted in ascending order, free entries at the start of
    the table should quickly fill up. However, any live entry at the end of
    the table makes it impossible to shrink the table, thereby causing
    higher memory consumption. To solve this, this CL implements a simple
    table compaction algorithm, used when the freelist has become
    sufficiently large (currently >= 10% of the table capacity):
     - The goal of the algorithm is to shrink the table by freelist_size/2
       entries at the end of compaction (during sweeping).
     - At the start of the marking phase, the compaction area is computed as
       roughly [capacity - freelist_size/2, capacity).
     - When an entry is marked as alive that lies inside the compaction
       area, a new "relocation entry" is allocated for it from the freelist
       and the address of the handle for that entry is stored in that entry.
       If there are no more free entries before the compaction area,
       compaction is aborted. This is expected to happen rarely and is
       logged into a histogram.
     - During sweeping, all relocation entries are "resolved": the content
       of the old entry is copied into the new entry and the handle is
       updated to point to the new entry.
     - Finally, the table is shrunk and the last initial_freelist_size/2
       entries are decommitted.
    
    See also the comments in the ExternalPointerTable class for more details.
    
    Bug: v8:10391
    Change-Id: I28d475c3596590e860421f0a054e2ad4dbebd487
    Cq-Include-Trybots: luci.v8.try:v8_linux64_heap_sandbox_dbg_ng,v8_linux_arm64_sim_heap_sandbox_dbg_ng
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3794645Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
    Commit-Queue: Samuel Groß <saelo@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#82484}
    76d74489
Name
Last commit
Last update
.github Loading commit data...
bazel Loading commit data...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.bazelrc Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.mailmap Loading commit data...
.style.yapf Loading commit data...
.vpython Loading commit data...
.vpython3 Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.bazel Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LOONG_OWNERS Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
RISCV_OWNERS Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
WORKSPACE Loading commit data...
codereview.settings Loading commit data...