004ce08da6
This reverts commit 85ba94f28c
.
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/1640563004
Cr-Commit-Position: refs/heads/master@{#33552}
38 lines
844 B
C++
38 lines
844 B
C++
// Copyright 2016 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef V8_UTILS_INL_H_
|
|
#define V8_UTILS_INL_H_
|
|
|
|
#include "src/utils.h"
|
|
|
|
#include "include/v8-platform.h"
|
|
#include "src/base/platform/time.h"
|
|
#include "src/v8.h"
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
|
|
class TimedScope {
|
|
public:
|
|
explicit TimedScope(double* result)
|
|
: start_(TimestampMs()), result_(result) {}
|
|
|
|
~TimedScope() { *result_ = TimestampMs() - start_; }
|
|
|
|
private:
|
|
static inline double TimestampMs() {
|
|
return V8::GetCurrentPlatform()->MonotonicallyIncreasingTime() *
|
|
static_cast<double>(base::Time::kMillisecondsPerSecond);
|
|
}
|
|
|
|
double start_;
|
|
double* result_;
|
|
};
|
|
|
|
} // namespace internal
|
|
} // namespace v8
|
|
|
|
#endif // V8_UTILS_INL_H_
|