lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 14 Aug 2023 13:29:04 -0700
From:   Ian Rogers <irogers@...gle.com>
To:     Adrian Hunter <adrian.hunter@...el.com>,
        Yang Jihong <yangjihong1@...wei.com>
Cc:     peterz@...radead.org, mingo@...hat.com, acme@...nel.org,
        mark.rutland@....com, alexander.shishkin@...ux.intel.com,
        jolsa@...nel.org, namhyung@...nel.org, kan.liang@...ux.intel.com,
        james.clark@....com, tmricht@...ux.ibm.com, ak@...ux.intel.com,
        anshuman.khandual@....com, linux-kernel@...r.kernel.org,
        linux-perf-users@...r.kernel.org
Subject: Re: [PATCH v5 3/7] perf record: Move setting dummy tracking before record__init_thread_masks()

On Thu, Aug 3, 2023 at 11:58 PM Adrian Hunter <adrian.hunter@...el.com> wrote:
>
> On 4/08/23 05:07, Yang Jihong wrote:
> > When dummy tracking go system wide, the mmap cpu mask is changed.

As previously commented, can we improve the quality of the function
names and commit messages? This sentence is particularly difficult to
understand, I don't understand it.

Thanks,
Ian

> > Therefore, needs to be placed before record__init_thread_masks().
> > Dummy tracking has been set in record__open(), move it before
> > record__init_thread_masks() and add a helper for unified processing.
> >
> > The sys_perf_event_open invoked is as follows:
> >
> >   # perf --debug verbose=3 record -e cpu-clock -D 100 true
> >   <SNIP>
> >   Opening: cpu-clock
> >   ------------------------------------------------------------
> >   perf_event_attr:
> >     type                             1 (PERF_TYPE_SOFTWARE)
> >     size                             136
> >     config                           0 (PERF_COUNT_SW_CPU_CLOCK)
> >     { sample_period, sample_freq }   4000
> >     sample_type                      IP|TID|TIME|PERIOD|IDENTIFIER
> >     read_format                      ID|LOST
> >     disabled                         1
> >     inherit                          1
> >     freq                             1
> >     sample_id_all                    1
> >     exclude_guest                    1
> >   ------------------------------------------------------------
> >   sys_perf_event_open: pid 10318  cpu 0  group_fd -1  flags 0x8 = 5
> >   sys_perf_event_open: pid 10318  cpu 1  group_fd -1  flags 0x8 = 6
> >   sys_perf_event_open: pid 10318  cpu 2  group_fd -1  flags 0x8 = 7
> >   sys_perf_event_open: pid 10318  cpu 3  group_fd -1  flags 0x8 = 9
> >   sys_perf_event_open: pid 10318  cpu 4  group_fd -1  flags 0x8 = 10
> >   sys_perf_event_open: pid 10318  cpu 5  group_fd -1  flags 0x8 = 11
> >   sys_perf_event_open: pid 10318  cpu 6  group_fd -1  flags 0x8 = 12
> >   sys_perf_event_open: pid 10318  cpu 7  group_fd -1  flags 0x8 = 13
> >   Opening: dummy:u
> >   ------------------------------------------------------------
> >   perf_event_attr:
> >     type                             1 (PERF_TYPE_SOFTWARE)
> >     size                             136
> >     config                           0x9 (PERF_COUNT_SW_DUMMY)
> >     { sample_period, sample_freq }   1
> >     sample_type                      IP|TID|TIME|IDENTIFIER
> >     read_format                      ID|LOST
> >     disabled                         1
> >     inherit                          1
> >     exclude_kernel                   1
> >     exclude_hv                       1
> >     mmap                             1
> >     comm                             1
> >     enable_on_exec                   1
> >     task                             1
> >     sample_id_all                    1
> >     exclude_guest                    1
> >     mmap2                            1
> >     comm_exec                        1
> >     ksymbol                          1
> >     bpf_event                        1
> >   ------------------------------------------------------------
> >   sys_perf_event_open: pid 10318  cpu 0  group_fd -1  flags 0x8 = 14
> >   sys_perf_event_open: pid 10318  cpu 1  group_fd -1  flags 0x8 = 15
> >   sys_perf_event_open: pid 10318  cpu 2  group_fd -1  flags 0x8 = 16
> >   sys_perf_event_open: pid 10318  cpu 3  group_fd -1  flags 0x8 = 17
> >   sys_perf_event_open: pid 10318  cpu 4  group_fd -1  flags 0x8 = 18
> >   sys_perf_event_open: pid 10318  cpu 5  group_fd -1  flags 0x8 = 19
> >   sys_perf_event_open: pid 10318  cpu 6  group_fd -1  flags 0x8 = 20
> >   sys_perf_event_open: pid 10318  cpu 7  group_fd -1  flags 0x8 = 21
> >   <SNIP>
> >
> > Signed-off-by: Yang Jihong <yangjihong1@...wei.com>
>
> Acked-by: Adrian Hunter <adrian.hunter@...el.com>
>
> > ---
> >  tools/perf/builtin-record.c | 59 +++++++++++++++++++++++--------------
> >  1 file changed, 37 insertions(+), 22 deletions(-)
> >
> > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> > index ca83599cc50c..3ff9d972225e 100644
> > --- a/tools/perf/builtin-record.c
> > +++ b/tools/perf/builtin-record.c
> > @@ -908,6 +908,37 @@ static int record__config_off_cpu(struct record *rec)
> >       return off_cpu_prepare(rec->evlist, &rec->opts.target, &rec->opts);
> >  }
> >
> > +static int record__config_tracking_events(struct record *rec)
> > +{
> > +     struct record_opts *opts = &rec->opts;
> > +     struct evlist *evlist = rec->evlist;
> > +     struct evsel *evsel;
> > +
> > +     /*
> > +      * For initial_delay, system wide or a hybrid system, we need to add a
> > +      * dummy event so that we can track PERF_RECORD_MMAP to cover the delay
> > +      * of waiting or event synthesis.
> > +      */
> > +     if (opts->target.initial_delay || target__has_cpu(&opts->target) ||
> > +         perf_pmus__num_core_pmus() > 1) {
> > +             evsel = evlist__findnew_tracking_event(evlist, false);
> > +             if (!evsel)
> > +                     return -ENOMEM;
> > +
> > +             /*
> > +              * Enable the dummy event when the process is forked for
> > +              * initial_delay, immediately for system wide.
> > +              */
> > +             if (opts->target.initial_delay && !evsel->immediate &&
> > +                 !target__has_cpu(&opts->target))
> > +                     evsel->core.attr.enable_on_exec = 1;
> > +             else
> > +                     evsel->immediate = 1;
> > +     }
> > +
> > +     return 0;
> > +}
> > +
> >  static bool record__kcore_readable(struct machine *machine)
> >  {
> >       char kcore[PATH_MAX];
> > @@ -1288,28 +1319,6 @@ static int record__open(struct record *rec)
> >       struct record_opts *opts = &rec->opts;
> >       int rc = 0;
> >
> > -     /*
> > -      * For initial_delay, system wide or a hybrid system, we need to add a
> > -      * dummy event so that we can track PERF_RECORD_MMAP to cover the delay
> > -      * of waiting or event synthesis.
> > -      */
> > -     if (opts->target.initial_delay || target__has_cpu(&opts->target) ||
> > -         perf_pmus__num_core_pmus() > 1) {
> > -             pos = evlist__findnew_tracking_event(evlist, false);
> > -             if (!pos)
> > -                     return -ENOMEM;
> > -
> > -             /*
> > -              * Enable the dummy event when the process is forked for
> > -              * initial_delay, immediately for system wide.
> > -              */
> > -             if (opts->target.initial_delay && !pos->immediate &&
> > -                 !target__has_cpu(&opts->target))
> > -                     pos->core.attr.enable_on_exec = 1;
> > -             else
> > -                     pos->immediate = 1;
> > -     }
> > -
> >       evlist__config(evlist, opts, &callchain_param);
> >
> >       evlist__for_each_entry(evlist, pos) {
> > @@ -4235,6 +4244,12 @@ int cmd_record(int argc, const char **argv)
> >               goto out;
> >       }
> >
> > +     err = record__config_tracking_events(rec);
> > +     if (err) {
> > +             pr_err("record__config_tracking_events failed, error %d\n", err);
> > +             goto out;
> > +     }
> > +
> >       err = record__init_thread_masks(rec);
> >       if (err) {
> >               pr_err("Failed to initialize parallel data streaming masks\n");
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ