• Benoit Lize's avatar
    [builtins] Remap embedded builtins into the heap on ARM64 macOS · da1a2d12
    Benoit Lize authored
    For short builtin calls, the builtins are copied on the heap when they
    cannot be put close enough to be in range of relative calls. This costs
    memory, as the embedded builtins are part of the binary, and mapped from
    the binary, and as a consequence shared with all running processes.
    
    Rather than copying the memory, we can remap it at a different address,
    avoiding the memory cost. This CL does that, on ARM64 macOS only for
    now.
    
    This saves at least ~1.4MiB of memory per V8 process. See below the
    output of vmmap <PID>:
    
    [...]
    Memory Tag 255             7408308000-740833c000   [  208K   144K   144K     0K] r-x/rwx SM=ZER
    Memory Tag 255             740833c000-7408340000   [   16K     0K     0K     0K] ---/rwx SM=ZER
    Memory Tag 255             7408344000-7408348000   [   16K     0K     0K     0K] ---/rwx SM=ZER
    Memory Tag 255             7408348000-740837c000   [  208K   144K   144K     0K] r-x/rwx SM=ZER
    Memory Tag 255             740837c000-740fe80000   [123.0M     0K     0K     0K] ---/rwx SM=ZER
    mapped file                740fe80000-740ffe4000   [ 1424K  1328K     0K     0K] r-x/rwx SM=COW          ...pp/Contents/Frameworks/Chromium Framework.framework/Versions/102.0.4958.0/Chromium Framework
    Memory Tag 255             740ffe4000-7410000000   [  112K     0K     0K     0K] ---/rwx SM=ZER
    
    The "208K" regions are 256kiB code pages, minus the header and guard
    pages, meaning that they are code chunks. The mapped file are the
    remapped builtins, showing that they aren't copied, but remapped from
    the binary.
    
    Bug: chromium:1298417
    Change-Id: Ia30a43e671726d01450a7db0ecb7777b34763053
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3553006Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
    Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
    Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Commit-Queue: Benoit Lize <lizeb@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#79716}
    da1a2d12
Name
Last commit
Last update
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
baseline Loading commit data...
bigint 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...
maglev 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...
sandbox Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
temporal 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...
web-snapshot Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
OWNERS Loading commit data...