Re: [PATCH V4 1/2] mm: add defines for min/max swappiness

From: Huan Yang
Date: Wed Dec 13 2023 - 21:00:22 EST



在 2023/12/14 0:41, Dan Schatzberg 写道:
[Some people who received this message don't often get email from schatzberg.dan@xxxxxxxxx. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]

On Wed, Dec 13, 2023 at 09:58:26AM +0800, Huan Yang wrote:
在 2023/12/13 9:38, Dan Schatzberg 写道:
[????????? schatzberg.dan@xxxxxxxxx ????????? https://aka.ms/LearnAboutSenderIdentification,????????????]

We use the constants 0 and 200 in a few places in the mm code when
referring to the min and max swappiness. This patch adds MIN_SWAPPINESS
and MAX_SWAPPINESS #defines to improve clarity. There are no functional
changes.

Signed-off-by: Dan Schatzberg <schatzberg.dan@xxxxxxxxx>
---
include/linux/swap.h | 2 ++
mm/memcontrol.c | 2 +-
mm/vmscan.c | 10 +++++-----
3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/include/linux/swap.h b/include/linux/swap.h
index f6dd6575b905..e2ab76c25b4a 100644
--- a/include/linux/swap.h
+++ b/include/linux/swap.h
@@ -407,6 +407,8 @@ extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order,

#define MEMCG_RECLAIM_MAY_SWAP (1 << 1)
#define MEMCG_RECLAIM_PROACTIVE (1 << 2)
+#define MIN_SWAPPINESS 0
+#define MAX_SWAPPINESS 200
Do MAX_SWAPPINESS apply for all swapppiness? If so, maybe better change
swappiness sysctl define:
```
sysctl.c:

{
.procname = "swappiness",
.data = &vm_swappiness,
.maxlen = sizeof(vm_swappiness),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = SYSCTL_ZERO,
.extra2 = SYSCTL_TWO_HUNDRED,
},

```

Here hard code swappiness in [0, 200], and now add a new define.
Yes, MAX_SWAPPINESS is a hard limit. I'm not sure what you're
proposing here - the SYSCTL_ZERO and SYSCTL_TWO_HUNDRED values are a
I mean, MAX_SWAPPINESS and SYSCTL_TWO_HUNDRED  all limit swappiness,
but  are different definitions.

If swappiness change 200 into 400, you need to change here extra2 and your
MAX_SWAPPINESS. It's wierd.
little different than the defines I added. I think most of the value
is just consistently using the defines in the core mm code.

And many other code hard reference 200 into max value of swappiness, like:

```
memcontrol.c:
static int mem_cgroup_swappiness_write(struct cgroup_subsys_state *css,
struct cftype *cft, u64 val)
{
struct mem_cgroup *memcg = mem_cgroup_from_css(css);

if (val > 200)
return -EINVAL;

if (!mem_cgroup_is_root(memcg))
memcg->swappiness = val;
else
vm_swappiness = val;

return 0;
}
This one is already fixed in my patch.