Commit cdecc375 authored by Gabriel Charette's avatar Gabriel Charette Committed by Commit Bot

[v8::heap] Include main thread in num_tasks computations.

The num_tasks computation has long been based on NumberOfAvailableBackgroundThreads()

We used to have one background worker per core, stealing cycles from
the main thread. I fixed that @ crrev.com/534414. But now this
computation is wrong and generates one less task than it should (one
per worker but the main thread takes task #0 in practice).

Other usage of NumberOfAvailableBackgroundThreads() in V8 seem correct
already so this is the only tweak required.

R=mlippautz@chromium.org

Bug: chromium:808028
Change-Id: I784ed9b764017f146931547d30be4a3b180b5a2c
Reviewed-on: https://chromium-review.googlesource.com/904662
Commit-Queue: Gabriel Charette <gab@chromium.org>
Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#51121}
parent 3d11bf77
...@@ -2010,11 +2010,10 @@ int Heap::NumberOfScavengeTasks() { ...@@ -2010,11 +2010,10 @@ int Heap::NumberOfScavengeTasks() {
if (!FLAG_parallel_scavenge) return 1; if (!FLAG_parallel_scavenge) return 1;
const int num_scavenge_tasks = const int num_scavenge_tasks =
static_cast<int>(new_space()->TotalCapacity()) / MB; static_cast<int>(new_space()->TotalCapacity()) / MB;
return Max( static int num_cores =
1, 1 + static_cast<int>(
Min(Min(num_scavenge_tasks, kMaxScavengerTasks), V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads());
static_cast<int>( return Max(1, Min(Min(num_scavenge_tasks, kMaxScavengerTasks), num_cores));
V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads())));
} }
void Heap::Scavenge() { void Heap::Scavenge() {
......
...@@ -404,14 +404,22 @@ class RootMarkingVisitorSeedOnly : public RootVisitor { ...@@ -404,14 +404,22 @@ class RootMarkingVisitorSeedOnly : public RootVisitor {
std::vector<Object*> buffered_objects_; std::vector<Object*> buffered_objects_;
}; };
} // namespace int NumberOfAvailableCores() {
static int num_cores =
static int NumberOfAvailableCores() { static_cast<int>(
return Max( V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads()) +
1, static_cast<int>( 1;
V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads())); // This number of cores should be greater than zero and never change.
DCHECK_GE(num_cores, 1);
DCHECK_EQ(
num_cores,
1 + static_cast<int>(
V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads()));
return num_cores;
} }
} // namespace
int MarkCompactCollectorBase::NumberOfParallelCompactionTasks(int pages) { int MarkCompactCollectorBase::NumberOfParallelCompactionTasks(int pages) {
DCHECK_GT(pages, 0); DCHECK_GT(pages, 0);
return FLAG_parallel_compaction ? Min(NumberOfAvailableCores(), pages) : 1; return FLAG_parallel_compaction ? Min(NumberOfAvailableCores(), pages) : 1;
...@@ -3253,15 +3261,16 @@ void MarkCompactCollectorBase::CreateAndExecuteEvacuationTasks( ...@@ -3253,15 +3261,16 @@ void MarkCompactCollectorBase::CreateAndExecuteEvacuationTasks(
delete[] evacuators; delete[] evacuators;
if (FLAG_trace_evacuation) { if (FLAG_trace_evacuation) {
PrintIsolate(isolate(), PrintIsolate(
"%8.0f ms: evacuation-summary: parallel=%s pages=%d " isolate(),
"wanted_tasks=%d tasks=%d cores=%" PRIuS "%8.0f ms: evacuation-summary: parallel=%s pages=%d "
" live_bytes=%" V8PRIdPTR " compaction_speed=%.f\n", "wanted_tasks=%d tasks=%d cores=%" PRIuS " live_bytes=%" V8PRIdPTR
isolate()->time_millis_since_init(), " compaction_speed=%.f\n",
FLAG_parallel_compaction ? "yes" : "no", job->NumberOfItems(), isolate()->time_millis_since_init(),
wanted_num_tasks, job->NumberOfTasks(), FLAG_parallel_compaction ? "yes" : "no", job->NumberOfItems(),
V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads(), wanted_num_tasks, job->NumberOfTasks(),
live_bytes, compaction_speed); V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads() + 1,
live_bytes, compaction_speed);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment