Revision b121186ab1b12e2a96a945d88eae0735b4542158 authored by Alex Shi on 21 August 2012, 23:16:08 UTC, committed by Linus Torvalds on 21 August 2012, 23:45:03 UTC
Commit cfd19c5a9ecf ("mm: only set page->pfmemalloc when
ALLOC_NO_WATERMARKS was used") tried to narrow down page->pfmemalloc
setting, but it missed some places the pfmemalloc should be set.

So, in __slab_alloc, the unalignment pfmemalloc and ALLOC_NO_WATERMARKS
cause incorrect deactivate_slab() on our core2 server:

    64.73%           fio  [kernel.kallsyms]     [k] _raw_spin_lock
                     |
                     --- _raw_spin_lock
                        |
                        |---0.34%-- deactivate_slab
                        |          __slab_alloc
                        |          kmem_cache_alloc
                        |          |

That causes our fio sync write performance to have a 40% regression.

Move the checking in get_page_from_freelist() which resolves this issue.

Signed-off-by: Alex Shi <alex.shi@intel.com>
Acked-by: Mel Gorman <mgorman@suse.de>
Cc: David Miller <davem@davemloft.net
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Tested-by: Eric Dumazet <eric.dumazet@gmail.com>
Tested-by: Sage Weil <sage@inktank.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 5ed12f1
History
File Mode Size
Kconfig -rw-r--r-- 532 bytes
Makefile -rw-r--r-- 274 bytes
compr.c -rw-r--r-- 1.8 KB
dev_bdev.c -rw-r--r-- 8.4 KB
dev_mtd.c -rw-r--r-- 6.6 KB
dir.c -rw-r--r-- 20.7 KB
file.c -rw-r--r-- 7.2 KB
gc.c -rw-r--r-- 20.2 KB
inode.c -rw-r--r-- 10.8 KB
journal.c -rw-r--r-- 23.7 KB
logfs.h -rw-r--r-- 23.8 KB
logfs_abi.h -rw-r--r-- 16.8 KB
readwrite.c -rw-r--r-- 55.8 KB
segment.c -rw-r--r-- 24.3 KB
super.c -rw-r--r-- 16.3 KB

back to top