2023-03-06 06:07:46

by ye.xingchen

[permalink] [raw]
Subject: [PATCH V2 1/2] sysctl: Limit the value of interface compact_memory

From: Minghao Chi <[email protected]>

In Documentation/admin-guide/sysctl/vm.rst:109 say: when 1 is written
to the file, all zones are compacted such that free memory is available
in contiguous blocks where possible.
So limit the value of interface compact_memory to 1.

Link: https://lore.kernel.org/all/[email protected]/
Signed-off-by: Minghao Chi <[email protected]>
Signed-off-by: Ye Xingchen <[email protected]>

---
include/linux/compaction.h | 1 +
kernel/sysctl.c | 4 +++-
2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/include/linux/compaction.h b/include/linux/compaction.h
index 52a9ff65faee..caa24e33eeb1 100644
--- a/include/linux/compaction.h
+++ b/include/linux/compaction.h
@@ -81,6 +81,7 @@ static inline unsigned long compact_gap(unsigned int order)
}

#ifdef CONFIG_COMPACTION
+extern int sysctl_compact_memory;
extern unsigned int sysctl_compaction_proactiveness;
extern int sysctl_compaction_handler(struct ctl_table *table, int write,
void *buffer, size_t *length, loff_t *ppos);
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index c14552a662ae..67f70952f71a 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -2192,10 +2192,12 @@ static struct ctl_table vm_table[] = {
#ifdef CONFIG_COMPACTION
{
.procname = "compact_memory",
- .data = NULL,
+ .data = &sysctl_compact_memory,
.maxlen = sizeof(int),
.mode = 0200,
.proc_handler = sysctl_compaction_handler,
+ .extra1 = SYSCTL_ONE,
+ .extra2 = SYSCTL_ONE,
},
{
.procname = "compaction_proactiveness",
--
2.25.1


2023-03-08 10:21:29

by Vlastimil Babka

[permalink] [raw]
Subject: Re: [PATCH V2 1/2] sysctl: Limit the value of interface compact_memory



On 3/6/23 07:07, [email protected] wrote:
> From: Minghao Chi <[email protected]>
>
> In Documentation/admin-guide/sysctl/vm.rst:109 say: when 1 is written
> to the file, all zones are compacted such that free memory is available
> in contiguous blocks where possible.
> So limit the value of interface compact_memory to 1.
>
> Link: https://lore.kernel.org/all/[email protected]/

I don't think the split to two patches you did, achieves Luis' request.

> Signed-off-by: Minghao Chi <[email protected]>
> Signed-off-by: Ye Xingchen <[email protected]>
>
> ---
> include/linux/compaction.h | 1 +
> kernel/sysctl.c | 4 +++-
> 2 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/compaction.h b/include/linux/compaction.h
> index 52a9ff65faee..caa24e33eeb1 100644
> --- a/include/linux/compaction.h
> +++ b/include/linux/compaction.h
> @@ -81,6 +81,7 @@ static inline unsigned long compact_gap(unsigned int order)
> }
>
> #ifdef CONFIG_COMPACTION
> +extern int sysctl_compact_memory;
> extern unsigned int sysctl_compaction_proactiveness;
> extern int sysctl_compaction_handler(struct ctl_table *table, int write,
> void *buffer, size_t *length, loff_t *ppos);
> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> index c14552a662ae..67f70952f71a 100644
> --- a/kernel/sysctl.c
> +++ b/kernel/sysctl.c
> @@ -2192,10 +2192,12 @@ static struct ctl_table vm_table[] = {
> #ifdef CONFIG_COMPACTION
> {
> .procname = "compact_memory",
> - .data = NULL,
> + .data = &sysctl_compact_memory,

I doubt this compiles/links without patch 2, as there's no definition
until patch 2.

> .maxlen = sizeof(int),
> .mode = 0200,
> .proc_handler = sysctl_compaction_handler,
> + .extra1 = SYSCTL_ONE,
> + .extra2 = SYSCTL_ONE,
> },
> {
> .procname = "compaction_proactiveness",

IIUC his request was to move the compaction entries out of sysctl.c?


2023-03-08 19:58:25

by Luis Chamberlain

[permalink] [raw]
Subject: Re: [PATCH V2 1/2] sysctl: Limit the value of interface compact_memory

On Wed, Mar 08, 2023 at 11:21:36AM +0100, Vlastimil Babka wrote:
>
>
> On 3/6/23 07:07, [email protected] wrote:
> > From: Minghao Chi <[email protected]>
> >
> > In Documentation/admin-guide/sysctl/vm.rst:109 say: when 1 is written
> > to the file, all zones are compacted such that free memory is available
> > in contiguous blocks where possible.
> > So limit the value of interface compact_memory to 1.
> >
> > Link: https://lore.kernel.org/all/[email protected]/
>
> I don't think the split to two patches you did, achieves Luis' request.
>
> IIUC his request was to move the compaction entries out of sysctl.c?

Yes, thanks Vlastimil, just git log kernel/sysctl.c and you'll see tons
of examples.

Luis