mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
To: Madadi Vineeth Reddy <vineethr@linux.ibm.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	acme@redhat.com, Kajol Jain <kjain@linux.ibm.com>,
	linux-perf-users <linux-perf-users@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] perf sched map: Add command-name option to filter the output map
Date: Thu, 6 Jun 2024 15:51:55 +0530	[thread overview]
Message-ID: <92D17E14-8565-4162-81C6-1ADA18AF48C2@linux.vnet.ibm.com> (raw)
In-Reply-To: <20240417152521.80340-1-vineethr@linux.ibm.com>



> On 17 Apr 2024, at 8:55 PM, Madadi Vineeth Reddy <vineethr@linux.ibm.com> wrote:
> 
> By default, perf sched map prints sched-in events for all the tasks
> which may not be required all the time as it prints lot of symbols
> and rows to the terminal.
> 
> With --command-name option, one could specify the specific command
> for which the map has to be shown. This would help in analyzing the
> CPU usage patterns easier for that specific command. Since multiple
> PID's might have the same command name, using command-name filter
> would be more useful for debugging.
> 
> For other tasks, instead of printing the symbol, ** is printed and
> the same . is used to represent idle. ** is used instead of symbol
> for other tasks because it helps in clear visualization of command
> of interest and secondly the symbol itself doesn't mean anything
> because the sched-in of that symbol will not be printed(first sched-in
> contains pid and the corresponding symbol).
> 
> 6.8.0
> ======
>  *A0                   213864.670142 secs A0 => migration/0:18
>  *.                    213864.670148 secs .  => swapper:0
>   .  *B0               213864.670217 secs B0 => migration/1:21
>   .  *.                213864.670223 secs
>   .   .  *C0           213864.670247 secs C0 => migration/2:26
>   .   .  *.            213864.670252 secs
> 
> 6.8.0 + patch (--command-name = schbench)
> =============
>   **  .   ** *A0       213864.671055 secs A0 => schbench:104834
>  *B0  .   .   A0       213864.671156 secs B0 => schbench:104835
>  *C0  .   .   A0       213864.671187 secs C0 => schbench:104836
>  *D0  .   .   A0       213864.671219 secs D0 => schbench:104837
>  *E0  .   .   A0       213864.671250 secs E0 => schbench:104838
>   E0  .  *D0  A0
> 
> This helps in visualizing how a benchmark like schbench is spread over
> the available cpus while also knowing which cpus are idle(.) and which
> are not(**). This will be more useful as number of CPUs increase.
> 
> Signed-off-by: Madadi Vineeth Reddy <vineethr@linux.ibm.com>

Tested the patch and looks good to me

Command to record: perf sched record sleep 5

With the patch, tested below and checked it filters and provides results for “sleep” and “perf”

 perf sched map --command-name sleep
 perf sched map --command-name perf

Reviewed-and-tested-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com <mailto:atrajeev@linux.vnet.ibm.com>>

Thanks
Athira
> ---
> tools/perf/Documentation/perf-sched.txt |  4 ++++
> tools/perf/builtin-sched.c              | 17 ++++++++++++++---
> 2 files changed, 18 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/perf/Documentation/perf-sched.txt b/tools/perf/Documentation/perf-sched.txt
> index 5fbe42bd599b..b04a37560935 100644
> --- a/tools/perf/Documentation/perf-sched.txt
> +++ b/tools/perf/Documentation/perf-sched.txt
> @@ -94,6 +94,10 @@ OPTIONS for 'perf sched map'
> --color-pids::
> Highlight the given pids.
> 
> +--command-name::
> + Map output only for the given command name.
> + (** indicates other tasks while . is idle).
> +
> OPTIONS for 'perf sched timehist'
> ---------------------------------
> -k::
> diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
> index 0fce7d8986c0..e60836da53e5 100644
> --- a/tools/perf/builtin-sched.c
> +++ b/tools/perf/builtin-sched.c
> @@ -156,6 +156,7 @@ struct perf_sched_map {
> const char *color_pids_str;
> struct perf_cpu_map *color_cpus;
> const char *color_cpus_str;
> + const char *command;
> struct perf_cpu_map *cpus;
> const char *cpus_str;
> };
> @@ -1594,8 +1595,6 @@ static int map_switch_event(struct perf_sched *sched, struct evsel *evsel,
> 
> sched->curr_thread[this_cpu.cpu] = thread__get(sched_in);
> 
> - printf("  ");
> -
> new_shortname = 0;
> if (!tr->shortname[0]) {
> if (!strcmp(thread__comm_str(sched_in), "swapper")) {
> @@ -1605,7 +1604,8 @@ static int map_switch_event(struct perf_sched *sched, struct evsel *evsel,
> */
> tr->shortname[0] = '.';
> tr->shortname[1] = ' ';
> - } else {
> + } else if (!sched->map.command || !strcmp(thread__comm_str(sched_in),
> + sched->map.command)) {
> tr->shortname[0] = sched->next_shortname1;
> tr->shortname[1] = sched->next_shortname2;
> 
> @@ -1618,10 +1618,18 @@ static int map_switch_event(struct perf_sched *sched, struct evsel *evsel,
> else
> sched->next_shortname2 = '0';
> }
> + } else {
> + tr->shortname[0] = '*';
> + tr->shortname[1] = '*';
> }
> new_shortname = 1;
> }
> 
> + if (sched->map.command && strcmp(thread__comm_str(sched_in), sched->map.command))
> + goto skip;
> +
> + printf("  ");
> +
> for (i = 0; i < cpus_nr; i++) {
> struct perf_cpu cpu = {
> .cpu = sched->map.comp ? sched->map.comp_cpus[i].cpu : i,
> @@ -1678,6 +1686,7 @@ static int map_switch_event(struct perf_sched *sched, struct evsel *evsel,
> out:
> color_fprintf(stdout, color, "\n");
> 
> +skip:
> thread__put(sched_in);
> 
> return 0;
> @@ -3560,6 +3569,8 @@ int cmd_sched(int argc, const char **argv)
>                     "highlight given CPUs in map"),
> OPT_STRING(0, "cpus", &sched.map.cpus_str, "cpus",
>                     "display given CPUs in map"),
> + OPT_STRING(0, "command-name", &sched.map.command, "command",
> + "map output only for the given command name"),
> OPT_PARENT(sched_options)
> };
> const struct option timehist_options[] = {
> -- 
> 2.39.1
> 
> 


  parent reply	other threads:[~2024-06-06 10:22 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-17 15:25 Madadi Vineeth Reddy
2024-05-12 16:10 ` Madadi Vineeth Reddy
2024-06-06 10:21 ` Athira Rajeev [this message]
2024-06-07  0:50 ` Namhyung Kim
2024-06-07  5:49   ` Madadi Vineeth Reddy
2024-06-07  6:49 ` Chen Yu
2024-06-07  7:22   ` Madadi Vineeth Reddy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=92D17E14-8565-4162-81C6-1ADA18AF48C2@linux.vnet.ibm.com \
    --to=atrajeev@linux.vnet.ibm.com \
    --cc=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=irogers@google.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=kjain@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=vineethr@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®