Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760629AbcDEWHe (ORCPT ); Tue, 5 Apr 2016 18:07:34 -0400 Received: from mail-pf0-f169.google.com ([209.85.192.169]:36100 "EHLO mail-pf0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753477AbcDEWHd (ORCPT ); Tue, 5 Apr 2016 18:07:33 -0400 Date: Tue, 5 Apr 2016 15:07:29 -0700 (PDT) From: Hugh Dickins X-X-Sender: hugh@eggly.anvils To: Andrew Morton cc: "Kirill A. Shutemov" , Andrea Arcangeli , Andres Lagar-Cavilla , Yang Shi , Ning Qu , David Rientjes , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 31/31] huge tmpfs: no kswapd by default on sync allocations In-Reply-To: Message-ID: References: User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1569 Lines: 39 From: Andres Lagar-Cavilla This triggers early compaction abort while in process context, to ameliorate mmap semaphore stalls. Suggested-by: David Rientjes Signed-off-by: Andres Lagar-Cavilla Signed-off-by: Hugh Dickins --- Documentation/filesystems/tmpfs.txt | 5 +++-- mm/shmem.c | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) --- a/Documentation/filesystems/tmpfs.txt +++ b/Documentation/filesystems/tmpfs.txt @@ -194,8 +194,9 @@ to force huge off for all (intended for /proc/sys/vm/shmem_huge_gfpmask (intended for experimentation only): -Default 38146762, that is 0x24612ca: -GFP_HIGHUSER_MOVABLE|__GFP_NOWARN|__GFP_THISNODE|__GFP_NORETRY. +Default 4592330, that is 0x4612ca: +GFP_HIGHUSER_MOVABLE|__GFP_NOWARN|__GFP_THISNODE|__GFP_NORETRY +minus __GFP_KSWAPD_RECLAIM. Write a gfpmask built from __GFP flags in include/linux/gfp.h, to experiment with better alternatives for the synchronous huge tmpfs allocation used when faulting or writing. --- a/mm/shmem.c +++ b/mm/shmem.c @@ -324,7 +324,8 @@ int shmem_huge __read_mostly; int shmem_huge_recoveries __read_mostly = 8; /* concurrent recovery limit */ int shmem_huge_gfpmask __read_mostly = - (int)(GFP_HIGHUSER_MOVABLE|__GFP_NOWARN|__GFP_THISNODE|__GFP_NORETRY); + (int)(GFP_HIGHUSER_MOVABLE|__GFP_NOWARN|__GFP_THISNODE|__GFP_NORETRY) & + ~__GFP_KSWAPD_RECLAIM; int shmem_recovery_gfpmask __read_mostly = (int)(GFP_HIGHUSER_MOVABLE|__GFP_NOWARN|__GFP_THISNODE);