• Jin Yao's avatar
    perf header: Add infrastructure to record first and last sample time · 6011518d
    Jin Yao authored
    perf report/script/... have a --time option to limit the time range of
    output. That's very useful to slice large traces, e.g. when processing
    the output of perf script for some analysis.
    
    But right now --time only supports absolute time. Also there is no fast
    way to get the start/end times of a given trace except for looking at
    it.  This makes it hard to e.g. only decode the first half of the trace,
    which is useful for parallelization of scripts
    
    Another problem is that perf records are variable size and there is no
    synchronization mechanism. So the only way to find the last sample
    reliably would be to walk all samples. But we want to avoid that in perf
    report/...  because it is already quite expensive. That is why storing
    the first sample time and last sample time in perf record is better.
    
    This patch creates a new header feature type HEADER_SAMPLE_TIME and
    related ops. Save the first sample time and the last sample time to the
    feature section in perf file header. That will be done when, for
    instance, processing build-ids, where we already have to process all
    samples to create the build-id table, take advantage of that to further
    amortize that processing by storing HEADER_SAMPLE_TIME to make 'perf
    report/script' faster when using --time.
    
    Committer testing:
    
    After this patch is applied the header is written with zeroes, we need
    the next patch, for "perf record" to actually write the timestamps:
    
      # perf report -D | grep PERF_RECORD_SAMPLE\(
      22501155244406 0x44f0 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 25016/25016: 0xffffffffa21be8c5 period: 1 addr: 0
      <SNIP>
      22501155793625 0x4a30 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 25016/25016: 0xffffffffa21ffd50 period: 2828043 addr: 0
      # perf report --header | grep "time of "
      # time of first sample : 0.000000
      # time of last sample : 0.000000
      #
    
    Changelog:
    
    v7: 1. Rebase to latest perf/core branch.
    
        2. Add following clarification in patch description according to
           Arnaldo's suggestion.
    
           "That will be done when, for instance, processing build-ids,
    	where we already have to process all samples to create the
    	build-id table, take advantage of that to further amortize
    	that processing by storing HEADER_SAMPLE_TIME to make
    	'perf report/script' faster when using --time."
    
    v4: Use perf script time style for timestamp printing. Also add with
        the printing of sample duration.
    
    v3: Remove the definitions of first_sample_time/last_sample_time from
        perf_session. Just define them in perf_evlist
    Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    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: Kan Liang <kan.liang@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/1512738826-2628-2-git-send-email-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    6011518d
evlist.h 10.8 KB