Linus Torvalds
c474272075
Revert "mm, slub: consider rest of partial list if acquire_slab() fails"
...
commit 9b1ea29bc0d7b94d420f96a0f4121403efc3dd85 upstream.
This reverts commit 8ff60eb052eeba95cfb3efe16b08c9199f8121cf.
The kernel test robot reports a huge performance regression due to the
commit, and the reason seems fairly straightforward: when there is
contention on the page list (which is what causes acquire_slab() to
fail), we do _not_ want to just loop and try again, because that will
transfer the contention to the 'n->list_lock' spinlock we hold, and
just make things even worse.
This is admittedly likely a problem only on big machines - the kernel
test robot report comes from a 96-thread dual socket Intel Xeon Gold
6252 setup, but the regression there really is quite noticeable:
-47.9% regression of stress-ng.rawpkt.ops_per_sec
and the commit that was marked as being fixed (7ced371971 : "slub:
Acquire_slab() avoid loop") actually did the loop exit early very
intentionally (the hint being that "avoid loop" part of that commit
message), exactly to avoid this issue.
The correct thing to do may be to pick some kind of reasonable middle
ground: instead of breaking out of the loop on the very first sign of
contention, or trying over and over and over again, the right thing may
be to re-try _once_, and then give up on the second failure (or pick
your favorite value for "once"..).
Reported-by: kernel test robot <oliver.sang@intel.com>
Link: https://lore.kernel.org/lkml/20210301080404.GF12822@xsang-OptiPlex-9020/
Cc: Jann Horn <jannh@google.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Acked-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-03-17 16:10:14 +01:00
..
kasan
kasan: avoid -Wmaybe-uninitialized warning
2019-05-08 07:19:07 +02:00
backing-dev.c
memcg: fix a crash in wb_workfn when a device disappears
2021-02-23 13:59:15 +01:00
balloon_compaction.c
bootmem.c
cleancache.c
cma.c
mm/cma.c: fail if fixed declaration can't be honored
2019-08-06 18:29:37 +02:00
cma.h
cma_debug.c
mm/cma_debug.c: fix the break condition in cma_maxchunk_get()
2019-06-22 08:17:12 +02:00
compaction.c
debug.c
mm: get rid of vmacache_flush_all() entirely
2018-09-19 22:47:17 +02:00
debug_page_ref.c
dmapool.c
early_ioremap.c
fadvise.c
failslab.c
filemap.c
mm/filemap.c: clear page error before actual read
2020-10-01 20:40:11 +02:00
frame_vector.c
mm/frame_vector.c: release a semaphore in 'get_vaddr_frames()'
2018-11-10 07:42:52 -08:00
frontswap.c
gup.c
mm: prevent get_user_pages() from overflowing page refcount
2019-06-11 12:22:45 +02:00
highmem.c
huge_memory.c
mm, thp: make do_huge_pmd_wp_page() lock page for testing mapcount
2021-03-03 17:44:32 +01:00
hugetlb.c
mm/hugetlb.c: fix unnecessary address expansion of pmd sharing
2021-03-07 11:25:57 +01:00
hugetlb_cgroup.c
mm: hugetlb: switch to css_tryget() in hugetlb_cgroup_charge_cgroup()
2019-11-25 09:51:58 +01:00
hwpoison-inject.c
init-mm.c
internal.h
vmscan: return NODE_RECLAIM_NOSCAN in node_reclaim() when CONFIG_NUMA is n
2019-12-05 15:35:02 +01:00
interval_tree.c
Kconfig
Kconfig.debug
khugepaged.c
mm: khugepaged: recalculate min_free_kbytes after memory hotplug as expected by khugepaged
2020-10-14 09:48:17 +02:00
kmemcheck.c
kmemleak-test.c
kmemleak.c
mm/kmemleak.c: fix check for softirq context
2019-08-04 09:33:41 +02:00
ksm.c
mm/ksm.c: don't WARN if page is still mapped in remove_stable_node()
2019-11-28 18:28:09 +01:00
list_lru.c
mm/list_lru.c: fix memory leak in __memcg_init_list_lru_node
2019-06-22 08:17:18 +02:00
maccess.c
uaccess: Add non-pagefault user-space write function
2020-09-12 11:47:35 +02:00
madvise.c
mm: madvise(MADV_DODUMP): allow hugetlbfs pages
2018-10-10 08:53:20 +02:00
Makefile
memblock.c
memblock: do not start bottom-up allocations with kernel_end
2021-02-23 13:59:16 +01:00
memcontrol.c
mm: memcontrol: fix NULL pointer crash in test_clear_page_writeback()
2021-02-23 13:59:14 +01:00
memory-failure.c
mm: hwpoison: fix thp split handing in soft_offline_in_use_page()
2019-03-23 13:19:49 +01:00
memory.c
mm/memory.c: fix potential pte_unmap_unlock pte error
2021-03-03 17:44:40 +01:00
memory_hotplug.c
mm: Avoid calling build_all_zonelists_init under hotplug context
2020-08-21 11:02:11 +02:00
mempolicy.c
mm: mempolicy: fix potential pte_unmap_unlock pte error
2020-11-18 18:26:23 +01:00
mempool.c
memtest.c
migrate.c
hugetlbfs: fix races and page leaks during migration
2019-03-13 14:04:54 -07:00
mincore.c
mm/mincore.c: make mincore() more conservative
2019-05-21 18:48:58 +02:00
mlock.c
mm/mlock.c: change count_mm_mlocked_page_nr return type
2019-07-10 09:55:43 +02:00
mm_init.c
mmap.c
mm/mmap.c: initialize align_offset explicitly for vm_unmapped_area
2020-10-01 20:40:11 +02:00
mmu_context.c
mmu_notifier.c
mm/mmu_notifier: use hlist_add_head_rcu()
2019-08-04 09:33:42 +02:00
mmzone.c
mprotect.c
mremap.c
mm: Fix mremap not considering huge pmd devmap
2020-06-11 09:22:20 +02:00
msync.c
nobootmem.c
nommu.c
x86/mm: split vmalloc_sync_all()
2020-04-02 17:20:26 +02:00
oom_kill.c
oom, oom_reaper: do not enqueue same task twice
2019-02-12 19:45:02 +01:00
page-writeback.c
mm: memcontrol: fix NULL pointer crash in test_clear_page_writeback()
2021-02-23 13:59:14 +01:00
page_alloc.c
mm: khugepaged: recalculate min_free_kbytes after memory hotplug as expected by khugepaged
2020-10-14 09:48:17 +02:00
page_counter.c
page_ext.c
mm/page_ext.c: fix an imbalance with kmemleak
2019-04-05 22:29:06 +02:00
page_idle.c
mm/page_idle.c: fix oops because end_pfn is larger than max_pfn
2019-07-10 09:55:38 +02:00
page_io.c
swap: fix swapfile read/write offset
2021-03-07 11:25:59 +01:00
page_isolation.c
page_owner.c
page_poison.c
pagewalk.c
mm: pagewalk: fix termination condition in walk_pte_range()
2020-10-01 20:40:06 +02:00
percpu-km.c
percpu-vm.c
percpu.c
percpu: stop printing kernel addresses
2019-04-27 09:34:47 +02:00
pgtable-generic.c
process_vm_access.c
quicklist.c
readahead.c
rmap.c
mm: migration: fix migration of huge PMD shared pages
2018-11-21 09:26:03 +01:00
shmem.c
shmem: fix possible deadlocks on shmlock_user_lock
2020-05-20 08:15:33 +02:00
slab.c
mm/slab.c: fix an infinite loop in leaks_show()
2019-06-22 08:17:13 +02:00
slab.h
slab_common.c
mm/slab: use memzero_explicit() in kzfree()
2020-06-30 15:38:44 -04:00
slob.c
slub.c
Revert "mm, slub: consider rest of partial list if acquire_slab() fails"
2021-03-17 16:10:14 +01:00
sparse-vmemmap.c
sparse.c
swap.c
swap_cgroup.c
swap_state.c
mm: fix swap cache node allocation mask
2020-07-09 09:35:54 +02:00
swapfile.c
swap: fix swapfile read/write offset
2021-03-07 11:25:59 +01:00
truncate.c
mm: cleancache: fix corruption on missed inode invalidation
2018-12-08 13:05:09 +01:00
usercopy.c
usercopy: Avoid HIGHMEM pfn warning
2019-10-17 13:42:06 -07:00
userfaultfd.c
util.c
mm: page_mapped: don't assume compound page is huge or THP
2019-01-16 22:12:32 +01:00
vmacache.c
mm: get rid of vmacache_flush_all() entirely
2018-09-19 22:47:17 +02:00
vmalloc.c
mm/vmalloc.c: don't dereference possible NULL pointer in __vunmap()
2020-06-03 08:16:47 +02:00
vmpressure.c
vmscan.c
mm: remove seemingly spurious reclaimability check from laptop_mode gating
2018-09-19 22:47:12 +02:00
vmstat.c
mm, vmstat: hide /proc/pagetypeinfo from normal users
2019-11-12 19:15:43 +01:00
workingset.c
z3fold.c
zbud.c
zpool.c
zsmalloc.c
zsmalloc: account the number of compacted pages correctly
2021-03-07 11:25:59 +01:00
zswap.c