Teach perf_trace_##call() to check hlist_empty(perf_events)
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v1 Latest posting 2/23 patches 5 repliesIn review
- v1 posting 1/23 patches 15 repliesSuperseded
Patches in v1 posting 2/2 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/3 | tracing/perf: expand TRACE_EVENT(sched_stat_runtime)include/ include/ | +8 | 0 replies | |
| 2/3 | tracing/perf: reimplement TP_perf_assign() logicinclude/ include/ | +14 | 0 replies | |
| 3/3 | tracing/perf: Avoid perf_trace_buf_*() in perf_trace_##call() when possibleinclude/ | +6 | 0 replies |
Reviews trailers per patch
None of the 3 patches has a Reviewed-by or Acked-by.
| Patch | Steven Rostedt | David Ahern |
|---|---|---|
| Series | Reviewed-and-Acked-by | T-b |
| 1/3 | ||
| 2/3 | ||
| 3/3 |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
Cover letter [PATCH RESEND 0/3] Teach perf_trace_##call() to check hlist_empty(perf_events)
Hello.
The patches are the same, I only tried to update the changelogs a bit. I am also quoting my old email below, to explain what this hack tries to do.
Say, "perf record -e sched:sched_switch -p1".
Every task except /sbin/init will do perf_trace_sched_switch() and perf_trace_buf_prepare() + perf_trace_buf_submit for no reason(), it doesn't have a counter.
So it makes sense to add the fast-path check at the start of perf_trace_##call(),
if (hlist_empty(event_call->perf_events))
return;
The problem is, we should not do this if __task != NULL (iow, if DECLARE_EVENT_CLASS() uses __perf_task()), perf_tp_event() has the additional code for this case.
So we should do
if (!__task && hlist_empty(event_call->perf_events))
return;
But __task is changed by "{ assign; }" block right before perf_trace_buf_submit(). Too late for the fast-path check, we already called perf_trace_buf_prepare/fetch_regs.
So. After 2/3 __perf_task() (and __perf_count/addr) is called when ftrace_get_offsets_##call(args) evaluates the arguments, and we can check !__task && hlist_empty() right after that.
Oleg.