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:   Fri, 11 Dec 2020 12:27:39 +0900
From:   Namhyung Kim <namhyung@...nel.org>
To:     Jiri Olsa <jolsa@...nel.org>
Cc:     Arnaldo Carvalho de Melo <acme@...nel.org>,
        lkml <linux-kernel@...r.kernel.org>,
        Peter Zijlstra <a.p.zijlstra@...llo.nl>,
        Ingo Molnar <mingo@...nel.org>,
        Mark Rutland <mark.rutland@....com>,
        Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
        Michael Petlan <mpetlan@...hat.com>,
        Ian Rogers <irogers@...gle.com>,
        Stephane Eranian <eranian@...gle.com>,
        Alexei Budankov <abudankov@...wei.com>
Subject: Re: [PATCH 3/3] perf tools: Add evlist/evlist-verbose control commands

Hi Jiri,

On Fri, Dec 11, 2020 at 5:43 AM Jiri Olsa <jolsa@...nel.org> wrote:
>
> Adding new control events to display all evlist events.
>
> The interface string for control file is 'evlist' and
> 'evlist-verbose'.
>
> When evlist is received, perf will scan and print current
> evlist into perf record terminal.
>
> When evlist-verbose is received perf will scan and print
> current evlist details (like perf evlist -v) into perf
> record terminal.
>
> Example session:
>
>   terminal 1:
>     # mkfifo control ack perf.pipe
>     # perf record --control=fifo:control,ack -e 'sched:*'
>
>   terminal 2:
>     # echo evlist > control
>
>   terminal 1:
>     # perf record --control=fifo:control,ack -e 'sched:*'
>     ...
>     sched:sched_kthread_stop
>     sched:sched_kthread_stop_ret
>     sched:sched_waking
>     sched:sched_wakeup
>     sched:sched_wakeup_new
>     sched:sched_switch
>     sched:sched_migrate_task
>     sched:sched_process_free
>     sched:sched_process_exit
>     ...
>
>   terminal 2:
>     # echo evlist-vebose > control
>
>   terminal 1:
>     ...
>     sched:sched_kthread_stop: type: 2, size: 120, config: 0x145,      \
>     { sample_period, sample_freq }: 1, sample_type: IP|TID|TIME|CPU   \
>     |PERIOD|RAW|IDENTIFIER, read_format: ID, disabled: 1, inherit:    \
>     1, sample_id_all: 1, exclude_guest: 1
>     sched:sched_kthread_stop_ret: type: 2, size: 120, config: 0x144   \
>     , { sample_period, sample_freq }: 1, sample_type: IP|TID|TIME|CPU \
>     |PERIOD|RAW|IDENTIFIER, read_format: ID, disabled: 1, inherit: 1, \
>     sample_id_all: 1, exclude_guest: 1
>     ...
>
> This new evlist command is handy to get real event names when
> wildcards are used.
>
> The evlist-verbose is handy to check on actually enabled perf_event_attr
> values.
>
> Signed-off-by: Jiri Olsa <jolsa@...nel.org>

Acked-by: Namhyung Kim <namhyung@...nel.org>

Thanks,
Namhyung


> ---
>  tools/perf/builtin-record.c |  2 ++
>  tools/perf/builtin-stat.c   |  2 ++
>  tools/perf/util/evlist.c    | 15 +++++++++++++++
>  tools/perf/util/evlist.h    |  4 ++++
>  4 files changed, 23 insertions(+)
>
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index 582b8fba012c..d40406880722 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -1951,6 +1951,8 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
>                         case EVLIST_CTL_CMD_UNSUPPORTED:
>                         case EVLIST_CTL_CMD_ENABLE_EVSEL:
>                         case EVLIST_CTL_CMD_DISABLE_EVSEL:
> +                       case EVLIST_CTL_CMD_EVLIST:
> +                       case EVLIST_CTL_CMD_EVLIST_VERBOSE:
>                         default:
>                                 break;
>                         }
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index 6a21fb665008..425e2a8ebde6 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -592,6 +592,8 @@ static void process_evlist(struct evlist *evlist, unsigned int interval)
>                 case EVLIST_CTL_CMD_UNSUPPORTED:
>                 case EVLIST_CTL_CMD_ENABLE_EVSEL:
>                 case EVLIST_CTL_CMD_DISABLE_EVSEL:
> +               case EVLIST_CTL_CMD_EVLIST:
> +               case EVLIST_CTL_CMD_EVLIST_VERBOSE:
>                 default:
>                         break;
>                 }
> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
> index 729c98d10628..571d2ad61f4a 100644
> --- a/tools/perf/util/evlist.c
> +++ b/tools/perf/util/evlist.c
> @@ -24,6 +24,7 @@
>  #include "bpf-event.h"
>  #include "util/string2.h"
>  #include "util/perf_api_probe.h"
> +#include "util/evsel_fprintf.h"
>  #include <signal.h>
>  #include <unistd.h>
>  #include <sched.h>
> @@ -1931,6 +1932,12 @@ static int evlist__ctlfd_recv(struct evlist *evlist, enum evlist_ctl_cmd *cmd,
>                                     (sizeof(EVLIST_CTL_CMD_SNAPSHOT_TAG)-1))) {
>                         *cmd = EVLIST_CTL_CMD_SNAPSHOT;
>                         pr_debug("is snapshot\n");
> +               } else if (!strncmp(cmd_data, EVLIST_CTL_CMD_EVLIST_VERBOSE_TAG,
> +                                   (sizeof(EVLIST_CTL_CMD_EVLIST_VERBOSE_TAG)-1))) {
> +                       *cmd = EVLIST_CTL_CMD_EVLIST_VERBOSE;
> +               } else if (!strncmp(cmd_data, EVLIST_CTL_CMD_EVLIST_TAG,
> +                                   (sizeof(EVLIST_CTL_CMD_EVLIST_TAG)-1))) {
> +                       *cmd = EVLIST_CTL_CMD_EVLIST;
>                 }
>         }
>
> @@ -1954,6 +1961,7 @@ int evlist__ctlfd_ack(struct evlist *evlist)
>
>  int evlist__ctlfd_process(struct evlist *evlist, enum evlist_ctl_cmd *cmd)
>  {
> +       struct perf_attr_details details = { .verbose = false, };
>         int err = 0;
>         char cmd_data[EVLIST_CTL_CMD_MAX_LEN];
>         int ctlfd_pos = evlist->ctl_fd.pos;
> @@ -1995,6 +2003,13 @@ int evlist__ctlfd_process(struct evlist *evlist, enum evlist_ctl_cmd *cmd)
>                                         pr_info("failed: can't find '%s' event\n", evsel_name);
>                                 }
>                                 break;
> +                       case EVLIST_CTL_CMD_EVLIST_VERBOSE:
> +                               details.verbose = true;
> +                               __fallthrough;
> +                       case EVLIST_CTL_CMD_EVLIST:
> +                               evlist__for_each_entry(evlist, evsel)
> +                                       evsel__fprintf(evsel, &details, stderr);
> +                               break;
>                         case EVLIST_CTL_CMD_SNAPSHOT:
>                                 break;
>                         case EVLIST_CTL_CMD_ACK:
> diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
> index e4e8ff8831a3..7892f084632d 100644
> --- a/tools/perf/util/evlist.h
> +++ b/tools/perf/util/evlist.h
> @@ -332,6 +332,8 @@ struct evsel *evlist__reset_weak_group(struct evlist *evlist, struct evsel *evse
>  #define EVLIST_CTL_CMD_SNAPSHOT_TAG "snapshot"
>  #define EVLIST_CTL_CMD_ENABLE_EVSEL_TAG "enable-"
>  #define EVLIST_CTL_CMD_DISABLE_EVSEL_TAG "disable-"
> +#define EVLIST_CTL_CMD_EVLIST_TAG "evlist"
> +#define EVLIST_CTL_CMD_EVLIST_VERBOSE_TAG "evlist-verbose"
>
>  #define EVLIST_CTL_CMD_MAX_LEN 64
>
> @@ -343,6 +345,8 @@ enum evlist_ctl_cmd {
>         EVLIST_CTL_CMD_DISABLE_EVSEL,
>         EVLIST_CTL_CMD_ACK,
>         EVLIST_CTL_CMD_SNAPSHOT,
> +       EVLIST_CTL_CMD_EVLIST,
> +       EVLIST_CTL_CMD_EVLIST_VERBOSE,
>  };
>
>  int evlist__parse_control(const char *str, int *ctl_fd, int *ctl_fd_ack, bool *ctl_fd_close);
> --
> 2.26.2
>

Powered by blists - more mailing lists