diff mbox series

zram_drv: add __GFP_NOWARN flag on call to zs_malloc

Message ID 20220330052502.26072-1-jaewon31.kim@samsung.com (mailing list archive)
State New
Headers show
Series zram_drv: add __GFP_NOWARN flag on call to zs_malloc | expand

Commit Message

Jaewon Kim March 30, 2022, 5:25 a.m. UTC
The page allocation with GFP_NOIO may fail. And zram can handle this
allocation failure. We do not need to print log for this.

Actually warn_alloc was more restricted by commit 1be334e5c088
("mm/page_alloc.c: ratelimit allocation failure warnings more
aggressively"). To catch other allocation failure, zram can use
__GFP_NOWARN.

This is what I got.

kswapd0: page allocation failure: order:0, mode:0x140000a(GFP_NOIO|__GFP_HIGHMEM|__GFP_MOVABLE), nodemask=(null)
kswapd0 cpuset=/ mems_allowed=0
Call trace:
 dump_backtrace+0x0/0x218
 show_stack+0x14/0x1c
 dump_stack+0xb8/0xf0
 warn_alloc+0x110/0x234
 __alloc_pages_nodemask+0x11c0/0x12a0
 zs_malloc+0x1ac/0x50c
 zram_bvec_rw+0x1a4/0x6a8
 zram_make_request+0x23c/0x328
 generic_make_request+0xe4/0x270
 submit_bio+0x64/0x2a8
 __swap_writepage+0x3a8/0x404
 swap_writepage+0x40/0x4c
 shrink_page_list.llvm.15153564514306699876+0xffc/0x13a0
 shrink_inactive_list+0x2dc/0x710
 shrink_node_memcg+0x394/0x940
 shrink_node+0x194/0x380

Signed-off-by: Jaewon Kim <jaewon31.kim@samsung.com>
---
 drivers/block/zram/zram_drv.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Michal Hocko March 30, 2022, 8:06 a.m. UTC | #1
On Wed 30-03-22 14:25:02, Jaewon Kim wrote:
> The page allocation with GFP_NOIO may fail. And zram can handle this
> allocation failure. We do not need to print log for this.

GFP_NOIO doesn't have any special meaning wrt to failures. zram
allocates from the memory reclaim context which is a bad design IMHO.
The failure you are seeing indicates that PF_MEMALLOC context (memory
reclaim) which is allow to dip into memory reserves without any limit
cannot find any memory! This is really bad and it is good to learn about
that.

Your description doesn't really explain why we should be ignoring that
situation. Is the memory allocation failure gracefully recoverable?
Sergey Senozhatsky March 30, 2022, 8:41 a.m. UTC | #2
On (22/03/30 10:06), Michal Hocko wrote:
> On Wed 30-03-22 14:25:02, Jaewon Kim wrote:
> > The page allocation with GFP_NOIO may fail. And zram can handle this
> > allocation failure. We do not need to print log for this.
> 
> GFP_NOIO doesn't have any special meaning wrt to failures. zram
> allocates from the memory reclaim context which is a bad design IMHO.

Agreed.

> Is the memory allocation failure gracefully recoverable?

No, it's not. I agree that we want to see that allocation warning
in the logs.
Michal Hocko March 30, 2022, 8:49 a.m. UTC | #3
On Wed 30-03-22 10:06:18, Michal Hocko wrote:
> On Wed 30-03-22 14:25:02, Jaewon Kim wrote:
> > The page allocation with GFP_NOIO may fail. And zram can handle this
> > allocation failure. We do not need to print log for this.
> 
> GFP_NOIO doesn't have any special meaning wrt to failures. zram
> allocates from the memory reclaim context which is a bad design IMHO.

Btw. I forgot to mention that GFP_NOIO doesn't have any different
meaning than GFP_KERNEL from this (PF_MEMALLOC) allocation context
because this request will never perform a reclaim.
Jaewon Kim March 30, 2022, 9:11 a.m. UTC | #4
2022년 3월 30일 (수) 오후 5:49, Michal Hocko <mhocko@suse.com>님이 작성:
>
> On Wed 30-03-22 10:06:18, Michal Hocko wrote:
> > On Wed 30-03-22 14:25:02, Jaewon Kim wrote:
> > > The page allocation with GFP_NOIO may fail. And zram can handle this
> > > allocation failure. We do not need to print log for this.
> >
> > GFP_NOIO doesn't have any special meaning wrt to failures. zram
> > allocates from the memory reclaim context which is a bad design IMHO.
>
> Btw. I forgot to mention that GFP_NOIO doesn't have any different
> meaning than GFP_KERNEL from this (PF_MEMALLOC) allocation context
> because this request will never perform a reclaim.

Thank you for reply

Yes it was kswapd with PF_MEMALLOC, but I thought this zs_malloc could
fail on direct reclaim context.

I think zram is gracefully handling this ENOMEM situation, it actually
accounts the failed count as zram stats.
The failed page will be tried to swap out again later.

Yes I need to look into more about this memory shortage.
But I thought there were too many ALLOC_HADER requests in a short
time, and I want to see other
allocation failure logs like one with GFP_ATOMIC instead of this
zs_malloc failure log.

> --
> Michal Hocko
> SUSE Labs
diff mbox series

Patch

diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index e9474b02012d..c22201da25bb 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1405,6 +1405,7 @@  static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec,
 		atomic64_inc(&zram->stats.writestall);
 		handle = zs_malloc(zram->mem_pool, comp_len,
 				GFP_NOIO | __GFP_HIGHMEM |
+				__GFP_NOWARN |
 				__GFP_MOVABLE);
 		if (handle)
 			goto compress_again;