| From foo@baz Sun Jun 17 12:07:33 CEST 2018 |
| From: Minchan Kim <minchan@kernel.org> |
| Date: Fri, 20 Apr 2018 14:56:17 -0700 |
| Subject: mm: memcg: add __GFP_NOWARN in __memcg_schedule_kmem_cache_create() |
| |
| From: Minchan Kim <minchan@kernel.org> |
| |
| [ Upstream commit c892fd82cc0632d425ae011a4dd75eb59e9f84ee ] |
| |
| If there is heavy memory pressure, page allocation with __GFP_NOWAIT |
| fails easily although it's order-0 request. I got below warning 9 times |
| for normal boot. |
| |
| <snip >: page allocation failure: order:0, mode:0x2200000(GFP_NOWAIT|__GFP_NOTRACK) |
| .. snip .. |
| Call trace: |
| dump_backtrace+0x0/0x4 |
| dump_stack+0xa4/0xc0 |
| warn_alloc+0xd4/0x15c |
| __alloc_pages_nodemask+0xf88/0x10fc |
| alloc_slab_page+0x40/0x18c |
| new_slab+0x2b8/0x2e0 |
| ___slab_alloc+0x25c/0x464 |
| __kmalloc+0x394/0x498 |
| memcg_kmem_get_cache+0x114/0x2b8 |
| kmem_cache_alloc+0x98/0x3e8 |
| mmap_region+0x3bc/0x8c0 |
| do_mmap+0x40c/0x43c |
| vm_mmap_pgoff+0x15c/0x1e4 |
| sys_mmap+0xb0/0xc8 |
| el0_svc_naked+0x24/0x28 |
| Mem-Info: |
| active_anon:17124 inactive_anon:193 isolated_anon:0 |
| active_file:7898 inactive_file:712955 isolated_file:55 |
| unevictable:0 dirty:27 writeback:18 unstable:0 |
| slab_reclaimable:12250 slab_unreclaimable:23334 |
| mapped:19310 shmem:212 pagetables:816 bounce:0 |
| free:36561 free_pcp:1205 free_cma:35615 |
| Node 0 active_anon:68496kB inactive_anon:772kB active_file:31592kB inactive_file:2851820kB unevictable:0kB isolated(anon):0kB isolated(file):220kB mapped:77240kB dirty:108kB writeback:72kB shmem:848kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no |
| DMA free:142188kB min:3056kB low:3820kB high:4584kB active_anon:10052kB inactive_anon:12kB active_file:312kB inactive_file:1412620kB unevictable:0kB writepending:0kB present:1781412kB managed:1604728kB mlocked:0kB slab_reclaimable:3592kB slab_unreclaimable:876kB kernel_stack:400kB pagetables:52kB bounce:0kB free_pcp:1436kB local_pcp:124kB free_cma:142492kB |
| lowmem_reserve[]: 0 1842 1842 |
| Normal free:4056kB min:4172kB low:5212kB high:6252kB active_anon:58376kB inactive_anon:760kB active_file:31348kB inactive_file:1439040kB unevictable:0kB writepending:180kB present:2000636kB managed:1923688kB mlocked:0kB slab_reclaimable:45408kB slab_unreclaimable:92460kB kernel_stack:9680kB pagetables:3212kB bounce:0kB free_pcp:3392kB local_pcp:688kB free_cma:0kB |
| lowmem_reserve[]: 0 0 0 |
| DMA: 0*4kB 0*8kB 1*16kB (C) 0*32kB 0*64kB 0*128kB 1*256kB (C) 1*512kB (C) 0*1024kB 1*2048kB (C) 34*4096kB (C) = 142096kB |
| Normal: 228*4kB (UMEH) 172*8kB (UMH) 23*16kB (UH) 24*32kB (H) 5*64kB (H) 1*128kB (H) 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 3872kB |
| 721350 total pagecache pages |
| 0 pages in swap cache |
| Swap cache stats: add 0, delete 0, find 0/0 |
| Free swap = 0kB |
| Total swap = 0kB |
| 945512 pages RAM |
| 0 pages HighMem/MovableOnly |
| 63408 pages reserved |
| 51200 pages cma reserved |
| |
| __memcg_schedule_kmem_cache_create() tries to create a shadow slab cache |
| and the worker allocation failure is not really critical because we will |
| retry on the next kmem charge. We might miss some charges but that |
| shouldn't be critical. The excessive allocation failure report is not |
| very helpful. |
| |
| [mhocko@kernel.org: changelog update] |
| Link: http://lkml.kernel.org/r/20180418022912.248417-1-minchan@kernel.org |
| Signed-off-by: Minchan Kim <minchan@kernel.org> |
| Acked-by: Johannes Weiner <hannes@cmpxchg.org> |
| Reviewed-by: Andrew Morton <akpm@linux-foundation.org> |
| Cc: Michal Hocko <mhocko@kernel.org> |
| Cc: Vladimir Davydov <vdavydov.dev@gmail.com> |
| Cc: Minchan Kim <minchan@kernel.org> |
| Cc: Matthew Wilcox <willy@infradead.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| mm/memcontrol.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/mm/memcontrol.c |
| +++ b/mm/memcontrol.c |
| @@ -2192,7 +2192,7 @@ static void __memcg_schedule_kmem_cache_ |
| { |
| struct memcg_kmem_cache_create_work *cw; |
| |
| - cw = kmalloc(sizeof(*cw), GFP_NOWAIT); |
| + cw = kmalloc(sizeof(*cw), GFP_NOWAIT | __GFP_NOWARN); |
| if (!cw) |
| return; |
| |