It seems from experimentation that the calculated timestamps between
on- and off-CPU switch events can produce incorrect results, with a
later event having a smaller timestamp. Discard events when the
resulting delta time would be negative.
if (tsp == 0)
return;
+ if (ts < *tsp) {
+ // Probably a clock issue where the recorded on-CPU event had a
+ // timestamp later than the recorded off-CPU event, or vice versa.
+ return;
+ }
u64 delta = ts - *tsp;
FACTOR
STORE