Messages in this thread |  | | Date | Wed, 3 Oct 2018 15:39:25 +0200 | From | Jiri Olsa <> | Subject | Re: [PATCH v2] perf record: encode -k clockid frequency into Perf trace |
| |
On Wed, Oct 03, 2018 at 10:01:56AM +0300, Alexey Budankov wrote: > > Store -k clockid frequency into Perf trace to enable timestamps > derived metrics conversion into wall clock time on reporting stage. > > Below is the example of perf report output: > > tools/perf/perf record -k raw -- ../../matrix/linux/matrix.gcc > ... > [ perf record: Captured and wrote 31.222 MB perf.data (818054 samples) ] > > tools/perf/perf report --header > # ======== > ... > # event : name = cycles:ppp, , size = 112, { sample_period, sample_freq } = 4000, sample_type = IP|TID|TIME|PERIOD, disabled = 1, inherit = 1, mmap = 1, comm = 1, freq = 1, enable_on_exec = 1, task = 1, precise_ip = 3, sample_id_all = 1, exclude_guest = 1, mmap2 = 1, comm_exec = 1, use_clockid = 1, clockid = 4 > ... > # clockid frequency: 1000 MHz > ... > # ======== > > Signed-off-by: Alexey Budankov <alexey.budankov@linux.intel.com> > --- > Changes in v2: > - renamed clockid_freq to clockid_res_ns and get_clockid_freq() to get_clockid_res() > - avoided redundant define of NSEC_IN_SEC, reused linux/time64.h:NSEC_PER_SEC > - moved MHz conversion into print_clockid() and shortened write_clockid() > --- > tools/perf/builtin-record.c | 21 +++++++++++++++++++-- > tools/perf/perf.h | 1 + > tools/perf/util/env.h | 1 + > tools/perf/util/header.c | 27 +++++++++++++++++++++++++++ > tools/perf/util/header.h | 1 + > 5 files changed, 49 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c > index 0980dfe3396b..127dc7432394 100644 > --- a/tools/perf/builtin-record.c > +++ b/tools/perf/builtin-record.c > @@ -592,6 +592,11 @@ static void record__init_features(struct record *rec) > if (!rec->opts.full_auxtrace) > perf_header__clear_feat(&session->header, HEADER_AUXTRACE); > > + if (rec->opts.use_clockid && rec->opts.clockid_res_ns) > + session->header.env.clockid_res_ns = rec->opts.clockid_res_ns; > + else > + perf_header__clear_feat(&session->header, HEADER_CLOCKID); > +
could you please keep only bits setting in record__init_features and move the header.env.clockid_res_ns assignment out of it?
sry for not catching this in the first version
> perf_header__clear_feat(&session->header, HEADER_STAT); > } > > @@ -1337,6 +1342,17 @@ static const struct clockid_map clockids[] = { > CLOCKID_END, > }; > > +static int get_clockid_res(clockid_t clk_id, size_t *res_ns) > +{ > + struct timespec res; > + > + *res_ns = 0; > + if (!clock_getres(clk_id, &res)) > + *res_ns = res.tv_nsec + res.tv_sec * NSEC_PER_SEC;
hum, if this one fails (which I guess is unlikely) we should tell and probably even quit
thanks, jirka
|  |