Srikar Dronamraju
3f9672baaa
sched/numa: Reset scan rate whenever task moves across nodes
Currently task scan rate is reset when NUMA balancer migrates the task
to a different node. If NUMA balancer initiates a swap, reset is only
applicable to the task that initiates the swap. Similarly no scan rate
reset is done if the task is migrated across nodes by traditional load
balancer.
Instead move the scan reset to the migrate_task_rq. This ensures the
task moved out of its preferred node, either gets back to its preferred
node quickly or finds a new preferred node. Doing so, would be fair to
all tasks migrating across nodes.
Specjbb2005 results (8 warehouses)
Higher bops are better
2 Socket - 2 Node Haswell - X86
JVMS Prev Current %Change
4 200668 203370 1.3465
1 321791 328431 2.06345
2 Socket - 4 Node Power8 - PowerNV
JVMS Prev Current %Change
1 204848 206070 0.59654
2 Socket - 2 Node Power9 - PowerNV
JVMS Prev Current %Change
4 188098 188386 0.153112
1 200351 201566 0.606436
4 Socket - 4 Node Power7 - PowerVM
JVMS Prev Current %Change
8 58145.9 59157.4 1.73959
1 103798 105495 1.63491
Some events stats before and after applying the patch.
perf stats 8th warehouse Multi JVM 2 Socket - 2 Node Haswell - X86
Event Before After
cs 13,912,183 13,825,492
migrations 1,155,931 1,152,509
faults 367,139 371,948
cache-misses 54,240,196,814 55,654,206,041
sched:sched_move_numa 1,571 1,856
sched:sched_stick_numa 9 4
sched:sched_swap_numa 463 428
migrate:mm_migrate_pages 703 898
vmstat 8th warehouse Multi JVM 2 Socket - 2 Node Haswell - X86
Event Before After
numa_hint_faults 50155 57146
numa_hint_faults_local 45264 51612
numa_hit 239652 238164
numa_huge_pte_updates 36 16
numa_interleave 68 63
numa_local 239576 238085
numa_other 76 79
numa_pages_migrated 680 883
numa_pte_updates 71146 67540
perf stats 8th warehouse Single JVM 2 Socket - 2 Node Haswell - X86
Event Before After
cs 3,156,720 3,288,525
migrations 30,354 38,652
faults 97,261 111,678
cache-misses 12,400,026,826 12,111,197,376
sched:sched_move_numa 4 900
sched:sched_stick_numa 0 0
sched:sched_swap_numa 1 5
migrate:mm_migrate_pages 20 714
vmstat 8th warehouse Single JVM 2 Socket - 2 Node Haswell - X86
Event Before After
numa_hint_faults 272 18572
numa_hint_faults_local 186 14850
numa_hit 71362 73197
numa_huge_pte_updates 0 11
numa_interleave 23 25
numa_local 71299 73138
numa_other 63 59
numa_pages_migrated 2 712
numa_pte_updates 0 24021
perf stats 8th warehouse Multi JVM 2 Socket - 2 Node Power9 - PowerNV
Event Before After
cs 8,606,824 8,451,543
migrations 155,352 202,804
faults 301,409 310,024
cache-misses 157,759,224 253,522,507
sched:sched_move_numa 168 213
sched:sched_stick_numa 0 0
sched:sched_swap_numa 3 2
migrate:mm_migrate_pages 125 88
vmstat 8th warehouse Multi JVM 2 Socket - 2 Node Power9 - PowerNV
Event Before After
numa_hint_faults 4650 11830
numa_hint_faults_local 3946 11301
numa_hit 90489 90038
numa_huge_pte_updates 0 0
numa_interleave 892 855
numa_local 90034 89796
numa_other 455 242
numa_pages_migrated 124 88
numa_pte_updates 4818 12039
perf stats 8th warehouse Single JVM 2 Socket - 2 Node Power9 - PowerNV
Event Before After
cs 2,113,167 2,049,153
migrations 10,533 11,405
faults 142,727 162,309
cache-misses 5,594,192 7,203,343
sched:sched_move_numa 10 22
sched:sched_stick_numa 0 0
sched:sched_swap_numa 0 0
migrate:mm_migrate_pages 6 1
vmstat 8th warehouse Single JVM 2 Socket - 2 Node Power9 - PowerNV
Event Before After
numa_hint_faults 744 1693
numa_hint_faults_local 584 1669
numa_hit 25551 25177
numa_huge_pte_updates 0 0
numa_interleave 263 194
numa_local 25302 24993
numa_other 249 184
numa_pages_migrated 6 1
numa_pte_updates 744 1577
perf stats 8th warehouse Multi JVM 4 Socket - 4 Node Power7 - PowerVM
Event Before After
cs 101,227,352 94,515,937
migrations 4,151,829 4,203,554
faults 745,233 832,697
cache-misses 224,669,561,766 226,248,698,331
sched:sched_move_numa 617 1,730
sched:sched_stick_numa 2 14
sched:sched_swap_numa 187 432
migrate:mm_migrate_pages 316 1,398
vmstat 8th warehouse Multi JVM 4 Socket - 4 Node Power7 - PowerVM
Event Before After
numa_hint_faults 24195 80079
numa_hint_faults_local 21639 68620
numa_hit 238331 241187
numa_huge_pte_updates 0 0
numa_interleave 0 0
numa_local 238331 241186
numa_other 0 1
numa_pages_migrated 204 1347
numa_pte_updates 24561 80729
perf stats 8th warehouse Single JVM 4 Socket - 4 Node Power7 - PowerVM
Event Before After
cs 62,738,978 63,704,961
migrations 562,702 573,404
faults 228,465 230,878
cache-misses 75,778,067,952 76,568,222,781
sched:sched_move_numa 648 509
sched:sched_stick_numa 13 31
sched:sched_swap_numa 137 182
migrate:mm_migrate_pages 733 541
vmstat 8th warehouse Single JVM 4 Socket - 4 Node Power7 - PowerVM
Event Before After
numa_hint_faults 10281 8501
numa_hint_faults_local 3242 2960
numa_hit 36338 35526
numa_huge_pte_updates 0 0
numa_interleave 0 0
numa_local 36338 35526
numa_other 0 0
numa_pages_migrated 706 539
numa_pte_updates 10176 8433
Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Jirka Hladky <jhladky@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@surriel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1537552141-27815-4-git-send-email-srikar@linux.vnet.ibm.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
2018-10-02 09:42:23 +02:00 |
| .. |
|
bpf
|
bpf: sockmap, fix transition through disconnect without close
|
2018-09-22 02:46:41 +02:00 |
|
cgroup
|
Merge branch 'for-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
|
2018-08-24 13:19:27 -07:00 |
|
configs
|
kconfig: tinyconfig: remove stale stack protector fixups
|
2018-06-15 07:15:28 +09:00 |
|
debug
|
treewide: kzalloc() -> kcalloc()
|
2018-06-12 16:19:22 -07:00 |
|
dma
|
dma-mapping: add the missing ARCH_HAS_SYNC_DMA_FOR_CPU_ALL declaration
|
2018-09-25 15:11:58 -07:00 |
|
events
|
perf/core: Add sanity check to deal with pinned event failure
|
2018-09-28 22:44:53 +02:00 |
|
gcov
|
gcov: remove CONFIG_GCOV_FORMAT_AUTODETECT
|
2018-06-08 18:56:02 +09:00 |
|
irq
|
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-08-13 10:47:26 -07:00 |
|
livepatch
|
Merge branch 'for-4.19/upstream' into for-linus
|
2018-08-20 18:33:50 +02:00 |
|
locking
|
locking/ww_mutex: Fix spelling mistake "cylic" -> "cyclic"
|
2018-09-10 14:00:01 +02:00 |
|
power
|
PM / sleep: wakeup: Fix build error caused by missing SRCU support
|
2018-08-15 00:07:08 +02:00 |
|
printk
|
Printk changes for 4.19-rc4
|
2018-09-13 19:37:08 -10:00 |
|
rcu
|
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-08-13 11:25:07 -07:00 |
|
sched
|
sched/numa: Reset scan rate whenever task moves across nodes
|
2018-10-02 09:42:23 +02:00 |
|
time
|
clocksource: Revert "Remove kthread"
|
2018-09-06 23:38:35 +02:00 |
|
trace
|
ring-buffer: Allow for rescheduling when removing pages
|
2018-09-17 18:15:11 -04:00 |
|
.gitignore
|
|
|
|
acct.c
|
|
|
|
async.c
|
kernel/async.c: revert "async: simplify lowest_in_progress()"
|
2018-02-06 18:32:44 -08:00 |
|
audit.c
|
audit: use ktime_get_coarse_real_ts64() for timestamps
|
2018-07-17 14:45:08 -04:00 |
|
audit.h
|
audit: track the owner of the command mutex ourselves
|
2018-02-23 11:22:22 -05:00 |
|
audit_fsnotify.c
|
fsnotify: add fsnotify_add_inode_mark() wrappers
|
2018-05-18 14:58:22 +02:00 |
|
audit_tree.c
|
\n
|
2018-08-17 09:41:28 -07:00 |
|
audit_watch.c
|
audit: fix use-after-free in audit_add_watch
|
2018-07-18 11:43:36 -04:00 |
|
auditfilter.c
|
audit: rename FILTER_TYPE to FILTER_EXCLUDE
|
2018-06-19 10:39:54 -04:00 |
|
auditsc.c
|
audit/stable-4.18 PR 20180814
|
2018-08-15 10:46:54 -07:00 |
|
backtracetest.c
|
|
|
|
bounds.c
|
|
|
|
capability.c
|
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
|
2017-11-02 11:10:55 +01:00 |
|
compat.c
|
time: Enable get/put_compat_itimerspec64 always
|
2018-06-24 14:39:47 +02:00 |
|
configs.c
|
|
|
|
context_tracking.c
|
|
|
|
cpu.c
|
cpu/hotplug: Prevent state corruption on error rollback
|
2018-09-06 15:21:38 +02:00 |
|
cpu_pm.c
|
|
|
|
crash_core.c
|
kernel/crash_core.c: print timestamp using time64_t
|
2018-08-22 10:52:47 -07:00 |
|
crash_dump.c
|
|
|
|
cred.c
|
|
|
|
delayacct.c
|
delayacct: Use raw_spinlocks
|
2018-04-27 14:34:51 +02:00 |
|
dma.c
|
proc: introduce proc_create_single{,_data}
|
2018-05-16 07:23:35 +02:00 |
|
elfcore.c
|
|
|
|
exec_domain.c
|
proc: introduce proc_create_single{,_data}
|
2018-05-16 07:23:35 +02:00 |
|
exit.c
|
signal: Pass pid type into group_send_sig_info
|
2018-07-21 12:57:35 -05:00 |
|
extable.c
|
extable: Make init_kernel_text() global
|
2018-02-21 16:54:06 +01:00 |
|
fail_function.c
|
bpf/error-inject/kprobes: Clear current_kprobe and enable preempt in kprobe
|
2018-06-21 12:33:19 +02:00 |
|
fork.c
|
mm: respect arch_dup_mmap() return value
|
2018-09-04 16:45:02 -07:00 |
|
freezer.c
|
PM / reboot: Eliminate race between reboot and suspend
|
2018-08-06 12:35:20 +02:00 |
|
futex.c
|
futex: Mark expected switch fall-throughs
|
2018-08-20 18:23:00 +02:00 |
|
futex_compat.c
|
|
|
|
groups.c
|
kernel: make groups_sort calling a responsibility group_info allocators
|
2017-12-14 16:00:49 -08:00 |
|
hung_task.c
|
kernel/hung_task.c: allow to set checking interval separately from timeout
|
2018-08-22 10:52:47 -07:00 |
|
iomem.c
|
memremap: split devm_memremap_pages() and memremap() infrastructure
|
2018-05-15 23:08:33 -07:00 |
|
irq_work.c
|
|
|
|
jump_label.c
|
jump_label: Fix typo in warning message
|
2018-09-10 10:15:48 +02:00 |
|
kallsyms.c
|
kallsyms, x86: Export addresses of PTI entry trampolines
|
2018-08-14 19:12:29 -03:00 |
|
kcmp.c
|
|
|
|
Kconfig.freezer
|
|
|
|
Kconfig.hz
|
|
|
|
Kconfig.locks
|
|
|
|
Kconfig.preempt
|
kconfig: include kernel/Kconfig.preempt from init/Kconfig
|
2018-08-02 08:06:54 +09:00 |
|
kcov.c
|
sched/core / kcov: avoid kcov_area during task switch
|
2018-06-15 07:55:24 +09:00 |
|
kexec.c
|
kexec: add call to LSM hook in original kexec_load syscall
|
2018-07-16 12:31:57 -07:00 |
|
kexec_core.c
|
kexec: yield to scheduler when loading kimage segments
|
2018-06-15 07:55:24 +09:00 |
|
kexec_file.c
|
treewide: Use array_size() in vzalloc()
|
2018-06-12 16:19:22 -07:00 |
|
kexec_internal.h
|
|
|
|
kmod.c
|
|
|
|
kprobes.c
|
kprobes: Replace %p with other pointer types
|
2018-06-21 17:33:42 +02:00 |
|
ksysfs.c
|
|
|
|
kthread.c
|
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-08-13 11:25:07 -07:00 |
|
latencytop.c
|
|
|
|
Makefile
|
kbuild: move bin2c back to scripts/ from scripts/basic/
|
2018-07-18 01:18:05 +09:00 |
|
memremap.c
|
libnvdimm-for-4.19_dax-memory-failure
|
2018-08-25 18:43:59 -07:00 |
|
module-internal.h
|
modsign: log module name in the event of an error
|
2018-07-02 11:36:17 +02:00 |
|
module.c
|
module: use relative references for __ksymtab entries
|
2018-08-22 10:52:47 -07:00 |
|
module_signing.c
|
modsign: log module name in the event of an error
|
2018-07-02 11:36:17 +02:00 |
|
notifier.c
|
|
|
|
nsproxy.c
|
|
|
|
padata.c
|
|
|
|
panic.c
|
Kbuild: rename CC_STACKPROTECTOR[_STRONG] config variables
|
2018-06-14 12:21:18 +09:00 |
|
params.c
|
kernel/params.c: downgrade warning for unsafe parameters
|
2018-04-11 10:28:37 -07:00 |
|
pid.c
|
fork: report pid exhaustion correctly
|
2018-09-20 22:01:11 +02:00 |
|
pid_namespace.c
|
Merge branch 'userns-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
|
2018-04-03 19:15:32 -07:00 |
|
profile.c
|
|
|
|
ptrace.c
|
|
|
|
range.c
|
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
|
2017-11-02 11:10:55 +01:00 |
|
reboot.c
|
PM / reboot: Eliminate race between reboot and suspend
|
2018-08-06 12:35:20 +02:00 |
|
relay.c
|
kernel/relay.c: change return type to vm_fault_t
|
2018-06-15 07:55:24 +09:00 |
|
resource.c
|
libnvdimm for 4.18
|
2018-06-08 17:21:52 -07:00 |
|
rseq.c
|
rseq: uapi: Declare rseq_cs field as union, update includes
|
2018-07-10 22:18:52 +02:00 |
|
seccomp.c
|
audit/stable-4.18 PR 20180605
|
2018-06-06 16:34:00 -07:00 |
|
signal.c
|
Merge branch 'akpm' (patches from Andrew)
|
2018-08-22 12:34:08 -07:00 |
|
smp.c
|
cpu/hotplug: Fix SMT supported evaluation
|
2018-08-07 12:25:30 +02:00 |
|
smpboot.c
|
smpboot: Remove cpumask from the API
|
2018-07-03 09:20:44 +02:00 |
|
smpboot.h
|
|
|
|
softirq.c
|
nohz: Fix missing tick reprogram when interrupting an inline softirq
|
2018-08-03 15:52:10 +02:00 |
|
stacktrace.c
|
stacktrace/x86: add function for detecting reliable stack traces
|
2017-03-08 09:18:02 +01:00 |
|
stop_machine.c
|
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-08-13 11:25:07 -07:00 |
|
sys.c
|
kernel/sys.c: remove duplicated include
|
2018-09-20 22:01:11 +02:00 |
|
sys_ni.c
|
Merge branch 'core-rseq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
|
2018-06-10 10:17:09 -07:00 |
|
sysctl.c
|
namei: allow restricted O_CREAT of FIFOs and regular files
|
2018-08-23 18:48:43 -07:00 |
|
sysctl_binary.c
|
staging: irda: remove remaining remants of irda code removal
|
2018-04-16 11:26:49 +02:00 |
|
task_work.c
|
|
|
|
taskstats.c
|
pids: introduce find_get_task_by_vpid() helper
|
2018-02-06 18:32:46 -08:00 |
|
test_kprobes.c
|
kprobes: Remove jprobe API implementation
|
2018-06-21 12:33:05 +02:00 |
|
torture.c
|
torture: Keep old-school dmesg format
|
2018-06-25 11:30:10 -07:00 |
|
tracepoint.c
|
kernel: tracepoints: add support for relative references
|
2018-08-22 10:52:47 -07:00 |
|
tsacct.c
|
|
|
|
ucount.c
|
headers: untangle kmemleak.h from mm.h
|
2018-04-05 21:36:27 -07:00 |
|
uid16.c
|
fs: add do_fchownat(), ksys_fchown() helpers and ksys_{,l}chown() wrappers
|
2018-04-02 20:15:59 +02:00 |
|
uid16.h
|
kernel: provide ksys_*() wrappers for syscalls called by kernel/uid16.c
|
2018-04-02 20:15:30 +02:00 |
|
umh.c
|
umh: fix race condition
|
2018-06-07 16:56:28 -04:00 |
|
up.c
|
|
|
|
user-return-notifier.c
|
|
|
|
user.c
|
userns: use irqsave variant of refcount_dec_and_lock()
|
2018-08-22 10:52:47 -07:00 |
|
user_namespace.c
|
userns: move user access out of the mutex
|
2018-08-11 02:05:53 -05:00 |
|
utsname.c
|
uts: create "struct uts_namespace" from kmem_cache
|
2018-04-11 10:28:35 -07:00 |
|
utsname_sysctl.c
|
sys: don't hold uts_sem while accessing userspace memory
|
2018-08-11 02:05:53 -05:00 |
|
watchdog.c
|
watchdog: Mark watchdog touch functions as notrace
|
2018-08-30 12:56:40 +02:00 |
|
watchdog_hld.c
|
watchdog: Mark watchdog touch functions as notrace
|
2018-08-30 12:56:40 +02:00 |
|
workqueue.c
|
watchdog: Mark watchdog touch functions as notrace
|
2018-08-30 12:56:40 +02:00 |
|
workqueue_internal.h
|
workqueue: Set worker->desc to workqueue name by default
|
2018-05-18 08:47:13 -07:00 |