• Sandipan Das's avatar
    perf script: Show branch speculation info · 6ade6c64
    Sandipan Das authored
    Show the branch speculation info if provided by the branch recording
    hardware feature. This can be useful for optimizing code further.
    
    The speculation info is appended to the end of the list of fields so any
    existing tools that use "/" as a delimiter for access fields via an index
    remain unaffected. Also show "-" instead of "N/A" when speculation info
    is unavailable because "/" is used as the field separator.
    
    E.g.
    
      $ perf record -j any,u,save_type ./test_branch
      $ perf script --fields brstacksym
    
    Before:
    
      [...]
      check_match+0x60/strcmp+0x0/P/-/-/0/CALL
      do_lookup_x+0x3c5/check_match+0x0/P/-/-/0/CALL
      [...]
    
    After:
    
      [...]
      check_match+0x60/strcmp+0x0/P/-/-/0/CALL/NON_SPEC_CORRECT_PATH
      do_lookup_x+0x3c5/check_match+0x0/P/-/-/0/CALL/NON_SPEC_CORRECT_PATH
      [...]
    
    The bitfield swapping scheme used duing sample parsing has changed
    because of the addition of new branch flags, namely "spec", "new_type"
    and "priv". Earlier, these were all part of the "reserved" field but
    now, each of these fields get swapped separately. Change the expected
    flag values accordingly for the test to pass.
    
    E.g.
    
      $ perf test -v 27
    
    Before:
    
       27: Sample parsing                                                  :
      --- start ---
      test child forked, pid 61979
      parsing failed for sample_type 0x800
      test child finished with -1
      ---- end ----
      Sample parsing: FAILED!
    
    After:
    
       27: Sample parsing                                                  :
      --- start ---
      test child forked, pid 63293
      test child finished with 0
      ---- end ----
      Sample parsing: Ok
    Signed-off-by: default avatarSandipan Das <sandipan.das@amd.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ananth Narayan <ananth.narayan@amd.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@arm.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kajol Jain <kjain@linux.ibm.com>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ravi Bangoria <ravi.bangoria@amd.com>
    Cc: Santosh Shukla <santosh.shukla@amd.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Thomas Richter <tmricht@linux.ibm.com>
    Cc: x86@kernel.org
    Link: https://lore.kernel.org/r/56e272583552526e999ba0b536ac009ae3613966.1675333809.git.sandipan.das@amd.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    6ade6c64
branch.c 4.7 KB