From: Yang Shi <yang.shi@linux.alibaba.com>
To: Vlastimil Babka <vbabka@suse.cz>,
hughd@google.com, kirill.shutemov@linux.intel.com,
mhocko@suse.com, rientjes@google.com, akpm@linux-foundation.org
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [v3 PATCH 2/2] mm: thp: fix false negative of shmem vma's THP eligibility
Date: Wed, 19 Jun 2019 09:28:42 -0700 [thread overview]
Message-ID: <5dde4380-68b4-66ee-2c3c-9b9da0c243ca@linux.alibaba.com> (raw)
In-Reply-To: <4a07a6b8-8ff2-419c-eac8-3e7dc17670df@suse.cz>
On 6/19/19 5:12 AM, Vlastimil Babka wrote:
> On 6/13/19 6:44 AM, Yang Shi wrote:
>> The commit 7635d9cbe832 ("mm, thp, proc: report THP eligibility for each
>> vma") introduced THPeligible bit for processes' smaps. But, when checking
>> the eligibility for shmem vma, __transparent_hugepage_enabled() is
>> called to override the result from shmem_huge_enabled(). It may result
>> in the anonymous vma's THP flag override shmem's. For example, running a
>> simple test which create THP for shmem, but with anonymous THP disabled,
>> when reading the process's smaps, it may show:
> ...
>
>> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
>> index 01d4eb0..6a13882 100644
>> --- a/fs/proc/task_mmu.c
>> +++ b/fs/proc/task_mmu.c
>> @@ -796,7 +796,8 @@ static int show_smap(struct seq_file *m, void *v)
>>
>> __show_smap(m, &mss);
>>
>> - seq_printf(m, "THPeligible: %d\n", transparent_hugepage_enabled(vma));
>> + seq_printf(m, "THPeligible: %d\n",
>> + transparent_hugepage_enabled(vma));
>>
>> if (arch_pkeys_enabled())
>> seq_printf(m, "ProtectionKey: %8u\n", vma_pkey(vma));
>> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
>> index 4bc2552..36f0225 100644
>> --- a/mm/huge_memory.c
>> +++ b/mm/huge_memory.c
>> @@ -65,10 +65,15 @@
>>
>> bool transparent_hugepage_enabled(struct vm_area_struct *vma)
>> {
>> + /* The addr is used to check if the vma size fits */
>> + unsigned long addr = (vma->vm_end & HPAGE_PMD_MASK) - HPAGE_PMD_SIZE;
>> +
>> + if (!transhuge_vma_suitable(vma, addr))
>> + return false;
> Sorry for replying rather late, and not in the v2 thread, but unlike
> Hugh I'm not convinced that we should include vma size/alignment in the
> test for reporting THPeligible, which was supposed to reflect
> administrative settings and madvise hints. I guess it's mostly a matter
> of personal feeling. But one objective distinction is that the admin
> settings and madvise do have an exact binary result for the whole VMA,
> while this check is more fuzzy - only part of the VMA's span might be
> properly sized+aligned, and THPeligible will be 1 for the whole VMA.
I think THPeligible is used to tell us if the vma is suitable for
allocating THP. Both anonymous and shmem THP checks vma size/alignment
to decide to or not to allocate THP.
And, if vma size/alignment is not checked, THPeligible may show "true"
for even 4K mapping. This doesn't make too much sense either.
>
>> if (vma_is_anonymous(vma))
>> return __transparent_hugepage_enabled(vma);
>> - if (vma_is_shmem(vma) && shmem_huge_enabled(vma))
>> - return __transparent_hugepage_enabled(vma);
>> + if (vma_is_shmem(vma))
>> + return shmem_huge_enabled(vma);
>>
>> return false;
>> }
>> diff --git a/mm/shmem.c b/mm/shmem.c
>> index 1bb3b8d..a807712 100644
>> --- a/mm/shmem.c
>> +++ b/mm/shmem.c
>> @@ -3872,6 +3872,9 @@ bool shmem_huge_enabled(struct vm_area_struct *vma)
>> loff_t i_size;
>> pgoff_t off;
>>
>> + if ((vma->vm_flags & VM_NOHUGEPAGE) ||
>> + test_bit(MMF_DISABLE_THP, &vma->vm_mm->flags))
>> + return false;
>> if (shmem_huge == SHMEM_HUGE_FORCE)
>> return true;
>> if (shmem_huge == SHMEM_HUGE_DENY)
>>
next prev parent reply other threads:[~2019-06-19 16:28 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-13 4:43 [v3 PATCH 0/2] Fix false negative of shmem vma's THP eligibility Yang Shi
2019-06-13 4:44 ` [v3 PATCH 1/2] mm: thp: make transhuge_vma_suitable available for anonymous THP Yang Shi
2019-07-17 19:43 ` Hugh Dickins
2019-07-17 21:03 ` Yang Shi
2019-06-13 4:44 ` [v3 PATCH 2/2] mm: thp: fix false negative of shmem vma's THP eligibility Yang Shi
2019-06-19 12:12 ` Vlastimil Babka
2019-06-19 16:28 ` Yang Shi [this message]
2019-07-18 21:44 ` Andrew Morton
2019-07-18 21:52 ` Vlastimil Babka
2019-07-18 22:06 ` Hugh Dickins
2019-07-17 19:44 ` Hugh Dickins
2019-07-15 19:49 ` [v3 PATCH 0/2] Fix " Yang Shi
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=5dde4380-68b4-66ee-2c3c-9b9da0c243ca@linux.alibaba.com \
--to=yang.shi@linux.alibaba.com \
--cc=akpm@linux-foundation.org \
--cc=hughd@google.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=rientjes@google.com \
--cc=vbabka@suse.cz \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).