Revision 683be13a284720205228e29207ef11a1c3c322b9 authored by Thomas Gleixner on 26 May 2015, 22:50:35 UTC, committed by Thomas Gleixner on 19 June 2015, 13:18:28 UTC
If nohz is disabled on the kernel command line the [hr]timer code
still calls wake_up_nohz_cpu() and tick_nohz_full_cpu(), a pretty
pointless exercise. Cache nohz_active in [hr]timer per cpu bases and
avoid the overhead.

Before:
  48.10%  hog       [.] main
  15.25%  [kernel]  [k] _raw_spin_lock_irqsave
   9.76%  [kernel]  [k] _raw_spin_unlock_irqrestore
   6.50%  [kernel]  [k] mod_timer
   6.44%  [kernel]  [k] lock_timer_base.isra.38
   3.87%  [kernel]  [k] detach_if_pending
   3.80%  [kernel]  [k] del_timer
   2.67%  [kernel]  [k] internal_add_timer
   1.33%  [kernel]  [k] __internal_add_timer
   0.73%  [kernel]  [k] timerfn
   0.54%  [kernel]  [k] wake_up_nohz_cpu

After:
  48.73%  hog       [.] main
  15.36%  [kernel]  [k] _raw_spin_lock_irqsave
   9.77%  [kernel]  [k] _raw_spin_unlock_irqrestore
   6.61%  [kernel]  [k] lock_timer_base.isra.38
   6.42%  [kernel]  [k] mod_timer
   3.90%  [kernel]  [k] detach_if_pending
   3.76%  [kernel]  [k] del_timer
   2.41%  [kernel]  [k] internal_add_timer
   1.39%  [kernel]  [k] __internal_add_timer
   0.76%  [kernel]  [k] timerfn

We probably should have a cached value for nohz full in the per cpu
bases as well to avoid the cpumask check. The base cache line is hot
already, the cpumask not necessarily.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Joonwoo Park <joonwoop@codeaurora.org>
Cc: Wenbo Wang <wenbo.wang@memblaze.com>
Link: http://lkml.kernel.org/r/20150526224512.207378134@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
1 parent bc7a34b
History
File Mode Size
kasan
Kconfig -rw-r--r-- 21.3 KB
Kconfig.debug -rw-r--r-- 1.2 KB
Makefile -rw-r--r-- 2.6 KB
backing-dev.c -rw-r--r-- 15.4 KB
balloon_compaction.c -rw-r--r-- 6.8 KB
bootmem.c -rw-r--r-- 20.8 KB
cleancache.c -rw-r--r-- 9.9 KB
cma.c -rw-r--r-- 12.1 KB
cma.h -rw-r--r-- 508 bytes
cma_debug.c -rw-r--r-- 4.4 KB
compaction.c -rw-r--r-- 47.3 KB
debug-pagealloc.c -rw-r--r-- 2.6 KB
debug.c -rw-r--r-- 6.5 KB
dmapool.c -rw-r--r-- 13.7 KB
early_ioremap.c -rw-r--r-- 5.4 KB
fadvise.c -rw-r--r-- 3.7 KB
failslab.c -rw-r--r-- 1.3 KB
filemap.c -rw-r--r-- 69.8 KB
frontswap.c -rw-r--r-- 13.4 KB
gup.c -rw-r--r-- 39.0 KB
highmem.c -rw-r--r-- 11.8 KB
huge_memory.c -rw-r--r-- 79.1 KB
hugetlb.c -rw-r--r-- 102.9 KB
hugetlb_cgroup.c -rw-r--r-- 10.4 KB
hwpoison-inject.c -rw-r--r-- 3.3 KB
init-mm.c -rw-r--r-- 619 bytes
internal.h -rw-r--r-- 13.6 KB
interval_tree.c -rw-r--r-- 3.1 KB
kmemcheck.c -rw-r--r-- 2.9 KB
kmemleak-test.c -rw-r--r-- 3.2 KB
kmemleak.c -rw-r--r-- 53.3 KB
ksm.c -rw-r--r-- 63.3 KB
list_lru.c -rw-r--r-- 12.2 KB
maccess.c -rw-r--r-- 1.6 KB
madvise.c -rw-r--r-- 13.8 KB
memblock.c -rw-r--r-- 45.0 KB
memcontrol.c -rw-r--r-- 149.5 KB
memory-failure.c -rw-r--r-- 49.2 KB
memory.c -rw-r--r-- 103.7 KB
memory_hotplug.c -rw-r--r-- 51.1 KB
mempolicy.c -rw-r--r-- 70.4 KB
mempool.c -rw-r--r-- 13.9 KB
memtest.c -rw-r--r-- 3.0 KB
migrate.c -rw-r--r-- 46.7 KB
mincore.c -rw-r--r-- 6.6 KB
mlock.c -rw-r--r-- 19.5 KB
mm_init.c -rw-r--r-- 5.1 KB
mmap.c -rw-r--r-- 89.8 KB
mmu_context.c -rw-r--r-- 1.3 KB
mmu_notifier.c -rw-r--r-- 11.4 KB
mmzone.c -rw-r--r-- 2.3 KB
mprotect.c -rw-r--r-- 10.5 KB
mremap.c -rw-r--r-- 15.1 KB
msync.c -rw-r--r-- 2.6 KB
nobootmem.c -rw-r--r-- 10.7 KB
nommu.c -rw-r--r-- 53.7 KB
oom_kill.c -rw-r--r-- 23.1 KB
page-writeback.c -rw-r--r-- 74.3 KB
page_alloc.c -rw-r--r-- 183.3 KB
page_counter.c -rw-r--r-- 4.8 KB
page_ext.c -rw-r--r-- 10.3 KB
page_io.c -rw-r--r-- 9.4 KB
page_isolation.c -rw-r--r-- 8.7 KB
page_owner.c -rw-r--r-- 7.0 KB
pagewalk.c -rw-r--r-- 7.5 KB
percpu-km.c -rw-r--r-- 2.8 KB
percpu-vm.c -rw-r--r-- 10.0 KB
percpu.c -rw-r--r-- 66.1 KB
pgtable-generic.c -rw-r--r-- 5.1 KB
process_vm_access.c -rw-r--r-- 9.8 KB
quicklist.c -rw-r--r-- 2.4 KB
readahead.c -rw-r--r-- 15.6 KB
rmap.c -rw-r--r-- 43.5 KB
shmem.c -rw-r--r-- 89.2 KB
slab.c -rw-r--r-- 106.9 KB
slab.h -rw-r--r-- 10.4 KB
slab_common.c -rw-r--r-- 26.9 KB
slob.c -rw-r--r-- 15.7 KB
slub.c -rw-r--r-- 127.3 KB
sparse-vmemmap.c -rw-r--r-- 6.0 KB
sparse.c -rw-r--r-- 20.9 KB
swap.c -rw-r--r-- 32.1 KB
swap_cgroup.c -rw-r--r-- 4.6 KB
swap_state.c -rw-r--r-- 12.7 KB
swapfile.c -rw-r--r-- 77.0 KB
truncate.c -rw-r--r-- 23.5 KB
util.c -rw-r--r-- 10.9 KB
vmacache.c -rw-r--r-- 3.1 KB
vmalloc.c -rw-r--r-- 69.0 KB
vmpressure.c -rw-r--r-- 11.4 KB
vmscan.c -rw-r--r-- 109.1 KB
vmstat.c -rw-r--r-- 40.7 KB
workingset.c -rw-r--r-- 13.6 KB
zbud.c -rw-r--r-- 17.9 KB
zpool.c -rw-r--r-- 9.6 KB
zsmalloc.c -rw-r--r-- 45.4 KB
zswap.c -rw-r--r-- 24.9 KB

back to top