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

DynamicMetrics Tool Completeness #349

Open
11 tasks
smarr opened this issue Apr 15, 2020 · 0 comments
Open
11 tasks

DynamicMetrics Tool Completeness #349

smarr opened this issue Apr 15, 2020 · 0 comments
Labels
bug Fixes an issue, incorrect implementation
Projects

Comments

@smarr
Copy link
Owner

smarr commented Apr 15, 2020

PR #348 is extending the DynamicMetrics tool to measure actor-specific issues.

While doing this work, I noticed the DyM does not correctly report the call targets anymore.
This broke between the 0.6.0 and 0.7.0 releases.

PR #348 rectifies some of this, but for the moment, I'll likely not get to everything, so here a list if issues that should addressed for completeness:

  • make sure we record everything, even for the megamorphic cases, so, we need to check

Actor statistics that could be added:

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

Specific To Generic

One known limitation is the recording of targets for ValuePrims when we have a mixed use of blocks and objects. For instance Array>>#putAll: becomes a generic message send, for which we still have the counter, but don't have the detailed information anymore. Perhaps, I need a way to invalidate the counter, and transition invocation counts etc to another counter for message sends.

Known Issues

  • recording of receiver information seems unreliable (see details below)
  • information gets lost when transition to megamorphic and generic case (at least for message sends)

Recording of Receiver Details

Currently we seem to have problems with this. The PingPong benchmark has many examples.

1 Platform.ns:19:3:416                    true          1         0           1                    true           1          0            1            0
2  Savina.ns:100:18:10                    true     119997         0           1                    true      159996          0            1        39999
3   Savina.ns:106:31:4                    true     119997         0           1                    true      159996          0            1        39999
4   Savina.ns:107:31:4                    true          3         0           1                    true           4          0            1            1
5  Savina.ns:117:20:10                    true     120000         0           1                    true      160000          0            1        40000
6  Savina.ns:129:54:26                    true          3         0           1                    true           4          0            1            1
7  Savina.ns:130:54:24                    true          3         0           1                    true           4          0            1            1
8   Savina.ns:131:16:5                    true          3         0           1                    true           4          0            1            1
9   Savina.ns:95:18:10                    true          3         0           1                    true           4          0            1            1

Losing Information

One known limitation for this are situations where we have a mixed use of blocks and objects, for instance Array>>#putAll: becomes a generic message send, for which we still have the counter, but don't have the detailed information anymore. Perhaps, I need a way to invalidate the counter, and transition invocation counts etc to another counter for message sends.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Fixes an issue, incorrect implementation
Projects
Camelot
To do
Development

No branches or pull requests

1 participant