Messages in this thread | | | Date | Fri, 2 Feb 2024 19:05:42 +0200 | Subject | Re: [PATCH 1/1] tools: perf: Expose sample ID / stream ID to python scripts | From | Adrian Hunter <> |
| |
On 23/01/24 12:31, Ben Gainey wrote: > perf script exposes the evsel_name to python scripts as part of the data > passed to the sample or tracepoint handler function, and it passes the id and > stream_id to the throttled/unthrottled handler functions. This makes matching > throttle events and samples difficult. > > To make this possible, this change exposes the sample id and stream_id values > to the script. > > Signed-off-by: Ben Gainey <ben.gainey@arm.com>
Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
> --- > tools/perf/Documentation/perf-script-python.txt | 4 ++-- > tools/perf/util/scripting-engines/trace-event-python.c | 8 +++++++- > 2 files changed, 9 insertions(+), 3 deletions(-) > > diff --git a/tools/perf/Documentation/perf-script-python.txt b/tools/perf/Documentation/perf-script-python.txt > index 6a8581012e162..13e37e9385ee4 100644 > --- a/tools/perf/Documentation/perf-script-python.txt > +++ b/tools/perf/Documentation/perf-script-python.txt > @@ -642,8 +642,8 @@ SUPPORTED FIELDS > > Currently supported fields: > > -ev_name, comm, pid, tid, cpu, ip, time, period, phys_addr, addr, > -symbol, symoff, dso, time_enabled, time_running, values, callchain, > +ev_name, comm, id, stream_id, pid, tid, cpu, ip, time, period, phys_addr, > +addr, symbol, symoff, dso, time_enabled, time_running, values, callchain, > brstack, brstacksym, datasrc, datasrc_decode, iregs, uregs, > weight, transaction, raw_buf, attr, cpumode. > > diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c > index 860e1837ba969..d88966645b2f4 100644 > --- a/tools/perf/util/scripting-engines/trace-event-python.c > +++ b/tools/perf/util/scripting-engines/trace-event-python.c > @@ -858,6 +858,10 @@ static PyObject *get_perf_sample_dict(struct perf_sample *sample, > pydict_set_item_string_decref(dict, "ev_name", _PyUnicode_FromString(evsel__name(evsel))); > pydict_set_item_string_decref(dict, "attr", _PyBytes_FromStringAndSize((const char *)&evsel->core.attr, sizeof(evsel->core.attr))); > > + pydict_set_item_string_decref(dict_sample, "id", > + PyLong_FromUnsignedLongLong(sample->id)); > + pydict_set_item_string_decref(dict_sample, "stream_id", > + PyLong_FromUnsignedLongLong(sample->stream_id)); > pydict_set_item_string_decref(dict_sample, "pid", > _PyLong_FromLong(sample->pid)); > pydict_set_item_string_decref(dict_sample, "tid", > @@ -1306,7 +1310,7 @@ static void python_export_sample_table(struct db_export *dbe, > struct tables *tables = container_of(dbe, struct tables, dbe); > PyObject *t; > > - t = tuple_new(25); > + t = tuple_new(27); > > tuple_set_d64(t, 0, es->db_id); > tuple_set_d64(t, 1, es->evsel->db_id); > @@ -1333,6 +1337,8 @@ static void python_export_sample_table(struct db_export *dbe, > tuple_set_d64(t, 22, es->sample->insn_cnt); > tuple_set_d64(t, 23, es->sample->cyc_cnt); > tuple_set_s32(t, 24, es->sample->flags); > + tuple_set_d64(t, 25, es->sample->id); > + tuple_set_d64(t, 26, es->sample->stream_id); > > call_object(tables->sample_handler, t, "sample_table"); >
| |