From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [143.182.124.21]) by ozlabs.org (Postfix) with ESMTP id F40AB2C0948 for ; Mon, 20 Aug 2012 23:52:40 +1000 (EST) From: "Kirill A. Shutemov" To: linux-mm@kvack.org Subject: [PATCH v4 0/8] Avoid cache trashing on clearing huge/gigantic page Date: Mon, 20 Aug 2012 16:52:29 +0300 Message-Id: <1345470757-12005-1-git-send-email-kirill.shutemov@linux.intel.com> Cc: linux-mips@linux-mips.org, linux-sh@vger.kernel.org, Jan Beulich , "H. Peter Anvin" , sparclinux@vger.kernel.org, Andrea Arcangeli , Andi Kleen , Robert Richter , x86@kernel.org, Hugh Dickins , Ingo Molnar , Mel Gorman , Alex Shi , Thomas Gleixner , KAMEZAWA Hiroyuki , Tim Chen , linux-kernel@vger.kernel.org, Andy Lutomirski , Johannes Weiner , Andrew Morton , linuxppc-dev@lists.ozlabs.org, "Kirill A. Shutemov" List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: "Kirill A. Shutemov" Clearing a 2MB huge page will typically blow away several levels of CPU caches. To avoid this only cache clear the 4K area around the fault address and use a cache avoiding clears for the rest of the 2MB area. This patchset implements cache avoiding version of clear_page only for x86. If an architecture wants to provide cache avoiding version of clear_page it should to define ARCH_HAS_USER_NOCACHE to 1 and implement clear_page_nocache() and clear_user_highpage_nocache(). v4: - vm.clear_huge_page_nocache sysctl; - rework page iteration in clear_{huge,gigantic}_page according to Andrea Arcangeli suggestion; v3: - Rebased to current Linus' tree. kmap_atomic() build issue is fixed; - Pass fault address to clear_huge_page(). v2 had problem with clearing for sizes other than HPAGE_SIZE; - x86: fix 32bit variant. Fallback version of clear_page_nocache() has been added for non-SSE2 systems; - x86: clear_page_nocache() moved to clear_page_{32,64}.S; - x86: use pushq_cfi/popq_cfi instead of push/pop; v2: - No code change. Only commit messages are updated; - RFC mark is dropped; Andi Kleen (5): THP: Use real address for NUMA policy THP: Pass fault address to __do_huge_pmd_anonymous_page() x86: Add clear_page_nocache mm: make clear_huge_page cache clear only around the fault address x86: switch the 64bit uncached page clear to SSE/AVX v2 Kirill A. Shutemov (3): hugetlb: pass fault address to hugetlb_no_page() mm: pass fault address to clear_huge_page() mm: implement vm.clear_huge_page_nocache sysctl Documentation/sysctl/vm.txt | 13 ++++++ arch/x86/include/asm/page.h | 2 + arch/x86/include/asm/string_32.h | 5 ++ arch/x86/include/asm/string_64.h | 5 ++ arch/x86/lib/Makefile | 3 +- arch/x86/lib/clear_page_32.S | 72 +++++++++++++++++++++++++++++++++++ arch/x86/lib/clear_page_64.S | 78 ++++++++++++++++++++++++++++++++++++++ arch/x86/mm/fault.c | 7 +++ include/linux/mm.h | 7 +++- kernel/sysctl.c | 12 ++++++ mm/huge_memory.c | 17 ++++---- mm/hugetlb.c | 39 ++++++++++--------- mm/memory.c | 72 ++++++++++++++++++++++++++++++---- 13 files changed, 294 insertions(+), 38 deletions(-) create mode 100644 arch/x86/lib/clear_page_32.S -- 1.7.7.6