Skip to content

Commit dcadcf1

Browse files
ligangkernelakpm00
authored andcommitted
mm, hugetlb: skip irrelevant nodes in show_free_areas()
show_free_areas() allows to filter out node specific data which is irrelevant to the allocation request. But hugetlb_show_meminfo() still shows hugetlb on all nodes, which is redundant and unnecessary. Use show_mem_node_skip() to skip irrelevant nodes. And replace hugetlb_show_meminfo() with hugetlb_show_meminfo_node(nid). before-and-after sample output of OOM: before: ``` [ 214.362453] Node 1 active_anon:148kB inactive_anon:4050920kB active_file:112kB inactive_file:100kB [ 214.375429] Node 1 Normal free:45100kB boost:0kB min:45576kB low:56968kB high:68360kB reserved_hig [ 214.388334] lowmem_reserve[]: 0 0 0 0 0 [ 214.390251] Node 1 Normal: 423*4kB (UE) 320*8kB (UME) 187*16kB (UE) 117*32kB (UE) 57*64kB (UME) 20 [ 214.397626] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB [ 214.401518] Node 1 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB ``` after: ``` [ 145.069705] Node 1 active_anon:128kB inactive_anon:4049412kB active_file:56kB inactive_file:84kB u [ 145.110319] Node 1 Normal free:45424kB boost:0kB min:45576kB low:56968kB high:68360kB reserved_hig [ 145.152315] lowmem_reserve[]: 0 0 0 0 0 [ 145.155244] Node 1 Normal: 470*4kB (UME) 373*8kB (UME) 247*16kB (UME) 168*32kB (UE) 86*64kB (UME) [ 145.164119] Node 1 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB ``` Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Gang Li <[email protected]> Reviewed-by: Mike Kravetz <[email protected]> Cc: Muchun Song <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent a317ebc commit dcadcf1

File tree

3 files changed

+16
-14
lines changed

3 files changed

+16
-14
lines changed

include/linux/hugetlb.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ void __unmap_hugepage_range_final(struct mmu_gather *tlb,
152152
struct page *ref_page, zap_flags_t zap_flags);
153153
void hugetlb_report_meminfo(struct seq_file *);
154154
int hugetlb_report_node_meminfo(char *buf, int len, int nid);
155-
void hugetlb_show_meminfo(void);
155+
void hugetlb_show_meminfo_node(int nid);
156156
unsigned long hugetlb_total_pages(void);
157157
vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
158158
unsigned long address, unsigned int flags);
@@ -298,7 +298,7 @@ static inline int hugetlb_report_node_meminfo(char *buf, int len, int nid)
298298
return 0;
299299
}
300300

301-
static inline void hugetlb_show_meminfo(void)
301+
static inline void hugetlb_show_meminfo_node(int nid)
302302
{
303303
}
304304

mm/hugetlb.c

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4477,22 +4477,20 @@ int hugetlb_report_node_meminfo(char *buf, int len, int nid)
44774477
nid, h->surplus_huge_pages_node[nid]);
44784478
}
44794479

4480-
void hugetlb_show_meminfo(void)
4480+
void hugetlb_show_meminfo_node(int nid)
44814481
{
44824482
struct hstate *h;
4483-
int nid;
44844483

44854484
if (!hugepages_supported())
44864485
return;
44874486

4488-
for_each_node_state(nid, N_MEMORY)
4489-
for_each_hstate(h)
4490-
pr_info("Node %d hugepages_total=%u hugepages_free=%u hugepages_surp=%u hugepages_size=%lukB\n",
4491-
nid,
4492-
h->nr_huge_pages_node[nid],
4493-
h->free_huge_pages_node[nid],
4494-
h->surplus_huge_pages_node[nid],
4495-
huge_page_size(h) / SZ_1K);
4487+
for_each_hstate(h)
4488+
printk("Node %d hugepages_total=%u hugepages_free=%u hugepages_surp=%u hugepages_size=%lukB\n",
4489+
nid,
4490+
h->nr_huge_pages_node[nid],
4491+
h->free_huge_pages_node[nid],
4492+
h->surplus_huge_pages_node[nid],
4493+
huge_page_size(h) / SZ_1K);
44964494
}
44974495

44984496
void hugetlb_report_usage(struct seq_file *m, struct mm_struct *mm)

mm/page_alloc.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6022,7 +6022,7 @@ static void show_migration_types(unsigned char type)
60226022
void show_free_areas(unsigned int filter, nodemask_t *nodemask)
60236023
{
60246024
unsigned long free_pcp = 0;
6025-
int cpu;
6025+
int cpu, nid;
60266026
struct zone *zone;
60276027
pg_data_t *pgdat;
60286028

@@ -6210,7 +6210,11 @@ void show_free_areas(unsigned int filter, nodemask_t *nodemask)
62106210
printk(KERN_CONT "= %lukB\n", K(total));
62116211
}
62126212

6213-
hugetlb_show_meminfo();
6213+
for_each_online_node(nid) {
6214+
if (show_mem_node_skip(filter, nid, nodemask))
6215+
continue;
6216+
hugetlb_show_meminfo_node(nid);
6217+
}
62146218

62156219
printk("%ld total pagecache pages\n", global_node_page_state(NR_FILE_PAGES));
62166220

0 commit comments

Comments
 (0)