• J
    perf session: Handle endianity swap on sample_id_all header data · 268fb20f
    Jiri Olsa 提交于
    Adding endianity swapping for event header attached via sample_id_all.
    
    Currently we dont do that and it's causing wrong data to be read when
    running report on architecture with different endianity than the record.
    
    The perf is currently able to process 32-bit PPC samples on 32-bit
    and 64-bit x86.
    
    Together with other endianity patches, this change fixies perf report
    discrepancies on origin and target systems as described in test 1
    below, e.g. following perf report diff:
    
    ...
          0.12%               ps  [kernel.kallsyms]    [k] clear_page
    -     0.12%              awk  bash                 [.] alloc_word_desc
    +     0.12%              awk  bash                 [.] yyparse
          0.11%   beah-rhts-task  libpython2.6.so.1.0  [.] 0x5560e
          0.10%             perf  libc-2.12.so         [.] __ctype_toupper_loc
    -     0.09%  rhts-test-runne  bash                 [.] maybe_make_export_env
    +     0.09%  rhts-test-runne  bash                 [.] 0x385a0
          0.09%               ps  [kernel.kallsyms]    [k] page_fault
    ...
    
    Note, running following to test perf endianity handling:
    test 1)
      - origin system:
        # perf record -a -- sleep 10 (any perf record will do)
        # perf report > report.origin
        # perf archive perf.data
    
      - copy the perf.data, report.origin and perf.data.tar.bz2
        to a target system and run:
        # tar xjvf perf.data.tar.bz2 -C ~/.debug
        # perf report > report.target
        # diff -u report.origin report.target
    
      - the diff should produce no output
        (besides some white space stuff and possibly different
         date/TZ output)
    
    test 2)
      - origin system:
        # perf record -ag -fo /tmp/perf.data -- sleep 1
      - mount origin system root to the target system on /mnt/origin
      - target system:
        # perf script --symfs /mnt/origin -I -i /mnt/origin/tmp/perf.data \
         --kallsyms /mnt/origin/proc/kallsyms
      - complete perf.data header is displayed
    Signed-off-by: NJiri Olsa <jolsa@redhat.com>
    Reviewed-by: NDavid Ahern <dsahern@gmail.com>
    Tested-by: NDavid Ahern <dsahern@gmail.com>
    Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1338380624-7443-3-git-send-email-jolsa@redhat.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    268fb20f
session.c 41.0 KB