From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.4 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 435CAC4360C for ; Wed, 2 Oct 2019 20:29:27 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id EADC0217D7 for ; Wed, 2 Oct 2019 20:29:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="APqGrdpd" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EADC0217D7 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 9D9AF6B0007; Wed, 2 Oct 2019 16:29:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 98A2D6B0008; Wed, 2 Oct 2019 16:29:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 879A56B000A; Wed, 2 Oct 2019 16:29:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0031.hostedemail.com [216.40.44.31]) by kanga.kvack.org (Postfix) with ESMTP id 6688F6B0007 for ; Wed, 2 Oct 2019 16:29:26 -0400 (EDT) Received: from smtpin05.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with SMTP id 0E1C5181AC9AE for ; Wed, 2 Oct 2019 20:29:26 +0000 (UTC) X-FDA: 75999984732.05.wound66_181af4e158d53 X-HE-Tag: wound66_181af4e158d53 X-Filterd-Recvd-Size: 7599 Received: from mail-vs1-f67.google.com (mail-vs1-f67.google.com [209.85.217.67]) by imf25.hostedemail.com (Postfix) with ESMTP for ; Wed, 2 Oct 2019 20:29:25 +0000 (UTC) Received: by mail-vs1-f67.google.com with SMTP id b1so119813vsr.10 for ; Wed, 02 Oct 2019 13:29:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=f1uPZnw3jQ7XkJ0CCk+XRv8aHVS8VCW7XiwQkjgkuhk=; b=APqGrdpdkYEA5HmtGEspH/HP6wxxy4q59sbp1I5FOGjoRVE0ISlMc8A6+70SzcEUid kRvgxHonJJf2ee1TDY3oPKkwtpF6oIJZEu+4xupLOgZIUFc8Bnro1MJXJApbzFRIORrZ 0quYQNafcCSI5jxhN6Mnvz+rSS2mMvwYZhmQJpKHGCZjQ0EzmCCevvgvhWRDJ1hcBCaZ /3tzEcXU1RVdAPA91CPtxlXpFRS6b3mQ36TC3EaDDfXSU0LDJDwrgm1iVDOiLMb8K3Dk I1wHC15oAagULEzw9Kb8b3wmMFJkP5adrpuOU7HYEIDikER4ifmZzHH/SUxrW8SVOzH/ c8eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=f1uPZnw3jQ7XkJ0CCk+XRv8aHVS8VCW7XiwQkjgkuhk=; b=LeYOa+iMvbZiOOyX44jw0AjAnBjpgAYILVMD7QXjcU0ZVmNG5xIQP5PeTkcG8/qXQ6 fYbMsJBlOTXfKFMPGraVkcUkqo631Mgvwz7wiSTPUkgRiC6Z+gVnwjXdeugLOag1lWlk bjcsVTYfgkZYtolcTNrSU+geKMS0gll9DhZWSFViZ4T/shOonihp9/PWIHMvoR6eyMR9 iZ0CpudFRws1oFOij4GnqDihZkkX+1ncvry+ZQnGUuUt87o9NxlI9hISslIvHqMz2R4j FKkfqk5XUdrTE2PXeE7ZOUmAxDe4gr/NAigybHcse9w52Eue575bEU0P/7POUOZTJ65u L1Tg== X-Gm-Message-State: APjAAAVS5zk6SVO2ZBNIw1MX63astrol/LBdpepKZtYkwz4gghKniJIx 9vtyy7JyEbR+5HPA8A1W3xzxGb0K+NmjVpyOGy8Sqw== X-Google-Smtp-Source: APXvYqyQ7Wq5Q3hw3po2gtjaPw6idAVmlRaPK+hz2ZH+0kRGhFYI4E3DuDdG2MkLLMzUS/2pjp+eTCPKK2ByzG2OQpo= X-Received: by 2002:a67:c81c:: with SMTP id u28mr3280729vsk.149.1570048164504; Wed, 02 Oct 2019 13:29:24 -0700 (PDT) MIME-Version: 1.0 References: <20191002202436.202731-1-dancol@google.com> In-Reply-To: <20191002202436.202731-1-dancol@google.com> From: Daniel Colascione Date: Wed, 2 Oct 2019 13:28:48 -0700 Message-ID: Subject: Re: [PATCH] Make SPLIT_RSS_COUNTING configurable To: Daniel Colascione , Tim Murray , Suren Baghdasaryan , linux-mm@vger.kernel.org, linux-kernel , linux-mm Content-Type: text/plain; charset="UTF-8" X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Adding the correct linux-mm address. On Wed, Oct 2, 2019 at 1:25 PM Daniel Colascione wrote: > > Using the new config option, users can disable SPLIT_RSS_COUNTING to > get increased accuracy in user-visible mm counters. > > Signed-off-by: Daniel Colascione > --- > include/linux/mm.h | 4 ++-- > include/linux/mm_types_task.h | 5 ++--- > include/linux/sched.h | 2 +- > kernel/fork.c | 2 +- > mm/Kconfig | 11 +++++++++++ > mm/memory.c | 6 +++--- > 6 files changed, 20 insertions(+), 10 deletions(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index cc292273e6ba..221395de3cb4 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -1637,7 +1637,7 @@ static inline unsigned long get_mm_counter(struct mm_struct *mm, int member) > { > long val = atomic_long_read(&mm->rss_stat.count[member]); > > -#ifdef SPLIT_RSS_COUNTING > +#ifdef CONFIG_SPLIT_RSS_COUNTING > /* > * counter is updated in asynchronous manner and may go to minus. > * But it's never be expected number for users. > @@ -1723,7 +1723,7 @@ static inline void setmax_mm_hiwater_rss(unsigned long *maxrss, > *maxrss = hiwater_rss; > } > > -#if defined(SPLIT_RSS_COUNTING) > +#ifdef CONFIG_SPLIT_RSS_COUNTING > void sync_mm_rss(struct mm_struct *mm); > #else > static inline void sync_mm_rss(struct mm_struct *mm) > diff --git a/include/linux/mm_types_task.h b/include/linux/mm_types_task.h > index c1bc6731125c..d2adc8057e65 100644 > --- a/include/linux/mm_types_task.h > +++ b/include/linux/mm_types_task.h > @@ -48,14 +48,13 @@ enum { > NR_MM_COUNTERS > }; > > -#if USE_SPLIT_PTE_PTLOCKS && defined(CONFIG_MMU) > -#define SPLIT_RSS_COUNTING > +#ifdef CONFIG_SPLIT_RSS_COUNTING > /* per-thread cached information, */ > struct task_rss_stat { > int events; /* for synchronization threshold */ > int count[NR_MM_COUNTERS]; > }; > -#endif /* USE_SPLIT_PTE_PTLOCKS */ > +#endif /* CONFIG_SPLIT_RSS_COUNTING */ > > struct mm_rss_stat { > atomic_long_t count[NR_MM_COUNTERS]; > diff --git a/include/linux/sched.h b/include/linux/sched.h > index 2c2e56bd8913..22f354774540 100644 > --- a/include/linux/sched.h > +++ b/include/linux/sched.h > @@ -729,7 +729,7 @@ struct task_struct { > /* Per-thread vma caching: */ > struct vmacache vmacache; > > -#ifdef SPLIT_RSS_COUNTING > +#ifdef CONFIG_SPLIT_RSS_COUNTING > struct task_rss_stat rss_stat; > #endif > int exit_state; > diff --git a/kernel/fork.c b/kernel/fork.c > index f9572f416126..fc5e0889922b 100644 > --- a/kernel/fork.c > +++ b/kernel/fork.c > @@ -1917,7 +1917,7 @@ static __latent_entropy struct task_struct *copy_process( > p->vtime.state = VTIME_INACTIVE; > #endif > > -#if defined(SPLIT_RSS_COUNTING) > +#ifdef CONFIG_SPLIT_RSS_COUNTING > memset(&p->rss_stat, 0, sizeof(p->rss_stat)); > #endif > > diff --git a/mm/Kconfig b/mm/Kconfig > index a5dae9a7eb51..372ef9449924 100644 > --- a/mm/Kconfig > +++ b/mm/Kconfig > @@ -736,4 +736,15 @@ config ARCH_HAS_PTE_SPECIAL > config ARCH_HAS_HUGEPD > bool > > +config SPLIT_RSS_COUNTING > + bool "Per-thread mm counter caching" > + depends on MMU > + default y if NR_CPUS >= SPLIT_PTLOCK_CPUS > + help > + Cache mm counter updates in thread structures and > + flush them to visible per-process statistics in batches. > + Say Y here to slightly reduce cache contention in processes > + with many threads at the expense of decreasing the accuracy > + of memory statistics in /proc. > + > endmenu > diff --git a/mm/memory.c b/mm/memory.c > index b1ca51a079f2..bf557ed5ba23 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -141,7 +141,7 @@ static int __init init_zero_pfn(void) > core_initcall(init_zero_pfn); > > > -#if defined(SPLIT_RSS_COUNTING) > +#ifdef CONFIG_SPLIT_RSS_COUNTING > > void sync_mm_rss(struct mm_struct *mm) > { > @@ -177,7 +177,7 @@ static void check_sync_rss_stat(struct task_struct *task) > if (unlikely(task->rss_stat.events++ > TASK_RSS_EVENTS_THRESH)) > sync_mm_rss(task->mm); > } > -#else /* SPLIT_RSS_COUNTING */ > +#else /* CONFIG_SPLIT_RSS_COUNTING */ > > #define inc_mm_counter_fast(mm, member) inc_mm_counter(mm, member) > #define dec_mm_counter_fast(mm, member) dec_mm_counter(mm, member) > @@ -186,7 +186,7 @@ static void check_sync_rss_stat(struct task_struct *task) > { > } > > -#endif /* SPLIT_RSS_COUNTING */ > +#endif /* CONFIG_SPLIT_RSS_COUNTING */ > > /* > * Note: this doesn't free the actual pages themselves. That > -- > 2.23.0.581.g78d2f28ef7-goog >