Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753687AbbGOTRH (ORCPT ); Wed, 15 Jul 2015 15:17:07 -0400 Received: from mail-ig0-f177.google.com ([209.85.213.177]:33195 "EHLO mail-ig0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753644AbbGOTRD (ORCPT ); Wed, 15 Jul 2015 15:17:03 -0400 MIME-Version: 1.0 In-Reply-To: <024b60a19e5ef246c9af3c5ff7652e71576e0bcc.1436967694.git.vdavydov@parallels.com> References: <024b60a19e5ef246c9af3c5ff7652e71576e0bcc.1436967694.git.vdavydov@parallels.com> Date: Wed, 15 Jul 2015 12:17:02 -0700 Message-ID: Subject: Re: [PATCH -mm v8 7/7] proc: export idle flag via kpageflags From: Andres Lagar-Cavilla To: Vladimir Davydov Cc: Andrew Morton , Minchan Kim , Raghavendra K T , Johannes Weiner , Michal Hocko , Greg Thelen , Michel Lespinasse , David Rientjes , Pavel Emelyanov , Cyrill Gorcunov , Jonathan Corbet , linux-api@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3133 Lines: 85 On Wed, Jul 15, 2015 at 6:54 AM, Vladimir Davydov wrote: > As noted by Minchan, a benefit of reading idle flag from > /proc/kpageflags is that one can easily filter dirty and/or unevictable > pages while estimating the size of unused memory. > > Note that idle flag read from /proc/kpageflags may be stale in case the > page was accessed via a PTE, because it would be too costly to iterate > over all page mappings on each /proc/kpageflags read to provide an > up-to-date value. To make sure the flag is up-to-date one has to read > /proc/kpageidle first. > > Signed-off-by: Vladimir Davydov Reviewed-by: Andres Lagar-Cavilla > --- > Documentation/vm/pagemap.txt | 6 ++++++ > fs/proc/page.c | 3 +++ > include/uapi/linux/kernel-page-flags.h | 1 + > 3 files changed, 10 insertions(+) > > diff --git a/Documentation/vm/pagemap.txt b/Documentation/vm/pagemap.txt > index c9266340852c..5896b7d7fd74 100644 > --- a/Documentation/vm/pagemap.txt > +++ b/Documentation/vm/pagemap.txt > @@ -64,6 +64,7 @@ There are five components to pagemap: > 22. THP > 23. BALLOON > 24. ZERO_PAGE > + 25. IDLE > > * /proc/kpagecgroup. This file contains a 64-bit inode number of the > memory cgroup each page is charged to, indexed by PFN. Only available when > @@ -124,6 +125,11 @@ Short descriptions to the page flags: > 24. ZERO_PAGE > zero page for pfn_zero or huge_zero page > > +25. IDLE > + page has not been accessed since it was marked idle (see /proc/kpageidle) > + Note that this flag may be stale in case the page was accessed via a PTE. > + To make sure the flag is up-to-date one has to read /proc/kpageidle first. > + > [IO related page flags] > 1. ERROR IO error occurred > 3. UPTODATE page has up-to-date data > diff --git a/fs/proc/page.c b/fs/proc/page.c > index 273537885ab4..13dcb823fe4e 100644 > --- a/fs/proc/page.c > +++ b/fs/proc/page.c > @@ -150,6 +150,9 @@ u64 stable_page_flags(struct page *page) > if (PageBalloon(page)) > u |= 1 << KPF_BALLOON; > > + if (page_is_idle(page)) > + u |= 1 << KPF_IDLE; > + > u |= kpf_copy_bit(k, KPF_LOCKED, PG_locked); > > u |= kpf_copy_bit(k, KPF_SLAB, PG_slab); > diff --git a/include/uapi/linux/kernel-page-flags.h b/include/uapi/linux/kernel-page-flags.h > index a6c4962e5d46..5da5f8751ce7 100644 > --- a/include/uapi/linux/kernel-page-flags.h > +++ b/include/uapi/linux/kernel-page-flags.h > @@ -33,6 +33,7 @@ > #define KPF_THP 22 > #define KPF_BALLOON 23 > #define KPF_ZERO_PAGE 24 > +#define KPF_IDLE 25 > > > #endif /* _UAPILINUX_KERNEL_PAGE_FLAGS_H */ > -- > 2.1.4 > -- Andres Lagar-Cavilla | Google Kernel Team | andreslc@google.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/