All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ryan Roberts <ryan.roberts@arm.com>
To: David Hildenbrand <david@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Matthew Wilcox <willy@infradead.org>,
	Huang Ying <ying.huang@intel.com>, Gao Xiang <xiang@kernel.org>,
	Yu Zhao <yuzhao@google.com>, Yang Shi <shy828301@gmail.com>,
	Michal Hocko <mhocko@suse.com>,
	Kefeng Wang <wangkefeng.wang@huawei.com>,
	Barry Song <21cnbao@gmail.com>, Chris Li <chrisl@kernel.org>,
	Lance Yang <ioworker0@gmail.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 2/6] mm: swap: free_swap_and_cache_nr() as batched free_swap_and_cache()
Date: Mon, 8 Apr 2024 11:39:49 +0100	[thread overview]
Message-ID: <de232093-cf9b-4321-a350-e6407dd7a1da@arm.com> (raw)
In-Reply-To: <79c5513b-b3f2-4fbb-a3c7-a09894d54d22@redhat.com>

On 08/04/2024 11:24, David Hildenbrand wrote:
> On 08.04.24 12:07, Ryan Roberts wrote:
>> On 08/04/2024 10:43, David Hildenbrand wrote:
>>>
>>>>>> +
>>>>>> +/**
>>>>>> + * swap_pte_batch - detect a PTE batch for a set of contiguous swap entries
>>>>>> + * @start_ptep: Page table pointer for the first entry.
>>>>>> + * @max_nr: The maximum number of table entries to consider.
>>>>>> + * @entry: Swap entry recovered from the first table entry.
>>>>>> + *
>>>>>> + * Detect a batch of contiguous swap entries: consecutive (non-present) PTEs
>>>>>> + * containing swap entries all with consecutive offsets and targeting the
>>>>>> same
>>>>>> + * swap type.
>>>>>> + *
>>>>>
>>>>> Likely you should document that any swp pte bits are ignored? ()
>>>>
>>>> Sorry I don't understand this comment. I thought any non-none, non-present PTE
>>>> was always considered to contain only a "swap entry" and a swap entry consists
>>>> of a "type" and an "offset" only. (and its a special "non-swap" swap entry if
>>>> type > SOME_CONSTANT) Are you saying there are additional fields in the PTE
>>>> that
>>>> are not part of the swap entry?
>>>
>>>
>>> pte_swp_soft_dirty()
>>> pte_swp_clear_exclusive()
>>> pte_swp_uffd_wp()
>>>
>>> Are PTE bits used for swp PTE.
>>
>> Ahh wow. mind blown. Looks like a massive hack... why not store them in the
>> arch-independent swap entry, rather than have them squat independently in the
>> PTE?
> 
> I think that was discussed at some point, but it not only requires quite some
> churn to change it (all that swp entry code is a mess), these bits are
> conceptually really per PTE and not something you would want to pass into actual
> swap handling code that couldn't care less about all of these.
> 
> I looked at this when I added SWP exclusive, but accidentally losing the SWP
> exclusive marker when converting back and forth made me go the PTE route instead.
> 
> Then, the available PTE bits are a bit scattered on some architectures, and
> converting entry<->PTE gets even uglier if we don't want to "lose" available bits.
> 
> Probably the whole "unsigned long swp_entry" stuff should be replaced by a
> proper struct where we could more easily add flags and have the arch code handle
> the conversion to the PTE just once. The arch-specific swp_entry stuff is
> another nasty thing IMHO.

Yep understood. I'll file this under "there be dragons". Thanks for the explanation.

> 
>>
>> OK, my implementation is buggy. I'll re-spin to fix this.
>>
>>
>>>
>>> There is also dirty/young for migration entries, but that's not of a concern
>>> here, because we stop for non_swap_entry().
>>
>> Looks like these are part of the offset field in the arch-independent swap entry
>> - much cleaner ;-).
> 
> Note that it only applies to migration entries, and only when we have some spare
> bits due to PFN < offset.

Yep got it. Thanks!



  reply	other threads:[~2024-04-08 10:39 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-03 11:40 [PATCH v6 0/6] Swap-out mTHP without splitting Ryan Roberts
2024-04-03 11:40 ` [PATCH v6 1/6] mm: swap: Remove CLUSTER_FLAG_HUGE from swap_cluster_info:flags Ryan Roberts
2024-04-03 22:12   ` Chris Li
2024-04-04  7:06     ` Ryan Roberts
2024-04-04 13:43       ` Chris Li
2024-04-08 11:56         ` Ryan Roberts
2024-04-05  9:25   ` David Hildenbrand
2024-04-03 11:40 ` [PATCH v6 2/6] mm: swap: free_swap_and_cache_nr() as batched free_swap_and_cache() Ryan Roberts
2024-04-05 10:13   ` David Hildenbrand
2024-04-08  9:22     ` Ryan Roberts
2024-04-08  9:43       ` David Hildenbrand
2024-04-08 10:07         ` Ryan Roberts
2024-04-08 10:24           ` David Hildenbrand
2024-04-08 10:39             ` Ryan Roberts [this message]
2024-04-08 12:07     ` Ryan Roberts
2024-04-08 12:47       ` Ryan Roberts
2024-04-08 13:27         ` Ryan Roberts
2024-04-08 15:13           ` David Hildenbrand
2024-04-03 11:40 ` [PATCH v6 3/6] mm: swap: Simplify struct percpu_cluster Ryan Roberts
2024-04-03 11:40 ` [PATCH v6 4/6] mm: swap: Allow storage of all mTHP orders Ryan Roberts
2024-04-05 10:38   ` David Hildenbrand
2024-04-07  6:02     ` Huang, Ying
2024-04-08  9:24       ` Ryan Roberts
2024-04-08  9:33         ` David Hildenbrand
2024-04-08  9:35           ` Ryan Roberts
2024-04-07  7:38   ` Barry Song
2024-04-08  9:28     ` Ryan Roberts
2024-04-03 11:40 ` [PATCH v6 5/6] mm: vmscan: Avoid split during shrink_folio_list() Ryan Roberts
2024-04-05 10:42   ` David Hildenbrand
2024-04-08  9:31     ` Ryan Roberts
2024-04-03 11:40 ` [PATCH v6 6/6] mm: madvise: Avoid split during MADV_PAGEOUT and MADV_COLD Ryan Roberts
2024-04-03 17:17   ` Ryan Roberts

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=de232093-cf9b-4321-a350-e6407dd7a1da@arm.com \
    --to=ryan.roberts@arm.com \
    --cc=21cnbao@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=chrisl@kernel.org \
    --cc=david@redhat.com \
    --cc=ioworker0@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.com \
    --cc=shy828301@gmail.com \
    --cc=wangkefeng.wang@huawei.com \
    --cc=willy@infradead.org \
    --cc=xiang@kernel.org \
    --cc=ying.huang@intel.com \
    --cc=yuzhao@google.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.