engine: Separate JIT traces for each app callback #1242
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.
This branch makes the engine ensure that JIT traces never cross between the engine and app callbacks. This is intended both to make JIT trace dumps more readable (don't mix engine and apps in the same trace) and to limit the impact of issues like JIT blacklistings (prevent problems in one app from propagating into other apps or the engine.)
This is achieved using a new primitive function
jit.tracebarrier()
that JIT traces cannot cross. During recording, a call tojit.tracebarrier()
will immediately finish the current trace and then start a new root trace. This appears as a "trace stitch" in the log.This branch makes the engine execute such a trace barrier immediately before and after each call to an app.
Performance impact needs to be evaluated. See also raptorjit/raptorjit#115.