diff mbox series

mm: migrate: drop redundant anonymous statistics for file folios migration

Message ID d5e191ae02c2ab63c70cdf44877fe14fc69f5ae8.1733368611.git.baolin.wang@linux.alibaba.com (mailing list archive)
State New
Headers show
Series mm: migrate: drop redundant anonymous statistics for file folios migration | expand

Commit Message

Baolin Wang Dec. 5, 2024, 3:53 a.m. UTC
Commit 5d65c8d758f2 ("mm: count the number of anonymous THPs per size") adds
a new anonymous counter per THP size, however, when folio_mapping() is not NULL
during folio migration, it means this is not an anonymous folio, so remove the
redundant anonymous statistics in this case.

Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
---
 mm/migrate.c | 2 --
 1 file changed, 2 deletions(-)

Comments

Barry Song Dec. 5, 2024, 5 a.m. UTC | #1
On Thu, Dec 5, 2024 at 4:54 PM Baolin Wang
<baolin.wang@linux.alibaba.com> wrote:
>
> Commit 5d65c8d758f2 ("mm: count the number of anonymous THPs per size") adds
> a new anonymous counter per THP size, however, when folio_mapping() is not NULL
> during folio migration, it means this is not an anonymous folio, so remove the
> redundant anonymous statistics in this case.

why? Are you sure anon folios won't call __folio_migrate_mapping()?
folio->mapping is PAGE_MAPPING_ANON for anon folios.

static __always_inline bool folio_test_anon(const struct folio *folio)
{
        return ((unsigned long)folio->mapping & PAGE_MAPPING_ANON) != 0;
}

>
> Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
> ---
>  mm/migrate.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/mm/migrate.c b/mm/migrate.c
> index e9e00d1d1d19..d7fdfdd23fd0 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -523,8 +523,6 @@ static int __folio_migrate_mapping(struct address_space *mapping,
>          */
>         newfolio->index = folio->index;
>         newfolio->mapping = folio->mapping;
> -       if (folio_test_anon(folio) && folio_test_large(folio))
> -               mod_mthp_stat(folio_order(folio), MTHP_STAT_NR_ANON, 1);
>         folio_ref_add(newfolio, nr); /* add cache reference */
>         if (folio_test_swapbacked(folio)) {
>                 __folio_set_swapbacked(newfolio);
> --
> 2.39.3
>

Thanks
Barry
Huang, Ying Dec. 5, 2024, 5:39 a.m. UTC | #2
Baolin Wang <baolin.wang@linux.alibaba.com> writes:

> Commit 5d65c8d758f2 ("mm: count the number of anonymous THPs per size") adds
> a new anonymous counter per THP size, however, when folio_mapping() is not NULL
> during folio migration, it means this is not an anonymous folio, so remove the
> redundant anonymous statistics in this case.

They may be anonymous folios in swap cache?

> Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
> ---
>  mm/migrate.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/mm/migrate.c b/mm/migrate.c
> index e9e00d1d1d19..d7fdfdd23fd0 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -523,8 +523,6 @@ static int __folio_migrate_mapping(struct address_space *mapping,
>  	 */
>  	newfolio->index = folio->index;
>  	newfolio->mapping = folio->mapping;
> -	if (folio_test_anon(folio) && folio_test_large(folio))
> -		mod_mthp_stat(folio_order(folio), MTHP_STAT_NR_ANON, 1);
>  	folio_ref_add(newfolio, nr); /* add cache reference */
>  	if (folio_test_swapbacked(folio)) {
>  		__folio_set_swapbacked(newfolio);

---
Best Regards,
Huang, Ying
Baolin Wang Dec. 5, 2024, 6:06 a.m. UTC | #3
On 2024/12/5 13:00, Barry Song wrote:
> On Thu, Dec 5, 2024 at 4:54 PM Baolin Wang
> <baolin.wang@linux.alibaba.com> wrote:
>>
>> Commit 5d65c8d758f2 ("mm: count the number of anonymous THPs per size") adds
>> a new anonymous counter per THP size, however, when folio_mapping() is not NULL
>> during folio migration, it means this is not an anonymous folio, so remove the
>> redundant anonymous statistics in this case.
> 
> why? Are you sure anon folios won't call __folio_migrate_mapping()?
> folio->mapping is PAGE_MAPPING_ANON for anon folios.
> 
> static __always_inline bool folio_test_anon(const struct folio *folio)
> {
>          return ((unsigned long)folio->mapping & PAGE_MAPPING_ANON) != 0;
> }

Ah, sorry for noise. This just caught my eyes when reading the code, and 
I did not think about it deeply before sending a quick patch. Thanks to 
Barry and Ying for the reminder.

Andrew, please drop this quick patch. Sorry for the trouble.
Barry Song Dec. 5, 2024, 6:33 a.m. UTC | #4
On Thu, Dec 5, 2024 at 7:06 PM Baolin Wang
<baolin.wang@linux.alibaba.com> wrote:
>
>
>
> On 2024/12/5 13:00, Barry Song wrote:
> > On Thu, Dec 5, 2024 at 4:54 PM Baolin Wang
> > <baolin.wang@linux.alibaba.com> wrote:
> >>
> >> Commit 5d65c8d758f2 ("mm: count the number of anonymous THPs per size") adds
> >> a new anonymous counter per THP size, however, when folio_mapping() is not NULL
> >> during folio migration, it means this is not an anonymous folio, so remove the
> >> redundant anonymous statistics in this case.
> >
> > why? Are you sure anon folios won't call __folio_migrate_mapping()?
> > folio->mapping is PAGE_MAPPING_ANON for anon folios.
> >
> > static __always_inline bool folio_test_anon(const struct folio *folio)
> > {
> >          return ((unsigned long)folio->mapping & PAGE_MAPPING_ANON) != 0;
> > }
>
> Ah, sorry for noise. This just caught my eyes when reading the code, and
> I did not think about it deeply before sending a quick patch. Thanks to
> Barry and Ying for the reminder.

No worries. I recall encountering a negative count during the development of
the original patch and eventually realizing it was due to forgetting
to increment
the migrated anon folios. Your patch seems to reintroduce the bug I encountered
back then :-)

>
> Andrew, please drop this quick patch. Sorry for the trouble.
>

Thanks
Barry
Baolin Wang Dec. 5, 2024, 6:50 a.m. UTC | #5
On 2024/12/5 14:33, Barry Song wrote:
> On Thu, Dec 5, 2024 at 7:06 PM Baolin Wang
> <baolin.wang@linux.alibaba.com> wrote:
>>
>>
>>
>> On 2024/12/5 13:00, Barry Song wrote:
>>> On Thu, Dec 5, 2024 at 4:54 PM Baolin Wang
>>> <baolin.wang@linux.alibaba.com> wrote:
>>>>
>>>> Commit 5d65c8d758f2 ("mm: count the number of anonymous THPs per size") adds
>>>> a new anonymous counter per THP size, however, when folio_mapping() is not NULL
>>>> during folio migration, it means this is not an anonymous folio, so remove the
>>>> redundant anonymous statistics in this case.
>>>
>>> why? Are you sure anon folios won't call __folio_migrate_mapping()?
>>> folio->mapping is PAGE_MAPPING_ANON for anon folios.
>>>
>>> static __always_inline bool folio_test_anon(const struct folio *folio)
>>> {
>>>           return ((unsigned long)folio->mapping & PAGE_MAPPING_ANON) != 0;
>>> }
>>
>> Ah, sorry for noise. This just caught my eyes when reading the code, and
>> I did not think about it deeply before sending a quick patch. Thanks to
>> Barry and Ying for the reminder.
> 
> No worries. I recall encountering a negative count during the development of
> the original patch and eventually realizing it was due to forgetting
> to increment
> the migrated anon folios. Your patch seems to reintroduce the bug I encountered
> back then :-)

Right. I was blind and need a cup of coffee:)
diff mbox series

Patch

diff --git a/mm/migrate.c b/mm/migrate.c
index e9e00d1d1d19..d7fdfdd23fd0 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -523,8 +523,6 @@  static int __folio_migrate_mapping(struct address_space *mapping,
 	 */
 	newfolio->index = folio->index;
 	newfolio->mapping = folio->mapping;
-	if (folio_test_anon(folio) && folio_test_large(folio))
-		mod_mthp_stat(folio_order(folio), MTHP_STAT_NR_ANON, 1);
 	folio_ref_add(newfolio, nr); /* add cache reference */
 	if (folio_test_swapbacked(folio)) {
 		__folio_set_swapbacked(newfolio);