• Peter Zijlstra's avatar
    sched/preempt: Add static_key() to preempt_notifiers · 1cde2930
    Peter Zijlstra authored
    Avoid touching the curr->preempt_notifier cacheline when not needed.
    
    Provides a small improvement on pipe-bench:
    
      taskset 01 perf stat --repeat 10 -- perf bench sched pipe
    
    before:
    
     Performance counter stats for 'perf bench sched pipe' (10 runs):
    
          12385.016204      task-clock (msec)         #    1.001 CPUs utilized            ( +-  0.34% )
             2,000,023      context-switches          #    0.161 M/sec                    ( +-  0.00% )
                     0      cpu-migrations            #    0.000 K/sec
                   175      page-faults               #    0.014 K/sec                    ( +-  0.26% )
        41,376,162,250      cycles                    #    3.341 GHz                      ( +-  0.11% )
        17,389,139,321      stalled-cycles-frontend   #   42.03% frontend cycles idle     ( +-  0.25% )
       <not supported>      stalled-cycles-backend
        68,788,588,003      instructions              #    1.66  insns per cycle
                                                      #    0.25  stalled cycles per insn  ( +-  0.02% )
        13,449,387,620      branches                  # 1085.940 M/sec                    ( +-  0.02% )
            20,880,690      branch-misses             #    0.16% of all branches          ( +-  0.98% )
    
          12.372646094 seconds time elapsed                                          ( +-  0.34% )
    
    after:
    
     Performance counter stats for 'perf bench sched pipe' (10 runs):
    
          12180.936528      task-clock (msec)         #    1.001 CPUs utilized            ( +-  0.33% )
             2,000,077      context-switches          #    0.164 M/sec                    ( +-  0.00% )
                     0      cpu-migrations            #    0.000 K/sec
                   174      page-faults               #    0.014 K/sec                    ( +-  0.27% )
        40,691,545,577      cycles                    #    3.341 GHz                      ( +-  0.06% )
        16,446,333,371      stalled-cycles-frontend   #   40.42% frontend cycles idle     ( +-  0.18% )
       <not supported>      stalled-cycles-backend
        68,570,100,387      instructions              #    1.69  insns per cycle
                                                      #    0.24  stalled cycles per insn  ( +-  0.01% )
        13,389,740,014      branches                  # 1099.237 M/sec                    ( +-  0.01% )
            20,175,440      branch-misses             #    0.15% of all branches          ( +-  0.52% )
    
          12.169253010 seconds time elapsed                                          ( +-  0.33% )
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    1cde2930
core.c 202 KB