lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CALOAHbAbiAFo8rMvPCet2ybgTM0DFbKOeZayz5bmTJ6KTG6naQ@mail.gmail.com>
Date: Fri, 28 Feb 2025 11:21:54 +0800
From: Yafang Shao <laoar.shao@...il.com>
To: Johannes Weiner <hannes@...xchg.org>
Cc: Joshua Hahn <joshua.hahnjy@...il.com>, ying chen <yc1082463@...il.com>, 
	akpm@...ux-foundation.org, linux-mm@...ck.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] mm/vmscan: when the swappiness is set to 0, memory
 swapping should be prohibited during the global reclaim process

On Fri, Feb 28, 2025 at 12:19 AM Johannes Weiner <hannes@...xchg.org> wrote:
>
> Hello,
>
> On Thu, Feb 27, 2025 at 07:54:27AM -0800, Joshua Hahn wrote:
> > On Thu, 27 Feb 2025 22:34:51 +0800 ying chen <yc1082463@...il.com> wrote:
>
> > Previously, when the system is under a lot of memory pressure and is
> > facing OOMs, global reclaim can create space for the system and prevent
> > going out of memory by swapping, even when swappiness is 0. If this patch
> > removes that check, it would mean that global reclaim can no longer
> > "bypass" the swappiness == 0 condition.
> >
> > I am also CCing Johannes, who is the original author of this section [1],
> > who clarified in the patch that swappiness == 0 has different meanings for
> > global reclaim and memory cgroup reclaim.
>
> Yes. It's been the behavior for decades that swappiness is merely a
> preference, and that the VM *will* swap to avert OOM. You would break
> users making this change.

Hello Johannes,

How about introducing a new value, vm.swappiness=-1, to disable
swapping for global reclaim?

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 76378bc257e3..4c22352c331c 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2387,13 +2387,19 @@ static void get_scan_count(struct lruvec
*lruvec, struct scan_control *sc,
        }

        /*
-        * Global reclaim will swap to prevent OOM even with no
-        * swappiness, but memcg users want to use this knob to
-        * disable swapping for individual groups completely when
-        * using the memory controller's swap limit feature would be
-        * too expensive.
+        * swappiness > 0:
+        *   Swapping is enabled for both global reclaim and memcg reclaim.
+        *
+        * swappiness = 0:
+        *   Swapping is completely disabled for individual groups when using
+        *   the memory controller's swap limit feature would be too costly.
+        *
+        * swappiness = -1:
+        *   Swapping is disabled for both global reclaim and memcg reclaim.
+        *   This is useful when you want to enable swapping for certain
+        *   memory cgroups while disabling it for others.
         */
-       if (cgroup_reclaim(sc) && !swappiness) {
+       if ((cgroup_reclaim(sc) && !swappiness) || swappiness == -1)
                scan_balance = SCAN_FILE;
                goto out;
        }


Other parts of the code will also need to be updated to accommodate
this new swappiness value.

>
> If you want to hard-exempt cgroups, set memory.swap.max=0.

This does not apply to the root memcg.

>
> [ Yes, it's inconsistent. But it's really cgroup_reclaim() that is the
>   oddball in this. Also for historical reasons... ]
>
> > > when the vm.swappiness is set to 0, global reclaim should also refrain
> > > from memory swapping, just like these cgroups.
> > >
> > > Signed-off-by: yc1082463 <yc1082463@...il.com>
>
> Nacked-by: Johannes Weiner <hannes@...xchg.org>
>

-- 
Regards
Yafang

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ