Fix erratic cycle detector triggering on some Arm systems #3854
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This commit reworks tick usage to be safe with tick values that wrap around.
Most of our tick value sources will provide a monotonically increasing
value. However, our fallbacks, currently used on non Apple Arm CPUs
do not maintain the invariants.
They are implemented using clock_gettime and as such, wrap around fairly
regularly. They shouldn't wrap around quick enough that they are likely
to go around more than once.
This PR adds a "difference" function that will get the amount of ticks
between compared ticks. Within the runtime ticks are used to set
an amount of time to pause when there's no work to do and are used to
determine when to run the cycle detector.
Prior to this patch, on some Arm hardware, the cycle detector would end up running
very infrequently.