diff options
author | Michal Hocko <mhocko@suse.com> | 2018-10-26 18:06:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-10-26 19:26:33 -0400 |
commit | 2c029a1ea3aac296cd5b47584a579defcc4b4aa0 (patch) | |
tree | 1cd03467941fd59beaf3bb8e9a37b7b6bc302cb6 /mm/page_alloc.c | |
parent | e9b257ed150c1f43912bd66031185598451f68a9 (diff) |
mm, page_alloc: drop should_suppress_show_mem
should_suppress_show_mem() was introduced to reduce the overhead of
show_mem on large NUMA systems. Things have changed since then though.
Namely c78e93630d15 ("mm: do not walk all of system memory during
show_mem") has reduced the overhead considerably.
Moreover warn_alloc_show_mem clears SHOW_MEM_FILTER_NODES when called from
the IRQ context already so we are not printing per node stats.
Remove should_suppress_show_mem because we are losing potentially
interesting information about allocation failures. We have seen a bug
report where system gets unresponsive under memory pressure and there is
only
kernel: [2032243.696888] qlge 0000:8b:00.1 ql1: Could not get a page chunk, i=8, clean_idx =200 .
kernel: [2032243.710725] swapper/7: page allocation failure: order:1, mode:0x1084120(GFP_ATOMIC|__GFP_COLD|__GFP_COMP)
without an additional information for debugging. It would be great to see
the state of the page allocator at the moment.
Link: http://lkml.kernel.org/r/20180907114334.7088-1-mhocko@kernel.org
Signed-off-by: Michal Hocko <mhocko@suse.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Cc: David Rientjes <rientjes@google.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 16 |
1 files changed, 1 insertions, 15 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f97b5a1700a4..eb6c50cc8880 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -3367,26 +3367,12 @@ try_this_zone: | |||
3367 | return NULL; | 3367 | return NULL; |
3368 | } | 3368 | } |
3369 | 3369 | ||
3370 | /* | ||
3371 | * Large machines with many possible nodes should not always dump per-node | ||
3372 | * meminfo in irq context. | ||
3373 | */ | ||
3374 | static inline bool should_suppress_show_mem(void) | ||
3375 | { | ||
3376 | bool ret = false; | ||
3377 | |||
3378 | #if NODES_SHIFT > 8 | ||
3379 | ret = in_interrupt(); | ||
3380 | #endif | ||
3381 | return ret; | ||
3382 | } | ||
3383 | |||
3384 | static void warn_alloc_show_mem(gfp_t gfp_mask, nodemask_t *nodemask) | 3370 | static void warn_alloc_show_mem(gfp_t gfp_mask, nodemask_t *nodemask) |
3385 | { | 3371 | { |
3386 | unsigned int filter = SHOW_MEM_FILTER_NODES; | 3372 | unsigned int filter = SHOW_MEM_FILTER_NODES; |
3387 | static DEFINE_RATELIMIT_STATE(show_mem_rs, HZ, 1); | 3373 | static DEFINE_RATELIMIT_STATE(show_mem_rs, HZ, 1); |
3388 | 3374 | ||
3389 | if (should_suppress_show_mem() || !__ratelimit(&show_mem_rs)) | 3375 | if (!__ratelimit(&show_mem_rs)) |
3390 | return; | 3376 | return; |
3391 | 3377 | ||
3392 | /* | 3378 | /* |