• mlippautz's avatar
    [heap] Parallel newspace evacuation, semispace copy, and compaction \o/ · 8f0fd8c0
    mlippautz authored
    All parallelism can be turned off using --predictable, or --noparallel-compaction.
    
    This patch completely parallelizes
     - semispace copy: from space -> to space (within newspace)
     - newspace evacuation: newspace -> oldspace
     - oldspace compaction: oldspace -> oldspace
    
    Previously newspace has been handled sequentially (semispace copy, newspace
    evacuation) before compacting oldspace in parallel. However, on a high level
    there are no dependencies between those two actions, hence we parallelize them
    altogether. We base the number of evacuation tasks on the overall set of
    to-be-processed pages (newspace + oldspace compaction pages).
    
    Some low-level details:
     - The hard cap on number of tasks has been lifted
     - We cache store buffer entries locally before merging them back into the global
       StoreBuffer in a finalization phase.
     - We cache AllocationSite operations locally before merging them back into the
       global pretenuring storage in a finalization phase.
     - AllocationSite might be compacted while they would be needed for newspace
       evacuation. To mitigate any problems we defer checking allocation sites for
       newspace till merging locally buffered data.
    
    CQ_EXTRA_TRYBOTS=tryserver.v8:v8_linux_arm64_gc_stress_dbg,v8_linux_gc_stress_dbg,v8_mac_gc_stress_dbg,v8_linux64_asan_rel,v8_linux64_tsan_rel,v8_mac64_asan_rel
    BUG=chromium:524425
    LOG=N
    R=hpayer@chromium.org, ulan@chromium.org
    
    Review URL: https://codereview.chromium.org/1577853007
    
    Cr-Commit-Position: refs/heads/master@{#33523}
    8f0fd8c0
spaces.h 103 KB