-
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: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#74829}
990c9386