Allow profiling kprobes/uprobes with --fdtransfer #1300
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.
Description
Extend fdtransfer protocol to pass probe name in perf_event requests.
Motivation and context
Async-profiler can profile kprobes and uprobes, e.g.
asprof -e kprobe:fd_install
. However, this does not work with--fdtransfer
option. The reason is,perf_event_attr
structure contains a pointer to kprobe/uprobe name, but whenperf_event_attr
is passed to another process (fdtransfer server), this pointer becomes invalid, since the address belongs to a different process.The proposed solution extends
perf_fd_request
structure with a new field that contains a name of kprobe/uprobe. For events other than kprobe/uprobe, this field contains an empty string. When fdtransfer server receives non-empty probe name, it adjusts pointer inperf_event_attr
.How has this been tested?
Added
KernelTests.kprobe
test, which failed before the fix, but passes now.By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.