Commit Graph

606 Commits

Author SHA1 Message Date
Ryan Macnak eb563faf6d [vm, gc] Report RSS as timeline counter events, sampled before and after GC.
Catapult will display a nice graph for this.

TEST=view timeline
Change-Id: I6b6fdede463b37dbb10841cfa7c1e08c95e7cb62
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/427060
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
2025-05-12 10:46:39 -07:00
Alexander Markov 4221de4e0a [vm] Fix memory leak in Scavenger::Scavenge
```
Direct leak of 8 byte(s) in 1 object(s) allocated from:
    #0 0x6281a99eb78d in operator new[](unsigned long) ../../../../../../llvm-llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:89:3
    #1 0x6281a9e5ba7d in dart::Scavenger::Scavenge(dart::Thread*, dart::GCType, dart::GCReason) out/ReleaseASANX64/../../runtime/vm/heap/scavenger.cc:1890:33
    #2 0x6281a9e29cfd in dart::Heap::CollectNewSpaceGarbage(dart::Thread*, dart::GCType, dart::GCReason) out/ReleaseASANX64/../../runtime/vm/heap/heap.cc:490:18
    #3 0x6281a9e2680f in dart::Heap::CollectGarbage(dart::Thread*, dart::GCType, dart::GCReason) out/ReleaseASANX64/../../runtime/vm/heap/heap.cc:564:7
    #4 0x6281a9e2680f in dart::Heap::AllocateNew(dart::Thread*, long) out/ReleaseASANX64/../../runtime/vm/heap/heap.cc:105:7
    #5 0x6281a9bfe991 in dart::Heap::Allocate(dart::Thread*, long, dart::Heap::Space) out/ReleaseASANX64/../../runtime/vm/heap/heap.h:73:16
```

Caused by https://dart-review.googlesource.com/c/sdk/+/426582.

TEST=tools/build.py --sanitizer=asan -ax64 -mrelease runtime

Change-Id: I8f863d53359fad07bcf9b30c8dd860c93b24c50f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426900
Reviewed-by: Ivan Inozemtsev <iinozemtsev@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
2025-05-06 07:16:20 -07:00
Ryan Macnak 81a7f3e131 [vm, gc] Remove some dead code.
- Serial scavenge
- Serial marking
- Redudant safepoint operation scope
- Redudant Thread::Current
- Unused HandleVisitor::thread_
- Profile tag updates in PRODUCT mode
- Freelist printing

TEST=ci
Change-Id: I2de4c50df37c7ebe9d267514bcbd548dd61a5a57
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426582
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2025-05-05 15:21:13 -07:00
Alexander Markov 77e6cdc259 [dyn_modules] Handle interpreter frames during deoptimization
TEST=tools/test.py -n vm-dyn-linux-debug-x64 corelib/bigint_test
Fixes b/406924438

Change-Id: I621c31af7754c629e577e39b2ee4102533fa1363
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/425341
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2025-04-30 06:42:56 -07:00
Alexander Aprelev 1a6755cbf4 [vm] Clean up bool return value for EnterIsolate methods.
Effectively these methods always succeed, so return value checking just can be source of confusion.

TEST=ci
Change-Id: I0a93f130b03c0f66be733c939a1d795d704291d1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/423963
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
2025-04-24 08:33:05 -07:00
Ryan Macnak 779a1962ae [vm] Restore write protection of the VM isolate.
TEST=vm/cc/VMIsolateImmutability
Bug: https://github.com/dart-lang/sdk/issues/60552
Change-Id: I5a51718996ce735a67c73500c46f0e7cc16f654a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/422901
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2025-04-16 15:26:08 -07:00
Ryan Macnak 58b5237e23 [vm, gc] Access the OOM reservation under safepoint operations.
TEST=tsan
Bug: https://github.com/dart-lang/sdk/issues/60544
Change-Id: I19d1e3bf2ff7dfb4f6b43fa8513a552dadece929
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/422800
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2025-04-16 13:12:54 -07:00
Ryan Macnak a9dd011f94 [vm] Make out-of-memory scenarios a bit more robust.
- Don't scavenge when there is no OOM reservation, so refilling the OOM reservation will get the first go once free space is available instead it being consumed by promotions.
 - Increase the desired free space in new space needed to continue scavenging. Since new space became paged, 1 KB / 64 pages only guarentees the ability to allocate a 16 byte object.
 - Stop issuing stress test reloads after an OOM is encountered.
 - Add a HANDLESCOPE to reload to make memory collectible sooner after an error.

TEST=vm/out_of_memory
Bug: https://github.com/dart-lang/sdk/issues/48920
Bug: https://github.com/dart-lang/sdk/issues/53455
Bug: https://github.com/dart-lang/sdk/issues/43642
Change-Id: Ife8bed52e341648a66f78d55bfa60b3944be5d46
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/422324
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2025-04-15 10:39:32 -07:00
Alexander Aprelev 7c9ded3a8d [vm] Avoid mutex lock when clearing catch entry cache.
Fixes https://github.com/dart-lang/sdk/issues/60535
TEST=iso_stress_linux ci

Change-Id: I8f7c6faf23645f6e35b9abdf5b5e8a3684879624
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/422346
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2025-04-14 12:33:19 -07:00
Alexander Aprelev 7a44485843 [vm] Move catch_entry_cache, handler_info_cache to IsolateGroup.
This should help speeding up new isolate creation (or running dart code on mutator thread when it is supported).

TEST=ci

Change-Id: I88b5deeb33e72694cb3e2727cf5668ce15fd8c6b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/420361
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2025-04-08 09:13:39 -07:00
Ryan Macnak 0f2c6d7302 [vm] Make vm/cc/SafepointOperation_SafepointPointTest robust to unfavorable scheduling.
TEST=ci
Change-Id: Icb03a30cbcbf181fa07c939b606524b29ac70747
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/416400
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2025-03-19 12:38:14 -07:00
Ryan Macnak 55fb750877 [vm] Fix race in vm/cc/SafepointOperation_SafepointOpBlockedWhileDeoptSafepointOp.
LongDeoptTask: MarkAndNotify(kFinishedDeoptOperation)
         main: MarkAndNotify(kPleaseExit)

If main wins, LongDeoptTask will override the state and wait for a kPleaseExit that will never come.

TEST=ci
Change-Id: I2f29da2fca980ca8f2b3c42477c4e793d7379af4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/416381
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2025-03-19 09:40:42 -07:00
Ryan Macnak 101516eb18 [vm] Allow reload during FFI and native calls.
TEST=many_isolates_blocked_* under reload stress testing
Bug: https://github.com/dart-lang/sdk/issues/60098
Change-Id: Ifb9838735e1846236e30820d7d957e3a51fd9e99
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/410960
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2025-03-12 12:33:50 -07:00
Alexander Markov ebb7e1061c [vm] Use _setjmp instead of setjmp on MacOS/iOS
setjmp is extremely expensive on MacOS/iOS as it always saves
signal mask.

Introduce DART_SETJMP / DART_LONGJMP macros to use _setjmp instead of
setjmp on MacOS/iOS.

DeltaBlue on Mac/arm64 on the interpreter:
179585.3 us -> 58347.9 us. (3x faster)

TEST=ci
Issue: https://github.com/dart-lang/sdk/issues/60205

Change-Id: I2122f2eb4d5de66ae2ef904a7034af1ed09f1d07
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/412320
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2025-02-26 14:01:44 -08:00
Ryan Macnak 2a08770912 [vm] If waiting for an active mutator slot for too long, steal a slot from a thread at a native safepoint.
The thread whose slot was stolen will take the slow path attempting to exit its safepoint and wait to reacquire an active mutator slot.

TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/54687
Change-Id: I49c4c12b38d38d7afa4df6b346c2a464f75ef6e0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/406404
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2025-02-10 09:38:42 -08:00
Ryan Macnak 130ae2a802 [vm, isolates] Avoid three-way deadlock during isolate exit, take 2.
Give up the tasks lock before interrupting to finalize marking.

TEST=ci, tsan, rr chaos mode
Bug: https://github.com/dart-lang/sdk/issues/59574
Change-Id: I9f4ca977354b3860897654790fceb8f0e2e25aab
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/398580
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-12-03 20:33:49 +00:00
Ryan Macnak d9502e2a90 [vm, gc] Adjust growth policy.
- Don't treat heap_growth_max as a lower bound when using the ratio heuristic. For small heaps this can cause us to exceed the working set size by more than 10x.
 - Stick with the ratio heuristic when we're staying under the desired time fraction.
 - Avoid tiny initial thresholds by growing at least by one new-space.

TEST=golem
Bug: https://github.com/dart-lang/sdk/issues/27414
Change-Id: I64b2994ea9a32ce8a8bbec15cd89d8b46a01b1bb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/397460
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-11-27 18:29:59 +00:00
Ryan Macnak c42b74db6f [gardening] Fix or mark some slow tests.
TEST=ci
Change-Id: Ic453ec3583dd912374f88d53434a1b42ff3f364d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/396662
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-11-20 20:38:58 +00:00
Ryan Macnak 949eb447a4 [vm, gc] Add write-write fence after initializing object headers, or defer marking new-space objects in an active TLAB.
On architectures with a weak memory model, there is the possibility that the concurrent marker can see the publishing store of a new object before it sees the initializing store of that object's header. On an M1, the barrier to prevent reordering these stores is fairly cheap, so we emit this barrier on Mac/iOS ARM64. Otherwise, this barrier is very expensive (or at least expensive for some hardware within the ABI), so instead we avoid the race by deferring marking of objects inside an active TLAB.

Disable TSAN instrumentation on the marker setting the mark bit, as TSAN does not understand fences.

TEST=ooo arm64 machines
Bug: https://github.com/dart-lang/sdk/issues/56845
Change-Id: I0676661a7cf941fdc6b451e516d890c26826bb3b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/389265
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2024-10-28 22:41:39 +00:00
asiva cd31961c0b [vm] - Fix gcc compilation error
56962 - MutatorMarkerRace_DetectInTLAB test compile error on GCC

TEST=ci

Change-Id: I16038dc5f2fd8656652c13c55e7e4b403c4f859a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/392063
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2024-10-28 17:26:36 +00:00
Ryan Macnak 9e28e19002 [test] Synthetic versions of the mutator-marker race.
TEST=vm/cc/MutatorMarkerRace_*
Bug: https://github.com/dart-lang/sdk/issues/56895
Change-Id: I3e3f25b2c43aec09a409377f77c6d2fec287bccb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390263
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-10-24 03:24:08 +00:00
Ryan Macnak da8f17762c [vm, gc] Allocate card tables up front.
This avoids data races when multiple mutators compete to install the card table, and allows removing the initialization check from the write barrier.

TEST=ci, tsan
Bug: https://github.com/dart-lang/sdk/issues/56895
Change-Id: I30fe4687d3ca771f6c00dfa59e8dadec23d557a3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390023
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-10-16 21:25:17 +00:00
Ryan Macnak 0ab55451f4 [vm] Cleanup reload debugging code.
TEST=ci
Change-Id: I840fc1a614186e0f330f4b2313a6706452af6998
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/388665
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-10-07 22:29:49 +00:00
Ryan Macnak 4de0c76294 [vm, gc] Refactor common setup code for safepoint tasks.
TEST=ci
Change-Id: I48239d109330f163307f4849ebc4139f95f524ec
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/385620
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-09-24 00:39:48 +00:00
Ryan Macnak 9880444fd5 [vm, gc] Parallelize the stop-the-world phase of sweeping.
TEST=ci
Change-Id: I6dd09944c5dbe424b24e70f5c85d982c3c8874a7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/385364
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2024-09-23 23:03:51 +00:00
Ryan Macnak 309ab9ce4a [vm, reload] Debugging code for become conflict.
TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/56583
Change-Id: I8afba7689c91ebbd03ec4fcee22782205dc7959f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/383540
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-09-04 19:23:48 +00:00
Ryan Macnak 8ab9c0a9cf Reland "[vm, gc] Run parallel GC tasks on mutator threads blocked for the safepoint instead of new thread pool workers."
Set thread execution state to VM before running safepoint tasks.

TEST=vm/cc/Splay_WeakPersistentHandle
Bug: https://github.com/dart-lang/sdk/issues/55713
Change-Id: I0318a33449772d1fc3b4248e66a5360b316eca39
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/382220
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-09-03 23:14:49 +00:00
Ryan Macnak 56f8071f4e [vm, gc] Add variant of splay test using both variants of weak handle.
TEST=vm/cc/Splay_*
Change-Id: Ica1c2206299968c5d6aabf25c591ad797cae4502
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/383441
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-09-03 22:24:28 +00:00
Derek Xu 8b9be74d23 [VM/Service] Add private _createIdZone RPC
TEST=pkg/vm_service/test/id_zones_test.dart,
runtime/vm/object_id_ring_test.cc, CI

Issue: https://github.com/dart-lang/sdk/issues/55869
Change-Id: I6b092ea6ba4c7787635671af26e09af496ad9a5e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/379544
Reviewed-by: Ben Konyi <bkonyi@google.com>
2024-08-28 16:41:50 +00:00
Ryan Macnak 6e04f11571 [vm, gc] Fix race installing a page's card table.
TEST=tsan
Bug: https://github.com/dart-lang/sdk/issues/56579
Change-Id: I057f898ec8d7cf3b6796c5ec1587b1399c5a8f9b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/382460
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2024-08-27 21:14:16 +00:00
Tess Strickland d3c165d7b5 Reland "[vm] Improvements in the BitField API."
This is a reland of commit bfc1a44527

Change how the partial specializations for AtomicBitFieldContainer
are written so that Visual Studio properly chooses them instead of
the base BitField template when appropriate.

TEST=Windows ARM64 CI trybots

Original change's description:
> [vm] Improvements in the BitField API.
>
> If no position is specified, then the bitfield starts at bit 0.
>
> The default size for bool BitFields is 1 instead of the remaining
> bits in the container.
>
> If the size of the value type is smaller than the remaining bits
> in the container, then the size of the value type is used as
> the default size instead.
>
> If a signed value is used in a non-sign-extended BitField, only
> the magnitude of the value is stored, not the sign bit. This means
> the actual size of the bitfield may be one less than the requested
> size in this case.
>
> If the requested size of the bitfield is larger than the size of the
> value type, a compile-time error is thrown. (For signed types, the
> requested size is allowed to be the size of the entire value, even if
> only the magnitude bits are stored.)
>
> Rework uses of BitFields to avoid using separate constants for
> bit positions/sizes except for macro-defined bitfields (which now
> are universally bool, and so size 1).
>
> TEST=vm/cc/BitFields_Defaults
>
> Change-Id: I40711c929d2e5165ce40823772beb49e8cfdb820
> Cq-Include-Trybots: luci.dart.try:vm-aot-dwarf-linux-product-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-linux-release-x64-try,vm-aot-mac-release-arm64-try,vm-aot-linux-release-simarm_x64-try
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/381644
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Commit-Queue: Tess Strickland <sstrickl@google.com>

Change-Id: I5e3a9e3e2a80d5689a23a0603f8f81fac1576cd3
Cq-Include-Trybots: luci.dart.try:vm-aot-dwarf-linux-product-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-linux-release-x64-try,vm-aot-mac-release-arm64-try,vm-aot-linux-release-simarm_x64-try,vm-win-debug-x64c-try,vm-win-release-x64-try,vm-aot-win-release-x64-try,vm-win-release-arm64-try,vm-aot-win-release-arm64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/382383
Auto-Submit: Tess Strickland <sstrickl@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2024-08-27 19:03:02 +00:00
Tess Strickland 66eca4abfd Revert "[vm] Improvements in the BitField API."
This reverts commit bfc1a44527.

Reason for revert: Broke Windows build.

Original change's description:
> [vm] Improvements in the BitField API.
>
> If no position is specified, then the bitfield starts at bit 0.
>
> The default size for bool BitFields is 1 instead of the remaining
> bits in the container.
>
> If the size of the value type is smaller than the remaining bits
> in the container, then the size of the value type is used as
> the default size instead.
>
> If a signed value is used in a non-sign-extended BitField, only
> the magnitude of the value is stored, not the sign bit. This means
> the actual size of the bitfield may be one less than the requested
> size in this case.
>
> If the requested size of the bitfield is larger than the size of the
> value type, a compile-time error is thrown. (For signed types, the
> requested size is allowed to be the size of the entire value, even if
> only the magnitude bits are stored.)
>
> Rework uses of BitFields to avoid using separate constants for
> bit positions/sizes except for macro-defined bitfields (which now
> are universally bool, and so size 1).
>
> TEST=vm/cc/BitFields_Defaults
>
> Change-Id: I40711c929d2e5165ce40823772beb49e8cfdb820
> Cq-Include-Trybots: luci.dart.try:vm-aot-dwarf-linux-product-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-linux-release-x64-try,vm-aot-mac-release-arm64-try,vm-aot-linux-release-simarm_x64-try
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/381644
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Commit-Queue: Tess Strickland <sstrickl@google.com>

Change-Id: I13bf2218ecc47a42f3a6091821037b51b56618fb
Cq-Include-Trybots: luci.dart.try:vm-aot-dwarf-linux-product-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-linux-release-x64-try,vm-aot-mac-release-arm64-try,vm-aot-linux-release-simarm_x64-try
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/382380
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2024-08-27 10:16:48 +00:00
Tess Strickland bfc1a44527 [vm] Improvements in the BitField API.
If no position is specified, then the bitfield starts at bit 0.

The default size for bool BitFields is 1 instead of the remaining
bits in the container.

If the size of the value type is smaller than the remaining bits
in the container, then the size of the value type is used as
the default size instead.

If a signed value is used in a non-sign-extended BitField, only
the magnitude of the value is stored, not the sign bit. This means
the actual size of the bitfield may be one less than the requested
size in this case.

If the requested size of the bitfield is larger than the size of the
value type, a compile-time error is thrown. (For signed types, the
requested size is allowed to be the size of the entire value, even if
only the magnitude bits are stored.)

Rework uses of BitFields to avoid using separate constants for
bit positions/sizes except for macro-defined bitfields (which now
are universally bool, and so size 1).

TEST=vm/cc/BitFields_Defaults

Change-Id: I40711c929d2e5165ce40823772beb49e8cfdb820
Cq-Include-Trybots: luci.dart.try:vm-aot-dwarf-linux-product-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-linux-release-x64-try,vm-aot-mac-release-arm64-try,vm-aot-linux-release-simarm_x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/381644
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2024-08-27 09:28:51 +00:00
Alexander Markov 48f66ec572 Revert "[vm, gc] Run parallel GC tasks on mutator threads blocked for the safepoint instead of new thread pool workers."
This reverts commit 111e64de39.

Reason for revert: timeouts on multiple Flutter HHH bots
(flutter-linux-framework-coverage, flutter-linux-framework-tests-libraries, flutter-linux-framework-tests-misc, flutter-linux-framework-tests-widgets, flutter-linux-customer-testing).
"Run *** tests" step increased from 8-13m to 1.5h+.

Original change's description:
> [vm, gc] Run parallel GC tasks on mutator threads blocked for the safepoint instead of new thread pool workers.
>
> unit_test_suites.dart --skipTestsThatRequireGit -j8
> 6:59 -> 6:23 (-8.6%)
>
> TEST=ci
> Bug: https://github.com/dart-lang/sdk/issues/55713
> Change-Id: I5256175abf4751b3b5e877ed5abdc76a90cd2fb3
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/381383
> Commit-Queue: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Alexander Aprelev <aam@google.com>

Bug: https://github.com/dart-lang/sdk/issues/55713
Change-Id: I34dc15e80451d39cefa123e0e49c54cd17b068c8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/381900
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2024-08-22 20:10:52 +00:00
Ryan Macnak 111e64de39 [vm, gc] Run parallel GC tasks on mutator threads blocked for the safepoint instead of new thread pool workers.
unit_test_suites.dart --skipTestsThatRequireGit -j8
6:59 -> 6:23 (-8.6%)

TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/55713
Change-Id: I5256175abf4751b3b5e877ed5abdc76a90cd2fb3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/381383
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2024-08-21 16:35:28 +00:00
Derek Xu b1d1836082 Reland "[VM/Service] Change how the default Service ID zone is stored in an Isolate"
This is a reland of commit c5935aa16e

Initialization of `service_id_zones_` has been made lazy in this reland
CL. I performed a Golem run
(https://golem.corp.goog/Comparison?repository=dart#targetA%3Ddart%3BmachineTypeA%3Dlinux-x64%3BrevisionA%3D111556%3BpatchA%3Dderekx-Reland---VM%2FService--Change-how-the-default-Service-ID-zone-is-stored-in-an-Isolate--2%3BtargetB%3Ddart%3BmachineTypeB%3Dlinux-x64%3BrevisionB%3D111542%3BpatchB%3DNone)
on this reland CL, and confirmed that the benchmarks that had gotten
regressed by my original CL
(https://golem.corp.goog/Revision?repository=dart&revision=111543) no
longer get regressed.

Original change's description:
> [VM/Service] Change how the default Service ID zone is stored in an Isolate
>
> This CL makes it so that the default Service ID zone of an Isolate will
> now be stored in a MallocGrowableArray, in preparation for adding the
> ability for Isolates to each store multiple Service ID zones.
>
> TEST=CI
>
> Issue: https://github.com/dart-lang/sdk/issues/55869
> Change-Id: Ie729c1854faac1f61a466ae893ee8ad0a2128499
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/379543
> Reviewed-by: Ben Konyi <bkonyi@google.com>
> Commit-Queue: Derek Xu <derekx@google.com>

TEST=CI

Change-Id: I01cf0f54b05ae82a2dfd9f9c7fd48cda1ddfa90e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/381061
Commit-Queue: Derek Xu <derekx@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2024-08-20 20:38:19 +00:00
Derek Xu cce42a346b Revert "[VM/Service] Change how the default Service ID zone is stored in an Isolate"
This reverts commit c5935aa16e.

Reason for revert: Golem regressions

Original change's description:
> [VM/Service] Change how the default Service ID zone is stored in an Isolate
>
> This CL makes it so that the default Service ID zone of an Isolate will
> now be stored in a MallocGrowableArray, in preparation for adding the
> ability for Isolates to each store multiple Service ID zones.
>
> TEST=CI
>
> Issue: https://github.com/dart-lang/sdk/issues/55869
> Change-Id: Ie729c1854faac1f61a466ae893ee8ad0a2128499
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/379543
> Reviewed-by: Ben Konyi <bkonyi@google.com>
> Commit-Queue: Derek Xu <derekx@google.com>

Issue: https://github.com/dart-lang/sdk/issues/55869
Change-Id: I76fc2dc15d896a24ac8b9ec4bb44e67eaaf50fd2
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/380801
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Derek Xu <derekx@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
2024-08-16 16:59:37 +00:00
Derek Xu c5935aa16e [VM/Service] Change how the default Service ID zone is stored in an Isolate
This CL makes it so that the default Service ID zone of an Isolate will
now be stored in a MallocGrowableArray, in preparation for adding the
ability for Isolates to each store multiple Service ID zones.

TEST=CI

Issue: https://github.com/dart-lang/sdk/issues/55869
Change-Id: Ie729c1854faac1f61a466ae893ee8ad0a2128499
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/379543
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Derek Xu <derekx@google.com>
2024-08-15 20:15:36 +00:00
Alexander Markov 8fbca8ba67 [vm] Initial implementation of dynamic modules in the VM/AOT
TEST=Manually tested dynamic modules

Change-Id: Icb2616e414167bd1fbd10f01dea64c57dbdeeac7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/380281
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2024-08-15 14:09:52 +00:00
Alexander Markov bf2fba78e0 [vm] Fix ObjectPtr::IsSmi and other ObjectPtr::Is* methods to account for Smis
Arbitrary ObjectPtr can be a non-heap object (Smi), so methods
ObjectPtr::Is* which test class id should account for Smi.

Changed ObjectPtr::GetClassId to account for Smi similarly to
Object::GetClassId. Added unsafe ObjectPtr::GetClassIdOfHeapObject
which can be used when caller knows the heap nature of the object.

This change also fixes Integer::GetInt64Value which was relying on ObjectPtr::IsSmi.

TEST=vm/cc/Smi, vm/cc/Mint

Change-Id: I1391600e2acedc7b2a8f35c814df113ec9ba8698
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/380280
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2024-08-14 17:09:07 +00:00
Ryan Macnak 365985eab7 [vm, gc] Scale new-gen size with number of mutators.
unit_test_suites.dart --skipTestsThatRequireGit -j8
10:51 -> 7:23 (-32%)

TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/55713
Change-Id: I98c3dfd4227d335c4b5096036fb717badb9f4f5a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/378380
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2024-08-13 21:13:39 +00:00
Vyacheslav Egorov e105029f62 [vm] Move synchronization primitives to platform
This CL also removes ability to assign names to mutexes which was
added in c25ebfff96 but did not yield
any interesting data.

TEST=ci

CoreLibraryReviewExempt: Changes to dart:concurrent only.
Cq-Include-Trybots: luci.dart.try:vm-fuchsia-release-x64-try,vm-win-debug-x64-try,vm-win-release-x64-try,vm-aot-linux-product-x64-try
Change-Id: Id41e1d29832f6008e02f0a571ee67564e1a84224
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/375300
Reviewed-by: Martin Kustermann <kustermann@google.com>
2024-08-07 12:59:35 +00:00
Ryan Macnak 961bc9236e [vm, gc] Select the number of scavenger workers based on the number of active isolates in the current group.
unit_test_suites.dart --skipTestsThatRequireGit -j8
12:18 -> 10:27 (-15%)

TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/55713
Change-Id: I1be5c3d9618497ac6d9ffb030eb3576253b0cdfb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/377540
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-07-29 21:51:27 +00:00
Ryan Macnak 6226568fa5 [vm, gc] Separate marking stack by generation.
Allows the scavenger to avoid pruning work, which can be significant if the marking stack becomes very deep.

TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/55713
Change-Id: Icb6c15d07034bc79573af1bf30f31cbf30c59717
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/369123
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-06-17 21:43:32 +00:00
Ryan Macnak 0713bce1fe [vm, gc] Check for pause requests when marking large arrays.
This was sometimes responsible for the largest GC pause in IsolateSendExitLatency, with a scavenge waiting for a concurrent marker to finish a whole array and pause.

TEST=ci
Change-Id: Ib2d8417ffe6cee3e8436a8c382d2db660e1eef41
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/371180
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2024-06-12 20:53:18 +00:00
Ryan Macnak 622afbfbe7 [vm, gc] Prefer the incremental compactor over the full compactor during idle GC.
TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/52513
Change-Id: I85d861b2eb2ab4b461ae981bf094596af02d4df1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/370702
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2024-06-12 17:23:02 +00:00
Ryan Macnak ea9eb67d54 Roll Clang to 3809e20afc68d7d03821f0ec59b928dcf9befbf4.
Re-run clang-format.

TEST=ci
Change-Id: Ic277ea6baefa42bcc49ebce4f1099b910066cd4e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/370680
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2024-06-10 20:38:30 +00:00
Ryan Macnak b11c932a29 [vm, gc] Work-steal the store buffer during scavenging.
TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/55713
Change-Id: Ie198a94c43f6ba8048695204eb716049bf8b23e2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/369740
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-06-05 17:45:19 +00:00
Ryan Macnak 6694cae4d7 [vm, gc] Incremental compaction, take 3.
- Use atomics to mark remembered cards in the write barrier stub.

TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/52513
Bug: https://github.com/dart-lang/sdk/issues/55754
Change-Id: I1f78c6b680a6ae9170613ba328a244335a6343e2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/368480
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2024-05-30 21:01:39 +00:00
Martin Kustermann 698bf0846b [vm] Hoist CStringUniquePtr out of Utils, add CAllocUniquePtr` to simplify code
Hoist `CStringUniquePtr` out of the `Utils` class as there
is no reason it has to be nested inside a class - it just makes
code more verbose.

This simplifies code of the form
   std::unique_ptr<T, decltype(std::free)> a = { nullptr, std::free };
to
   CAllocUniquePtr<T> a;

TEST=ci

Change-Id: Ice42c1b16dfa5b20b321c13fbe5b28b3918581cb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/368425
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2024-05-29 10:16:28 +00:00