From: Baolin Wang <baolin.wang@linux.alibaba.com>
To: Lance Yang <ioworker0@gmail.com>
Cc: akpm@linux-foundation.org, hughd@google.com, willy@infradead.org,
david@redhat.com, wangkefeng.wang@huawei.com,
ying.huang@intel.com, 21cnbao@gmail.com, ryan.roberts@arm.com,
shy828301@gmail.com, ziy@nvidia.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 7/7] mm: shmem: add mTHP counters for anonymous shmem
Date: Wed, 15 May 2024 11:14:10 +0800 [thread overview]
Message-ID: <eca43fd2-e704-4696-932a-2d3b5f3d5cdf@linux.alibaba.com> (raw)
In-Reply-To: <CAK1f24kfR-LOk_vvhBWddVnDdiDZYh8aZeknknWkhi7_5fhQ=A@mail.gmail.com>
On 2024/5/14 22:49, Lance Yang wrote:
> Hi Baolin,
>
> On Mon, May 13, 2024 at 1:08 PM Baolin Wang
> <baolin.wang@linux.alibaba.com> wrote:
>>
>> Add mTHP counters for anonymous shmem.
>>
>> Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
>> ---
>> include/linux/huge_mm.h | 3 +++
>> mm/huge_memory.c | 6 ++++++
>> mm/shmem.c | 18 +++++++++++++++---
>> 3 files changed, 24 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
>> index b5339210268d..e162498fef82 100644
>> --- a/include/linux/huge_mm.h
>> +++ b/include/linux/huge_mm.h
>> @@ -281,6 +281,9 @@ enum mthp_stat_item {
>> MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE,
>> MTHP_STAT_ANON_SWPOUT,
>> MTHP_STAT_ANON_SWPOUT_FALLBACK,
>> + MTHP_STAT_FILE_ALLOC,
>> + MTHP_STAT_FILE_FALLBACK,
>> + MTHP_STAT_FILE_FALLBACK_CHARGE,
>> __MTHP_STAT_COUNT
>> };
>>
>> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
>> index d3080a8843f2..fcda6ae604f6 100644
>> --- a/mm/huge_memory.c
>> +++ b/mm/huge_memory.c
>> @@ -555,6 +555,9 @@ DEFINE_MTHP_STAT_ATTR(anon_fault_fallback, MTHP_STAT_ANON_FAULT_FALLBACK);
>> DEFINE_MTHP_STAT_ATTR(anon_fault_fallback_charge, MTHP_STAT_ANON_FAULT_FALLBACK_CHARGE);
>> DEFINE_MTHP_STAT_ATTR(anon_swpout, MTHP_STAT_ANON_SWPOUT);
>> DEFINE_MTHP_STAT_ATTR(anon_swpout_fallback, MTHP_STAT_ANON_SWPOUT_FALLBACK);
>> +DEFINE_MTHP_STAT_ATTR(file_alloc, MTHP_STAT_FILE_ALLOC);
>> +DEFINE_MTHP_STAT_ATTR(file_fallback, MTHP_STAT_FILE_FALLBACK);
>> +DEFINE_MTHP_STAT_ATTR(file_fallback_charge, MTHP_STAT_FILE_FALLBACK_CHARGE);
>>
>> static struct attribute *stats_attrs[] = {
>> &anon_fault_alloc_attr.attr,
>> @@ -562,6 +565,9 @@ static struct attribute *stats_attrs[] = {
>> &anon_fault_fallback_charge_attr.attr,
>> &anon_swpout_attr.attr,
>> &anon_swpout_fallback_attr.attr,
>> + &file_alloc_attr.attr,
>> + &file_fallback_attr.attr,
>> + &file_fallback_charge_attr.attr,
>> NULL,
>> };
>>
>> diff --git a/mm/shmem.c b/mm/shmem.c
>> index 8b020ff09c72..fd2cb2e73a21 100644
>> --- a/mm/shmem.c
>> +++ b/mm/shmem.c
>> @@ -1786,6 +1786,9 @@ static struct folio *shmem_alloc_and_add_folio(struct vm_fault *vmf,
>>
>> if (pages == HPAGE_PMD_NR)
>> count_vm_event(THP_FILE_FALLBACK);
>> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE
>> + count_mthp_stat(order, MTHP_STAT_FILE_FALLBACK);
>> +#endif
>
> Seems like we don't need these conditional compilation directives here.
>
> The THP_FILE_FALLBACK above will result in a compilation error if
> CONFIG_TRANSPARENT_HUGEPAGE is not defined. So we don't
> worry about that :)
>
> See THP_FILE_FALLBACK in include/linux/vm_event_item.h.
>
>> order = next_order(&suitable_orders, order);
>> }
>> } else {
>> @@ -1805,9 +1808,15 @@ static struct folio *shmem_alloc_and_add_folio(struct vm_fault *vmf,
>> if (xa_find(&mapping->i_pages, &index,
>> index + pages - 1, XA_PRESENT)) {
>> error = -EEXIST;
>> - } else if (pages == HPAGE_PMD_NR) {
>> - count_vm_event(THP_FILE_FALLBACK);
>> - count_vm_event(THP_FILE_FALLBACK_CHARGE);
>> + } else if (pages > 1) {
>> + if (pages == HPAGE_PMD_NR) {
>> + count_vm_event(THP_FILE_FALLBACK);
>> + count_vm_event(THP_FILE_FALLBACK_CHARGE);
>> + }
>> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE
>> + count_mthp_stat(folio_order(folio), MTHP_STAT_FILE_FALLBACK);
>> + count_mthp_stat(folio_order(folio), MTHP_STAT_FILE_FALLBACK_CHARGE);
>> +#endif
>
> As above.
>
>> }
>> goto unlock;
>> }
>> @@ -2178,6 +2187,9 @@ static int shmem_get_folio_gfp(struct inode *inode, pgoff_t index,
>> if (!IS_ERR(folio)) {
>> if (folio_test_pmd_mappable(folio))
>> count_vm_event(THP_FILE_ALLOC);
>> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE
>> + count_mthp_stat(folio_order(folio), MTHP_STAT_FILE_ALLOC);
>> +#endif
>
> As above.
>
> Perhaps we need to define MTHP_STAT_FILE_ALLOC and friends
> using a same way as THP_FILE_ALLOC, set as '{ BUILD_BUG(); 0; }'
> If CONFIG_TRANSPARENT_HUGEPAGE is not defined.
>
> Likely:
>
> #ifndef CONFIG_TRANSPARENT_HUGEPAGE
> #define MTHP_STAT_FILE_ALLOC ({ BUILD_BUG(); 0; })
> ...
> #endif
This is not enough, and we should also define a dummy function for
count_mthp_stat() when CONFIG_TRANSPARENT_HUGEPAGE is not enabled. I was
also hesitant about doing this before, but adding macro controls seems
relatively simple:)
Thanks for reviewing.
prev parent reply other threads:[~2024-05-15 3:14 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-13 5:08 [PATCH v2 0/7] add mTHP support for anonymous shmem Baolin Wang
2024-05-13 5:08 ` [PATCH v2 1/7] mm: memory: extend finish_fault() to support large folio Baolin Wang
2024-05-13 5:08 ` [PATCH v2 2/7] mm: shmem: add an 'order' parameter for shmem_alloc_hugefolio() Baolin Wang
2024-05-13 5:08 ` [PATCH v2 3/7] mm: shmem: add THP validation for PMD-mapped THP related statistics Baolin Wang
2024-05-13 5:08 ` [PATCH v2 4/7] mm: shmem: add multi-size THP sysfs interface for anonymous shmem Baolin Wang
2024-05-13 5:08 ` [PATCH v2 5/7] mm: shmem: add mTHP support " Baolin Wang
2024-05-14 13:36 ` Lance Yang
2024-05-15 3:09 ` Baolin Wang
2024-05-13 5:08 ` [PATCH v2 6/7] mm: shmem: add mTHP size alignment in shmem_get_unmapped_area Baolin Wang
2024-05-13 5:08 ` [PATCH v2 7/7] mm: shmem: add mTHP counters for anonymous shmem Baolin Wang
2024-05-14 14:49 ` Lance Yang
2024-05-15 3:14 ` Baolin Wang [this message]
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=eca43fd2-e704-4696-932a-2d3b5f3d5cdf@linux.alibaba.com \
--to=baolin.wang@linux.alibaba.com \
--cc=21cnbao@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=david@redhat.com \
--cc=hughd@google.com \
--cc=ioworker0@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ryan.roberts@arm.com \
--cc=shy828301@gmail.com \
--cc=wangkefeng.wang@huawei.com \
--cc=willy@infradead.org \
--cc=ying.huang@intel.com \
--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.