linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Johannes Weiner <hannes@cmpxchg.org>
To: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: Nhat Pham <nphamcs@gmail.com>,
	akpm@linux-foundation.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, minchan@kernel.org,
	ngupta@vflare.org, sjenning@redhat.com, ddstreet@ieee.org,
	vitaly.wool@konsulko.com
Subject: Re: [PATCH v6 6/6] zsmalloc: Implement writeback mechanism for zsmalloc
Date: Mon, 21 Nov 2022 22:12:11 -0500	[thread overview]
Message-ID: <Y3w+C8ClzP6VbqrA@cmpxchg.org> (raw)
In-Reply-To: <Y3wwuMSy8YC86QAi@google.com>

On Tue, Nov 22, 2022 at 11:15:20AM +0900, Sergey Senozhatsky wrote:
> On (22/11/18 16:15), Nhat Pham wrote:
> > +
> > +static int zs_zpool_shrink(void *pool, unsigned int pages,
> > +			unsigned int *reclaimed)
> > +{
> > +	unsigned int total = 0;
> > +	int ret = -EINVAL;
> > +
> > +	while (total < pages) {
> > +		ret = zs_reclaim_page(pool, 8);
> > +		if (ret < 0)
> > +			break;
> > +		total++;
> > +	}
> > +
> > +	if (reclaimed)
> > +		*reclaimed = total;
> > +
> > +	return ret;
> > +}
> 
> A silly question: why do we need a retry loop in zs_reclaim_page()?

Individual objects in a zspage can be busy (swapped in simultaneously
for example), which will prevent the zspage from being freed. Zswap
currently requests reclaim of one backend page at a time (another
project...), so if we don't retry we're not meeting the reclaim goal
and cause rejections for new stores. Rejections are worse than moving
on to the adjacent LRU item, because a rejected page, which should be
at the head of the LRU, bypasses the list and goes straight to swap.

The number 8 is cribbed from zbud and z3fold. It works well in
practice, but is as arbitrary as MAX_RECLAIM_RETRIES used all over MM.
We may want to revisit it at some point, but we should probably do it
for all backends then.

  reply	other threads:[~2022-11-22  3:11 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-19  0:15 [PATCH v6 0/6] Implement writeback for zsmalloc Nhat Pham
2022-11-19  0:15 ` [PATCH v6 1/6] zswap: fix writeback lock ordering " Nhat Pham
2022-11-22  1:43   ` Sergey Senozhatsky
2022-11-19  0:15 ` [PATCH v6 2/6] zpool: clean out dead code Nhat Pham
2022-11-22  1:46   ` Sergey Senozhatsky
2022-11-19  0:15 ` [PATCH v6 3/6] zsmalloc: Consolidate zs_pool's migrate_lock and size_class's locks Nhat Pham
2022-11-19  0:15 ` [PATCH v6 4/6] zsmalloc: Add a LRU to zs_pool to keep track of zspages in LRU order Nhat Pham
2022-11-19 16:38   ` Johannes Weiner
2022-11-19 17:34   ` Minchan Kim
2022-11-22  1:52   ` Sergey Senozhatsky
2022-11-22 17:42     ` Johannes Weiner
2022-11-23  3:50       ` Sergey Senozhatsky
2022-11-23  8:02         ` Yosry Ahmed
2022-11-23  8:11           ` Yosry Ahmed
2022-11-23 16:30             ` Johannes Weiner
2022-11-24  3:29               ` Sergey Senozhatsky
2022-11-24  3:21           ` Sergey Senozhatsky
2022-11-23  3:58   ` Sergey Senozhatsky
2022-11-19  0:15 ` [PATCH v6 5/6] zsmalloc: Add zpool_ops field to zs_pool to store evict handlers Nhat Pham
2022-11-19 16:39   ` Johannes Weiner
2022-11-22  1:11     ` Sergey Senozhatsky
2022-11-19  0:15 ` [PATCH v6 6/6] zsmalloc: Implement writeback mechanism for zsmalloc Nhat Pham
2022-11-19 16:45   ` Johannes Weiner
2022-11-19 17:35   ` Minchan Kim
2022-11-22  1:40   ` Sergey Senozhatsky
2022-11-22  2:00   ` Sergey Senozhatsky
2022-11-22  2:15   ` Sergey Senozhatsky
2022-11-22  3:12     ` Johannes Weiner [this message]
2022-11-22  3:42       ` Sergey Senozhatsky
2022-11-22  6:09         ` Johannes Weiner
2022-11-22  6:35           ` Sergey Senozhatsky
2022-11-22  7:10             ` Johannes Weiner
2022-11-22  7:19               ` Sergey Senozhatsky
2022-11-22  6:37   ` Sergey Senozhatsky
2022-11-23 16:30     ` Nhat Pham
2022-11-23 17:27       ` Johannes Weiner
2022-11-23 17:18     ` Johannes Weiner
2022-11-21 19:29 ` [PATCH v6 0/6] Implement writeback " Nhat Pham
2022-11-23 19:26   ` Nhat Pham

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=Y3w+C8ClzP6VbqrA@cmpxchg.org \
    --to=hannes@cmpxchg.org \
    --cc=akpm@linux-foundation.org \
    --cc=ddstreet@ieee.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan@kernel.org \
    --cc=ngupta@vflare.org \
    --cc=nphamcs@gmail.com \
    --cc=senozhatsky@chromium.org \
    --cc=sjenning@redhat.com \
    --cc=vitaly.wool@konsulko.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).