Re: [PATCH v3 31/35] lib: add memory allocations report in show_mem()

Michal Hocko
2024-02-15T18:41:55Z

On Thu 15-02-24 13:29:40, Kent Overstreet wrote:
> On Thu, Feb 15, 2024 at 08:47:59AM -0800, Suren Baghdasaryan wrote:
> > On Thu, Feb 15, 2024 at 8:45 AM Michal Hocko <mhocko@suse.com> wrote:
> > >
> > > On Thu 15-02-24 06:58:42, Suren Baghdasaryan wrote:
> > > > On Thu, Feb 15, 2024 at 1:22 AM Michal Hocko <mhocko@suse.com> wrote:
> > > > >
> > > > > On Mon 12-02-24 13:39:17, Suren Baghdasaryan wrote:
> > > > > [...]
> > > > > > @@ -423,4 +424,18 @@ void __show_mem(unsigned int filter, nodemask_t *nodemask, int max_zone_idx)
> > > > > > #ifdef CONFIG_MEMORY_FAILURE
> > > > > > printk("%lu pages hwpoisoned\n", atomic_long_read(&num_poisoned_pages));
> > > > > > #endif
> > > > > > +#ifdef CONFIG_MEM_ALLOC_PROFILING
> > > > > > + {
> > > > > > + struct seq_buf s;
> > > > > > + char *buf = kmalloc(4096, GFP_ATOMIC);
> > > > > > +
> > > > > > + if (buf) {
> > > > > > + printk("Memory allocations:\n");
> > > > > > + seq_buf_init(&s, buf, 4096);
> > > > > > + alloc_tags_show_mem_report(&s);
> > > > > > + printk("%s", buf);
> > > > > > + kfree(buf);
> > > > > > + }
> > > > > > + }
> > > > > > +#endif
> > > > >
> > > > > I am pretty sure I have already objected to this. Memory allocations in
> > > > > the oom path are simply no go unless there is absolutely no other way
> > > > > around that. In this case the buffer could be preallocated.
> > > >
> > > > Good point. We will change this to a smaller buffer allocated on the
> > > > stack and will print records one-by-one. Thanks!
> > >
> > > __show_mem could be called with a very deep call chains. A single
> > > pre-allocated buffer should just do ok.
> >
> > Ack. Will do.
>
> No, we're not going to permanently burn 4k here.
>
> It's completely fine if the allocation fails, there's nothing "unsafe"
> about doing a GFP_ATOMIC allocation here.

Nobody is talking about safety. This is just a wrong thing to do when
you are likely under OOM situation. This is a situation when you
GFP_ATOMIC allocation is _likely_ to fail. Yes, yes you will get some
additional memory reservers head room, but you shouldn't rely on that
because that will make the output unreliable. Not something you want in
situation when you really want to know that information.

More over you do not need to preallocate a full page.

--
Michal Hocko
SUSE Labs