• P
    sched/clock, x86: Rewrite cyc2ns() to avoid the need to disable IRQs · 20d1c86a
    Peter Zijlstra 提交于
    Use a ring-buffer like multi-version object structure which allows
    always having a coherent object; we use this to avoid having to
    disable IRQs while reading sched_clock() and avoids a problem when
    getting an NMI while changing the cyc2ns data.
    
                            MAINLINE   PRE        POST
    
        sched_clock_stable: 1          1          1
        (cold) sched_clock: 329841     331312     257223
        (cold) local_clock: 301773     310296     309889
        (warm) sched_clock: 38375      38247      25280
        (warm) local_clock: 100371     102713     85268
        (warm) rdtsc:       27340      27289      24247
        sched_clock_stable: 0          0          0
        (cold) sched_clock: 382634     372706     301224
        (cold) local_clock: 396890     399275     399870
        (warm) sched_clock: 38194      38124      25630
        (warm) local_clock: 143452     148698     129629
        (warm) rdtsc:       27345      27365      24307
    Signed-off-by: NPeter Zijlstra <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Link: http://lkml.kernel.org/n/tip-s567in1e5ekq2nlyhn8f987r@git.kernel.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
    20d1c86a
tsc.c 31.1 KB