Commit 084d1f3d authored by ulan's avatar ulan Committed by Commit bot

Dampen old generation allocation limit after scavenge if allocation rate is low.

BUG=chromium:491907,chromium:499815
LOG=NO

Review URL: https://codereview.chromium.org/1180203003

Cr-Commit-Position: refs/heads/master@{#29072}
parent d4f7bff1
...@@ -1286,16 +1286,18 @@ bool Heap::PerformGarbageCollection( ...@@ -1286,16 +1286,18 @@ bool Heap::PerformGarbageCollection(
// Update relocatables. // Update relocatables.
Relocatable::PostGarbageCollectionProcessing(isolate_); Relocatable::PostGarbageCollectionProcessing(isolate_);
double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond();
double mutator_speed = static_cast<double>(
tracer()
->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond());
intptr_t old_gen_size = PromotedSpaceSizeOfObjects();
if (collector == MARK_COMPACTOR) { if (collector == MARK_COMPACTOR) {
// Register the amount of external allocated memory. // Register the amount of external allocated memory.
amount_of_external_allocated_memory_at_last_global_gc_ = amount_of_external_allocated_memory_at_last_global_gc_ =
amount_of_external_allocated_memory_; amount_of_external_allocated_memory_;
double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond();
double mutator_speed = static_cast<double>(
tracer()
->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond());
intptr_t old_gen_size = PromotedSpaceSizeOfObjects();
SetOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed); SetOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed);
} else if (HasLowYoungGenerationAllocationRate()) {
DampenOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed);
} }
{ {
...@@ -5578,6 +5580,24 @@ void Heap::SetOldGenerationAllocationLimit(intptr_t old_gen_size, ...@@ -5578,6 +5580,24 @@ void Heap::SetOldGenerationAllocationLimit(intptr_t old_gen_size,
} }
void Heap::DampenOldGenerationAllocationLimit(intptr_t old_gen_size,
double gc_speed,
double mutator_speed) {
double factor = HeapGrowingFactor(gc_speed, mutator_speed);
intptr_t limit = CalculateOldGenerationAllocationLimit(factor, old_gen_size);
if (limit < old_generation_allocation_limit_) {
if (FLAG_trace_gc_verbose) {
PrintIsolate(isolate_, "Dampen: old size: %" V8_PTR_PREFIX
"d KB, old limit: %" V8_PTR_PREFIX "d KB, \n",
"new limit: %" V8_PTR_PREFIX "d KB (%.1f)\n",
old_gen_size / KB, old_generation_allocation_limit_ / KB,
limit / KB, factor);
}
old_generation_allocation_limit_ = limit;
}
}
void Heap::EnableInlineAllocation() { void Heap::EnableInlineAllocation() {
if (!inline_allocation_disabled_) return; if (!inline_allocation_disabled_) return;
inline_allocation_disabled_ = false; inline_allocation_disabled_ = false;
......
...@@ -1177,6 +1177,12 @@ class Heap { ...@@ -1177,6 +1177,12 @@ class Heap {
void SetOldGenerationAllocationLimit(intptr_t old_gen_size, double gc_speed, void SetOldGenerationAllocationLimit(intptr_t old_gen_size, double gc_speed,
double mutator_speed); double mutator_speed);
// Decrease the allocation limit if the new limit based on the given
// parameters is lower than the current limit.
void DampenOldGenerationAllocationLimit(intptr_t old_gen_size,
double gc_speed,
double mutator_speed);
// Indicates whether inline bump-pointer allocation has been disabled. // Indicates whether inline bump-pointer allocation has been disabled.
bool inline_allocation_disabled() { return inline_allocation_disabled_; } bool inline_allocation_disabled() { return inline_allocation_disabled_; }
......
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