From: ulan Date: Wed, 17 Jun 2015 09:15:37 +0000 (-0700) Subject: Dampen old generation allocation limit after scavenge if allocation rate is low. X-Git-Tag: upstream/4.7.83~1968 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=084d1f3db31df7fac8713c953999a1d983c1856f;p=platform%2Fupstream%2Fv8.git 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} --- diff --git a/src/heap/heap.cc b/src/heap/heap.cc index f0a55fb..2ca4e37 100644 --- a/src/heap/heap.cc +++ b/src/heap/heap.cc @@ -1286,16 +1286,18 @@ bool Heap::PerformGarbageCollection( // Update relocatables. Relocatable::PostGarbageCollectionProcessing(isolate_); + double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond(); + double mutator_speed = static_cast( + tracer() + ->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond()); + 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_; - double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond(); - double mutator_speed = static_cast( - tracer() - ->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond()); - intptr_t old_gen_size = PromotedSpaceSizeOfObjects(); 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() { if (!inline_allocation_disabled_) return; inline_allocation_disabled_ = false; diff --git a/src/heap/heap.h b/src/heap/heap.h index 4038041..dd6a571 100644 --- a/src/heap/heap.h +++ b/src/heap/heap.h @@ -1177,6 +1177,12 @@ class Heap { void SetOldGenerationAllocationLimit(intptr_t old_gen_size, double gc_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. bool inline_allocation_disabled() { return inline_allocation_disabled_; }