From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758346Ab1JAAJh (ORCPT ); Fri, 30 Sep 2011 20:09:37 -0400 Received: from e32.co.us.ibm.com ([32.97.110.150]:58358 "EHLO e32.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758279Ab1JAAJM (ORCPT ); Fri, 30 Sep 2011 20:09:12 -0400 Subject: [RFCv3][PATCH 4/4] show page size in /proc/$pid/numa_maps To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, rientjes@google.com, James.Bottomley@HansenPartnership.com, hpa@zytor.com, Dave Hansen From: Dave Hansen Date: Fri, 30 Sep 2011 17:09:00 -0700 References: <20111001000856.DD623081@kernel> In-Reply-To: <20111001000856.DD623081@kernel> Message-Id: <20111001000900.BD9248B8@kernel> x-cbid: 11100100-3270-0000-0000-000000898E53 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The output of /proc/$pid/numa_maps is in terms of number of pages like anon=22 or dirty=54. Here's some output: 7f4680000000 default file=/hugetlb/bigfile anon=50 dirty=50 N0=50 7f7659600000 default file=/anon_hugepage\040(deleted) anon=50 dirty=50 N0=50 7fff8d425000 default stack anon=50 dirty=50 N0=50 Looks like we have a stack and a couple of anonymous hugetlbfs areas page which both use the same amount of memory. They don't. The 'bigfile' uses 1GB pages and takes up ~50GB of space. The anon_hugepage uses 2MB pages and takes up ~100MB of space while the stack uses normal 4k pages. You can go over to smaps to figure out what the page size _really_ is with KernelPageSize or MMUPageSize. But, I think this is a pretty nasty and counterintuitive interface as it stands. The following patch adds a pagesize= field. Note that this only shows the kernel's notion of page size. For transparent hugepages, it still shows the base page size. Here's some real output. Note the anon_hugepage in there. # cat /proc/`pidof memknobs`/numa_maps 00400000 default file=/root/memknobs pagesize=4KiB dirty=3 active=2 N0=3 00602000 default file=/root/memknobs pagesize=4KiB anon=1 dirty=1 N0=1 00603000 default file=/root/memknobs pagesize=4KiB anon=1 dirty=1 N0=1 00604000 default heap pagesize=4KiB anon=6 dirty=6 N0=6 7f6766216000 default file=/lib/libc-2.9.so pagesize=4KiB mapped=98 mapmax=25 active=97 N0=98 7f676637e000 default file=/lib/libc-2.9.so 7f676657e000 default file=/lib/libc-2.9.so pagesize=4KiB anon=4 dirty=4 N0=4 7f6766582000 default file=/lib/libc-2.9.so pagesize=4KiB anon=1 dirty=1 N0=1 7f6766583000 default pagesize=4KiB anon=3 dirty=3 N0=3 7f6766588000 default file=/lib/ld-2.9.so pagesize=4KiB mapped=25 mapmax=24 N0=25 7f676679d000 default pagesize=4KiB anon=2 dirty=2 N0=2 7f67667a3000 default pagesize=4KiB anon=4 dirty=4 N0=4 7f67667a7000 default file=/lib/ld-2.9.so pagesize=4KiB anon=1 dirty=1 N0=1 7f67667a8000 default file=/lib/ld-2.9.so pagesize=4KiB anon=1 dirty=1 N0=1 7f6766800000 default file=/anon_hugepage\040(deleted) pagesize=2MiB anon=10 dirty=10 N0=10 7fff5b948000 default stack pagesize=4KiB anon=2 dirty=2 N0=2 7fff5b96d000 default Signed-off-by: Dave Haneen --- linux-2.6.git-dave/fs/proc/task_mmu.c | 5 +++++ 1 file changed, 5 insertions(+) diff -puN fs/proc/task_mmu.c~show-page-size fs/proc/task_mmu.c --- linux-2.6.git/fs/proc/task_mmu.c~show-page-size 2011-09-30 16:41:06.125953955 -0700 +++ linux-2.6.git-dave/fs/proc/task_mmu.c 2011-09-30 16:41:06.133953941 -0700 @@ -1044,6 +1044,11 @@ static int show_numa_map(struct seq_file if (!md->pages) goto out; + /* Only interesting for hugetlbfs pages. + * Transparent hugepages are still pagesize=4k */ + seq_puts(m, " pagesize="); + seq_print_pow2(m, vma_kernel_pagesize(vma)); + if (md->anon) seq_printf(m, " anon=%lu", md->anon); _