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-- 503 bytes
Makefile -rw-r--r-- 227 bytes
addr.c -rw-r--r-- 33.2 KB
caps.c -rw-r--r-- 84.3 KB
ceph_frag.c -rw-r--r-- 365 bytes
debugfs.c -rw-r--r-- 6.4 KB
dir.c -rw-r--r-- 36.1 KB
export.c -rw-r--r-- 6.6 KB
file.c -rw-r--r-- 23.7 KB
inode.c -rw-r--r-- 48.8 KB
ioctl.c -rw-r--r-- 7.3 KB
ioctl.h -rw-r--r-- 3.6 KB
locks.c -rw-r--r-- 7.7 KB
mds_client.c -rw-r--r-- 87.3 KB
mds_client.h -rw-r--r-- 11.7 KB
mdsmap.c -rw-r--r-- 4.3 KB
snap.c -rw-r--r-- 25.9 KB
strings.c -rw-r--r-- 3.7 KB
super.c -rw-r--r-- 23.2 KB
super.h -rw-r--r-- 26.3 KB
xattr.c -rw-r--r-- 22.4 KB

back to top