Johannes Weiner
2a2e48854d
mm: vmscan: fix IO/refault regression in cache workingset transition
...
Since commit 59dc76b0d4 ("mm: vmscan: reduce size of inactive file
list") we noticed bigger IO spikes during changes in cache access
patterns.
The patch in question shrunk the inactive list size to leave more room
for the current workingset in the presence of streaming IO. However,
workingset transitions that previously happened on the inactive list are
now pushed out of memory and incur more refaults to complete.
This patch disables active list protection when refaults are being
observed. This accelerates workingset transitions, and allows more of
the new set to establish itself from memory, without eating into the
ability to protect the established workingset during stable periods.
The workloads that were measurably affected for us were hit pretty bad
by it, with refault/majfault rates doubling and tripling during cache
transitions, and the machines sustaining half-hour periods of 100% IO
utilization, where they'd previously have sub-minute peaks at 60-90%.
Stateful services that handle user data tend to be more conservative
with kernel upgrades. As a result we hit most page cache issues with
some delay, as was the case here.
The severity seemed to warrant a stable tag.
Fixes: 59dc76b0d4 ("mm: vmscan: reduce size of inactive file list")
Link: http://lkml.kernel.org/r/20170404220052.27593-1-hannes@cmpxchg.org
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: <stable@vger.kernel.org> [4.7+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2017-05-03 15:52:11 -07:00
..
kasan
kasan: report only the first error by default
2017-03-31 17:13:30 -07:00
backing-dev.c
bdi: Drop 'parent' argument from bdi_register[_va]()
2017-04-20 12:09:55 -06:00
balloon_compaction.c
bootmem.c
cleancache.c
cma.c
cma.h
cma_debug.c
compaction.c
mm/compaction: ignore block suitable after check large free page
2017-05-03 15:52:09 -07:00
debug.c
debug_page_ref.c
dmapool.c
lib/vsprintf.c: remove %Z support
2017-02-27 18:43:47 -08:00
early_ioremap.c
fadvise.c
failslab.c
filemap.c
mm: tighten up the fault path a little
2017-05-03 15:52:09 -07:00
frame_vector.c
frontswap.c
gup.c
Revert "x86/mm/gup: Switch GUP to the generic get_user_page_fast() implementation"
2017-04-23 11:45:20 +02:00
highmem.c
huge_memory.c
mm: make ttu's return boolean
2017-05-03 15:52:10 -07:00
hugetlb.c
mm/hugetlb.c: don't call region_abort if region_chg fails
2017-03-31 17:13:30 -07:00
hugetlb_cgroup.c
hwpoison-inject.c
init-mm.c
internal.h
mm: use is_migrate_highatomic() to simplify the code
2017-05-03 15:52:08 -07:00
interval_tree.c
Kconfig
mm: remove AVR32 arch special handling in mm/Kconfig
2017-05-01 09:36:31 +02:00
Kconfig.debug
mm: enable page poisoning early at boot
2017-05-03 15:52:10 -07:00
khugepaged.c
mm: do not use double negation for testing page flags
2017-05-03 15:52:09 -07:00
kmemcheck.c
kmemleak-test.c
kmemleak.c
mm: fix section name for .data..ro_after_init
2017-03-31 17:13:30 -07:00
ksm.c
mm: make rmap_one boolean function
2017-05-03 15:52:10 -07:00
list_lru.c
maccess.c
madvise.c
mm: enable MADV_FREE for swapless system
2017-05-03 15:52:08 -07:00
Makefile
mm: add arch-independent testcases for RODATA
2017-02-27 18:43:48 -08:00
memblock.c
mm/memblock.c: fix memblock_next_valid_pfn()
2017-03-09 17:01:10 -08:00
memcontrol.c
mm: vmscan: fix IO/refault regression in cache workingset transition
2017-05-03 15:52:11 -07:00
memory-failure.c
mm: make ttu's return boolean
2017-05-03 15:52:10 -07:00
memory.c
Merge branch 'parisc-4.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux into uaccess.parisc
2017-04-02 10:33:48 -04:00
memory_hotplug.c
mm, vmscan: prevent kswapd sleeping prematurely due to mismatched classzone_idx
2017-05-03 15:52:09 -07:00
mempolicy.c
mm/mempolicy.c: fix error handling in set_mempolicy and mbind.
2017-04-08 10:57:55 -07:00
mempool.c
memtest.c
migrate.c
mm: make rmap_one boolean function
2017-05-03 15:52:10 -07:00
mincore.c
mm: remove shmem_mapping() shmem_zero_setup() duplicates
2017-02-24 17:46:56 -08:00
mlock.c
mm: make try_to_munlock() return void
2017-05-03 15:52:10 -07:00
mm_init.c
mmap.c
mm/mmap: replace SHM_HUGE_MASK with MAP_HUGE_MASK inside mmap_pgoff
2017-05-03 15:52:10 -07:00
mmu_context.c
sched/headers: Prepare to move the task_lock()/unlock() APIs to <linux/sched/task.h>
2017-03-02 08:42:38 +01:00
mmu_notifier.c
sched/headers: Prepare for new header dependencies before moving code to <linux/sched/mm.h>
2017-03-02 08:42:28 +01:00
mmzone.c
mprotect.c
mm: convert generic code to 5-level paging
2017-03-09 11:48:47 -08:00
mremap.c
mm: convert generic code to 5-level paging
2017-03-09 11:48:47 -08:00
msync.c
nobootmem.c
nommu.c
Merge branch 'WIP.sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2017-03-03 10:16:38 -08:00
oom_kill.c
oom: improve oom disable handling
2017-05-03 15:52:10 -07:00
page-writeback.c
mm/page-writeback.c: use setup_deferrable_timer
2017-05-03 15:52:08 -07:00
page_alloc.c
mm: enable page poisoning early at boot
2017-05-03 15:52:10 -07:00
page_counter.c
page_ext.c
mm: enable page poisoning early at boot
2017-05-03 15:52:10 -07:00
page_idle.c
mm: make rmap_one boolean function
2017-05-03 15:52:10 -07:00
page_io.c
page_isolation.c
mm: use is_migrate_isolate_page() to simplify the code
2017-05-03 15:52:08 -07:00
page_owner.c
page_poison.c
mm: enable page poisoning early at boot
2017-05-03 15:52:10 -07:00
page_vma_mapped.c
mm: fix page_vma_mapped_walk() for ksm pages
2017-04-08 00:47:48 -07:00
pagewalk.c
mm: convert generic code to 5-level paging
2017-03-09 11:48:47 -08:00
percpu-km.c
percpu-vm.c
percpu: remove unused chunk_alloc parameter from pcpu_get_pages()
2017-03-06 15:56:55 -05:00
percpu.c
Merge branch 'sched/core' into locking/core
2017-04-04 11:31:12 +02:00
pgtable-generic.c
mm: convert generic code to 5-level paging
2017-03-09 11:48:47 -08:00
process_vm_access.c
sched/headers: Prepare for new header dependencies before moving code to <linux/sched/mm.h>
2017-03-02 08:42:28 +01:00
quicklist.c
readahead.c
rmap.c
mm: remove SWAP_[SUCCESS|AGAIN|FAIL]
2017-05-03 15:52:10 -07:00
rodata_test.c
mm: remove rodata_test_data export, add pr_fmt
2017-05-03 15:52:09 -07:00
shmem.c
Merge branch 'rebased-statx' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2017-03-03 11:38:56 -08:00
slab.c
slab: avoid IPIs when creating kmem caches
2017-05-03 15:52:07 -07:00
slab.h
slab_common.c
kasan: drain quarantine of memcg slab objects
2017-02-24 17:46:56 -08:00
slob.c
slub.c
sparse-vmemmap.c
mm: convert generic code to 5-level paging
2017-03-09 11:48:47 -08:00
sparse.c
mm/sparse: refine usemap_size() a little
2017-05-03 15:52:09 -07:00
swap.c
mm: move MADV_FREE pages into LRU_INACTIVE_FILE list
2017-05-03 15:52:08 -07:00
swap_cgroup.c
mm, swap_cgroup: reschedule when neeed in swap_cgroup_swapoff()
2017-04-08 00:47:49 -07:00
swap_slots.c
mm/swap_slots.c: add warning if swap slots cache failed to initialize
2017-05-03 15:52:10 -07:00
swap_state.c
mm, swap: fix comment in __read_swap_cache_async
2017-05-03 15:52:10 -07:00
swapfile.c
mm, swap: avoid lock swap_avail_lock when held cluster lock
2017-05-03 15:52:10 -07:00
truncate.c
fs: add i_blocksize()
2017-02-27 18:43:46 -08:00
usercopy.c
mm/usercopy: Drop extra is_vmalloc_or_module() check
2017-04-05 12:30:18 -07:00
userfaultfd.c
mm: convert generic code to 5-level paging
2017-03-09 11:48:47 -08:00
util.c
sched/headers: Prepare for new header dependencies before moving code to <linux/sched/task_stack.h>
2017-03-02 08:42:36 +01:00
vmacache.c
sched/headers: Prepare to move 'init_task' and 'init_thread_union' from <linux/sched.h> to <linux/sched/task.h>
2017-03-02 08:42:38 +01:00
vmalloc.c
A reasonably busy cycle for documentation this time around. There is a new
2017-05-02 10:21:17 -07:00
vmpressure.c
mm: vmpressure: fix sending wrong events on underflow
2017-02-24 17:46:56 -08:00
vmscan.c
mm: vmscan: fix IO/refault regression in cache workingset transition
2017-05-03 15:52:11 -07:00
vmstat.c
mm, vmstat: suppress pcp stats for unpopulated zones in zoneinfo
2017-05-03 15:52:08 -07:00
workingset.c
mm: vmscan: fix IO/refault regression in cache workingset transition
2017-05-03 15:52:11 -07:00
z3fold.c
z3fold: fix page locking in z3fold_alloc()
2017-04-13 18:24:20 -07:00
zbud.c
zpool.c
zsmalloc.c
zsmalloc: expand class bit
2017-04-13 18:24:21 -07:00
zswap.c
zswap: don't param_set_charp while holding spinlock
2017-02-27 18:43:45 -08:00