• 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
..
debug Loading commit data...
numbers Loading commit data...
platform Loading commit data...
sanitizer Loading commit data...
utils Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
OWNERS Loading commit data...
address-region.h Loading commit data...
atomic-utils.h Loading commit data...
atomicops.h Loading commit data...
atomicops_internals_atomicword_compat.h Loading commit data...
base-export.h Loading commit data...
bit-field.h Loading commit data...
bits-iterator.h Loading commit data...
bits.cc Loading commit data...
bits.h Loading commit data...
bounded-page-allocator.cc Loading commit data...
bounded-page-allocator.h Loading commit data...
bounds.h Loading commit data...
build_config.h Loading commit data...
compiler-specific.h Loading commit data...
cpu.cc Loading commit data...
cpu.h Loading commit data...
division-by-constant.cc Loading commit data...
division-by-constant.h Loading commit data...
emulated-virtual-address-subspace.cc Loading commit data...
emulated-virtual-address-subspace.h Loading commit data...
enum-set.h Loading commit data...
export-template.h Loading commit data...
file-utils.cc Loading commit data...
file-utils.h Loading commit data...
flags.h Loading commit data...
free_deleter.h Loading commit data...
functional.cc Loading commit data...
functional.h Loading commit data...
hashmap-entry.h Loading commit data...
hashmap.h Loading commit data...
ieee754.cc Loading commit data...
ieee754.h Loading commit data...
immediate-crash.h Loading commit data...
iterator.h Loading commit data...
lazy-instance.h Loading commit data...
logging.cc Loading commit data...
logging.h Loading commit data...
macros.h Loading commit data...
memory.h Loading commit data...
once.cc Loading commit data...
once.h Loading commit data...
optional.h Loading commit data...
overflowing-math.h Loading commit data...
page-allocator.cc Loading commit data...
page-allocator.h Loading commit data...
pointer-with-payload.h Loading commit data...
qnx-math.h Loading commit data...
region-allocator.cc Loading commit data...
region-allocator.h Loading commit data...
ring-buffer.h Loading commit data...
safe_conversions.h Loading commit data...
safe_conversions_arm_impl.h Loading commit data...
safe_conversions_impl.h Loading commit data...
small-vector.h Loading commit data...
strings.cc Loading commit data...
strings.h Loading commit data...
sys-info.cc Loading commit data...
sys-info.h Loading commit data...
template-utils.h Loading commit data...
threaded-list.h Loading commit data...
timezone-cache.h Loading commit data...
type-traits.h Loading commit data...
ubsan.cc Loading commit data...
v8-fallthrough.h Loading commit data...
vector.h Loading commit data...
virtual-address-space-page-allocator.cc Loading commit data...
virtual-address-space-page-allocator.h Loading commit data...
virtual-address-space.cc Loading commit data...
virtual-address-space.h Loading commit data...
vlq-base64.cc Loading commit data...
vlq-base64.h Loading commit data...
vlq.h Loading commit data...
win32-headers.h Loading commit data...