Skip to content
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

Add support for actor-language features to Dynamic Metrics tool #348

Merged
merged 30 commits into from Apr 16, 2020
Merged

Conversation

smarr
Copy link
Owner

@smarr smarr commented Apr 13, 2020

The goal of this PR is to improve the Dynamic Metric tool to be able to measure all actor-related language features.

Specifically, this means to measure:

  • actor creation, and the polymorphism of the value from which actors are created
  • message sends (to far refs and promises)
  • polymorphism of the activated methods (num different receiver types, num different target methods, activation counts) from a message send (same metrics as for normal method dispatch)
  • whether promises are captured, i.e., used, or simply ignored
  • callbacks registered on promises, type of callback operation (whenResolved, onError, whenResolvedOnError)
  • callback activations
  • explicitly created promise pairs
  • number of implicit promise resolutions (return from async message)
  • number of explicit promise resolutions (Resolver>>#resolve:)
  • number of promises created (implicit/explicit)
  • turns executed in the benchmark

For later:

  • promise chain length
  • messages sent per turn
  • number of turns per actor
  • messages received, messages sent per actor

In addition to the main changes, the PR does some maintenance:

  • add double support for AbsPrim 75a3df3
  • avoid initialize TraceActorCreationNode if tracing is not enabled f21d959
  • instead of relying on instrumentation, use simply a counting node to count direct call target activations
  • fix breakpoint buttons not appearing in Kompos 352e0e6
  • make object safepoint handling safer and more consistent dd07d87

This is not all that could be done. More work is tracked with #349.

@smarr smarr added the enhancement Improves the implementation with something noteworthy label Apr 13, 2020
@smarr smarr mentioned this pull request Apr 15, 2020
11 tasks
smarr added 11 commits April 16, 2020 00:40
Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
This format is much easier to read and map to a file.

Signed-off-by: Stefan Marr <git@stefan-marr.de>
No specific actor support yet, but at least support promises, far references, and resolver objects.

Also add support for a few other things.

Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
The maps where unused and were missed in an old refactoring.

Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
- and provide necessary support for CreatePromisePairPrim

Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
This is just the primitive, not yet on the source level, which might need a primitive wrapping this to pass on the breakpoint parameters correctly.

Signed-off-by: Stefan Marr <git@stefan-marr.de>
@smarr smarr force-pushed the actor-dym branch 3 times, most recently from 5d71fb9 to 3492657 Compare April 16, 2020 00:07
smarr added 14 commits April 16, 2020 11:41
- Num.Actors
- Num.Turns
- Num.Promises
- Num.Resolvers
- Num.Promises.Avoided
- Num.Registered.WhenResolved
- Num.Registered.OnError
- Num.Scheduled.WhenResolved
- Num.Scheduled.OnError

Signed-off-by: Stefan Marr <git@stefan-marr.de>
…>#resolve:

This node itself does not need to be instrumented, because its child node will be instrumented as in all other locations where it is used.

Signed-off-by: Stefan Marr <git@stefan-marr.de>
…s [WIP]

This replaces the rather elaborate and brittle way we used instrumentation to count the activation of specific call targets by having a wrapping node that counts activations and can be collected from the message send node.

Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
…l nodes with counting call nodes [WIP]

Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
Hasn’t been used in ages

Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
…lved

Signed-off-by: Stefan Marr <git@stefan-marr.de>
- rename resolve to promiseResolve

Signed-off-by: Stefan Marr <git@stefan-marr.de>
Perhaps another time, not urgent for the moment.

Signed-off-by: Stefan Marr <git@stefan-marr.de>
…strap popovers

Signed-off-by: Stefan Marr <git@stefan-marr.de>
This is a correctness precaution.
All subsequent register/unregister operations following an initial unregister/register need to be in a finally clause if the operations in-between could cause any kind of exception, which most can.

For consistency, it should be used really everywhere.

There are only two points where it might be acceptable, but should be still fixed: init of object system, and in the executeApplication method.

Signed-off-by: Stefan Marr <git@stefan-marr.de>
…no longer skip any frames

Signed-off-by: Stefan Marr <git@stefan-marr.de>
Signed-off-by: Stefan Marr <git@stefan-marr.de>
@smarr
Copy link
Owner Author

smarr commented Apr 16, 2020

@daumayr I am merging this, but have a look at for instance dd07d87 and f21d959 which may have an impact on you.

@smarr smarr merged commit 7d373fb into dev Apr 16, 2020
@smarr smarr deleted the actor-dym branch April 16, 2020 15:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Improves the implementation with something noteworthy
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant