All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nadav Amit <nadav.amit@gmail.com>
To: Peter Xu <peterx@redhat.com>
Cc: "Huang, Ying" <ying.huang@intel.com>,
	Linux MM <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Minchan Kim <minchan@kernel.org>,
	David Hildenbrand <david@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Hugh Dickins <hughd@google.com>, Vlastimil Babka <vbabka@suse.cz>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Andi Kleen <andi.kleen@intel.com>,
	"Kirill A . Shutemov" <kirill@shutemov.name>,
	Dave Hansen <dave.hansen@linux.intel.com>
Subject: Re: [PATCH v3 5/7] mm: Remember young/dirty bit for page migrations
Date: Mon, 15 Aug 2022 14:03:01 -0700	[thread overview]
Message-ID: <E37036E0-566E-40C7-AD15-720CDB003227@gmail.com> (raw)
In-Reply-To: <5B21352C-2BE6-4070-BB6B-C1B7A5D4D225@gmail.com>

On Aug 15, 2022, at 1:52 PM, Nadav Amit <nadav.amit@gmail.com> wrote:

> On Aug 15, 2022, at 12:18 PM, Peter Xu <peterx@redhat.com> wrote:
> 
>> On Fri, Aug 12, 2022 at 10:32:48AM +0800, Huang, Ying wrote:
>>> Peter Xu <peterx@redhat.com> writes:
>>> 
>>>> On Tue, Aug 09, 2022 at 06:00:58PM -0400, Peter Xu wrote:
>>>>> diff --git a/mm/migrate_device.c b/mm/migrate_device.c
>>>>> index 27fb37d65476..699f821b8443 100644
>>>>> --- a/mm/migrate_device.c
>>>>> +++ b/mm/migrate_device.c
>>>>> @@ -221,6 +221,10 @@ static int migrate_vma_collect_pmd(pmd_t *pmdp,
>>>>> 			else
>>>>> 				entry = make_readable_migration_entry(
>>>>> 							page_to_pfn(page));
>>>>> +			if (pte_young(pte))
>>>>> +				entry = make_migration_entry_young(entry);
>>>>> +			if (pte_dirty(pte))
>>>>> +				entry = make_migration_entry_dirty(entry);
>>>>> 			swp_pte = swp_entry_to_pte(entry);
>>>>> 			if (pte_present(pte)) {
>>>>> 				if (pte_soft_dirty(pte))
>>>> 
>>>> This change needs to be wrapped with pte_present() at least..
>>>> 
>>>> I also just noticed that this change probably won't help anyway because:
>>>> 
>>>> (1) When ram->device, the pte will finally be replaced with a device
>>>>     private entry, and device private entry does not yet support A/D, it
>>>>     means A/D will be dropped again,
>>>> 
>>>> (2) When device->ram, we are missing information on either A/D bits, or
>>>>     even if device private entries start to suport A/D, it's still not
>>>>     clear whether we should take device read/write into considerations
>>>>     too on the page A/D bits to be accurate.
>>>> 
>>>> I think I'll probably keep the code there for completeness, but I think it
>>>> won't really help much until more things are done.
>>> 
>>> It appears that there are more issues.  Between "pte = *ptep" and pte
>>> clear, CPU may set A/D bit in PTE, so we may need to update pte when
>>> clearing PTE.
>> 
>> Agreed, I didn't see it a huge problem with current code, but it should be
>> better in that way.
>> 
>>> And I don't find the TLB is flushed in some cases after PTE is cleared.
>> 
>> I think it's okay to not flush tlb if pte not present.  But maybe you're
>> talking about something else?
> 
> I think Huang refers to situation in which the PTE is cleared, still not
> flushed, and then A/D is being set by the hardware.
> 
> At least on x86, the hardware is not supposed to do so. The only case I
> remember (and sometimes misremembers) is with KNL erratum, which perhaps
> needs to be considered:
> 
> https://lore.kernel.org/all/20160708001911.9A3FD2B6@viggo.jf.intel.com/

I keep not remembering this erratum correctly. IIRC, the erratum says that
the access/dirty might be set, but it does not mean that a write is possible
after the PTE is cleared (i.e., the dirty/access might be set on the
non-present PTE, but the access itself would fail). So it is not an issue in
this case - losing A/D would not impact correctness since the access should
fail.

Dave Hansen hates when I get confused with this one, but I cc him if he
wants to confirm.

[ Having said all of that, in general the lack of regard to
  mm->tlb_flush_pending is always concerning in such functions. ]

  reply	other threads:[~2022-08-15 21:03 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-09 22:00 [PATCH v3 0/7] mm: Remember a/d bits for migration entries Peter Xu
2022-08-09 22:00 ` [PATCH v3 1/7] mm/x86: Use SWP_TYPE_BITS in 3-level swap macros Peter Xu
2022-08-10  1:13   ` Huang, Ying
2022-08-09 22:00 ` [PATCH v3 2/7] mm/swap: Comment all the ifdef in swapops.h Peter Xu
2022-08-10  1:19   ` Huang, Ying
2022-08-09 22:00 ` [PATCH v3 3/7] mm/swap: Add swp_offset_pfn() to fetch PFN from swap entry Peter Xu
2022-08-10  6:04   ` Huang, Ying
2022-08-10 13:17     ` Peter Xu
2022-08-09 22:00 ` [PATCH v3 4/7] mm/thp: Carry over dirty bit when thp splits on pmd Peter Xu
2022-08-10  6:24   ` Huang, Ying
2022-08-10 15:13     ` Peter Xu
2022-08-09 22:00 ` [PATCH v3 5/7] mm: Remember young/dirty bit for page migrations Peter Xu
2022-08-10  6:30   ` Huang, Ying
2022-08-10 15:19     ` Peter Xu
2022-08-11 15:19   ` Peter Xu
2022-08-12  2:32     ` Huang, Ying
2022-08-15 19:18       ` Peter Xu
2022-08-15 20:52         ` Nadav Amit
2022-08-15 21:03           ` Nadav Amit [this message]
2022-08-18 16:39             ` Dave Hansen
2022-08-17  1:49           ` Huang, Ying
2022-08-09 22:00 ` [PATCH v3 6/7] mm/swap: Cache maximum swapfile size when init swap Peter Xu
2022-08-10  6:33   ` Huang, Ying
2022-08-10 13:23     ` Peter Xu
2022-08-09 22:01 ` [PATCH v3 7/7] mm/swap: Cache swap migration A/D bits support Peter Xu
2022-08-10  6:37   ` Huang, Ying
2022-08-10 17:09     ` Peter Xu

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=E37036E0-566E-40C7-AD15-720CDB003227@gmail.com \
    --to=nadav.amit@gmail.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=andi.kleen@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=david@redhat.com \
    --cc=hughd@google.com \
    --cc=kirill@shutemov.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan@kernel.org \
    --cc=peterx@redhat.com \
    --cc=vbabka@suse.cz \
    --cc=ying.huang@intel.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.