Re: [PATCH v1 1/2] perf build: Require libtraceevent from the system

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Fri, Nov 18, 2022 at 10:33:02AM -0500, Steven Rostedt escreveu:
> On Fri, 18 Nov 2022 12:02:38 -0300 Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> wrote:
 
> > yeah, this probably should work like with other libraries, don't stop
> > the build, just don't build features that depend on libtraceevent,
> > warning the user that features foo, bar and baz won't be available.

> > For people working with just hardware, software, cache events, no
> > problem.
 
> How are software events parsed?

Not parsed, fixed:

root@roc-rk3399-pc:~# perf list sw

List of pre-defined events (to be used in -e or -M):

  alignment-faults                                   [Software event]
  bpf-output                                         [Software event]
  cgroup-switches                                    [Software event]
  context-switches OR cs                             [Software event]
  cpu-clock                                          [Software event]
  cpu-migrations OR migrations                       [Software event]
  dummy                                              [Software event]
  emulation-faults                                   [Software event]
  major-faults                                       [Software event]
  minor-faults                                       [Software event]
  page-faults OR faults                              [Software event]
  task-clock                                         [Software event]

  duration_time                                      [Tool event]
  user_time                                          [Tool event]
  system_time                                        [Tool event]

root@roc-rk3399-pc:~#


In addition to:

root@roc-rk3399-pc:~# perf list hw

List of pre-defined events (to be used in -e or -M):

  branch-instructions OR branches                    [Hardware event]
  branch-misses                                      [Hardware event]
  bus-cycles                                         [Hardware event]
  cache-misses                                       [Hardware event]
  cache-references                                   [Hardware event]
  cpu-cycles OR cycles                               [Hardware event]
  instructions                                       [Hardware event]

root@roc-rk3399-pc:~#

And:

root@roc-rk3399-pc:~# perf list cache

List of pre-defined events (to be used in -e or -M):

  L1-dcache-load-misses                              [Hardware cache event]
  L1-dcache-loads                                    [Hardware cache event]
  L1-dcache-prefetch-misses                          [Hardware cache event]
  L1-dcache-store-misses                             [Hardware cache event]
  L1-dcache-stores                                   [Hardware cache event]
  L1-icache-load-misses                              [Hardware cache event]
  L1-icache-loads                                    [Hardware cache event]
  branch-load-misses                                 [Hardware cache event]
  branch-loads                                       [Hardware cache event]
  dTLB-load-misses                                   [Hardware cache event]
  dTLB-store-misses                                  [Hardware cache event]
  iTLB-load-misses                                   [Hardware cache event]
  node-loads                                         [Hardware cache event]
  node-stores                                        [Hardware cache event]

root@roc-rk3399-pc:~#

Without something like libtraceevent 'perf probe', 'perf trace' wouldn't
work as of now, as it currently use libtraceevent to parse whats in
tracefs.

So for some people, just interested in profiling the above hw, sw and
cache events, libtraceevent isn't strictly required and may even be
desirable to reduce the number of library dependencies.

So its a valid feature to allow perf to be built without libtraceevent,
i.e. not something needed for the above scenarios.

With libbpf and BTF tracefs isn't also strictly needed, as we already
have to link with it and things like 'perf trace' want to use libbpf's
btf pretty printing stuff, we can use BTF to enumerate events, iterate
thru its fields, offsets, types, etc:

root@roc-rk3399-pc:~# pahole --sizes | grep trace_event_raw_sched
trace_event_raw_sched_kthread_stop	28	0
trace_event_raw_sched_kthread_stop_ret	12	0
trace_event_raw_sched_kthread_work_queue_work	32	0
trace_event_raw_sched_kthread_work_execute_start	24	0
trace_event_raw_sched_kthread_work_execute_end	24	0
trace_event_raw_sched_wakeup_template	36	0
trace_event_raw_sched_switch	64	0
trace_event_raw_sched_migrate_task	40	0
trace_event_raw_sched_process_template	32	0
trace_event_raw_sched_process_wait	32	0
trace_event_raw_sched_process_fork	48	0
trace_event_raw_sched_process_exec	20	0
trace_event_raw_sched_stat_runtime	48	1
trace_event_raw_sched_pi_setprio	36	0
trace_event_raw_sched_move_numa	36	0
trace_event_raw_sched_numa_pair_template	48	0
trace_event_raw_sched_wake_idle_without_ipi	12	0
root@roc-rk3399-pc:~#

root@roc-rk3399-pc:~# pahole trace_event_raw_sched_switch
struct trace_event_raw_sched_switch {
	struct trace_entry         ent;                  /*     0     8 */
	char                       prev_comm[16];        /*     8    16 */
	pid_t                      prev_pid;             /*    24     4 */
	int                        prev_prio;            /*    28     4 */
	long int                   prev_state;           /*    32     8 */
	char                       next_comm[16];        /*    40    16 */
	pid_t                      next_pid;             /*    56     4 */
	int                        next_prio;            /*    60     4 */
	/* --- cacheline 1 boundary (64 bytes) --- */
	char                       __data[];             /*    64     0 */

	/* size: 64, cachelines: 1, members: 9 */
};
root@roc-rk3399-pc:~#

- Arnaldo



[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux