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}
This commit is contained in:
ulan 2015-06-17 02:15:37 -07:00 committed by Commit bot
parent d4f7bff1ea
commit 084d1f3db3
2 changed files with 31 additions and 5 deletions

View File

@ -1286,16 +1286,18 @@ bool Heap::PerformGarbageCollection(
// Update relocatables. // Update relocatables.
Relocatable::PostGarbageCollectionProcessing(isolate_); Relocatable::PostGarbageCollectionProcessing(isolate_);
if (collector == MARK_COMPACTOR) {
// Register the amount of external allocated memory.
amount_of_external_allocated_memory_at_last_global_gc_ =
amount_of_external_allocated_memory_;
double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond(); double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond();
double mutator_speed = static_cast<double>( double mutator_speed = static_cast<double>(
tracer() tracer()
->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond()); ->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond());
intptr_t old_gen_size = PromotedSpaceSizeOfObjects(); intptr_t old_gen_size = PromotedSpaceSizeOfObjects();
if (collector == MARK_COMPACTOR) {
// Register the amount of external allocated memory.
amount_of_external_allocated_memory_at_last_global_gc_ =
amount_of_external_allocated_memory_;
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,
} }
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;

View File

@ -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_; }