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-- 1003 bytes
Makefile -rw-r--r-- 321 bytes
cache.c -rw-r--r-- 2.9 KB
cnode.c -rw-r--r-- 4.7 KB
coda_cache.h -rw-r--r-- 673 bytes
coda_fs_i.h -rw-r--r-- 1.8 KB
coda_int.h -rw-r--r-- 437 bytes
coda_linux.c -rw-r--r-- 5.0 KB
coda_linux.h -rw-r--r-- 2.9 KB
dir.c -rw-r--r-- 16.2 KB
file.c -rw-r--r-- 6.2 KB
inode.c -rw-r--r-- 7.1 KB
pioctl.c -rw-r--r-- 2.1 KB
psdev.c -rw-r--r-- 10.2 KB
symlink.c -rw-r--r-- 1.1 KB
sysctl.c -rw-r--r-- 1.3 KB
upcall.c -rw-r--r-- 22.7 KB

back to top