All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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.