From 16a980b4c4271902e50c99e66b5693f1d1556e38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Wed, 25 Oct 2017 15:52:20 +0200 Subject: [PATCH] deps: cherry-pick 2c75616 from upstream V8 Original commit message: [heap] Ensure progress in unmapping memory chunks. If sweeping is not making progress and there are many young generation GCs happening, then this can lead to accumulation of memory chunks in the unmapper queue. Bug: chromium:771966 Change-Id: Ief73ada0d17198a80b668850c6d2e7ea413113e7 Reviewed-on: https://chromium-review.googlesource.com/702479 Reviewed-by: Michael Lippautz Commit-Queue: Ulan Degenbaev Cr-Commit-Position: refs/heads/master@{#48312} Refs: https://github.com/v8/v8/commit/2c75616028e75883e28df2c6d8dd2a6bfe47f718 Refs: https://github.com/nodejs/help/issues/917#issuecomment-339292642 Refs: https://bugs.chromium.org/p/chromium/issues/detail?id=771966 PR-URL: https://github.com/nodejs/node/pull/16490 Backport-PR-URL: https://github.com/nodejs/node/pull/16413 Reviewed-By: Franziska Hinkelmann Reviewed-By: Colin Ihrig Reviewed-By: Ali Ijaz Sheikh Reviewed-By: James M Snell Reviewed-By: Michael Dawson --- deps/v8/src/heap/heap.cc | 6 ++++++ deps/v8/src/heap/spaces.h | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/deps/v8/src/heap/heap.cc b/deps/v8/src/heap/heap.cc index 0b5a90afb08b1c..9f29717803a0ab 100644 --- a/deps/v8/src/heap/heap.cc +++ b/deps/v8/src/heap/heap.cc @@ -1885,6 +1885,12 @@ void Heap::Scavenge() { IncrementalMarking::PauseBlackAllocationScope pause_black_allocation( incremental_marking()); + if (mark_compact_collector()->sweeper().sweeping_in_progress() && + memory_allocator_->unmapper()->NumberOfDelayedChunks() > + kMaxSemiSpaceSizeInKB / Page::kPageSize) { + mark_compact_collector()->EnsureSweepingCompleted(); + } + mark_compact_collector()->sweeper().EnsureNewSpaceCompleted(); SetGCState(SCAVENGE); diff --git a/deps/v8/src/heap/spaces.h b/deps/v8/src/heap/spaces.h index d5dc5b1115cccb..230a127809a697 100644 --- a/deps/v8/src/heap/spaces.h +++ b/deps/v8/src/heap/spaces.h @@ -1199,6 +1199,11 @@ class V8_EXPORT_PRIVATE MemoryAllocator { bool has_delayed_chunks() { return delayed_regular_chunks_.size() > 0; } + int NumberOfDelayedChunks() { + base::LockGuard guard(&mutex_); + return static_cast(delayed_regular_chunks_.size()); + } + private: static const int kReservedQueueingSlots = 64; static const int kMaxUnmapperTasks = 24;