1. 17 3月, 2012 3 次提交
    • J
      perf tools: Add perf pmu object to access pmu format definition · cd82a32e
      Jiri Olsa 提交于
      Adding pmu object which provides interface to pmu's sysfs
      event format definition located at:
        ${sysfs_mount}/bus/event_source/devices/${pmu}/format
      
      Following interface is exported:
        struct perf_pmu* perf_pmu__find(char *name);
        - this function returns pmu object, which is then
          passed as a handle to other interface functions
      
        int perf_pmu__config(struct perf_pmu *pmu, struct perf_event_attr *attr,
                             struct list_head *head_terms);
        - this function configures perf_event_attr struct based
          on pmu's format definitions and config terms data,
          containined in head_terms list.
      
      Parser generator is used to retrive the pmu's format definition.
      The generated parser is part of the patch. Added makefile rule
      'pmu-parser' to generate the parser code out of the bison/flex
      sources.
      
      Added builtin test 'Test perf pmu format parsing', which could
      be run like:
      	perf test pmu
      Acked-by: NPeter Zijlstra <peterz@infradead.org>
      Signed-off-by: NJiri Olsa <jolsa@redhat.com>
      Link: http://lkml.kernel.org/n/tip-errz96u1668gj9wlop1zhpht@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      cd82a32e
    • J
      perf tools: Add config options support for event parsing · 8f707d84
      Jiri Olsa 提交于
      Adding a new rule to the event grammar to be able to specify
      values of additional attributes of symbolic event.
      
      The new syntax for event symbolic definition is:
      
      event_legacy_symbol:  PE_NAME_SYM '/' event_config '/' |
                            PE_NAME_SYM sep_slash_dc
      
      event_config:         event_config ',' event_term | event_term
      
      event_term:           PE_NAME '=' PE_NAME |
                            PE_NAME '=' PE_VALUE
                            PE_NAME
      
      sep_slash_dc: '/' | ':' |
      
      At the moment the config options are hardcoded to be used for legacy
      symbol events to define several perf_event_attr fields. It is:
      
        'config'   to define perf_event_attr::config
        'config1'  to define perf_event_attr::config1
        'config2'  to define perf_event_attr::config2
        'period'   to define perf_event_attr::sample_period
      
      Legacy events could be now specified as:
        cycles/period=100000/
      
      If term is specified without the value assignment, then 1 is
      assigned by default.
      Acked-by: NPeter Zijlstra <peterz@infradead.org>
      Signed-off-by: NJiri Olsa <jolsa@redhat.com>
      Link: http://lkml.kernel.org/n/tip-mgkavww9790jbt2jdkooyv4q@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      8f707d84
    • J
      perf tools: Add parser generator for events parsing · 89812fc8
      Jiri Olsa 提交于
      Changing event parsing to use flex/bison parse generator.
      The event syntax stays as it was.
      
      grammar description:
      
      events: events ',' event | event
      
      event:  event_def PE_MODIFIER_EVENT | event_def
      
      event_def: event_legacy_symbol sep_dc     |
                 event_legacy_cache sep_dc      |
                 event_legacy_breakpoint sep_dc |
                 event_legacy_tracepoint sep_dc |
                 event_legacy_numeric sep_dc    |
                 event_legacy_raw sep_dc
      
      event_legacy_symbol:      PE_NAME_SYM
      
      event_legacy_cache:       PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT '-' PE_NAME_CACHE_OP_RESULT |
                                PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT  |
                                PE_NAME_CACHE_TYPE
      
      event_legacy_raw:         PE_SEP_RAW PE_VALUE
      
      event_legacy_numeric:     PE_VALUE ':' PE_VALUE
      
      event_legacy_breakpoint:  PE_SEP_BP ':' PE_VALUE ':' PE_MODIFIER_BP
      
      event_breakpoint_type:    PE_MODIFIER_BPTYPE | empty
      
      PE_NAME_SYM:              cpu-cycles|cycles                              |
                                stalled-cycles-frontend|idle-cycles-frontend   |
                                stalled-cycles-backend|idle-cycles-backend     |
                                instructions                                   |
                                cache-references                               |
                                cache-misses                                   |
                                branch-instructions|branches                   |
                                branch-misses                                  |
                                bus-cycles                                     |
                                cpu-clock                                      |
                                task-clock                                     |
                                page-faults|faults                             |
                                minor-faults                                   |
                                major-faults                                   |
                                context-switches|cs                            |
                                cpu-migrations|migrations                      |
                                alignment-faults                               |
                                emulation-faults
      
      PE_NAME_CACHE_TYPE:       L1-dcache|l1-d|l1d|L1-data             |
                                L1-icache|l1-i|l1i|L1-instruction      |
                                LLC|L2                                 |
                                dTLB|d-tlb|Data-TLB                    |
                                iTLB|i-tlb|Instruction-TLB             |
                                branch|branches|bpu|btb|bpc            |
                                node
      
      PE_NAME_CACHE_OP_RESULT:  load|loads|read                        |
                                store|stores|write                     |
                                prefetch|prefetches                    |
                                speculative-read|speculative-load      |
                                refs|Reference|ops|access              |
                                misses|miss
      
      PE_MODIFIER_EVENT:        [ukhp]{0,5}
      
      PE_MODIFIER_BP:           [rwx]
      
      PE_SEP_BP:                'mem'
      
      PE_SEP_RAW:               'r'
      
      sep_dc:                   ':' |
      
      Added flex/bison files for event grammar parsing. The generated
      parser is part of the patch. Added makefile rule 'event-parser'
      to generate the parser code out of the bison/flex sources.
      Acked-by: NPeter Zijlstra <peterz@infradead.org>
      Signed-off-by: NJiri Olsa <jolsa@redhat.com>
      Link: http://lkml.kernel.org/n/tip-u4pfig5waq3ll2bfcdex8fgi@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      89812fc8