[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <54073c0c-62b1-433a-85cc-06e412af44bf@linux.ibm.com>
Date: Fri, 7 Jun 2024 12:52:00 +0530
From: Madadi Vineeth Reddy <vineethr@...ux.ibm.com>
To: Chen Yu <yu.c.chen@...el.com>
Cc: acme@...nel.org, peterz@...radead.org, mingo@...hat.com,
namhyung@...nel.org, mark.rutland@....com,
alexander.shishkin@...ux.intel.com, jolsa@...nel.org,
irogers@...gle.com, adrian.hunter@...el.com, kan.liang@...ux.intel.com,
acme@...hat.com, atrajeev@...ux.vnet.ibm.com, kjain@...ux.ibm.com,
linux-perf-users@...r.kernel.org, linux-kernel@...r.kernel.org,
Madadi Vineeth Reddy <vineethr@...ux.ibm.com>
Subject: Re: [PATCH] perf sched map: Add command-name option to filter the
output map
Hi Chen Yu,
On 07/06/24 12:19, Chen Yu wrote:
> On 2024-04-17 at 20:55:21 +0530, Madadi Vineeth Reddy 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@...ux.ibm.com>
>> ---
>> 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)) {
>>
>
> I've tested on my machine and it looks good. One minor question, can we do
> fuzzy name matching? Say, there are many tasks 'a-taskname-b',
> and we can filter them via
> perf sched map --command-name=taskname
Yes, maybe I will try to find a way to do both fuzzy name matching and exact name matching.
Thanks for taking a look. I will implement it in v2.
Thanks and Regards
Madadi Vineeth Reddy
>
> thanks,
> Chenyu
Powered by blists - more mailing lists