• Jin Yao's avatar
    perf record: Record the first and last sample time in the header · 68588baf
    Jin Yao authored
    In the default 'perf record' configuration, all samples are processed,
    to create the HEADER_BUILD_ID table. So it's very easy to get the
    first/last samples and save the time to perf file header via the
    function write_sample_time().
    
    Later, at post processing time, perf report/script will fetch the time
    from perf file header.
    
    Committer testing:
    
      # perf record -a sleep 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 2.099 MB perf.data (1101 samples) ]
      [root@jouet home]# perf report --header | grep "time of "
      # time of first sample : 22947.909226
      # time of last sample : 22948.910704
      #
      # perf report -D | grep PERF_RECORD_SAMPLE\(
      0 22947909226101 0x20bb68 [0x30]: PERF_RECORD_SAMPLE(IP, 0x4001): 0/0: 0xffffffffa21b1af3 period: 1 addr: 0
      0 22947909229928 0x20bb98 [0x30]: PERF_RECORD_SAMPLE(IP, 0x4001): 0/0: 0xffffffffa200d204 period: 1 addr: 0
      <SNIP>
      3 22948910397351 0x219360 [0x30]: PERF_RECORD_SAMPLE(IP, 0x4001): 28251/28251: 0xffffffffa22071d8 period: 169518 addr: 0
      0 22948910652380 0x20f120 [0x30]: PERF_RECORD_SAMPLE(IP, 0x4001): 0/0: 0xffffffffa2856816 period: 198807 addr: 0
      2 22948910704034 0x2172d0 [0x30]: PERF_RECORD_SAMPLE(IP, 0x4001): 0/0: 0xffffffffa2856816 period: 88111 addr: 0
      #
    
    Changelog:
    
    v7: Just update the patch description according to Arnaldo's suggestion.
    
    v6: Currently '--buildid-all' is not enabled at default. So the walking
        on all samples is the default operation. There is no big overhead
        to calculate the timestamp boundary in process_sample_event handler
        once we already go through all samples. So the timestamp boundary
        calculation is enabled by default when '--buildid-all' is not enabled.
    
        While if '--buildid-all' is enabled, we creates a new option
        "--timestamp-boundary" for user to decide if it enables the
        timestamp boundary calculation.
    
    v5: There is an issue that the sample walking can only work when
        '--buildid-all' is not enabled. So we need to let the walking
        be able to work even if '--buildid-all' is enabled and let the
        processing skips the dso hit marking for this case.
    
        At first, I want to provide a new option "--record-time-boundaries".
        While after consideration, I think a new option is not very
        necessary.
    
    v3: Remove the definitions of first_sample_time and last_sample_time
        from struct record and directly save 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-3-git-send-email-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    68588baf
builtin-record.c 48.7 KB