Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

i#5505 PT tracing: Skip interrupted thread-final syscall trace #7027

Merged
merged 7 commits into from
Oct 9, 2024

Conversation

abhinav92003
Copy link
Contributor

@abhinav92003 abhinav92003 commented Oct 8, 2024

Skips dumping the PT trace for the interrupted thread-final syscall. Syscall PT traces from interrupted thread-final syscalls like futex, epoll_wait have been observed to not decode successfully due to pte_bad_context in libipt. They also do not represent the correct app behavior as they were interrupted by the detach signal. We skip dumping them to the raw trace.

Verified on a system that supports Intel-PT that relevant tests continue to pass:

The following tests passed:
	code_api|tool.drcacheoff.kernel.simple_SUDO
	code_api|tool.drcacheoff.kernel.opcode-mix_SUDO
	code_api|tool.drcacheoff.kernel.syscall-mix_SUDO
	code_api|tool.drcacheoff.kernel.invariant-checker_SUDO

Also verified on a large app that user+syscall PT traces gathered with this change do not have the decode issue previously seen on the PT trace of the interrupted last syscall.

Issue: #5505

Skips dumping the PT trace for the thread-final syscall. Syscall PT traces from thread-final syscalls like futex, epoll_wait have been observed to not decode successfully. They also do not represent the correct app behavior as they were interrupted by the detach signal. We skip dumping them to the raw trace.

Issue: #5505
@abhinav92003 abhinav92003 changed the title i#5505 PT tracing: Skip thread-final syscall trace i#5505 PT tracing: Skip interrupted thread-final syscall trace Oct 8, 2024
clients/drcachesim/tracer/syscall_pt_trace.cpp Outdated Show resolved Hide resolved
clients/drcachesim/tracer/tracer.cpp Outdated Show resolved Hide resolved
@abhinav92003 abhinav92003 merged commit 32adb70 into master Oct 9, 2024
17 checks passed
@abhinav92003 abhinav92003 deleted the i5505-skip-thread-final-syscalls branch October 9, 2024 15:21
abhinav92003 added a commit that referenced this pull request Oct 10, 2024
Adds a test where one of the threads is waiting on a futex when detach
occurs. PT traces for such futex syscalls have been observed to fail in
libipt decode. We also do not want such PT traces because they do not
represent real app behavior, as the syscall was interrupted by DR's
detach signal. #7027 added logic to skip them from the written trace.

This PR adds a regression test. Unfortunately this test still does not
reproduce the original libipt decode issue that was seen on a large app.
Most errors seen were on a modified kernel and only a few on a regular
futex. But it is still useful to add this test that ensures that the
thread-final interrupted syscall is skipped.

This test also uncovers a possible transparency violation seen in the
behavior of an interrupted-and-restarted futex call, where the blocked
thread doesn't remember that it was supposed to wait on a different
futex specified by a later FUTEX_CMP_REQUEUE call than the one specified
by it in the original futex syscall.

Since the new test requires Intel-PT, verified that it passes by running
it manually locally:

```
The following tests passed:
	code_api|tool.drcacheoff.burst_syscall_pt_SUDO

The following tests passed:
	code_api|tool.drcacheoff.kernel.simple_SUDO
	code_api|tool.drcacheoff.kernel.opcode-mix_SUDO
	code_api|tool.drcacheoff.kernel.syscall-mix_SUDO
	code_api|tool.drcacheoff.kernel.invariant-checker_SUDO

```

Issue: #5505
Issue: #7034
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants