Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(805)

Side by Side Diff: src/heap/heap.cc

Issue 1180203003: Dampen old generation allocation limit after scavenge if allocation rate is low. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address comments Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/heap/heap.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 freed_global_handles = 1276 freed_global_handles =
1277 isolate_->global_handles()->PostGarbageCollectionProcessing(collector); 1277 isolate_->global_handles()->PostGarbageCollectionProcessing(collector);
1278 } 1278 }
1279 gc_post_processing_depth_--; 1279 gc_post_processing_depth_--;
1280 1280
1281 isolate_->eternal_handles()->PostGarbageCollectionProcessing(this); 1281 isolate_->eternal_handles()->PostGarbageCollectionProcessing(this);
1282 1282
1283 // Update relocatables. 1283 // Update relocatables.
1284 Relocatable::PostGarbageCollectionProcessing(isolate_); 1284 Relocatable::PostGarbageCollectionProcessing(isolate_);
1285 1285
1286 double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond();
1287 double mutator_speed = static_cast<double>(
1288 tracer()
1289 ->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond());
1290 intptr_t old_gen_size = PromotedSpaceSizeOfObjects();
1286 if (collector == MARK_COMPACTOR) { 1291 if (collector == MARK_COMPACTOR) {
1287 // Register the amount of external allocated memory. 1292 // Register the amount of external allocated memory.
1288 amount_of_external_allocated_memory_at_last_global_gc_ = 1293 amount_of_external_allocated_memory_at_last_global_gc_ =
1289 amount_of_external_allocated_memory_; 1294 amount_of_external_allocated_memory_;
1290 double gc_speed = tracer()->CombinedMarkCompactSpeedInBytesPerMillisecond();
1291 double mutator_speed = static_cast<double>(
1292 tracer()
1293 ->CurrentOldGenerationAllocationThroughputInBytesPerMillisecond());
1294 intptr_t old_gen_size = PromotedSpaceSizeOfObjects();
1295 SetOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed); 1295 SetOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed);
1296 } else if (HasLowYoungGenerationAllocationRate()) {
1297 DampenOldGenerationAllocationLimit(old_gen_size, gc_speed, mutator_speed);
1296 } 1298 }
1297 1299
1298 { 1300 {
1299 GCCallbacksScope scope(this); 1301 GCCallbacksScope scope(this);
1300 if (scope.CheckReenter()) { 1302 if (scope.CheckReenter()) {
1301 AllowHeapAllocation allow_allocation; 1303 AllowHeapAllocation allow_allocation;
1302 GCTracer::Scope scope(tracer(), GCTracer::Scope::EXTERNAL); 1304 GCTracer::Scope scope(tracer(), GCTracer::Scope::EXTERNAL);
1303 VMState<EXTERNAL> state(isolate_); 1305 VMState<EXTERNAL> state(isolate_);
1304 HandleScope handle_scope(isolate_); 1306 HandleScope handle_scope(isolate_);
1305 CallGCEpilogueCallbacks(gc_type, gc_callback_flags); 1307 CallGCEpilogueCallbacks(gc_type, gc_callback_flags);
(...skipping 4262 matching lines...) Expand 10 before | Expand all | Expand 10 after
5568 PrintIsolate( 5570 PrintIsolate(
5569 isolate_, 5571 isolate_,
5570 "Grow: old size: %" V8_PTR_PREFIX "d KB, new limit: %" V8_PTR_PREFIX 5572 "Grow: old size: %" V8_PTR_PREFIX "d KB, new limit: %" V8_PTR_PREFIX
5571 "d KB (%.1f), new idle limit: %" V8_PTR_PREFIX "d KB (%.1f)\n", 5573 "d KB (%.1f), new idle limit: %" V8_PTR_PREFIX "d KB (%.1f)\n",
5572 old_gen_size / KB, old_generation_allocation_limit_ / KB, factor, 5574 old_gen_size / KB, old_generation_allocation_limit_ / KB, factor,
5573 idle_old_generation_allocation_limit_ / KB, idle_factor); 5575 idle_old_generation_allocation_limit_ / KB, idle_factor);
5574 } 5576 }
5575 } 5577 }
5576 5578
5577 5579
5580 void Heap::DampenOldGenerationAllocationLimit(intptr_t old_gen_size,
5581 double gc_speed,
5582 double mutator_speed) {
5583 double factor = HeapGrowingFactor(gc_speed, mutator_speed);
5584 intptr_t limit = CalculateOldGenerationAllocationLimit(factor, old_gen_size);
5585 if (limit < old_generation_allocation_limit_) {
5586 if (FLAG_trace_gc_verbose) {
5587 PrintIsolate(isolate_, "Dampen: old size: %" V8_PTR_PREFIX
5588 "d KB, old limit: %" V8_PTR_PREFIX "d KB, \n",
5589 "new limit: %" V8_PTR_PREFIX "d KB (%.1f)\n",
5590 old_gen_size / KB, old_generation_allocation_limit_ / KB,
5591 limit / KB, factor);
5592 }
5593 old_generation_allocation_limit_ = limit;
5594 }
5595 }
5596
5597
5578 void Heap::EnableInlineAllocation() { 5598 void Heap::EnableInlineAllocation() {
5579 if (!inline_allocation_disabled_) return; 5599 if (!inline_allocation_disabled_) return;
5580 inline_allocation_disabled_ = false; 5600 inline_allocation_disabled_ = false;
5581 5601
5582 // Update inline allocation limit for new space. 5602 // Update inline allocation limit for new space.
5583 new_space()->UpdateInlineAllocationLimit(0); 5603 new_space()->UpdateInlineAllocationLimit(0);
5584 } 5604 }
5585 5605
5586 5606
5587 void Heap::DisableInlineAllocation() { 5607 void Heap::DisableInlineAllocation() {
(...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after
6787 *object_type = "CODE_TYPE"; \ 6807 *object_type = "CODE_TYPE"; \
6788 *object_sub_type = "CODE_AGE/" #name; \ 6808 *object_sub_type = "CODE_AGE/" #name; \
6789 return true; 6809 return true;
6790 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME) 6810 CODE_AGE_LIST_COMPLETE(COMPARE_AND_RETURN_NAME)
6791 #undef COMPARE_AND_RETURN_NAME 6811 #undef COMPARE_AND_RETURN_NAME
6792 } 6812 }
6793 return false; 6813 return false;
6794 } 6814 }
6795 } // namespace internal 6815 } // namespace internal
6796 } // namespace v8 6816 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698