From: "Huang\, Ying" <ying.huang@intel.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: <linux-mm@kvack.org>, <linux-kernel@vger.kernel.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
David Hildenbrand <david@redhat.com>,
"Mel Gorman" <mgorman@suse.de>,
Vlastimil Babka <vbabka@suse.cz>, Zi Yan <ziy@nvidia.com>,
Michal Hocko <mhocko@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Minchan Kim <minchan@kernel.org>,
Johannes Weiner <hannes@cmpxchg.org>,
Hugh Dickins <hughd@google.com>
Subject: Re: [PATCH] mm: Add PageLayzyFree() helper functions for MADV_FREE
Date: Wed, 04 Mar 2020 09:20:51 +0800 [thread overview]
Message-ID: <87o8tc3ogc.fsf@yhuang-dev.intel.com> (raw)
In-Reply-To: <20200303165859.7440f23d388503ca77fdb6c2@linux-foundation.org> (Andrew Morton's message of "Tue, 3 Mar 2020 16:58:59 -0800")
Hi, Andrew,
Andrew Morton <akpm@linux-foundation.org> writes:
> On Tue, 3 Mar 2020 11:37:38 +0800 "Huang, Ying" <ying.huang@intel.com> wrote:
>
>> From: Huang Ying <ying.huang@intel.com>
>>
>> Now PageSwapBacked() is used as the helper function to check whether
>> pages have been freed lazily via MADV_FREE. This isn't very obvious.
>> So Dave suggested to add PageLazyFree() family helper functions to
>> improve the code readability.
>>
>> --- a/include/linux/page-flags.h
>> +++ b/include/linux/page-flags.h
>> @@ -498,6 +498,31 @@ static __always_inline int PageKsm(struct page *page)
>> TESTPAGEFLAG_FALSE(Ksm)
>> #endif
>>
>> +/*
>> + * For pages freed lazily via MADV_FREE. lazyfree pages are clean
>> + * anonymous pages. They have SwapBacked flag cleared to distinguish
>> + * with normal anonymous pages
>> + */
>> +static __always_inline int PageLazyFree(struct page *page)
>> +{
>> + page = compound_head(page);
>> + return PageAnon(page) && !PageSwapBacked(page);
>> +}
>> +
>> +static __always_inline void SetPageLazyFree(struct page *page)
>> +{
>> + VM_BUG_ON_PAGE(PageTail(page), page);
>> + VM_BUG_ON_PAGE(!PageAnon(page), page);
>> + ClearPageSwapBacked(page);
>> +}
>> +
>> +static __always_inline void ClearPageLazyFree(struct page *page)
>> +{
>> + VM_BUG_ON_PAGE(PageTail(page), page);
>> + VM_BUG_ON_PAGE(!PageAnon(page), page);
>> + SetPageSwapBacked(page);
>> +}
>
> These BUG_ONs aren't present in the current code and are
> unchangelogged.
>
> And they aren't free!
>
> before:
>
> q:/usr/src/25> size -t mm/rmap.o mm/swap.o mm/vmscan.o
> text data bss dec hex filename
> 41580 4211 192 45983 b39f mm/rmap.o
> 50684 9259 1184 61127 eec7 mm/swap.o
> 117728 46775 128 164631 28317 mm/vmscan.o
> 209992 60245 1504 271741 4257d (TOTALS)
>
> after:
>
> text data bss dec hex filename
> 42035 4299 192 46526 b5be mm/rmap.o
> 51091 9347 1184 61622 f0b6 mm/swap.o
> 118132 46775 128 165035 284ab mm/vmscan.o
> 211258 60421 1504 273183 42b1f (TOTALS)
>
> ALso, if they actually trigger, Linus goes berserk.
>
> If you have some special reason to add these assertions, please do it
> as a (changelogged!) followup patch and I'll keep it as a linux-next only thing.
Sorry, originally I thought that VM_BUG_ON_PAGE() will not be used in
the production kernel, so it's cheap. But it seems that people do care
about its usage. I will send v2 to fix this.
Best Regards,
Huang, Ying
next prev parent reply other threads:[~2020-03-04 1:20 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-03 3:37 [PATCH] mm: Add PageLayzyFree() helper functions for MADV_FREE Huang, Ying
2020-03-04 0:58 ` Andrew Morton
2020-03-04 1:20 ` Huang, Ying [this message]
2020-03-04 1:27 ` David Rientjes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87o8tc3ogc.fsf@yhuang-dev.intel.com \
--to=ying.huang@intel.com \
--cc=akpm@linux-foundation.org \
--cc=dave.hansen@linux.intel.com \
--cc=david@redhat.com \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mhocko@kernel.org \
--cc=minchan@kernel.org \
--cc=peterz@infradead.org \
--cc=vbabka@suse.cz \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.