Commit Graph

174 Commits

Author SHA1 Message Date
Martin Kustermann 35b17f3730 [VM] Consistently use ValidationPolicy in frame iteration APIs
Previously there were places in the code where an API accepted a
`bool validate_frames` and call sites passed an enum value (which
implicitly got converted to a bool).

By changing the APIs to require an enum, the compiler will tell us if a
caller doesn't pass one.

Change-Id: I29fcd0b018e6cdd7e00b5bb03e83b9636d1345d4
Reviewed-on: https://dart-review.googlesource.com/57823
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-06-04 14:46:26 +00:00
Ryan Macnak c3fc0dbb0d [vm, gc] Extend idle GC logic to compaction.
Bug: https://github.com/dart-lang/sdk/issues/30978
Change-Id: I49509c139ad1ad809dbf626492882c7fd29aff5c
Reviewed-on: https://dart-review.googlesource.com/34080
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Erik Corry <erikcorry@google.com>
2018-01-11 19:44:30 +00:00
Ryan Macnak e14b3a86f0 Report errno on mprotect failure.
Bug: b/70275153
Change-Id: I81b868b25428b39835935846ba2c9f9f67b3e84d
Reviewed-on: https://dart-review.googlesource.com/33665
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-01-10 01:37:49 +00:00
Ryan Macnak 8fba2ea2b6 Use OOB messages to schedule compaction for Dart_NotifyLowMemory.
This ensures any finalizers that run during compaction happen on a thread the embedder knows about.

Bug: https://github.com/dart-lang/sdk/issues/31662
Change-Id: If1ca39fe72937ad2bc4607f7cacc4dc82e49be01
Reviewed-on: https://dart-review.googlesource.com/30040
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2017-12-19 22:38:34 +00:00
Ryan Macnak 62ae8cda0a Parallel compaction.
Divide the heap by pages into k tasks. Use ThreadBarrier to ensure
planning -> sliding and non-stack forwarding -> stack forwarding.

Bug: https://github.com/dart-lang/sdk/issues/30978
Change-Id: I2c9fcec0a0794bfea96ca1a0fb509a9f93242b65
Reviewed-on: https://dart-review.googlesource.com/29444
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Erik Corry <erikcorry@google.com>
2017-12-15 01:38:42 +00:00
Ryan Macnak 5e07efa547 [vm, gc] Add Dart_NotifyLowMemory.
Move updating class table allocation stats before/after GC to inside the GC's safepoint.

Bug: https://github.com/dart-lang/sdk/issues/30978
Change-Id: Ia15665397ae9f455c5e7e4526d3575932246bbcc
Reviewed-on: https://dart-review.googlesource.com/22805
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2017-12-06 22:45:31 +00:00
Erik Corry c140bb7edd [VM-GC] Reduce duplicated code in visit functions.
Also starts to introduce some distinctions that will be needed for
compressed pointers (easy to rip out if for some reason we decide
against them).

R=rmacnak@google.com

Bug:
Change-Id: I36df2f75220ec56decb991df6c3352f8dc6b407a
Reviewed-on: https://dart-review.googlesource.com/17220
Commit-Queue: Erik Corry <erikcorry@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2017-10-31 10:42:25 +00:00
Ryan Macnak b247090c9e [vm] Align old-space pages.
Allows quick access to the page header for any old-space object, which is a convenient place to keep forwarding information.

Also combine the reserve and commit operations of VirtualMemory.

Bug: https://github.com/dart-lang/sdk/issues/30978
Change-Id: Id3fe06932f7bef882bb1cc29d72441b0a3602eb6
Reviewed-on: https://dart-review.googlesource.com/17046
Reviewed-by: Erik Corry <erikcorry@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
2017-10-30 22:02:20 +00:00
Ryan Macnak aef928698e [vm] Rebuild the store buffer when following forwarding pointers.
For compaction, we cannot leave forwarding corpses in the store buffer because their pages will be freed.

Bug: https://github.com/dart-lang/sdk/issues/30978
Change-Id: If70d8536129801eac0456ed806473bc02549bb21
Reviewed-on: https://dart-review.googlesource.com/11249
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Erik Corry <erikcorry@google.com>
2017-10-05 23:32:13 +00:00
Ryan Macnak 637a9f873b Initial idle mark-sweep.
Estimate the speed of mark-sweep (or just marking if concurrent sweep is enabled) and use it to decide if a mark-sweep would complete within an idle period.

Start considering idle mark-sweeps when old-space has grown half way to the size that will trigger a blocking GC.

Change-Id: Id03e443365c2f965b41cbc1b7787916edbe7f48f
Reviewed-on: https://dart-review.googlesource.com/3423
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2017-09-25 19:59:47 +00:00
Ryan Macnak b0f203db19 [vm-service] Include external sizes in the allocation table.
Bug: https://github.com/dart-lang/sdk/issues/30380
Change-Id: Ieec5adf13548b73bac886816d4a2174de7585880
Reviewed-on: https://dart-review.googlesource.com/7685
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Todd Turnidge <turnidge@google.com>
2017-09-25 18:33:07 +00:00
Ryan Macnak 86f602d020 Initial idle GC logic.
Use the speed of previous scavenges to estimate the time required for the next scavenge. When we receive an initial notification, perform a scavenge if we have allocated enough and we estimate we can complete the scavenge before the deadline.

Expand the time recorded for a scavenge to include safepointing and iterating roots.

R=asiva@google.com

Review-Url: https://codereview.chromium.org/3001423002 .
2017-09-01 09:38:08 -07:00
Ryan Macnak e9d358921d Revert "Puts TLABs back into the build and fixes assert failure."
This reverts commit 4c471b3f27.

This change regressed Flutter's velocity tracker benchmark by ~15%; reverting until this can be fixed or understood.

Issue #30521

R=danunez@google.com

Review-Url: https://codereview.chromium.org/3005623002 .
2017-08-25 10:48:23 -07:00
Ryan Macnak 878a5f2653 Fix the new generation growth criterion so it is not mislead into performing two growths in a row.
The decision to grow is based on the fraction of the objects that became garbage in the previous scavenge. If the previous scavenge included a growth, the new size of new space does not affect this statistic. If the program's allocation pattern remains the same, the next scavenge will see the same garbage ratio and decide to grow again, even if we would have hit the desired garbage fraction at the current capacity. This CL changes the garbage fraction to use the post-growth capcity as the dominator to prevent this eager double-growth.

This change causes Flutter Gallery to stablize at a 4MB semispace instead of 16MB, with ~10ms instead of ~40ms scavenges while interacting with the time picker on a Nexus 4.

R=danunez@google.com

Review-Url: https://codereview.chromium.org/3003063002 .
2017-08-22 15:10:18 -07:00
Ryan Macnak 14b5782544 Remove GC prologue and epilogue callbacks.
These should have been removed along with weak reference set support in 4992bc72a0 since they serve no other purpose.

Review-Url: https://codereview.chromium.org/3001343002 .
2017-08-22 11:19:54 -07:00
Diogenes Nunez 7874590179 Prepares allocation for proper sync with mutator and bg threads.
When top_ is required, we now search through all active threads and pull
the top_ furthest in the space.

When searching the space, we fills every thread's TLAB with a
FreeListElement. Note that future allocations can safely overwrite
them. We do NOT abandon the TLAB (i.e. set top_,end_ to 0) in these
cases.

Added notes to determing where to lock/unlock for threads

R=asiva@google.com, rmacnak@google.com

Review-Url: https://codereview.chromium.org/2992753002 .
2017-08-10 15:13:23 -07:00
Diogenes Nunez 4c471b3f27 Puts TLABs back into the build and fixes assert failure.
This CL reintroduces the following commits (by reverting 91662ce57)

7568e1f18 : Reintroduces TLABs with fix for bug in 8b6fcf50e8
91470e721 : Scavenger::UsedInWords() is now accurate to TLABs
479db734e : Fixes IO regression casued by 7568e1f18

R=asiva@google.com, rmacnak@google.com

Furthermore, this CL fixes a bug where unscheduling the mutator thread
and then walking the heap results in the assertion in
Scavenger::MakeNewSpaceIterable() fail due to a null heap.
Review-Url: https://codereview.chromium.org/2995693002 .
2017-08-09 13:55:36 -07:00
Diogenes Nunez 91662ce579 Reverts CLs related to the TLAB due to heap exhaustion.
Revert "Attempts to fix bugs introduced in 8b6fcf50e85d."

This reverts commit 7568e1f18e.

Revert "Changes calculation of Scavenger's UsedInWords"

This reverts commit 91470e7211.

Revert "Fixes the regression caused by 7568e1f18e."

This reverts commit 479db734e3.

BUG=

Review-Url: https://codereview.chromium.org/2998663002 .
2017-08-08 14:49:50 -07:00
Diogenes Nunez 479db734e3 Fixes the regression caused by 7568e1f18e.
The IO tests unscheduled the mutator thread constantly, forcing the
isolate to fill new space and cause a GC.

Now, the mutator thread keeps its TLAB when unscheduled, taking
advantage of the fact the same thread object will always be the
mutator thread.

R=asiva@google.com, rmacnak@google.com

Review-Url: https://codereview.chromium.org/2993863002 .
2017-08-08 10:17:18 -07:00
Ryan Macnak 466385ceb6 [vm, gc] Require a safepoint for heap iteration.
Assert a safepoint operation can only be started from a thread in the VM state. Fix several unit tests missing a native-to-vm transition.

R=asiva@google.com, danunez@google.com

Review-Url: https://codereview.chromium.org/2995543004 .
2017-08-07 17:51:25 -07:00
Diogenes Nunez 91470e7211 Changes calculation of Scavenger's UsedInWords
Once again fixes https://github.com/dart-lang/sdk/issues/30311

The previous commit for this issue (044f818f01) was reverted to
fix a bug. This CL avoids writing to the TLAB to measure the
usage.

R=asiva@google.com, rmacnak@google.com

Review-Url: https://codereview.chromium.org/2993203002 .
2017-08-07 15:17:44 -07:00
Diogenes Nunez 7568e1f18e Attempts to fix bugs introduced in 8b6fcf50e8.
Removes a call that erroneously changes top_ in Scavenger.
Removes FlushTLS and UnflushTLS from UsedInWords.
Reverts commit 0b0f07d303.

R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/2992343002 .
2017-08-05 09:46:04 -07:00
Diogenes Nunez 0b0f07d303 Reverted due to vm test failure.
Revert "Makes new space iterable by filling up the mutator's TLAB"

This reverts commit 8b6fcf50e8.

R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/2998453002 .
2017-08-04 10:56:36 -07:00
Diogenes Nunez 8b6fcf50e8 Makes new space iterable by filling up the mutator's TLAB
This reverts commit bb6203dade and
adds changes FlushTLS.

Now, FlushTLS will fill the mutator thread's TLAB instead of
changing top_ in the Scavenger. This should prevent the assertion

(thread->end() == 0) || (thread->end() == top_)

in TryAllocateInTLAB in runtime/vm/scavenger.h due to a race on top_.

R=asiva@google.com, rmacnak@google.com, zra@google.com

Review-Url: https://codereview.chromium.org/2991343003 .
2017-08-04 10:36:45 -07:00
Diogenes Nunez bb6203dade These changes are suspects in the recent bot flakiness.
Revert "Changes new space allocation from simple bump pointer allocation from"

This reverts commit e6e378bb6e.

Revert "Fixes bug in calculation of memory used by new space"

This reverts commit 044f818f01.

BUG=

Review-Url: https://codereview.chromium.org/2992923002 .
2017-08-02 15:45:08 -07:00
Diogenes Nunez 044f818f01 Fixes bug in calculation of memory used by new space
Changes Scavenger to use mutator's top_ to calculate memory used in
new space instead of the Scavenger's when the VM is not scavenging.

Closes https://github.com/dart-lang/sdk/issues/30311

R=cbernaschina@google.com, rmacnak@google.com

Review-Url: https://codereview.chromium.org/2992153002 .
2017-08-01 13:29:14 -07:00
Diogenes Nunez e6e378bb6e Changes new space allocation from simple bump pointer allocation from
mutator to thread local allocation buffer system used only by mutator.

The new allocation scheme is as follows:

- Mutator allocates an aligned buffer from the heap.
- For each object the mutator wishes to allocate
  - If the object fits in the overall space of the bufffer,
    bump allocate into the buffer.
  - If the object is larger than the buffer overall, allocate into old
    space.
  - If the object is not larger than the buffer but cannot fit,
    make the buffer iterable by GC and allocate a new buffer.
  - If the mutator cannot get a new buffer, do a GC and try again.
  - If the mutator still cannot get a new buffer, allocate the object
    in old space.
  - If the mutator does get a new buffer (before or after GC), allocate
    the object into the buffer.

BUG=
R=asiva@google.com, rmacnak@google.com

Review-Url: https://codereview.chromium.org/2985863002 .
2017-07-27 13:53:40 -07:00
Zachary Anderson 8d6bc876f0 Reland "Remove fields from Isolate in Product mode"
In my reordering of the fields in Isolate, I omitted the initialization
of a few fields in the constroctor. This CL will reland the change with
the initialization added back.

R=danunez@google.com, rmacnak@google.com

Review-Url: https://codereview.chromium.org/2983403002 .
2017-07-25 13:24:30 -07:00
Zachary Anderson 211604d7a0 Revert "Remove fields from Isolate in Product mode"
This reverts commit 13558442ab.

The above change caused a timeout in a vm test:

FAILED: none-vm-checked release_x64 vm/cc/SafepointTestDart
Expected: Pass
Actual: Timeout
CommandOutput[run_vm_unittest]:
diagnostics: Process list including children: [28397]
    Trying to capture stack trace for pid 28397
    PID 28397 - process
    TID 28397:
    #0  0x00007efedf216404 pthread_cond_wait@@GLIBC_2.3.2
    #1  0x0000000002b9a315 dart::Monitor::WaitMicros(long)
    #2  0x0000000002af3496 dart::MonitorLocker::WaitWithSafepointCheck(dart::Thread*, long)
    #3  0x0000000002a8724d dart::Heap::AllocateOld(long, dart::HeapPage::PageType)
    #4  0x0000000002b07de3 dart::Object::Allocate(long, long, dart::Heap::Space)
    #5  0x0000000002b26eab dart::UnresolvedClass::New(dart::Object const&, dart::String const&, dart::TokenPosition)
    #6  0x0000000002be6358 dart::Parser::ParseType(dart::ClassFinalizer::FinalizationKind, bool, bool, dart::LibraryPrefix*)
    #7  0x0000000002ba9cc4 dart::Parser::ParseNewOperator(dart::Token::Kind)
    #8  0x0000000002bac7dc dart::Parser::ParsePrimary()
    #9  0x0000000002be19c1 dart::Parser::ParsePostfixExpr()
    #10 0x0000000002bdf1c4 dart::Parser::ParseUnaryExpr()
    #11 0x0000000002bb618c dart::Parser::ParseBinaryExpr(int)
    #12 0x0000000002bb869f dart::Parser::ParseConditionalExpr()
    #13 0x0000000002bae224 dart::Parser::ParseExpr(bool, bool)
    #14 0x0000000002bbeb79 dart::Parser::ParseAwaitableExpr(bool, bool, dart::SequenceNode**)
    #15 0x0000000002bd5273 dart::Parser::ParseStatement()
    #16 0x0000000002bbcce0 dart::Parser::ParseStatementSequence()
    #17 0x0000000002ba64e8 dart::Parser::ParseFunc(dart::Function const&, bool)
    #18 0x0000000002ba3e31 dart::Parser::ParseFunction(dart::ParsedFunction*)
    #19 0x00000000029e0725 dart::DartCompilationPipeline::ParseFunction(dart::ParsedFunction*)
    #20 0x00000000029e4898 dart::CompileFunctionHelper(dart::CompilationPipeline*, dart::Function const&, bool, long)
    #21 0x00000000029e5716 dart::Compiler::CompileOptimizedFunction(dart::Thread*, dart::Function const&, long)
    #22 0x0000000002c8d3a4 dart::DRT_StackOverflow(dart::NativeArguments)
    #23 0x00007efedf6ad61b
    TID 28421:
    #0  0x00007efedf2167be pthread_cond_timedwait@@GLIBC_2.3.2
    #1  0x0000000002b9a2ff dart::Monitor::WaitMicros(long)
    #2  0x0000000002cc6f8f dart::ThreadInterrupter::ThreadMain(unsigned long)
    #3  0x0000000002b999d9 dart::ThreadStart(void*)
    #4  0x00007efedf212184 start_thread
    #5  0x00007efede51737d __clone
    TID 28430:
    #0  0x00007efedf216404 pthread_cond_wait@@GLIBC_2.3.2
    #1  0x0000000002b9a315 dart::Monitor::WaitMicros(long)
    #2  0x0000000002af3496 dart::MonitorLocker::WaitWithSafepointCheck(dart::Thread*, long)
    #3  0x0000000002a8789e dart::HeapIterationScope::HeapIterationScope(bool)
    #4  0x0000000002ad4966 dart::Isolate::IterateObjectPointers(dart::ObjectPointerVisitor*, bool)
    #5  0x00000000027ed02a dart::SafepointTestTask::Run()
    #6  0x0000000002cc7cbd dart::ThreadPool::Worker::Loop()
    #7  0x0000000002cc7b6a dart::ThreadPool::Worker::Main(unsigned long)
    #8  0x0000000002b999d9 dart::ThreadStart(void*)
    #9  0x00007efedf212184 start_thread
    #10 0x00007efede51737d __clone
    TID 28431:
    #0  0x00007efedf216404 pthread_cond_wait@@GLIBC_2.3.2
    #1  0x0000000002b9a315 dart::Monitor::WaitMicros(long)
    #2  0x0000000002ad66fa dart::Isolate::ScheduleThread(bool, bool)
    #3  0x0000000002cc53ea dart::Thread::EnterIsolateAsHelper(dart::Isolate*, dart::Thread::TaskKind, bool)
    #4  0x0000000002a86317 dart::SweeperTask::Run()
    #5  0x0000000002cc7cbd dart::ThreadPool::Worker::Loop()
    #6  0x0000000002cc7b6a dart::ThreadPool::Worker::Main(unsigned long)
    #7  0x0000000002b999d9 dart::ThreadStart(void*)
    #8  0x00007efedf212184 start_thread
    #9  0x00007efede51737d __clone
    TID 28444:
    #0  0x00007efedf216404 pthread_cond_wait@@GLIBC_2.3.2
    #1  0x0000000002b9a315 dart::Monitor::WaitMicros(long)
    #2  0x0000000002af3496 dart::MonitorLocker::WaitWithSafepointCheck(dart::Thread*, long)
    #3  0x0000000002a8724d dart::Heap::AllocateOld(long, dart::HeapPage::PageType)
    #4  0x0000000002b07de3 dart::Object::Allocate(long, long, dart::Heap::Space)
    #5  0x0000000002b26eab dart::UnresolvedClass::New(dart::Object const&, dart::String const&, dart::TokenPosition)
    #6  0x0000000002be6358 dart::Parser::ParseType(dart::ClassFinalizer::FinalizationKind, bool, bool, dart::LibraryPrefix*)
    #7  0x0000000002bb19bb dart::Parser::ParseTypeOrFunctionType(bool, dart::ClassFinalizer::FinalizationKind)
    #8  0x0000000002bb204c dart::Parser::ParseFormalParameter(bool, bool, dart::ParamList*)
    #9  0x0000000002bb43b3 dart::Parser::ParseFormalParameters(bool, bool, bool, dart::ParamList*)
    #10 0x0000000002ba368b dart::Parser::ParseFormalParameterList(bool, bool, bool, dart::ParamList*)
    #11 0x0000000002ba5a8f dart::Parser::ParseFunc(dart::Function const&, bool)
    #12 0x0000000002ba3e31 dart::Parser::ParseFunction(dart::ParsedFunction*)
    #13 0x00000000029e0725 dart::DartCompilationPipeline::ParseFunction(dart::ParsedFunction*)
    #14 0x00000000029e4898 dart::CompileFunctionHelper(dart::CompilationPipeline*, dart::Function const&, bool, long)
    #15 0x00000000029e5716 dart::Compiler::CompileOptimizedFunction(dart::Thread*, dart::Function const&, long)
    #16 0x00000000029e7036 dart::BackgroundCompiler::Run()
    #17 0x0000000002cc7cbd dart::ThreadPool::Worker::Loop()
    #18 0x0000000002cc7b6a dart::ThreadPool::Worker::Main(unsigned long)
    #19 0x0000000002b999d9 dart::ThreadStart(void*)
    #20 0x00007efedf212184 start_thread
    #21 0x00007efede51737d __clone
Review-Url: https://codereview.chromium.org/2988703002 .
2017-07-24 14:17:53 -07:00
Zachary Anderson 13558442ab Remove fields from Isolate in Product mode
R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/2984883002 .
2017-07-24 13:22:44 -07:00
Diogenes Nunez 699f84f941 Moves the top_ and end_ words of the Scavenger into mutator thread.
This is the first step to adding Thread Local Allocation Buffers to
the VM.

In this step, the mutator alone allocates to the new space, but keeps
track of the start and end of the space. This is akin to a single large
TLAB.

As a result, the generated code and the dbc simulator changed how they
allocate objects into the new space as well.

R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/2980033002 .
2017-07-13 13:46:17 -07:00
Zachary Anderson 6cd8a79078 VM: Re-format to use at most one newline between functions
R=asiva@google.com

Review-Url: https://codereview.chromium.org/2974233002 .
2017-07-13 08:08:37 -07:00
Diogenes Nunez c0d4e02693 Revert "Moves the top_ and end_ words of the Scavenger into mutator thread."
This reverts commit 710544a907.

R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/2974403002 .
2017-07-12 14:30:06 -07:00
Diogenes Nunez 710544a907 Moves the top_ and end_ words of the Scavenger into mutator thread.
This is the first step to adding Thread Local Allocation Buffers to
the VM.

In this step, the mutator alone allocates to the new space, but keeps
track of the start and end of the space. This is akin to a single large
TLAB.
BUG=
R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/2951333002 .
2017-07-12 14:09:07 -07:00
Ryan Macnak b3b996b12c [vm] Don't track allocation stats during marking in product mode.
R=asiva@google.com, danunez@google.com

Review-Url: https://codereview.chromium.org/2975723003 .
2017-07-11 09:37:00 -07:00
Diogenes Nunez 98fe465b85 Debug garbage collector does not correctly remove cross-gen garbage
Modifies the debug garbage collector (CollectAllGarbage()) to correctly
remove inter-generational garbage by evacuating all of new space.

Adds tests to check if this issue has been correctly resolved.

Updates the WeakProperty_PreserveCrossGen test to call for one new and
one old space collection instead of CollectAllGarbage(). Otherwise, all
weak properties are swept as garbage.

DETAILS:

ISSUE

Specifically, the following arrangements in a heap resulted
in garbage surviving a GC.

- Dead object in old space pointing to dead object in new space results
  in the new space object surviving.
  - A cycle between two dead objects, one in each space, results in the
    cycle surviving until all objects are in the old space.

R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/2964503005 .
2017-06-30 16:03:47 -07:00
Diogenes Nunez 6ccd7e3cc3 Revert "Modifies the debug garbage collector (CollectAllGarbage()) to correctly remove inter-generational garbage by evacuating all of new space."
This reverts commit abf40fc8d2.

TBR=rmacnak@google.com

Review-Url: https://codereview.chromium.org/2960063002 .
2017-06-27 15:51:08 -07:00
Diogenes Nunez abf40fc8d2 Modifies the debug garbage collector (CollectAllGarbage()) to correctly remove inter-generational garbage by evacuating all of new space.
Adds tests to check if this issue has been correctly resolved.

Updates the WeakProperty_PreserveCrossGen test to call for one new and one old space collection instead of CollectAllGarbage(). Otherwise, all weak properties are swept as garbage.

DETAILS:

ISSUE

Specifically, the following arrangements in a heap resulted
in garbage surviving a GC.

- Dead object in old space pointing to dead object in new space results
  in the new space object surviving.
- A cycle between two dead objects, one in each space, results in the
  cycle surviving until all objects are in the old space.

BUG=
R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/2930943002 .
2017-06-27 14:00:45 -07:00
Erik Corry 029b1cb948 Spelling fixes e to i.
R=kevmoo@google.com
BUG=

Review-Url: https://codereview.chromium.org/2957593002 .
2017-06-24 13:41:39 +02:00
Zachary Anderson 1393e84863 [Fuchsia] Give VMOs names
This CL assigns names to vmos formatted as "isolate space type" where
isolate is the name of the isolate, space is "oldspace" or "newspace",
and type is "code" or "data".

R=asiva@google.com

Review-Url: https://codereview.chromium.org/2929203002 .
2017-06-09 15:33:18 -07:00
Aske Simon Christensen 443033cc38 Method to visit pointers in objects using non-virtual calls to the ObjectPointerVisitor (for user-defined objects).
Used for the visitors in the scavenger and marker. Each of these seems to give a few percent speed improvement for new and old space collections, respectively.

Around 0.1% total VM size increase (on ARM64).

R=erikcorry@google.com
BUG=

Review-Url: https://codereview.chromium.org/2908353002 .
2017-05-31 13:00:54 +02:00
Ryan Macnak 9ce48e63b2 Remove background finalization.
R=asiva@google.com

Review-Url: https://codereview.chromium.org/2809863002 .
2017-04-11 09:54:25 -07:00
Erik Corry fc2fcf9bc8 Add more safe points in compiler.
The Scavenge (young-gen) GCs on the main thread have to wait for other
threads to check in at a safe point. We were seeing big waits here, often
20ms, occasionally up to 180ms where the main thread is idling, waiting
for the optimizing compiler.  By adding more safe points the wait is
reduced and is now rarely over 10ms, often under 1ms.

This also changes the --verbose-gc output to be better aligned with the
column headings, and to add the time needed to get to
the safe point to the output, eg:

[ GC(784211551): Scavenge(new space), 18, 2.209, 76.009, 32768, 0, 32768, 32768, 0, 0, 144912, 154425, 152064, 154880, 0, 0, 46.984, 2.752, 7.407, 18.657, 0.033, 5421, 0, 0, 0, ]
                                                 ^^^^^^ Scavenge time                                                        ^^^^^^  safe point time.

R=vegorov@google.com
BUG=

Review-Url: https://codereview.chromium.org/2771013002 .
2017-03-31 11:19:46 +02:00
Siva Annamalai 793e4b89e6 1. Added new flag verify_gc_contains and moved all the asserts that do a
heap contains verification under it. This flag is turned on automatically
   when verify_before_gc, verify_after_gc or verify_on_transition is
   specified. This should speed up the debug builds on the bot.
   A dart2js build line for instance goes from 2357.526 seconds
   to 184.22 seconds

2. Verify heap on shutdown only under the flag verify_on_transition.

R=fschneider@google.com

Review-Url: https://codereview.chromium.org/2626343002 .
2017-01-12 16:03:22 -08:00
Ryan Macnak 8c6dca095c Update GC stats, ThreadPool, Timer and ScopedTimer to use monotonic time.
R=johnmccutchan@google.com

Review-Url: https://codereview.chromium.org/2582543003 .
2016-12-15 15:25:02 -08:00
Ryan Macnak e48f143006 Internally measure isolate uptime with monotonic time.
R=johnmccutchan@google.com

Review-Url: https://codereview.chromium.org/2583663002 .
2016-12-15 14:34:04 -08:00
Zachary Anderson a1bcf051d8 clang-format runtime/vm
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2481873005 .
2016-11-08 13:54:47 -08:00
Ryan Macnak 61bf8abd75 Make fatal out of memory messages uniform.
Add checks in a few more places with large allocations.

R=fschneider@google.com

Review URL: https://codereview.chromium.org/2418323002 .
2016-10-19 16:37:59 -07:00
Siva Annamalai 42c58c5c2d - fix some cases where we are using uninitialized memory
- use attribute 'no msan' on NativeEntry::ReturnValueIsError function
  as msan doesn't seem to track the return slot being set by a native
  function
- vsnprintf seems to have issues with msan so unpoison the allocated
  memory buffer everytime vsnprintf is used to suppress the error.

BUG=
R=fschneider@google.com

Review URL: https://codereview.chromium.org/2383293003 .
2016-10-05 16:54:18 -07:00
Ryan Macnak 5ecc880ffc Remove assumption from the heap verifier that objects occupy a narrow range of the address space.
Fixes #27373.

R=zra@google.com

Review URL: https://codereview.chromium.org/2349023002 .
2016-09-16 15:41:47 -07:00