Messages in this thread | | | From | Namhyung Kim <> | Date | Wed, 27 Jul 2022 17:00:36 -0700 | Subject | Re: [RFC v3 06/17] perf kwork: Implement perf kwork report |
| |
On Fri, Jul 8, 2022 at 6:53 PM Yang Jihong <yangjihong1@huawei.com> wrote: > > Implements framework of perf kwork report, which is used to report time > properties such as run time and frequency: > > Test cases: > > # perf kwork > > Usage: perf kwork [<options>] {record|report} > > -D, --dump-raw-trace dump raw trace in ASCII > -f, --force don't complain, do it > -k, --kwork <kwork> list of kwork to profile (irq, softirq, workqueue, etc) > -v, --verbose be more verbose (show symbol address, etc) > > # perf kwork report -h > > Usage: perf kwork report [<options>] > > -C, --cpu <cpu> list of cpus to profile > -i, --input <file> input file name > -n, --name <name> event name to profile > -s, --sort <key[,key2...]> > sort by key(s): runtime, max, count > -S, --with-summary Show summary with statistics > --time <str> Time span for analysis (start,stop) > > # perf kwork report > > Kwork Name | Cpu | Total Runtime | Count | Max runtime | Max runtime start | Max runtime end | > -------------------------------------------------------------------------------------------------------------------------------- > -------------------------------------------------------------------------------------------------------------------------------- > > # perf kwork report -S > > Kwork Name | Cpu | Total Runtime | Count | Max runtime | Max runtime start | Max runtime end | > -------------------------------------------------------------------------------------------------------------------------------- > -------------------------------------------------------------------------------------------------------------------------------- > Total count : 0 > Total runtime (msec) : 0.000 (0.000% load average) > Total time span (msec) : 0.000 > -------------------------------------------------------------------------------------------------------------------------------- > > # perf kwork report -C 0,100 > Requested CPU 100 too large. Consider raising MAX_NR_CPUS > Invalid cpu bitmap > > # perf kwork report -s runtime1 > Error: Unknown --sort key: `runtime1' > > Usage: perf kwork report [<options>] > > -C, --cpu <cpu> list of cpus to profile > -i, --input <file> input file name > -n, --name <name> event name to profile > -s, --sort <key[,key2...]> > sort by key(s): runtime, max, count > -S, --with-summary Show summary with statistics > --time <str> Time span for analysis (start,stop) > > # perf kwork report -i perf_no_exist.data > failed to open perf_no_exist.data: No such file or directory > > # perf kwork report --time 00FFF, > Invalid time span > > Since there are no report supported events, the output is empty. > > Briefly describe the data structure: > 1. "class" indicates event type. For example, irq and softiq correspond > to different types. > 2. "cluster" refers to a specific event corresponding to a type. For > example, RCU and TIMER in softirq correspond to different clusters, > which contains three types of events: raise, entry, and exit.
Maybe I'm too late... but it's now "work", right?
> 3. "atom" includes time of each sample and sample of the previous phase. > (For example, exit corresponds to entry, which is used for timehist.) > > Signed-off-by: Yang Jihong <yangjihong1@huawei.com> > --- > tools/perf/Documentation/perf-kwork.txt | 33 + > tools/perf/builtin-kwork.c | 859 +++++++++++++++++++++++- > tools/perf/util/kwork.h | 161 +++++ > 3 files changed, 1051 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/Documentation/perf-kwork.txt b/tools/perf/Documentation/perf-kwork.txt > index c5b52f61da99..b79b2c0d047e 100644 > --- a/tools/perf/Documentation/perf-kwork.txt > +++ b/tools/perf/Documentation/perf-kwork.txt > @@ -17,8 +17,11 @@ There are several variants of 'perf kwork': > 'perf kwork record <command>' to record the kernel work > of an arbitrary workload. > > + 'perf kwork report' to report the per kwork runtime. > + > Example usage: > perf kwork record -- sleep 1 > + perf kwork report > > OPTIONS > ------- > @@ -38,6 +41,36 @@ OPTIONS > --verbose:: > Be more verbose. (show symbol address, etc) > > +OPTIONS for 'perf kwork report' > +---------------------------- > + > +-C:: > +--cpu:: > + Only show events for the given CPU(s) (comma separated list). > + > +-i:: > +--input:: > + Input file name. (default: perf.data unless stdin is a fifo) > + > +-n:: > +--name:: > + Only show events for the given name. > + > +-s:: > +--sort:: > + Sort by key(s): runtime, max, count > + > +-S:: > +--with-summary:: > + Show summary with statistics > + > +--time:: > + Only analyze samples within given time window: <start>,<stop>. Times > + have the format seconds.microseconds. If start is not given (i.e., time > + string is ',x.y') then analysis starts at the beginning of the file. If > + stop time is not given (i.e, time string is 'x.y,') then analysis goes > + to end of file. > + > SEE ALSO > -------- > linkperf:perf-record[1] > diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c > index 8086236b7513..9c488d647995 100644 > --- a/tools/perf/builtin-kwork.c > +++ b/tools/perf/builtin-kwork.c > @@ -25,6 +25,460 @@ > #include <linux/time64.h> > #include <linux/zalloc.h> > > +/* > + * report header elements width > + */ > +#define PRINT_CPU_WIDTH 4 > +#define PRINT_COUNT_WIDTH 9 > +#define PRINT_RUNTIME_WIDTH 10 > +#define PRINT_TIMESTAMP_WIDTH 17 > +#define PRINT_KWORK_NAME_WIDTH 30 > +#define RPINT_DECIMAL_WIDTH 3 > +#define PRINT_TIME_UNIT_SEC_WIDTH 2 > +#define PRINT_TIME_UNIT_MESC_WIDTH 3
MSEC ?
Thanks, Namhyung
> +#define PRINT_RUNTIME_HEADER_WIDTH (PRINT_RUNTIME_WIDTH + PRINT_TIME_UNIT_MESC_WIDTH) > +#define PRINT_TIMESTAMP_HEADER_WIDTH (PRINT_TIMESTAMP_WIDTH + PRINT_TIME_UNIT_SEC_WIDTH) > +
| |