aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorMel Gorman <mgorman@suse.de>2014-01-21 17:33:22 -0500
committerIngo Molnar <mingo@kernel.org>2014-01-25 03:10:44 -0500
commitb9a3b4c976c1209957326537ad5c0bb633dfd764 (patch)
treecac1437703a0f4be4179021e88250fcf19cd5400 /arch/x86
parentf98b7a772ab51b52ca4d2a14362fc0e0c8a2e0f3 (diff)
mm, x86: Revisit tlb_flushall_shift tuning for page flushes except on IvyBridge
There was a large ebizzy performance regression that was bisected to commit 611ae8e3 (x86/tlb: enable tlb flush range support for x86). The problem was related to the tlb_flushall_shift tuning for IvyBridge which was altered. The problem is that it is not clear if the tuning values for each CPU family is correct as the methodology used to tune the values is unclear. This patch uses a conservative tlb_flushall_shift value for all CPU families except IvyBridge so the decision can be revisited if any regression is found as a result of this change. IvyBridge is an exception as testing with one methodology determined that the value of 2 is acceptable. Details are in the changelog for the patch "x86: mm: Change tlb_flushall_shift for IvyBridge". One important aspect of this to watch out for is Xen. The original commit log mentioned large performance gains on Xen. It's possible Xen is more sensitive to this value if it flushes small ranges of pages more frequently than workloads on bare metal typically do. Signed-off-by: Mel Gorman <mgorman@suse.de> Tested-by: Davidlohr Bueso <davidlohr@hp.com> Reviewed-by: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Cc: Alex Shi <alex.shi@linaro.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/n/tip-dyzMww3fqugnhbhgo6Gxmtkw@git.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/kernel/cpu/amd.c5
-rw-r--r--arch/x86/kernel/cpu/intel.c10
2 files changed, 4 insertions, 11 deletions
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 59bfebc8c805..96abccaada33 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -768,10 +768,7 @@ static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
768 768
769static void cpu_set_tlb_flushall_shift(struct cpuinfo_x86 *c) 769static void cpu_set_tlb_flushall_shift(struct cpuinfo_x86 *c)
770{ 770{
771 tlb_flushall_shift = 5; 771 tlb_flushall_shift = 6;
772
773 if (c->x86 <= 0x11)
774 tlb_flushall_shift = 4;
775} 772}
776 773
777static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c) 774static void cpu_detect_tlb_amd(struct cpuinfo_x86 *c)
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index bbe1b8b1f1c4..d358a3928b8f 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -615,21 +615,17 @@ static void intel_tlb_flushall_shift_set(struct cpuinfo_x86 *c)
615 case 0x61d: /* six-core 45 nm xeon "Dunnington" */ 615 case 0x61d: /* six-core 45 nm xeon "Dunnington" */
616 tlb_flushall_shift = -1; 616 tlb_flushall_shift = -1;
617 break; 617 break;
618 case 0x63a: /* Ivybridge */
619 tlb_flushall_shift = 2;
620 break;
618 case 0x61a: /* 45 nm nehalem, "Bloomfield" */ 621 case 0x61a: /* 45 nm nehalem, "Bloomfield" */
619 case 0x61e: /* 45 nm nehalem, "Lynnfield" */ 622 case 0x61e: /* 45 nm nehalem, "Lynnfield" */
620 case 0x625: /* 32 nm nehalem, "Clarkdale" */ 623 case 0x625: /* 32 nm nehalem, "Clarkdale" */
621 case 0x62c: /* 32 nm nehalem, "Gulftown" */ 624 case 0x62c: /* 32 nm nehalem, "Gulftown" */
622 case 0x62e: /* 45 nm nehalem-ex, "Beckton" */ 625 case 0x62e: /* 45 nm nehalem-ex, "Beckton" */
623 case 0x62f: /* 32 nm Xeon E7 */ 626 case 0x62f: /* 32 nm Xeon E7 */
624 tlb_flushall_shift = 6;
625 break;
626 case 0x62a: /* SandyBridge */ 627 case 0x62a: /* SandyBridge */
627 case 0x62d: /* SandyBridge, "Romely-EP" */ 628 case 0x62d: /* SandyBridge, "Romely-EP" */
628 tlb_flushall_shift = 5;
629 break;
630 case 0x63a: /* Ivybridge */
631 tlb_flushall_shift = 2;
632 break;
633 default: 629 default:
634 tlb_flushall_shift = 6; 630 tlb_flushall_shift = 6;
635 } 631 }