• Arnaldo Carvalho de Melo's avatar
    perf trace: Hook the 'vec' tracepoint argument with the x86 IRQ vectors scnprintf/strtoul · df604bfd
    Arnaldo Carvalho de Melo authored
    Ended up only being useful when filtering multiple irq_vectors
    tracepoints, as we end up having a tracepoint for each of the entries,
    i.e.:
    
    This will always come with the "RESCHEDULE_VECTOR" in the 'vector' arg:
    
      # perf trace --max-events 8 -e irq_vectors:reschedule*
         0.000 cc1/29067 irq_vectors:reschedule_entry(vector: RESCHEDULE)
         0.004 cc1/29067 irq_vectors:reschedule_exit(vector: RESCHEDULE)
         0.553 cc1/29067 irq_vectors:reschedule_entry(vector: RESCHEDULE)
         0.556 cc1/29067 irq_vectors:reschedule_exit(vector: RESCHEDULE)
         1.182 cc1/29067 irq_vectors:reschedule_entry(vector: RESCHEDULE)
         1.185 cc1/29067 irq_vectors:reschedule_exit(vector: RESCHEDULE)
         1.203 :29052/29052 irq_vectors:reschedule_entry(vector: RESCHEDULE)
         1.206 :29052/29052 irq_vectors:reschedule_exit(vector: RESCHEDULE)
      #
    
    While filtering that value will produce nothing:
    
      # perf trace --max-events 8 -e irq_vectors:reschedule* --filter="vector != RESCHEDULE"
      ^C#
    
    Maybe it'll be useful for those other tracepoints:
    
      # perf list irq_vectors:vector_*
    
      List of pre-defined events (to be used in -e):
    
        irq_vectors:vector_activate                        [Tracepoint event]
        irq_vectors:vector_alloc                           [Tracepoint event]
        irq_vectors:vector_alloc_managed                   [Tracepoint event]
        irq_vectors:vector_clear                           [Tracepoint event]
        irq_vectors:vector_config                          [Tracepoint event]
        irq_vectors:vector_deactivate                      [Tracepoint event]
        irq_vectors:vector_free_moved                      [Tracepoint event]
        irq_vectors:vector_reserve                         [Tracepoint event]
        irq_vectors:vector_reserve_managed                 [Tracepoint event]
        irq_vectors:vector_setup                           [Tracepoint event]
        irq_vectors:vector_teardown                        [Tracepoint event]
        irq_vectors:vector_update                          [Tracepoint event]
      #
    
    But since we have it done, keep it.
    
    This at least served to teach me that all those irq vectors have a entry
    and an exit tracepoint that I can then use just like with
    raw_syscalls:sys_{enter,exit}, i.e. pair them, use just a
    trace__irq_vectors_entry() + trace__irq_vectors_exit() and use the
    'vector' arg as I use the 'syscall id' one for syscalls.
    
    Then the default for 'perf trace' will include irq_vectors in addition
    to syscalls.
    
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Luis Cláudio Gonçalves <lclaudio@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Link: https://lkml.kernel.org/n/tip-wer4cwbbqub3o7sa8h1j3uzb@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    df604bfd
builtin-trace.c 141 KB