• Steve Blackburn's avatar
    Serialization without heap assumptions. · 1d2c043a
    Steve Blackburn authored
    Currently back references to regular objects are encoded in terms of
    a relative address, index by chunk index and chunk offset.   This
    approach has the advantage of avoiding the need for a table of
    back-references at deserialization time, but makes strong assumptions
    about the way objects are organized in memory (for example, this will
    not work if the allocator uses a free list rather than a bump pointer).
    
    I did some quick measurements and found that the absolute number of
    objects and back-references is low, suggesting that simply indexing
    objects would work with little (or no) observable impact on peak
    memory use during deserialization.   Indexing only back referenced
    objects is not implemented in this simple CL, but could fairly easily
    be added.
    
    Given that the existing mechanism will remain in place, I have
    implemented the object index by simply making chunk size one, so
    every object lives on its own chunk (with offset zero).   This is
    the moral equivalent to indexing each object but is a more minimal
    change.  Directly encoding an object index will be more efficient,
    the trade off made here is just to keep the change absolutely minimal.
    
    If using an object index becomes the default, this can be optimized
    first by only using an index for each object that is actually back-
    referenced (about half of all objects in my measurements), and more
    aggressively, a technique like register allocation could be used at
    serialization time to limit the number of indices to the maximum
    number of outstanding back-references at any time (basically a live-
    range analysis of back-references).
    
    Bug: v8:9533
    Change-Id: I1b7ae87e954f67f6405c2bbdf3b4a4f385af8579
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2030742
    Commit-Queue: Steve Blackburn <steveblackburn@google.com>
    Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
    Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#66154}
    1d2c043a
Name
Last commit
Last update
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...
.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...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS 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...
LICENSE.valgrind 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...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...