• Namhyung Kim's avatar
    perf: Reset hwc->last_period on sw clock events · 778141e3
    Namhyung Kim authored
    When cpu/task clock events are initialized, their sampling
    frequencies are converted to have a fixed value.  However it
    missed to update the hwc->last_period which was set to 1 for
    initial sampling frequency calibration.
    
    Because this hwc->last_period value is used as a period in
    perf_swevent_ hrtime(), every recorded sample will have an
    incorrected period of 1.
    
      $ perf record -e task-clock noploop 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.158 MB perf.data (~6919 samples) ]
    
      $ perf report -n --show-total-period  --stdio
      # Samples: 4K of event 'task-clock'
      # Event count (approx.): 4000
      #
      # Overhead       Samples        Period  Command  Shared Object              Symbol
      # ........  ............  ............  .......  .............  ..................
      #
          99.95%          3998          3998  noploop  noploop        [.] main
           0.03%             1             1  noploop  libc-2.15.so   [.] init_cacheinfo
           0.03%             1             1  noploop  ld-2.15.so     [.] open_verify
    
    Note that it doesn't affect the non-sampling event so that the
    perf stat still gets correct value with or without this patch.
    
      $ perf stat -e task-clock noploop 1
    
       Performance counter stats for 'noploop 1':
    
             1000.272525 task-clock                #    1.000 CPUs utilized
    
             1.000560605 seconds time elapsed
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung.kim@lge.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1363574507-18808-1-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    778141e3
core.c 174 KB