You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The function node_stats(N, Interval, FoldFun, Init) has an issue with the returned number of reductions. This is because erlang:statistics(reductions) returns a tuple with {Total, Count_since_last_call} but those calls are global.
recon relies on calling this function twice and using the count, but if any other process in the same VM calls erlang:statistics(reductions), then the returned number is much lower than the real number.
You can see it for instance calling recon:node_stats_list(1, 1000) in a task and, just before one second has passed, call erlang:statistics(reductions) manually. Alternatively, call recon:node_stats_list(1, 1000) twice, concurrently: one of the two stats will have a very very low number of reductions.
Probably reductions should instead be computed as delta between the Total (first element).
The text was updated successfully, but these errors were encountered:
rewritten
changed the title
Issue in number of reductionsrecon:node_stats - Issue in number of reductions
Sep 21, 2023
yeah that's a good idea for a more accurate result. I never had to run into that issue in the past (recon used to be a bunch of snippets coworkers and I just ran in the shell), but with the amount of tooling that can run in the background, the risk of higher interference has grown over time.
The function
node_stats(N, Interval, FoldFun, Init)
has an issue with the returned number of reductions. This is becauseerlang:statistics(reductions)
returns a tuple with{Total, Count_since_last_call}
but those calls are global.recon
relies on calling this function twice and using the count, but if any other process in the same VM callserlang:statistics(reductions)
, then the returned number is much lower than the real number.You can see it for instance calling
recon:node_stats_list(1, 1000)
in a task and, just before one second has passed, callerlang:statistics(reductions)
manually. Alternatively, callrecon:node_stats_list(1, 1000)
twice, concurrently: one of the two stats will have a very very low number of reductions.Probably reductions should instead be computed as delta between the
Total
(first element).The text was updated successfully, but these errors were encountered: