Message ID | 20241014105912.3207374-3-ryan.roberts@arm.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Boot-time page size selection for arm64 | expand |
On Mon, Oct 14, 2024 at 11:58:10AM +0100, Ryan Roberts wrote: > Previously the seq_buf used for accumulating the memory.stat output was > sized at PAGE_SIZE. But the amount of output is invariant to PAGE_SIZE; > If 4K is enough on a 4K page system, then it should also be enough on a > 64K page system, so we can save 60K om the static buffer used in > mem_cgroup_print_oom_meminfo(). Let's make it so. > > This also has the beneficial side effect of removing a place in the code > that assumed PAGE_SIZE is a compile-time constant. So this helps our > quest towards supporting boot-time page size selection. > > Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org>
On Mon, Oct 14, 2024 at 11:58:10AM GMT, Ryan Roberts wrote: > Previously the seq_buf used for accumulating the memory.stat output was > sized at PAGE_SIZE. But the amount of output is invariant to PAGE_SIZE; > If 4K is enough on a 4K page system, then it should also be enough on a > 64K page system, so we can save 60K om the static buffer used in > mem_cgroup_print_oom_meminfo(). Let's make it so. > > This also has the beneficial side effect of removing a place in the code > that assumed PAGE_SIZE is a compile-time constant. So this helps our > quest towards supporting boot-time page size selection. > > Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
On 14/10/2024 20:59, Shakeel Butt wrote: > On Mon, Oct 14, 2024 at 11:58:10AM GMT, Ryan Roberts wrote: >> Previously the seq_buf used for accumulating the memory.stat output was >> sized at PAGE_SIZE. But the amount of output is invariant to PAGE_SIZE; >> If 4K is enough on a 4K page system, then it should also be enough on a >> 64K page system, so we can save 60K om the static buffer used in >> mem_cgroup_print_oom_meminfo(). Let's make it so. >> >> This also has the beneficial side effect of removing a place in the code >> that assumed PAGE_SIZE is a compile-time constant. So this helps our >> quest towards supporting boot-time page size selection. >> >> Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> > > Acked-by: Shakeel Butt <shakeel.butt@linux.dev> Thanks Shakeel and Johannes, for the acks. Given this patch is totally independent, I'll plan to resubmit it on its own and hopefully we can get it in independently of the rest of the series. Thanks, Ryan
On Tue 15-10-24 11:55:26, Ryan Roberts wrote: > On 14/10/2024 20:59, Shakeel Butt wrote: > > On Mon, Oct 14, 2024 at 11:58:10AM GMT, Ryan Roberts wrote: > >> Previously the seq_buf used for accumulating the memory.stat output was > >> sized at PAGE_SIZE. But the amount of output is invariant to PAGE_SIZE; > >> If 4K is enough on a 4K page system, then it should also be enough on a > >> 64K page system, so we can save 60K om the static buffer used in > >> mem_cgroup_print_oom_meminfo(). Let's make it so. > >> > >> This also has the beneficial side effect of removing a place in the code > >> that assumed PAGE_SIZE is a compile-time constant. So this helps our > >> quest towards supporting boot-time page size selection. > >> > >> Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> > > > > Acked-by: Shakeel Butt <shakeel.butt@linux.dev> > > Thanks Shakeel and Johannes, for the acks. Given this patch is totally > independent, I'll plan to resubmit it on its own and hopefully we can get it in > independently of the rest of the series. Yes, this makes sense independent on the whole series. Acked-by: Michal Hocko <mhocko@suse.com> Thanks!
On Mon, Oct 14, 2024 at 11:58:10AM +0100, Ryan Roberts wrote: > Previously the seq_buf used for accumulating the memory.stat output was > sized at PAGE_SIZE. But the amount of output is invariant to PAGE_SIZE; > If 4K is enough on a 4K page system, then it should also be enough on a > 64K page system, so we can save 60K om the static buffer used in > mem_cgroup_print_oom_meminfo(). Let's make it so. > > This also has the beneficial side effect of removing a place in the code > that assumed PAGE_SIZE is a compile-time constant. So this helps our > quest towards supporting boot-time page size selection. > > Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> Acked-by: Roman Gushchin <roman.gushchin@linux.dev> Thanks!
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index d563fb515766b..c5f9195f76c65 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -95,6 +95,7 @@ static DECLARE_WAIT_QUEUE_HEAD(memcg_cgwb_frn_waitq); #define THRESHOLDS_EVENTS_TARGET 128 #define SOFTLIMIT_EVENTS_TARGET 1024 +#define SEQ_BUF_SIZE SZ_4K static inline bool task_is_dying(void) { @@ -1519,7 +1520,7 @@ void mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct * void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg) { /* Use static buffer, for the caller is holding oom_lock. */ - static char buf[PAGE_SIZE]; + static char buf[SEQ_BUF_SIZE]; struct seq_buf s; lockdep_assert_held(&oom_lock); @@ -1545,7 +1546,7 @@ void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg) pr_info("Memory cgroup stats for "); pr_cont_cgroup_path(memcg->css.cgroup); pr_cont(":"); - seq_buf_init(&s, buf, sizeof(buf)); + seq_buf_init(&s, buf, SEQ_BUF_SIZE); memory_stat_format(memcg, &s); seq_buf_do_printk(&s, KERN_INFO); } @@ -4158,12 +4159,12 @@ static int memory_events_local_show(struct seq_file *m, void *v) int memory_stat_show(struct seq_file *m, void *v) { struct mem_cgroup *memcg = mem_cgroup_from_seq(m); - char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL); + char *buf = kmalloc(SEQ_BUF_SIZE, GFP_KERNEL); struct seq_buf s; if (!buf) return -ENOMEM; - seq_buf_init(&s, buf, PAGE_SIZE); + seq_buf_init(&s, buf, SEQ_BUF_SIZE); memory_stat_format(memcg, &s); seq_puts(m, buf); kfree(buf);
Previously the seq_buf used for accumulating the memory.stat output was sized at PAGE_SIZE. But the amount of output is invariant to PAGE_SIZE; If 4K is enough on a 4K page system, then it should also be enough on a 64K page system, so we can save 60K om the static buffer used in mem_cgroup_print_oom_meminfo(). Let's make it so. This also has the beneficial side effect of removing a place in the code that assumed PAGE_SIZE is a compile-time constant. So this helps our quest towards supporting boot-time page size selection. Signed-off-by: Ryan Roberts <ryan.roberts@arm.com> --- ***NOTE*** Any confused maintainers may want to read the cover note here for context: https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/ mm/memcontrol.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)