linux/arch/x86
Shaohua Li 5450bba9e3 x86/mm: In the PTE swapout page reclaim case clear the accessed bit instead of flushing the TLB
commit b13b1d2d86 upstream.

We use the accessed bit to age a page at page reclaim time,
and currently we also flush the TLB when doing so.

But in some workloads TLB flush overhead is very heavy. In my
simple multithreaded app with a lot of swap to several pcie
SSDs, removing the tlb flush gives about 20% ~ 30% swapout
speedup.

Fortunately just removing the TLB flush is a valid optimization:
on x86 CPUs, clearing the accessed bit without a TLB flush
doesn't cause data corruption.

It could cause incorrect page aging and the (mistaken) reclaim of
hot pages, but the chance of that should be relatively low.

So as a performance optimization don't flush the TLB when
clearing the accessed bit, it will eventually be flushed by
a context switch or a VM operation anyway. [ In the rare
event of it not getting flushed for a long time the delay
shouldn't really matter because there's no real memory
pressure for swapout to react to. ]

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Shaohua Li <shli@fusionio.com>
Acked-by: Rik van Riel <riel@redhat.com>
Acked-by: Mel Gorman <mgorman@suse.de>
Acked-by: Hugh Dickins <hughd@google.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Cc: linux-mm@kvack.org
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20140408075809.GA1764@kernel.org
[ Rewrote the changelog and the code comments. ]
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Mel Gorman <mgorman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2014-11-21 09:23:07 -08:00
..
boot x86, kaslr: Prevent .bss from overlaping initrd 2014-11-21 09:23:04 -08:00
configs x86, defconfig: Add DEVTMPFS and DEVTMPFS_MOUNT to *86*_defconfig 2013-11-04 20:01:55 -08:00
crypto crypto: sha512_ssse3 - fix byte count to bit count conversion 2014-07-17 16:21:04 -07:00
ia32 x86_64, entry: Fix out of bounds read on sysenter 2014-11-14 08:59:47 -08:00
include x86, iosf: Added Quark MBI identifiers 2014-11-14 09:00:00 -08:00
kernel perf/x86/intel: Use proper dTLB-load-misses event on IvyBridge 2014-11-21 09:23:05 -08:00
kvm KVM: x86: Don't report guest userspace emulation error to userspace 2014-11-21 09:23:05 -08:00
lguest x86, asmlinkage, lguest: Fix C functions used by inline assembler 2014-01-29 22:17:17 -08:00
lib x86, hash: Fix build failure with older binutils 2014-05-06 07:59:26 -07:00
math-emu x86: math-emu: Drop already-disabled print of build date 2014-01-27 23:14:12 +01:00
mm x86/mm: In the PTE swapout page reclaim case clear the accessed bit instead of flushing the TLB 2014-11-21 09:23:07 -08:00
net net: filter: x86: fix JIT address randomization 2014-05-31 13:20:38 -07:00
oprofile perf: Fix arch_perf_out_copy_user default 2013-11-06 12:34:25 +01:00
pci x86: don't exclude low BIOS area when allocating address space for non-PCI cards 2014-09-05 16:34:15 -07:00
platform x86/efi: Make efi virtual runtime map passing more robust 2014-04-14 06:50:02 -07:00
power x86, asmlinkage, power: Make various symbols used by the suspend asm code visible 2013-08-06 14:21:03 -07:00
realmode Merge commit 'f4bcd8ccdd' into x86/build 2014-01-29 09:07:00 -08:00
syscalls x86, x32: Use compat shims for io_{setup,submit} 2014-06-30 20:12:00 -07:00
tools x86, kaslr: Prevent .bss from overlaping initrd 2014-11-21 09:23:04 -08:00
um x86: Remove CONFIG_X86_OOSTORE 2014-03-11 10:16:18 -07:00
vdso Revert "x86-64, modify_ldt: Make support for 16-bit segments a runtime option" 2014-08-07 14:52:38 -07:00
video x86: Use vga_default_device() when determining whether an fb is primary 2012-04-24 09:50:17 +01:00
xen x86/xen: don't copy bogus duplicate entries into kernel page tables 2014-10-05 14:52:17 -07:00
.gitignore x86/kprobes: Add arch/x86/tools/insn_sanity to .gitignore 2012-01-16 08:21:59 +01:00
Kbuild x86, realmode: realmode.bin infrastructure 2012-05-08 11:41:48 -07:00
Kconfig x86, iosf: Make IOSF driver modular and usable by more drivers 2014-11-14 08:59:59 -08:00
Kconfig.cpu x86: Remove CONFIG_X86_OOSTORE 2014-03-11 10:16:18 -07:00
Kconfig.debug x86: Disable CONFIG_X86_DECODER_SELFTEST in allmod/allyesconfigs 2014-02-05 14:10:30 -08:00
Makefile x86-64, build: Fix stack protector Makefile breakage with 32-bit userland 2014-05-13 13:32:58 +02:00
Makefile.um um: fix linker script generation 2012-04-09 13:59:00 -04:00
Makefile_32.cpu x86, 386 removal: Remove CONFIG_M386 from Kconfig 2012-11-29 13:23:01 -08:00