• J
    perf report: Use properly build_id kernel binaries · f57b05ed
    Jiri Olsa 提交于
    If we bring the recorded perf data together with kernel binary from another
    machine using:
    
    	on server A:
    	perf archive
    
    	on server B:
    	tar xjvf perf.data.tar.bz2 -C ~/.debug
    
    the build_id kernel dso is not properly recognized during the "perf report"
    command on server B.
    
    The reason is, that build_id dsos are added during the session initialization,
    while the kernel maps are created during the sample event processing.
    
    The machine__create_kernel_maps functions ends up creating new dso object for
    kernel, but it does not check if we already have one added by build_id
    processing.
    
    Also the build_id reading ABI quirk added in commit:
    
     - commit b2511481
       perf build-id: Add quirk to deal with perf.data file format breakage
    
    populates the "struct build_id_event::pid" with 0, which
    is later interpreted as DEFAULT_GUEST_KERNEL_ID.
    
    This is not always correct, so it's better to guess the pid
    value based on the "struct build_id_event::header::misc" value.
    
    - Tested with data generated on x86 kernel version v2.6.34
      and reported back on x86_64 current kernel.
    - Not tested for guest kernel case.
    
    Note the problem stays for PERF_RECORD_MMAP events recorded by perf that
    does not use proper pid (HOST_KERNEL_ID/DEFAULT_GUEST_KERNEL_ID). They are
    misinterpreted within the current perf code. Probably there's not much we
    can do about that.
    
    Cc: Avi Kivity <avi@redhat.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Yanmin Zhang <yanmin_zhang@linux.intel.com>
    Link: http://lkml.kernel.org/r/20110601194346.GB1934@jolsa.brq.redhat.comSigned-off-by: NJiri Olsa <jolsa@redhat.com>
    Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    f57b05ed
header.c 28.5 KB