OSDN Git Service

mm/vmalloc: make show_numa_info() aware of hugepage mappings
authorEric Dumazet <edumazet@google.com>
Fri, 5 Nov 2021 20:39:25 +0000 (13:39 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 6 Nov 2021 20:30:36 +0000 (13:30 -0700)
show_numa_info() can be slightly faster, by skipping over hugepages
directly.

Link: https://lkml.kernel.org/r/20211001172725.105824-1-eric.dumazet@gmail.com
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Uladzislau Rezki (Sony) <urezki@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/vmalloc.c

index 4a11abd..6c1b97f 100644 (file)
@@ -3864,6 +3864,7 @@ static void show_numa_info(struct seq_file *m, struct vm_struct *v)
 {
        if (IS_ENABLED(CONFIG_NUMA)) {
                unsigned int nr, *counters = m->private;
+               unsigned int step = 1U << vm_area_page_order(v);
 
                if (!counters)
                        return;
@@ -3875,9 +3876,8 @@ static void show_numa_info(struct seq_file *m, struct vm_struct *v)
 
                memset(counters, 0, nr_node_ids * sizeof(unsigned int));
 
-               for (nr = 0; nr < v->nr_pages; nr++)
-                       counters[page_to_nid(v->pages[nr])]++;
-
+               for (nr = 0; nr < v->nr_pages; nr += step)
+                       counters[page_to_nid(v->pages[nr])] += step;
                for_each_node_state(nr, N_HIGH_MEMORY)
                        if (counters[nr])
                                seq_printf(m, " N%u=%u", nr, counters[nr]);