• Anton Blanchard's avatar
    sched: cpuacct: Use bigger percpu counter batch values for stats counters · fa535a77
    Anton Blanchard authored
    When CONFIG_VIRT_CPU_ACCOUNTING and CONFIG_CGROUP_CPUACCT are
    enabled we can call cpuacct_update_stats with values much larger
    than percpu_counter_batch.  This means the call to
    percpu_counter_add will always add to the global count which is
    protected by a spinlock and we end up with a global spinlock in
    the scheduler.
    
    Based on an idea by KOSAKI Motohiro, this patch scales the batch
    value by cputime_one_jiffy such that we have the same batch
    limit as we would if CONFIG_VIRT_CPU_ACCOUNTING was disabled.
    His patch did this once at boot but that initialisation happened
    too early on PowerPC (before time_init) and it was never updated
    at runtime as a result of a hotplug cpu add/remove.
    
    This patch instead scales percpu_counter_batch by
    cputime_one_jiffy at runtime, which keeps the batch correct even
    after cpu hotplug operations.  We cap it at INT_MAX in case of
    overflow.
    
    For architectures that do not support
    CONFIG_VIRT_CPU_ACCOUNTING, cputime_one_jiffy is the constant 1
    and gcc is smart enough to optimise min(s32
    percpu_counter_batch, INT_MAX) to just percpu_counter_batch at
    least on x86 and PowerPC.  So there is no need to add an #ifdef.
    
    On a 64 thread PowerPC box with CONFIG_VIRT_CPU_ACCOUNTING and
    CONFIG_CGROUP_CPUACCT enabled, a context switch microbenchmark
    is 234x faster and almost matches a CONFIG_CGROUP_CPUACCT
    disabled kernel:
    
     CONFIG_CGROUP_CPUACCT disabled:   16906698 ctx switches/sec
     CONFIG_CGROUP_CPUACCT enabled:       61720 ctx switches/sec
     CONFIG_CGROUP_CPUACCT + patch:	   16663217 ctx switches/sec
    
    Tested with:
    
     wget http://ozlabs.org/~anton/junkcode/context_switch.c
     make context_switch
     for i in `seq 0 63`; do taskset -c $i ./context_switch & done
     vmstat 1
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Reviewed-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Acked-by: default avatarBalbir Singh <balbir@linux.vnet.ibm.com>
    Tested-by: default avatarBalbir Singh <balbir@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: "Luck, Tony" <tony.luck@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    fa535a77
sched.c 218 KB