• Daniel Lehmann's avatar
    [wasm] publish TurboFan results in batches · 990c9386
    Daniel Lehmann authored
    With mprotect-based write protection of the WebAssembly code space,
    we switch page protection flags each time (at least) one compilation
    thread needs write access. Two such switches happen when TurboFan
    compilation results are available in {ExecuteCompilationUnits}: One
    switch happens when calling {NativeModule::AddCompiledCode} and one more
    when calling {NativeModule::PublishCode} via
    {SchedulePublishCompilationResults} and {PublishCompilationResults}.
    
    So far, each TurboFan result was published eagerly, i.e., as soon as it
    became available. This has the benefit that faster code is available
    immediately, and had no large cost or downside without write protection.
    However, with write protection switching permissions is expensive (an
    mprotect syscall) and needs to lock the
    {WasmCodeAllocator::allocation_mutex_} (which causes lock contention and
    under Linux many futex syscalls). Thus, immediately publishing each
    TurboFan result when using write protection can cause up to 10x slower
    compilation compared with not using write protection. In terms of
    syscalls we measured (non scientifically) with
    {sudo perf stat -e 'syscalls:sys_enter*' d8 ...} on the Unity benchmark:
    - mprotect: 10k vs. 44k syscalls (baseline vs. write protection)
    - futex: 31k vs. 112k syscalls (baseline vs. write protection)
    - sys time: 1.6s vs. 10s (baseline vs. write protection)
    All of those are clearly to high.
    
    The fix here is simply to batch togther multiple TurboFan functions into
    one publishing step when using write protection. The batching logic
    already exists for Liftoff, so we can just disable eager publishing for
    TurboFan when using write protection. Additionally, we publish once when
    all Liftoff results are available (even if the batch is not complete),
    such that time-to-execute is not regressed.
    
    R=clemensb@chromium.org
    CC=​​​​jkummerow@chromium.org
    
    Bug: v8:11663, chromium:932033
    Change-Id: Ibf6f28ecf4733b40322e62761e66046dec60a125
    Cq-Include-Trybots: luci.v8.try:v8_linux64_fyi_rel_ng
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2922114
    Commit-Queue: Daniel Lehmann <dlehmann@google.com>
    Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#74829}
    990c9386
Name
Last commit
Last update
.github 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...
.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...
.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...
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...
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...
codereview.settings Loading commit data...