• Jin Yao's avatar
    perf annotate: Check for fused instructions · 69fb09f6
    Jin Yao authored
    Macro fusion merges two instructions to a single micro-op. Intel core
    platform performs this hardware optimization under limited
    circumstances.
    
    For example, CMP + JCC can be "fused" and executed /retired together.
    While with sampling this can result in the sample sometimes being on the
    JCC and sometimes on the CMP.  So for the fused instruction pair, they
    could be considered together.
    
    On Nehalem, fused instruction pairs:
    
      cmp/test + jcc.
    
    On other new CPU:
    
      cmp/test/add/sub/and/inc/dec + jcc.
    
    This patch adds an x86-specific function which checks if 2 instructions
    are in a "fused" pair. For non-x86 arch, the function is just NULL.
    
    Changelog:
    
    v4: Move the CPU model checking to symbol__disassemble and save the CPU
        family/model in arch structure.
    
        It avoids checking every time when jump arrow printed.
    
    v3: Add checking for Nehalem (CMP, TEST). For other newer Intel CPUs
        just check it by default (CMP, TEST, ADD, SUB, AND, INC, DEC).
    
    v2: Remove the original weak function. Arnaldo points out that doing it
        as a weak function that will be overridden by the host arch doesn't
        work. So now it's implemented as an arch-specific function.
    
    Committer fix:
    
    Do not access evsel->evlist->env->cpuid, ->env can be null, introduce
    perf_evsel__env_cpuid(), just like perf_evsel__env_arch(), also used in
    this function call.
    
    The original patch was segfaulting 'perf top' + annotation.
    
    But this essentially disables this fused instructions augmentation in
    'perf top', the right thing is to get the cpuid from the running kernel,
    left for a later patch tho.
    Signed-off-by: default avatarYao Jin <yao.jin@linux.intel.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/1499403995-19857-2-git-send-email-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    69fb09f6
instructions.c 3.95 KB