diff options
author | Mel Gorman <mgorman@suse.de> | 2013-02-22 19:34:47 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-23 20:50:18 -0500 |
commit | a4e1b4c6c6db7b7d1ca7f399b4e08aa381f23899 (patch) | |
tree | 5546e920bdf0c88aa1b838b5e12a95fc90b59efa /mm | |
parent | 4468b8f1e2d32ce79ef4bcb8e00d7e88627f1c3a (diff) |
mm: init: report on last-nid information stored in page->flags
Answering the question "how much space remains in the page->flags" is
time-consuming. mminit_loglevel can help answer the question but it
does not take last_nid information into account. This patch corrects it
and while there it corrects the messages related to page flag usage,
pgshifts and node/zone id. When applied the relevant output looks
something like this but will depend on the kernel configuration.
mminit::pageflags_layout_widths Section 0 Node 9 Zone 2 Lastnid 9 Flags 25
mminit::pageflags_layout_shifts Section 19 Node 9 Zone 2 Lastnid 9
mminit::pageflags_layout_pgshifts Section 0 Node 55 Zone 53 Lastnid 44
mminit::pageflags_layout_nodezoneid Node/Zone ID: 64 -> 53
mminit::pageflags_layout_usage location: 64 -> 44 layout 44 -> 25 unused 25 -> 0 page-flags
Signed-off-by: Mel Gorman <mgorman@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/mm_init.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/mm/mm_init.c b/mm/mm_init.c index 1ffd97ae26d7..c280a02ea11e 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c | |||
@@ -69,34 +69,41 @@ void __init mminit_verify_pageflags_layout(void) | |||
69 | unsigned long or_mask, add_mask; | 69 | unsigned long or_mask, add_mask; |
70 | 70 | ||
71 | shift = 8 * sizeof(unsigned long); | 71 | shift = 8 * sizeof(unsigned long); |
72 | width = shift - SECTIONS_WIDTH - NODES_WIDTH - ZONES_WIDTH; | 72 | width = shift - SECTIONS_WIDTH - NODES_WIDTH - ZONES_WIDTH - LAST_NID_SHIFT; |
73 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_widths", | 73 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_widths", |
74 | "Section %d Node %d Zone %d Flags %d\n", | 74 | "Section %d Node %d Zone %d Lastnid %d Flags %d\n", |
75 | SECTIONS_WIDTH, | 75 | SECTIONS_WIDTH, |
76 | NODES_WIDTH, | 76 | NODES_WIDTH, |
77 | ZONES_WIDTH, | 77 | ZONES_WIDTH, |
78 | LAST_NID_WIDTH, | ||
78 | NR_PAGEFLAGS); | 79 | NR_PAGEFLAGS); |
79 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_shifts", | 80 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_shifts", |
80 | "Section %d Node %d Zone %d\n", | 81 | "Section %d Node %d Zone %d Lastnid %d\n", |
81 | SECTIONS_SHIFT, | 82 | SECTIONS_SHIFT, |
82 | NODES_SHIFT, | 83 | NODES_SHIFT, |
83 | ZONES_SHIFT); | 84 | ZONES_SHIFT, |
84 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_offsets", | 85 | LAST_NID_SHIFT); |
85 | "Section %lu Node %lu Zone %lu\n", | 86 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_pgshifts", |
87 | "Section %lu Node %lu Zone %lu Lastnid %lu\n", | ||
86 | (unsigned long)SECTIONS_PGSHIFT, | 88 | (unsigned long)SECTIONS_PGSHIFT, |
87 | (unsigned long)NODES_PGSHIFT, | 89 | (unsigned long)NODES_PGSHIFT, |
88 | (unsigned long)ZONES_PGSHIFT); | 90 | (unsigned long)ZONES_PGSHIFT, |
89 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_zoneid", | 91 | (unsigned long)LAST_NID_PGSHIFT); |
90 | "Zone ID: %lu -> %lu\n", | 92 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_nodezoneid", |
91 | (unsigned long)ZONEID_PGOFF, | 93 | "Node/Zone ID: %lu -> %lu\n", |
92 | (unsigned long)(ZONEID_PGOFF + ZONEID_SHIFT)); | 94 | (unsigned long)(ZONEID_PGOFF + ZONEID_SHIFT), |
95 | (unsigned long)ZONEID_PGOFF); | ||
93 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_usage", | 96 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_usage", |
94 | "location: %d -> %d unused %d -> %d flags %d -> %d\n", | 97 | "location: %d -> %d layout %d -> %d unused %d -> %d page-flags\n", |
95 | shift, width, width, NR_PAGEFLAGS, NR_PAGEFLAGS, 0); | 98 | shift, width, width, NR_PAGEFLAGS, NR_PAGEFLAGS, 0); |
96 | #ifdef NODE_NOT_IN_PAGE_FLAGS | 99 | #ifdef NODE_NOT_IN_PAGE_FLAGS |
97 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_nodeflags", | 100 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_nodeflags", |
98 | "Node not in page flags"); | 101 | "Node not in page flags"); |
99 | #endif | 102 | #endif |
103 | #ifdef LAST_NID_NOT_IN_PAGE_FLAGS | ||
104 | mminit_dprintk(MMINIT_TRACE, "pageflags_layout_nodeflags", | ||
105 | "Last nid not in page flags"); | ||
106 | #endif | ||
100 | 107 | ||
101 | if (SECTIONS_WIDTH) { | 108 | if (SECTIONS_WIDTH) { |
102 | shift -= SECTIONS_WIDTH; | 109 | shift -= SECTIONS_WIDTH; |