• 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
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
builtins Loading commit data...
codegen Loading commit data...
common Loading commit data...
compiler Loading commit data...
compiler-dispatcher Loading commit data...
d8 Loading commit data...
date Loading commit data...
debug Loading commit data...
deoptimizer Loading commit data...
diagnostics Loading commit data...
execution Loading commit data...
extensions Loading commit data...
flags Loading commit data...
handles Loading commit data...
heap Loading commit data...
ic Loading commit data...
init Loading commit data...
inspector Loading commit data...
interpreter Loading commit data...
json Loading commit data...
libplatform Loading commit data...
libsampler Loading commit data...
logging Loading commit data...
numbers Loading commit data...
objects Loading commit data...
parsing Loading commit data...
profiler Loading commit data...
protobuf Loading commit data...
regexp Loading commit data...
roots Loading commit data...
runtime Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
third_party Loading commit data...
torque Loading commit data...
tracing Loading commit data...
trap-handler Loading commit data...
utils Loading commit data...
wasm Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
OWNERS Loading commit data...