From: Minchan Kim <minchan@kernel.org>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH] mm: Disable zsmalloc on PREEMPT_RT
Date: Thu, 23 Sep 2021 16:06:58 -0700 [thread overview]
Message-ID: <YU0IkoeWYLdll6/+@google.com> (raw)
In-Reply-To: <20210923170121.1860133-1-bigeasy@linutronix.de>
On Thu, Sep 23, 2021 at 07:01:21PM +0200, Sebastian Andrzej Siewior wrote:
> For efficiency reasons, zsmalloc is using a slim `handle'. The value is
> the address of a memory allocation of 4 or 8 bytes depending on the size
> of the long data type. The lowest bit in that allocated memory is used
> as a bit spin lock.
> The usage of the bit spin lock is problematic because with the bit spin
> lock held zsmalloc acquires a rwlock_t and spinlock_t which are both
> sleeping locks on PREEMPT_RT and therefore must not be acquired with
> disabled preemption.
I am not sure how long the preemption disabled section takes since it
just disable for a page copy mostly.
>
> There is a patch which extends the handle on PREEMPT_RT so that a full
> spinlock_t fits (even with lockdep enabled) and then eliminates the bit
> spin lock. I'm not sure how sensible zsmalloc on PREEMPT_RT is given
> that it is used to store compressed user memory.
I don't see what's relation between PREEMPT_RT and compressed user
memory so you can reach such conclustion. Disable zsmalloc also makes
disable zram. I think in-compress memory swap rather than storage
swap/block sometimes would be useful for even RT.
>
> Disable ZSMALLOC on PREEMPT_RT. If there is need for it, we can try to
> get it to work.
Please send the patch which extends handle with spin_lock rather than
simply disabing.
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
> mm/Kconfig | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mm/Kconfig b/mm/Kconfig
> index 9f1e0098522c2..541371e64c477 100644
> --- a/mm/Kconfig
> +++ b/mm/Kconfig
> @@ -640,6 +640,7 @@ config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
>
> config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
> bool "zsmalloc"
> + depends on !PREEMPT_RT
> select ZSMALLOC
> help
> Use the zsmalloc allocator as the default allocator.
> @@ -690,7 +691,7 @@ config Z3FOLD
>
> config ZSMALLOC
> tristate "Memory allocator for compressed pages"
> - depends on MMU
> + depends on MMU && !PREEMPT_RT
> help
> zsmalloc is a slab-based memory allocator designed to store
> compressed RAM pages. zsmalloc uses virtual memory mapping
> --
> 2.33.0
>
>
next prev parent reply other threads:[~2021-09-23 23:07 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-23 17:01 [PATCH] mm: Disable zsmalloc on PREEMPT_RT Sebastian Andrzej Siewior
2021-09-23 23:06 ` Minchan Kim [this message]
2021-09-24 7:08 ` Sebastian Andrzej Siewior
2021-09-28 8:44 ` [PATCH] mm/zsmalloc: Replace bit spinlock and get_cpu_var() usage Sebastian Andrzej Siewior
2021-09-28 22:47 ` Andrew Morton
2021-09-29 2:11 ` Mike Galbraith
2021-09-29 7:23 ` Sebastian Andrzej Siewior
2021-09-29 19:09 ` Minchan Kim
2021-09-30 6:42 ` Sebastian Andrzej Siewior
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=YU0IkoeWYLdll6/+@google.com \
--to=minchan@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=bigeasy@linutronix.de \
--cc=linux-mm@kvack.org \
--cc=tglx@linutronix.de \
/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.