• J
    perf/core: Define the common branch type classification · eb0baf8a
    Jin Yao 提交于
    It is often useful to know the branch types while analyzing branch data.
    For example, a call is very different from a conditional branch.
    
    Currently we have to look it up in binary while the binary may later not
    be available and even the binary is available but user has to take some
    time. It is very useful for user to check it directly in perf report.
    
    Perf already has support for disassembling the branch instruction to get
    the x86 branch type.
    
    To keep consistent on kernel and userspace and make the classification
    more common, the patch adds the common branch type classification
    in perf_event.h.
    
    The patch only defines a minimum but most common set of branch types.
    
    PERF_BR_UNKNOWN         : unknown
    PERF_BR_COND            :conditional
    PERF_BR_UNCOND          : unconditional
    PERF_BR_IND             : indirect
    PERF_BR_CALL            : function call
    PERF_BR_IND_CALL        : indirect function call
    PERF_BR_RET             : function return
    PERF_BR_SYSCALL         : syscall
    PERF_BR_SYSRET          : syscall return
    PERF_BR_COND_CALL       : conditional function call
    PERF_BR_COND_RET        : conditional function return
    
    The patch also adds a new field type (4 bits) in perf_branch_entry
    to record the branch type.
    
    Since the disassembling of branch instruction needs some overhead,
    a new PERF_SAMPLE_BRANCH_TYPE_SAVE is introduced to indicate if it
    needs to disassemble the branch instruction and record the branch
    type.
    
    Change log:
    
    v10: Not changed.
    
    v9: Not changed.
    
    v8: Change PERF_BR_NONE to PERF_BR_UNKNOWN.
        No other change.
    
    v7: Just keep the most common branch types.
        Others are removed.
    
    v6: Not changed.
    
    v5: Not changed. The v5 patch series just change the userspace.
    
    v4: Comparing to previous version, the major changes are:
    
    1. Remove the PERF_BR_JCC_FWD/PERF_BR_JCC_BWD, they will be
       computed later in userspace.
    
    2. Remove the "cross" field in perf_branch_entry. The cross page
       computing will be done later in userspace.
    Signed-off-by: NYao Jin <yao.jin@linux.intel.com>
    Acked-by: NJiri Olsa <jolsa@kernel.org>
    Acked-by: NMichael Ellerman <mpe@ellerman.id.au>
    Acked-by: NPeter Zijlstra <peterz@infradead.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Kan Liang <kan.liang@intel.com>
    Link: http://lkml.kernel.org/r/1500379995-6449-2-git-send-email-yao.jin@linux.intel.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    eb0baf8a
perf_event.h 29.7 KB