Mel Gorman
5e1f0f098b
mm, compaction: capture a page under direct compaction
...
Compaction is inherently race-prone as a suitable page freed during
compaction can be allocated by any parallel task. This patch uses a
capture_control structure to isolate a page immediately when it is freed
by a direct compactor in the slow path of the page allocator. The
intent is to avoid redundant scanning.
5.0.0-rc1 5.0.0-rc1
selective-v3r17 capture-v3r19
Amean fault-both-1 0.00 ( 0.00%) 0.00 * 0.00%*
Amean fault-both-3 2582.11 ( 0.00%) 2563.68 ( 0.71%)
Amean fault-both-5 4500.26 ( 0.00%) 4233.52 ( 5.93%)
Amean fault-both-7 5819.53 ( 0.00%) 6333.65 ( -8.83%)
Amean fault-both-12 9321.18 ( 0.00%) 9759.38 ( -4.70%)
Amean fault-both-18 9782.76 ( 0.00%) 10338.76 ( -5.68%)
Amean fault-both-24 15272.81 ( 0.00%) 13379.55 * 12.40%*
Amean fault-both-30 15121.34 ( 0.00%) 16158.25 ( -6.86%)
Amean fault-both-32 18466.67 ( 0.00%) 18971.21 ( -2.73%)
Latency is only moderately affected but the devil is in the details. A
closer examination indicates that base page fault latency is reduced but
latency of huge pages is increased as it takes creater care to succeed.
Part of the "problem" is that allocation success rates are close to 100%
even when under pressure and compaction gets harder
5.0.0-rc1 5.0.0-rc1
selective-v3r17 capture-v3r19
Percentage huge-3 96.70 ( 0.00%) 98.23 ( 1.58%)
Percentage huge-5 96.99 ( 0.00%) 95.30 ( -1.75%)
Percentage huge-7 94.19 ( 0.00%) 97.24 ( 3.24%)
Percentage huge-12 94.95 ( 0.00%) 97.35 ( 2.53%)
Percentage huge-18 96.74 ( 0.00%) 97.30 ( 0.58%)
Percentage huge-24 97.07 ( 0.00%) 97.55 ( 0.50%)
Percentage huge-30 95.69 ( 0.00%) 98.50 ( 2.95%)
Percentage huge-32 96.70 ( 0.00%) 99.27 ( 2.65%)
And scan rates are reduced as expected by 6% for the migration scanner
and 29% for the free scanner indicating that there is less redundant
work.
Compaction migrate scanned 20815362 19573286
Compaction free scanned 16352612 11510663
[mgorman@techsingularity.net: remove redundant check]
Link: http://lkml.kernel.org/r/20190201143853.GH9565@techsingularity.net
Link: http://lkml.kernel.org/r/20190118175136.31341-23-mgorman@techsingularity.net
Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Cc: David Rientjes <rientjes@google.com>
Cc: YueHaibing <yuehaibing@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2019-03-05 21:07:17 -08:00
..
bpf
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
2019-03-04 10:14:31 -08:00
cgroup
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2019-03-05 08:26:13 -08:00
configs
kvm_config: add CONFIG_VIRTIO_MENU
2018-10-24 20:55:56 -04:00
debug
kdb: use bool for binary state indicators
2018-12-30 08:31:52 +00:00
dma
swiotlb: clear io_tlb_start and io_tlb_end in swiotlb_exit
2019-01-16 09:59:17 -05:00
events
perf/core: Fix impossible ring-buffer sizes warning
2019-02-13 08:05:02 +01:00
gcov
irq
genirq/irqdesc: Fix double increment in alloc_descs()
2019-01-18 00:43:09 +01:00
livepatch
livepatch: Replace synchronize_sched() with synchronize_rcu()
2018-12-01 12:38:50 -08:00
locking
futex: Handle early deadlock return correctly
2019-02-08 13:00:36 +01:00
power
PM/Hibernate: exclude all PageOffline() pages
2019-03-05 21:07:14 -08:00
printk
Remove 'type' argument from access_ok() function
2019-01-03 18:57:57 -08:00
rcu
rcutorture: Don't do busted forward-progress testing
2018-12-01 12:45:42 -08:00
sched
mm, compaction: capture a page under direct compaction
2019-03-05 21:07:17 -08:00
time
posix-cpu-timers: Unbreak timer rearming
2019-01-15 16:34:37 +01:00
trace
Two more tracing fixes
2019-02-18 09:40:16 -08:00
.gitignore
acct.c
async.c
audit.c
audit: remove duplicated include from audit.c
2018-12-14 12:09:30 -05:00
audit.h
audit: use current whenever possible
2018-11-26 18:41:21 -05:00
audit_fsnotify.c
audit: minimize our use of audit_log_format()
2018-11-26 18:40:00 -05:00
audit_tree.c
audit: minimize our use of audit_log_format()
2018-11-26 18:40:00 -05:00
audit_watch.c
audit: minimize our use of audit_log_format()
2018-11-26 18:40:00 -05:00
auditfilter.c
auditsc.c
audit: use current whenever possible
2018-11-26 18:41:21 -05:00
backtracetest.c
bounds.c
kbuild: fix kernel/bounds.c 'W=1' warning
2018-10-31 08:54:14 -07:00
capability.c
compat.c
make 'user_access_begin()' do 'access_ok()'
2019-01-04 12:56:09 -08:00
configs.c
context_tracking.c
cpu.c
cpu/hotplug: Fix "SMT disabled by BIOS" detection for KVM
2019-01-30 19:27:00 +01:00
cpu_pm.c
crash_core.c
kexec: export PG_offline to VMCOREINFO
2019-03-05 21:07:14 -08:00
crash_dump.c
cred.c
cred: export get_task_cred().
2018-12-19 13:52:44 -05:00
delayacct.c
delayacct: track delays from thrashing cache pages
2018-10-26 16:26:32 -07:00
dma.c
elfcore.c
exec_domain.c
exit.c
kernel/exit.c: release ptraced tasks before zap_pid_ns_processes
2019-02-01 15:46:23 -08:00
extable.c
fail_function.c
kernel/fail_function.c: remove meaningless null pointer check before debugfs_remove_recursive
2018-10-31 08:54:12 -07:00
fork.c
Merge branch 'akpm' (patches from Andrew)
2019-01-08 18:58:29 -08:00
freezer.c
PM / reboot: Eliminate race between reboot and suspend
2018-08-06 12:35:20 +02:00
futex.c
futex: Handle early deadlock return correctly
2019-02-08 13:00:36 +01:00
groups.c
hung_task.c
kernel/hung_task.c: break RCU locks based on jiffies
2019-01-04 13:13:45 -08:00
iomem.c
irq_work.c
jump_label.c
jump_label: move 'asm goto' support test to Kconfig
2019-01-06 09:46:51 +09:00
kallsyms.c
kallsyms: reduce size a little on 64-bit
2018-09-10 22:54:33 +09:00
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
bpf: introduce bpf_spin_lock
2019-02-01 20:55:38 +01:00
Kconfig.preempt
kconfig: warn no new line at end of file
2018-12-15 17:44:35 +09:00
kcov.c
kernel/kcov.c: mark write_comp_data() as notrace
2019-01-04 13:13:47 -08: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
mm: convert totalram_pages and totalhigh_pages variables to atomic
2018-12-28 12:11:47 -08:00
kexec_file.c
kexec_file: kexec_walk_memblock() only walks a dedicated region at kdump
2018-12-06 14:38:50 +00:00
kexec_internal.h
kmod.c
kprobes.c
Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-12-26 14:45:18 -08:00
ksysfs.c
kthread.c
mm: replace all open encodings for NUMA_NO_NODE
2019-03-05 21:07:14 -08:00
latencytop.c
Makefile
kbuild: change filechk to surround the given command with { }
2019-01-06 09:46:51 +09:00
memremap.c
mm/hmm: fix memremap.h, move dev_page_fault_t callback to hmm
2018-12-28 12:11:52 -08:00
module-internal.h
module.c
jump_label: move 'asm goto' support test to Kconfig
2019-01-06 09:46:51 +09:00
module_signing.c
modsign: use all trusted keys to verify module signature
2018-11-07 14:41:41 +01:00
notifier.c
nsproxy.c
padata.c
padata: clean an indentation issue, remove extraneous space
2018-11-16 14:11:04 +08:00
panic.c
kernel/sysctl: add panic_print into sysctl
2019-01-04 13:13:47 -08:00
params.c
pid.c
Fix failure path in alloc_pid()
2018-12-28 12:42:30 -08:00
pid_namespace.c
signal: Use group_send_sig_info to kill all processes in a pid namespace
2018-09-16 16:08:25 +02:00
profile.c
mm: remove include/linux/bootmem.h
2018-10-31 08:54:16 -07:00
ptrace.c
Remove 'type' argument from access_ok() function
2019-01-03 18:57:57 -08:00
range.c
reboot.c
kernel/reboot.c: export pm_power_off_prepare
2018-09-11 16:13:24 +01:00
relay.c
relay: check return of create_buf_file() properly
2019-01-31 14:01:48 +01:00
resource.c
kernel, resource: check for IORESOURCE_SYSRAM in release_mem_region_adjustable
2018-12-28 12:11:49 -08:00
rseq.c
Remove 'type' argument from access_ok() function
2019-01-03 18:57:57 -08:00
seccomp.c
seccomp, bpf: disable preemption before calling into bpf prog
2019-02-22 00:14:19 +01:00
signal.c
signal: Restore the stop PTRACE_EVENT_EXIT
2019-02-13 08:31:41 -06:00
smp.c
cpu/hotplug: Fix "SMT disabled by BIOS" detection for KVM
2019-01-30 19:27:00 +01:00
smpboot.c
smpboot.h
softirq.c
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-10-25 11:43:47 -07:00
stackleak.c
stackleak: Mark stackleak_track_stack() as notrace
2018-12-05 19:31:44 -08:00
stacktrace.c
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: Clarify that UNAME26 does not generate unique versions anymore
2019-01-14 10:38:03 +12:00
sys_ni.c
ipc: introduce ksys_ipc()/compat_ksys_ipc() for s390
2019-01-18 09:33:18 +01:00
sysctl.c
mm: remove sysctl_extfrag_handler()
2019-03-05 21:07:15 -08:00
sysctl_binary.c
kernel/sysctl: add panic_print into sysctl
2019-01-04 13:13:47 -08:00
task_work.c
taskstats.c
test_kprobes.c
torture.c
torture: Remove unnecessary "ret" variables
2018-12-01 12:45:35 -08:00
tracepoint.c
tracing: Replace synchronize_sched() and call_rcu_sched()
2018-11-27 09:21:41 -08:00
tsacct.c
ucount.c
uid16.c
uid16.h
umh.c
umh: add exit routine for UMH process
2019-01-11 18:05:40 -08:00
up.c
smp,cpumask: introduce on_each_cpu_cond_mask
2018-10-09 16:51:11 +02:00
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: also map extents in the reverse map to kernel IDs
2018-11-07 23:51:16 -06:00
utsname.c
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
psi: fix aggregation idle shut-off
2019-02-01 15:46:23 -08:00
workqueue_internal.h
psi: fix aggregation idle shut-off
2019-02-01 15:46:23 -08:00