linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Vlastimil Babka <vbabka@suse.cz>
To: Yang Shi <yang.shi@linux.alibaba.com>,
	mhocko@suse.com, rientjes@google.com, kirill@shutemov.name,
	akpm@linux-foundation.org
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org__handle_mm_fault
Subject: Re: [v2 PATCH] mm: thp: fix false negative of shmem vma's THP eligibility
Date: Wed, 24 Apr 2019 18:17:43 +0200	[thread overview]
Message-ID: <e9feaee4-4276-e672-c852-b64fd8965838@suse.cz> (raw)
In-Reply-To: <cca0cab8-c1a5-2ea5-0433-964b8166f54a@linux.alibaba.com>

On 4/24/19 5:47 PM, Yang Shi wrote:
> 
> 
> On 4/24/19 6:10 AM, Vlastimil Babka wrote:
>> On 4/23/19 6:43 PM, 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:
>>>
>>> 7fc92ec00000-7fc92f000000 rw-s 00000000 00:14 27764 /dev/shm/test
>>> Size:               4096 kB
>>> ...
>>> [snip]
>>> ...
>>> ShmemPmdMapped:     4096 kB
>> But how does this happen in the first place?
>> In __handle_mm_fault() we do:
>>
>>          if (pmd_none(*vmf.pmd) && __transparent_hugepage_enabled(vma)) {
>>                  ret = create_huge_pmd(&vmf);
>>                  if (!(ret & VM_FAULT_FALLBACK))
>>                          return ret;
>>
>> And __transparent_hugepage_enabled() checks the global THP settings.
>> If THP is not enabled / is only for madvise and the vma is not madvised,
>> then this should fail, and also khugepaged shouldn't either run at all,
>> or don't do its job for such non-madvised vma.
> 
> If __transparent_hugepage_enabled() returns false, the code will not 
> reach create_huge_pmd() at all. If it returns true, create_huge_pmd() 
> actually will return VM_FAULT_FALLBACK for shmem since shmem doesn't 
> have huge_fault (or pmd_fault in earlier versions) method.
> 
> Then it will get into handle_pte_fault(), finally shmem_fault() is 
> called, which allocates THP by checking some global flag (i.e. 
> VM_NOHUGEPAGE and MMF_DISABLE_THP) and  shmem THP knobs.

Aha, thanks! What a mess...

> 
> 4.8 (the first version has shmem THP merged) behaves exactly in the same 
> way. So, I suspect this may be intended behavior.

Still looks like an oversight to me. And it's inconsistent... it might
fault huge shmem pages when THPs are globally disabled, but khugepaged
is still not running. I think it should just check the global THP flags
as well...


  reply	other threads:[~2019-04-24 16:21 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-23 16:43 [v2 PATCH] mm: thp: fix false negative of shmem vma's THP eligibility Yang Shi
2019-04-23 17:52 ` Michal Hocko
2019-04-23 18:34   ` Yang Shi
2019-04-24  0:22     ` Yang Shi
2019-04-24  7:58       ` Michal Hocko
2019-04-28 19:13   ` Yang Shi
2019-05-06 23:37     ` Yang Shi
2019-05-07 10:47       ` Michal Hocko
2019-05-07 17:10         ` Yang Shi
2019-06-06 18:59           ` Yang Shi
2019-06-07 10:57             ` Hugh Dickins
2019-06-07 14:25               ` Michal Hocko
2019-06-07 18:51               ` Yang Shi
2019-04-24 13:10 ` Vlastimil Babka
2019-04-24 15:47   ` Yang Shi
2019-04-24 16:17     ` Vlastimil Babka [this message]
2019-04-25 16:44       ` Yang Shi
2019-06-08  3:58 ` Hugh Dickins
2019-06-10 17:33   ` Yang Shi
2019-06-12 18:44     ` Hugh Dickins
2019-06-12 19:59       ` 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=e9feaee4-4276-e672-c852-b64fd8965838@suse.cz \
    --to=vbabka@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=kirill@shutemov.name \
    --cc=linux-kernel@vger.kernel.org__handle_mm_fault \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.com \
    --cc=rientjes@google.com \
    --cc=yang.shi@linux.alibaba.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 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).