Linux: Implement perf live event reordering. #62
Merged
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.
The perf ring buffers are divided by CPUs and processes and naively concatenating read events can yield wrong ordering. In particular, this is problematic for fork and exec events since mmaped modules will go into the wrong process and cause unwind to fail.
Introduce a streaming event sorter to tackle this. Note that timestamps should not be considered 100% reliable and cases where timestamps go backwards should be still gracefully handled. In particular for perf, a NMI could interrupt event writes, thus even timestamp inversion within the same ring buffer can happen.
This is based on top of #61 for convenience, but still split into commits. I can rebase on top of main if needed.
Link: #26