From: Matthew Wilcox <willy@infradead.org>
To: js1304@gmail.com
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Johannes Weiner <hannes@cmpxchg.org>,
Michal Hocko <mhocko@kernel.org>, Hugh Dickins <hughd@google.com>,
Minchan Kim <minchan@kernel.org>,
Vlastimil Babka <vbabka@suse.cz>,
Mel Gorman <mgorman@techsingularity.net>,
kernel-team@lge.com, Joonsoo Kim <iamjoonsoo.kim@lge.com>
Subject: Re: [PATCH v6 4/6] mm/swapcache: support to handle the exceptional entries in swapcache
Date: Wed, 17 Jun 2020 05:17:17 -0700 [thread overview]
Message-ID: <20200617121717.GI8681@bombadil.infradead.org> (raw)
In-Reply-To: <1592371583-30672-5-git-send-email-iamjoonsoo.kim@lge.com>
On Wed, Jun 17, 2020 at 02:26:21PM +0900, js1304@gmail.com wrote:
> From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
>
> Swapcache doesn't handle the exceptional entries since there is no case
Don't call them exceptional entries.
The radix tree has/had the concecpt of exceptional entries. The swapcache
doesn't use the radix tree any more, it uses the XArray. The XArray
has value entries.
But you shouldn't call them value entries either; that's an XArray
concept. The swap cache and indeed page cache use value entries to
implement shadow entries (they're also used to implement dax entries and
swap entries in the page cache). So just call them shadow entries here.
I know there are still places which use the term 'nrexceptional' in
the kernel. I just haven't got round to replacing them yet. Please
don't add more.
> +void clear_shadow_from_swap_cache(int type, unsigned long begin,
> + unsigned long end)
> +{
> + unsigned long curr;
> + void *old;
> + swp_entry_t entry = swp_entry(type, begin);
> + struct address_space *address_space = swap_address_space(entry);
> + XA_STATE(xas, &address_space->i_pages, begin);
> +
> +retry:
> + xa_lock_irq(&address_space->i_pages);
> + for (curr = begin; curr <= end; curr++) {
> + entry = swp_entry(type, curr);
> + if (swap_address_space(entry) != address_space) {
> + xa_unlock_irq(&address_space->i_pages);
> + address_space = swap_address_space(entry);
> + begin = curr;
> + xas_set(&xas, begin);
> + goto retry;
> + }
> +
> + old = xas_load(&xas);
> + if (!xa_is_value(old))
> + continue;
> + xas_store(&xas, NULL);
> + address_space->nrexceptional--;
> + xas_next(&xas);
> + }
> + xa_unlock_irq(&address_space->i_pages);
> +}
This is a very clunky loop. I'm not sure it's even right, given that
you change address space without changing the xas's address space. How
about this?
for (;;) {
XA_STATE(xas, &address_space->i_pages, begin);
unsigned long nr_shadows = 0;
xas_lock_irq(&xas);
xas_for_each(&xas, entry, end) {
if (!xa_is_value(entry))
continue;
xas_store(&xas, NULL);
nr_shadows++;
}
address_space->nr_exceptionals -= nr_shadows;
xas_unlock_irq(&xas);
if (xas.xa_index >= end)
break;
entry = swp_entry(type, xas.xa_index);
address_space = swap_address_space(entry);
}
next prev parent reply other threads:[~2020-06-17 12:17 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-17 5:26 [PATCH v6 0/6] workingset protection/detection on the anonymous LRU list js1304
2020-06-17 5:26 ` [PATCH v6 1/6] mm/vmscan: make active/inactive ratio as 1:1 for anon lru js1304
2020-06-30 17:27 ` Vlastimil Babka
2020-07-01 6:18 ` Joonsoo Kim
2020-06-17 5:26 ` [PATCH v6 2/6] mm/vmscan: protect the workingset on anonymous LRU js1304
2020-07-01 18:02 ` Vlastimil Babka
2020-07-03 0:47 ` Joonsoo Kim
2020-07-17 13:58 ` Johannes Weiner
2020-07-20 6:53 ` Joonsoo Kim
2020-06-17 5:26 ` [PATCH v6 3/6] mm/workingset: extend the workingset detection for anon LRU js1304
2020-07-01 21:25 ` Vlastimil Babka
2020-07-03 0:51 ` Joonsoo Kim
2020-06-17 5:26 ` [PATCH v6 4/6] mm/swapcache: support to handle the exceptional entries in swapcache js1304
2020-06-17 12:17 ` Matthew Wilcox [this message]
2020-06-19 1:34 ` Joonsoo Kim
2020-06-26 5:07 ` Joonsoo Kim
2020-06-17 5:26 ` [PATCH v6 5/6] mm/swap: implement workingset detection for anonymous LRU js1304
2020-07-02 13:37 ` Vlastimil Babka
2020-07-03 0:51 ` Joonsoo Kim
2020-07-17 14:05 ` Johannes Weiner
2020-06-17 5:26 ` [PATCH v6 6/6] mm/vmscan: restore active/inactive ratio " js1304
2020-07-02 13:45 ` Vlastimil Babka
2020-07-03 0:54 ` Joonsoo Kim
2020-06-26 5:12 ` [PATCH v6 0/6] workingset protection/detection on the anonymous LRU list Joonsoo Kim
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=20200617121717.GI8681@bombadil.infradead.org \
--to=willy@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=js1304@gmail.com \
--cc=kernel-team@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mhocko@kernel.org \
--cc=minchan@kernel.org \
--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).