-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Lightweight Isolates & Faster isolate communication #36097
Comments
A prototype for faster sending of mutable messages across isolates has been made in cl/92280, which might allow 2-3x faster serialization and close to O(1) deserialization time. |
A prototype for transferrable byte arrays is available in cl/86640 |
Before we can start working on heap unification we have to change the isolate spawning functionality which currently just calls out to the embedder and assumes the embedder happens to load the exact same code into the isolate. See #36648. |
transferable typeddata landed in https://dart-review.googlesource.com/c/sdk/+/99623 |
An Isolate Group (IG) is a collection of isolates which were spawned from the same source. This allows the VM to: * have a guarantee that all isolates within one IG can safely exchange structured objects (currently we rely on embedder for this guarantee) * hot-reload all isolates together (currently we only reload one isolate, leaving same-source isolates in inconsistent state) * make a shared heap for all isolates from the same IG, which paves the way for faster communication and sharing of immutable objects. All isolates within one IG will share the same IsolateGroupSource. **Embedder changes** This change makes breaking embedder API changes to support this new concept of Isolate Groups: The existing isolate lifecycle callbacks given to Dart_Initialize will become Isolate Group lifecycle callbacks. A new callback `initialize_isolate` callback will be added which can initialize a new isolate within an existing IG. Existing embedders can be updated by performing the following renames Dart_CreateIsolate -> Dart_CreateIsolateGroup Dart_IsolateCreateCallback -> Dart_IsolateGroupCreateCallback Dart_IsolateCleanupCallback -> Dart_IsolateGroupShutdownCallback Dart_CreateIsolateFromKernel -> Dart_CreateIsolateGroupFromKernel Dart_CurrentIsolateData -> Dart_CurrentIsolateGroupData Dart_IsolateData -> Dart_IsolateGroupData Dart_GetNativeIsolateData -> Dart_GetNativeIsolateGroupData Dart_InitializeParams.create -> Dart_InitializeParams.create_group Dart_InitializeParams.cleanup -> Dart_InitializeParams.shutdown_group Dart_InitializeParams.shutdown -> Dart_InitializeParams.shutdown_isolate By default `Isolate.spawn` will cause the creation of a new IG. Though an embedder can opt-into supporting multiple isolates within one IG by providing a callback to the newly added `Dart_InitializeParams.initialize_isolate`. The responsibility of this new callback is to initialize an existing isolate (which was setup by re-using source code from the spawning isolate - i.e. the one which used `Isolate.spawn`) by setting native resolvers, initializing global state, etc. Issue #36648 Issue #36097 Change-Id: I82437ac017ca33018d45e02f353b0672db155f6a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105241 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Alexander Aprelev <aam@google.com>
This reverts commit b75057b. Reason for revert: Caused some failures on app-jit builders Original change's description: > [vm/concurrency] Introduce concept of Isolate Groups > > An Isolate Group (IG) is a collection of isolates which were spawned from the > same source. This allows the VM to: > > * have a guarantee that all isolates within one IG can safely exchange > structured objects (currently we rely on embedder for this > guarantee) > > * hot-reload all isolates together (currently we only reload one > isolate, leaving same-source isolates in inconsistent state) > > * make a shared heap for all isolates from the same IG, which paves > the way for faster communication and sharing of immutable objects. > > All isolates within one IG will share the same IsolateGroupSource. > > **Embedder changes** > > This change makes breaking embedder API changes to support this new > concept of Isolate Groups: The existing isolate lifecycle callbacks > given to Dart_Initialize will become Isolate Group lifecycle callbacks. > A new callback `initialize_isolate` callback will be added which can > initialize a new isolate within an existing IG. > > Existing embedders can be updated by performing the following renames > > Dart_CreateIsolate -> Dart_CreateIsolateGroup > Dart_IsolateCreateCallback -> Dart_IsolateGroupCreateCallback > Dart_IsolateCleanupCallback -> Dart_IsolateGroupShutdownCallback > Dart_CreateIsolateFromKernel -> Dart_CreateIsolateGroupFromKernel > Dart_CurrentIsolateData -> Dart_CurrentIsolateGroupData > Dart_IsolateData -> Dart_IsolateGroupData > Dart_GetNativeIsolateData -> Dart_GetNativeIsolateGroupData > Dart_InitializeParams.create -> Dart_InitializeParams.create_group > Dart_InitializeParams.cleanup -> Dart_InitializeParams.shutdown_group > Dart_InitializeParams.shutdown -> Dart_InitializeParams.shutdown_isolate > > By default `Isolate.spawn` will cause the creation of a new IG. > > Though an embedder can opt-into supporting multiple isolates within one IG by > providing a callback to the newly added `Dart_InitializeParams.initialize_isolate`. > The responsibility of this new callback is to initialize an existing > isolate (which was setup by re-using source code from the spawning > isolate - i.e. the one which used `Isolate.spawn`) by setting native > resolvers, initializing global state, etc. > > Issue #36648 > Issue #36097 > > Change-Id: I82437ac017ca33018d45e02f353b0672db155f6a > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105241 > Commit-Queue: Martin Kustermann <kustermann@google.com> > Reviewed-by: Ryan Macnak <rmacnak@google.com> > Reviewed-by: Alexander Aprelev <aam@google.com> TBR=kustermann@google.com,aam@google.com,rmacnak@google.com Change-Id: Ibd90992a01d61188f27b445c21532e0c46f996ea No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107405 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
An Isolate Group (IG) is a collection of isolates which were spawned from the same source. This allows the VM to: * have a guarantee that all isolates within one IG can safely exchange structured objects (currently we rely on embedder for this guarantee) * hot-reload all isolates together (currently we only reload one isolate, leaving same-source isolates in inconsistent state) * make a shared heap for all isolates from the same IG, which paves the way for faster communication and sharing of immutable objects. All isolates within one IG will share the same IsolateGroupSource. **Embedder changes** This change makes breaking embedder API changes to support this new concept of Isolate Groups: The existing isolate lifecycle callbacks given to Dart_Initialize will become Isolate Group lifecycle callbacks. A new callback `initialize_isolate` callback will be added which can initialize a new isolate within an existing IG. Existing embedders can be updated by performing the following renames Dart_CreateIsolate -> Dart_CreateIsolateGroup Dart_IsolateCreateCallback -> Dart_IsolateGroupCreateCallback Dart_IsolateCleanupCallback -> Dart_IsolateGroupShutdownCallback Dart_CreateIsolateFromKernel -> Dart_CreateIsolateGroupFromKernel Dart_CurrentIsolateData -> Dart_CurrentIsolateGroupData Dart_IsolateData -> Dart_IsolateGroupData Dart_GetNativeIsolateData -> Dart_GetNativeIsolateGroupData Dart_InitializeParams.create -> Dart_InitializeParams.create_group Dart_InitializeParams.cleanup -> Dart_InitializeParams.shutdown_group Dart_InitializeParams.shutdown -> Dart_InitializeParams.shutdown_isolate By default `Isolate.spawn` will cause the creation of a new IG. Though an embedder can opt-into supporting multiple isolates within one IG by providing a callback to the newly added `Dart_InitializeParams.initialize_isolate`. The responsibility of this new callback is to initialize an existing isolate (which was setup by re-using source code from the spawning isolate - i.e. the one which used `Isolate.spawn`) by setting native resolvers, initializing global state, etc. Issue #36648 Issue #36097 Original review: https://dart-review.googlesource.com/c/sdk/+/105241 Difference to original review: * Give each isolate it's own [Loader] (for now) * Sort classes during initialization for spawned isolates if app-jit is used (to match main isolate) * Fix IsolateData memory leak if isolate startup fails Change-Id: I98277d3d10fe275aa9b8a16b6bdd446bbea0b100 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107506 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
This reverts commit 67ab3be. Reason for revert: Causes non-deterministic failures on front-end bots on Windows with "Isolate creation failed" error. See https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket.appspot.com/8909292129328681248/+/steps/unit_tests/0/stdout Original change's description: > Reland "[vm/concurrency] Introduce concept of Isolate Groups" > > An Isolate Group (IG) is a collection of isolates which were spawned from the > same source. This allows the VM to: > > * have a guarantee that all isolates within one IG can safely exchange > structured objects (currently we rely on embedder for this > guarantee) > > * hot-reload all isolates together (currently we only reload one > isolate, leaving same-source isolates in inconsistent state) > > * make a shared heap for all isolates from the same IG, which paves > the way for faster communication and sharing of immutable objects. > > All isolates within one IG will share the same IsolateGroupSource. > > **Embedder changes** > > This change makes breaking embedder API changes to support this new > concept of Isolate Groups: The existing isolate lifecycle callbacks > given to Dart_Initialize will become Isolate Group lifecycle callbacks. > A new callback `initialize_isolate` callback will be added which can > initialize a new isolate within an existing IG. > > Existing embedders can be updated by performing the following renames > > Dart_CreateIsolate -> Dart_CreateIsolateGroup > Dart_IsolateCreateCallback -> Dart_IsolateGroupCreateCallback > Dart_IsolateCleanupCallback -> Dart_IsolateGroupShutdownCallback > Dart_CreateIsolateFromKernel -> Dart_CreateIsolateGroupFromKernel > Dart_CurrentIsolateData -> Dart_CurrentIsolateGroupData > Dart_IsolateData -> Dart_IsolateGroupData > Dart_GetNativeIsolateData -> Dart_GetNativeIsolateGroupData > Dart_InitializeParams.create -> Dart_InitializeParams.create_group > Dart_InitializeParams.cleanup -> Dart_InitializeParams.shutdown_group > Dart_InitializeParams.shutdown -> Dart_InitializeParams.shutdown_isolate > > By default `Isolate.spawn` will cause the creation of a new IG. > > Though an embedder can opt-into supporting multiple isolates within one IG by > providing a callback to the newly added `Dart_InitializeParams.initialize_isolate`. > The responsibility of this new callback is to initialize an existing > isolate (which was setup by re-using source code from the spawning > isolate - i.e. the one which used `Isolate.spawn`) by setting native > resolvers, initializing global state, etc. > > Issue #36648 > Issue #36097 > > Original review: https://dart-review.googlesource.com/c/sdk/+/105241 > > Difference to original review: > > * Give each isolate it's own [Loader] (for now) > * Sort classes during initialization for spawned isolates if app-jit is used (to match main isolate) > * Fix IsolateData memory leak if isolate startup fails > > Change-Id: I98277d3d10fe275aa9b8a16b6bdd446bbea0b100 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107506 > Commit-Queue: Martin Kustermann <kustermann@google.com> > Reviewed-by: Ryan Macnak <rmacnak@google.com> TBR=kustermann@google.com,aam@google.com,rmacnak@google.com # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Ia4e0f4f9fc317499d3570a371c5bdf9aed799e77 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108101 Reviewed-by: Vyacheslav Egorov <vegorov@google.com> Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
…te Groups" This reverts commit 3d14b75. An Isolate Group (IG) is a collection of isolates which were spawned from the same source. This allows the VM to: * have a guarantee that all isolates within one IG can safely exchange structured objects (currently we rely on embedder for this guarantee) * hot-reload all isolates together (currently we only reload one isolate, leaving same-source isolates in inconsistent state) * make a shared heap for all isolates from the same IG, which paves the way for faster communication and sharing of immutable objects. All isolates within one IG will share the same IsolateGroupSource. **Embedder changes** This change makes breaking embedder API changes to support this new concept of Isolate Groups: The existing isolate lifecycle callbacks given to Dart_Initialize will become Isolate Group lifecycle callbacks. A new callback `initialize_isolate` callback will be added which can initialize a new isolate within an existing IG. Existing embedders can be updated by performing the following renames Dart_CreateIsolate -> Dart_CreateIsolateGroup Dart_IsolateCreateCallback -> Dart_IsolateGroupCreateCallback Dart_IsolateCleanupCallback -> Dart_IsolateGroupShutdownCallback Dart_CreateIsolateFromKernel -> Dart_CreateIsolateGroupFromKernel Dart_CurrentIsolateData -> Dart_CurrentIsolateGroupData Dart_IsolateData -> Dart_IsolateGroupData Dart_GetNativeIsolateData -> Dart_GetNativeIsolateGroupData Dart_InitializeParams.create -> Dart_InitializeParams.create_group Dart_InitializeParams.cleanup -> Dart_InitializeParams.shutdown_group Dart_InitializeParams.shutdown -> Dart_InitializeParams.shutdown_isolate By default `Isolate.spawn` will cause the creation of a new IG. Though an embedder can opt-into supporting multiple isolates within one IG by providing a callback to the newly added `Dart_InitializeParams.initialize_isolate`. The responsibility of this new callback is to initialize an existing isolate (which was setup by re-using source code from the spawning isolate - i.e. the one which used `Isolate.spawn`) by setting native resolvers, initializing global state, etc. Issue #36648 Issue #36097 Original review: https://dart-review.googlesource.com/c/sdk/+/105241 Difference to original review: * Give each isolate it's own [Loader] (for now) * Sort classes during initialization for spawned isolates if app-jit is used (to match main isolate) * Fix IsolateData memory leak if isolate startup fails Difference to first reland(Patchset 2): * Fix typo where memory was freed twice. Change-Id: Ib1c83fe83b629cd50ae6af90ee99fdd44da882d4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108367 Commit-Queue: Alexander Aprelev <aam@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
…-specific resources The isolate group object will keep a doubly-linked list of all isolates within it's group. This will allow us to later on iterate all isolates within a group for e.g. GC purposes. The isolate group object will eventually hold the shared heap, thread registry and other resources. This CL is only the start. Issue #36097 Change-Id: I32103bbb4830cd4f16665c4032d47dabdf3594dd Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108407 Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Aprelev <aam@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
…utator thread from thread registry to isolate The thread registry is creating [Thread] objects when threads enter an isolate (as mutator or helper). Once threads exit an isolate, the [Thread] structure is returned and the thread registry will put it into a cache for later re-use. The mutator [Thread] object is an exception: Exiting and entering the isolate as mutator will always use the same cached [Thread] object. We want to eventually use one thread registry for an entire isolate group. There will therefore be multiple mutator threads per thread registry. We therefore move the cached mutator thread from the thread registry to the [Isolate] object. Issue #36097 Change-Id: Id27dff886d79ca76f6e05320151aeb72c8ba5140 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108720 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
… on GCs This CL moves the thread registry and the safepoint handler to the [IsolateGroup]. This will cause all threads belonging to the isolate group to safepoint together. => We will therefore start to get an idea of the impact this will have on pause times. So far it was only possible to enter a particular isolate (e.g. as mutator thread or auxiliary thread). This CL adds support for entering an isolate group (instead of a particular isolate) as an auxiliarly thread. The current isolate group is available via `IsolateGroup::Current()`. => This is a preparation step to let GC threads enter the isolate group as auxiliary threads, not associated with a particular isolate but to an isolate group as a whole. Issue #36097 Change-Id: I7069d07130938d370869f02060570143bfeb1b48 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108801 Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
Hot-reload used to be implemented by calling a tag handler (i.e. embedder), which would load new Dart source code and call recursively into hot reloading code. => This no longer happens, since the hot reload implementation obtains and loads the kernel diffs itself in isolate_reload.cc. With the switch to the Dart 2.0 CFE the VM no longer supports any kind of deferred library loading. The CFE provides the VM with all sources together. This CL cleans up some unnecessary code and outdated comments. Issue #36097 Change-Id: I63aaa6e2a1910165185172a9dd975c3974ac5dd5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/110720 Reviewed-by: Alexander Aprelev <aam@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
…iately Currently the initial mapping for the executable mapping is read-only. Once the first instruction object was allocated into an OS page we would map that page as RX. Any further allocations of instructions objects into the same page would just end up mapping it to RX again (even though it is already that way). To avoid those additional protection calls we can map the executable mapping RX from the beginning (it will be filled with zeros after allocation). Issue #37739 Issue #36097 Change-Id: Ib83f0be8ea8dacc86646c0a3c0335f4886516caa Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/112244 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Régis Crelier <regis@google.com>
…true Issue #36097 Change-Id: I3ab8f025eca164b450321abb1b7ef6d7052e7d20 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113998 Reviewed-by: Alexander Aprelev <aam@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
…isolate groups This fixes also an issue when running without isolate groups. Issue #36097 Change-Id: I0fb64b3f2b755ccab4c36c6a0fafee7edff239cf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114204 Reviewed-by: Alexander Aprelev <aam@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
…purposes Issue #36097 Change-Id: I1acec0b7c683ffa363e9b6f7056e76ea2f61d27d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114843 Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Jens Johansen <jensj@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
… writing Currently the snapshotter will just reset the weak tables once it's done. Once we have a shared heap this would not work anymore since the resetting of the weak tables can happen while another isolate is in the middle of snapshotting. We therefore make each isolate have it's own weak table used for snapshotting messages. The memory for the weak tables is managed by a std::unqiue_ptr in the isolate. Issue #36097 Change-Id: Ic0f4c4a96b6e66606be9e004259d2fee995f7099 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114858 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
…he correct size Until now it was possible to register classes with a default size (16 bytes on 64-bit) and later on change the size for the cid. This CL changes this to ensure the size information in the class table for a given cid is either 0 or the final instance size (and adds an ASSERT for it) Issue #36097 Change-Id: I94c61c6a1566c13dec7b9eb80c9ae0dadf0e6b6a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115861 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
…ut of [ClassTable] into [SharedClassTable] This CL moves heap related information (namely instance sizes and allocation stats) out of the [ClassTable] into a [SharedClassTable]. Both classes are always in sync (i.e. they have the same number of entries). This CL also changes GC related code to start using the size information from the new [SharedClassTable]. In a futher step we will move the heap as well as this shared class table out of the [Isolate] and into [IsolateGroup]. Issue #36097 Change-Id: Id54a89c9251ad3bbc13e60d32dc4f7bcc7f1d805 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116064 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
Right now there is only one mutator working on a heap and it can therefore access the heap's weak maps without locking. The GC is the only other user of the weak maps and it accesses it within a safepoint operation scope. Once we move the heap to the isolate group there can be concurrent accesses to the weak maps. As a preparation step this CL adds locking around the non-GC API. Issue #36097 Change-Id: I84acce24612b12a7393154cab816f0eff9c7589a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116201 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
…in various places When installing new code, we need to ensure the mutator is stopped for a variety of reasons. Right now we only need to distuinguish mutator and background compiler when installing code: The mutator can install code without any synchronization whereas the bg compiler needs to get the mutator to a safepoint. Yet once all isolates within one isolate group share a heap, a mutator might need to stop all other mutators before installing code (since they operate on pages on which we flip page protection bits) This CL adds IsolateGroup::RunWithStoppedMutators which will get other mutators to a safepoint (if there are multiple or we are on a bg compiler thread). Along with this we add a read-write lock and use it for the protection of the IsolateGroup::isolate_: While we make assumptions about the number of isolates in a group we force all pending additions of new isolates to wait. Later on this will also be used to allow iterating the list of isolates during GC and prevent new isolates from being added at the same time. Issue #36097 Change-Id: I6e761fa51d36b2f2b4b67995cac954898ce7fd69 Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-android-release-arm-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-bare-linux-release-x64-try,vm-kernel-precomp-mac-debug-simarm_x64-try,vm-kernel-precomp-win-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116767 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Aprelev <aam@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
This is to enable vm clients to ask how much memory is consumed by isolate group. Issue #36097 Change-Id: I4f1c499bf02c20b80e9802d8ad60e7ea65cfb375 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119724 Commit-Queue: Alexander Aprelev <aam@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
This reverts commit f020ce5 with patchset 1 having original revert, rest - fixes for calling destructors on unlinked IntrusiveDL elements and for assuming int is int64(which breaks down on simarm, ia32 bots). Fixes #38926 Issue #36097 Change-Id: I867526c7de3786806670d1f43dbff07228f80028 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121870 Commit-Queue: Alexander Aprelev <aam@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
We intend to enable this support by-default after sdk/issues/46754 was approved. |
The transitive copy algorithm was missing support for [WeakProperty]s, thereby ensuring that we only copy the values if the keys are reachable. Furthermore we might need to re-hash [Expando]s - since the copied objects start with no identity hash codes. The CL also makes us avoid calling to Dart for each [Expando] separately and instead use a list - just as we do in the re-hashing of maps/sets. We also move the C++ code to invoke rehashing logic into DartLibraryCalls::*. Issue #36097 TEST=vm/dart{,_2}/isolates/fast_object_copy{,2}_test Change-Id: I836745feef8a6d7573faa94e29a19c1eca0c39f2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/209106 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Aprelev <aam@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
Various VM embedders have already explicitly opted into it AOT mode for a long time. Now we turn it on by default, also because we'd like to collect feedback from the field on this - in good time before the next stable branch will be released. All of our isolate related tests have already // VMOptions=--enable-isolate-groups ... // VMOptions=--no-enable-isolate-groups ... So they will continue to exercise the tests in both modes. Issue #36097 TEST=Existing test suite. Change-Id: I1d031e8a5f2173b48eb32c53b08daccda75dc51d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/208649 Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: Siva Annamalai <asiva@google.com> Reviewed-by: Alexander Aprelev <aam@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
Closures can be shared if they have no state they capture (i.e. a null context). Otherwise we copy them by also transitively copying the parent context chain. Issue #36097 TEST=Added tests to vm/dart{,_2}/isolates/fast_object_copy{,2}_test Change-Id: Ie641b97806edd0c21f0a8d5c514f8e850823e165 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/209110 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Aprelev <aam@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
This reverts commit 57de39d. Reason for revert: Breakage in flutter engine roll -- see: flutter/flutter#89406 Original change's description: > [vm/concurrency] Enable isolate groups by-default in all modes > > Various VM embedders have already explicitly opted into it > AOT mode for a long time. > > Now we turn it on by default, also because we'd like to collect > feedback from the field on this - in good time before the next > stable branch will be released. > > All of our isolate related tests have already > > // VMOptions=--enable-isolate-groups ... > // VMOptions=--no-enable-isolate-groups ... > > So they will continue to exercise the tests in both modes. > > Issue #36097 > > TEST=Existing test suite. > > Change-Id: I1d031e8a5f2173b48eb32c53b08daccda75dc51d > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/208649 > Reviewed-by: Slava Egorov <vegorov@google.com> > Reviewed-by: Siva Annamalai <asiva@google.com> > Reviewed-by: Alexander Aprelev <aam@google.com> > Commit-Queue: Martin Kustermann <kustermann@google.com> TBR=vegorov@google.com,kustermann@google.com,aam@google.com,asiva@google.com Change-Id: I4f20f3a998508b2465e5c16b64b363419da62775 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/212345 Auto-Submit: Brandon DeRosier <bdero@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
This reverts commit d0a3daf that reverted the initial land. The fix for the problem that required the revert landed in https://dart.googlesource.com/sdk/+/5ccf97a5a950ef70f41d84f186dad550d4acda01 Issue #36097 TEST=ci Change-Id: Ie92074059319e046809169d9e16d459ce1c2848f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/212481 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Alexander Aprelev <aam@google.com>
This has now landed: Isolate groups are on by-default in master branch and will be included in the next beta/stable releases. Closing this issue. |
Please add an entry to the changelog!
…On Thu, Sep 9, 2021 at 2:17 AM Martin Kustermann ***@***.***> wrote:
Closed #36097 <#36097>.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#36097 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAAEFCTPPH7S3GQH3IW3GOTUBB3SPANCNFSM4G3RE7NA>
.
|
Where is |
Issue #46754 Issue #36097 TEST=ci Change-Id: Ic0b1ecf88790576ae1f31b6a003b2175b9af1c66 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/213343 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Kevin Moore <kevmoo@google.com>
This issue is tracking our ongoing work on making isolates more lightweight and improving communication between them. This work will mostly focus on isolates which were spawned from the same source.
As part of this work we will investigate a number of approaches, including:
We would like to implement this in several stages, here's our current progress:
SendPort.sendAndExit
to allow close to 0-cost sending of messagesSubtasks for AOT enable by-default
Isolate.spawn()
API have been augmented to supplyDart_InitializeParams.initialize_isolate
callback with correct implementation.Subtasks for JIT
RunWithMutatorsStopped
in SwitchableCall miss handler to only around patching the tuple in the pool (and remove hack in symbol table)Future work tracked at Issue 46752
NOTICE
This work will require substantial restructuring of the Dart VM internals and is therefore relatively risky and giving a concrete timeline is not possible - that being said we expect to make good progress on this in the coming months.
The (old) isolates will continue to be available as they were before and we will try to ensure to not regress any existing code.
What the actual improvements in terms of isolate spawning time, parallelization as well as communications will be can only really be seen once the implementation is done. That being said, we can get numbers for some features in an intermediate stage.
The text was updated successfully, but these errors were encountered: