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 |
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
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
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.
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
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 --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);
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(-)