recon icon indicating copy to clipboard operation
recon copied to clipboard

`recon:node_stats` - Issue in number of reductions

Open rewritten opened this issue 2 years ago • 1 comments

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).

rewritten avatar Sep 21 '23 10:09 rewritten

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.

ferd avatar Sep 22 '23 15:09 ferd