• Mike Galbraith's avatar
    sched: Use rt.nr_cpus_allowed to recover select_task_rq() cycles · 76854c7e
    Mike Galbraith authored
    rt.nr_cpus_allowed is always available, use it to bail from select_task_rq()
    when only one cpu can be used, and saves some cycles for pinned tasks.
    
    See the line marked with '*' below:
    
      # taskset -c 3 pipe-test
    
       PerfTop:     997 irqs/sec  kernel:89.5%  exact:  0.0% [1000Hz cycles],  (all, CPU: 3)
    ------------------------------------------------------------------------------------------------
    
                 Virgin                                    Patched
                 samples  pcnt function                    samples  pcnt function
                 _______ _____ ___________________________ _______ _____ ___________________________
    
                 2880.00 10.2% __schedule                  3136.00 11.3% __schedule
                 1634.00  5.8% pipe_read                   1615.00  5.8% pipe_read
                 1458.00  5.2% system_call                 1534.00  5.5% system_call
                 1382.00  4.9% _raw_spin_lock_irqsave      1412.00  5.1% _raw_spin_lock_irqsave
                 1202.00  4.3% pipe_write                  1255.00  4.5% copy_user_generic_string
                 1164.00  4.1% copy_user_generic_string    1241.00  4.5% __switch_to
                 1097.00  3.9% __switch_to                  929.00  3.3% mutex_lock
                  872.00  3.1% mutex_lock                   846.00  3.0% mutex_unlock
                  687.00  2.4% mutex_unlock                 804.00  2.9% pipe_write
                  682.00  2.4% native_sched_clock           713.00  2.6% native_sched_clock
                  643.00  2.3% system_call_after_swapgs     653.00  2.3% _raw_spin_unlock_irqrestore
                  617.00  2.2% sched_clock_local            633.00  2.3% fsnotify
                  612.00  2.2% fsnotify                     605.00  2.2% sched_clock_local
                  596.00  2.1% _raw_spin_unlock_irqrestore  593.00  2.1% system_call_after_swapgs
                  542.00  1.9% sysret_check                 559.00  2.0% sysret_check
                  467.00  1.7% fget_light                   472.00  1.7% fget_light
                  462.00  1.6% finish_task_switch           461.00  1.7% finish_task_switch
                  437.00  1.5% vfs_write                    442.00  1.6% vfs_write
                  431.00  1.5% do_sync_write                428.00  1.5% do_sync_write
    *             413.00  1.5% select_task_rq_fair          404.00  1.5% _raw_spin_lock_irq
                  386.00  1.4% update_curr                  402.00  1.4% update_curr
                  385.00  1.4% rw_verify_area               389.00  1.4% do_sync_read
                  377.00  1.3% _raw_spin_lock_irq           378.00  1.4% vfs_read
                  369.00  1.3% do_sync_read                 340.00  1.2% pipe_iov_copy_from_user
                  360.00  1.3% vfs_read                     316.00  1.1% __wake_up_sync_key
                  342.00  1.2% hrtick_start_fair            313.00  1.1% __wake_up_common
    Signed-off-by: default avatarMike Galbraith <efault@gmx.de>
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1321971504.6855.15.camel@marge.simson.netSigned-off-by: default avatarIngo Molnar <mingo@elte.hu>
    76854c7e
fair.c 142 KB