Re: [PATCH -mm v8 7/7] proc: export idle flag via kpageflags
From: Andres Lagar-Cavilla <hidden>
Date: 2015-07-15 19:17:07
Also in:
cgroups, linux-mm, lkml
On Wed, Jul 15, 2015 at 6:54 AM, Vladimir Davydov [off-list ref] 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 <redacted>
Reviewed-by: Andres Lagar-Cavilla <redacted>
quoted hunk ↗ jump to hunk
--- 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 datadiff --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-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org