Skip to content
  • Peter Zijlstra's avatar
    sched_clock: fix cpu_clock() · 354879bb
    Peter Zijlstra authored
    
    
    This patch fixes 3 issues:
    
    a) it removes the dependency on jiffies, because jiffies are incremented
       by a single CPU, and the tick is not synchronized between CPUs. Therefore
       relying on it to calculate a window to clip whacky TSC values doesn't work
       as it can drift around.
    
       So instead use [GTOD, GTOD+TICK_NSEC) as the window.
    
    b) __update_sched_clock() did (roughly speaking):
    
       delta = sched_clock() - scd->tick_raw;
       clock += delta;
    
       Which gives exponential growth, instead of linear.
    
    c) allows the sched_clock_cpu() value to warp the u64 without breaking.
    
    the results are more reliable sched_clock() deltas:
    
               before       after   sched_clock
    
    cpu_clock: 15750        51312   51488
    cpu_clock: 59719        51052   50947
    cpu_clock: 15879        51249   51061
    cpu_clock: 1            50933   51198
    cpu_clock: 1            50931   51039
    cpu_clock: 1            51093   50981
    cpu_clock: 1            51043   51040
    cpu_clock: 1            50959   50938
    cpu_clock: 1            50981   51011
    cpu_clock: 1            51364   51212
    cpu_clock: 1            51219   51273
    cpu_clock: 1            51389   51048
    cpu_clock: 1            51285   51611
    cpu_clock: 1            50964   51137
    cpu_clock: 1            50973   50968
    cpu_clock: 1            50967   50972
    cpu_clock: 1            58910   58485
    cpu_clock: 1            51082   51025
    cpu_clock: 1            50957   50958
    cpu_clock: 1            50958   50957
    cpu_clock: 1006128      51128   50971
    cpu_clock: 1            51107   51155
    cpu_clock: 1            51371   51081
    cpu_clock: 1            51104   51365
    cpu_clock: 1            51363   51309
    cpu_clock: 1            51107   51160
    cpu_clock: 1            51139   51100
    cpu_clock: 1            51216   51136
    cpu_clock: 1            51207   51215
    cpu_clock: 1            51087   51263
    cpu_clock: 1            51249   51177
    cpu_clock: 1            51519   51412
    cpu_clock: 1            51416   51255
    cpu_clock: 1            51591   51594
    cpu_clock: 1            50966   51374
    cpu_clock: 1            50966   50966
    cpu_clock: 1            51291   50948
    cpu_clock: 1            50973   50867
    cpu_clock: 1            50970   50970
    cpu_clock: 998306       50970   50971
    cpu_clock: 1            50971   50970
    cpu_clock: 1            50970   50970
    cpu_clock: 1            50971   50971
    cpu_clock: 1            50970   50970
    cpu_clock: 1            51351   50970
    cpu_clock: 1            50970   51352
    cpu_clock: 1            50971   50970
    cpu_clock: 1            50970   50970
    cpu_clock: 1            51321   50971
    cpu_clock: 1            50974   51324
    
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    354879bb