All of lore.kernel.org
 help / color / mirror / Atom feed
From: gregory.0xf0@gmail.com (Gregory Fong)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: print cma-reserved pages from show_mem
Date: Sun, 12 Apr 2015 18:09:13 -0700	[thread overview]
Message-ID: <20150413010913.GA15225@corellia.local> (raw)
In-Reply-To: <20150410112430.GB12732@n2100.arm.linux.org.uk>

On Fri, Apr 10, 2015 at 12:24:31PM +0100, Russell King - ARM Linux wrote:
> On Fri, Apr 10, 2015 at 01:18:04PM +0800, Wang, Yalin wrote:
> > > [   12.212102] active_anon:734 inactive_anon:1189 isolated_anon:0
> > > [   12.212102]  active_file:0 inactive_file:0 isolated_file:0
> > > [   12.212102]  unevictable:0 dirty:0 writeback:0 unstable:0
> > > [   12.212102]  free:254104 slab_reclaimable:82 slab_unreclaimable:843
> 
> Here, we have 82 pages reclaimable, which is 328kB, and 843 unreclaimable
> which is 3372kB, which is a total of 925 pages.
> 
> > > [   12.212102]  mapped:429 shmem:1815 pagetables:13 bounce:0
> > > [   12.212102]  free_cma:4032
> > > [   12.243172] DMA free:754080kB min:3472kB low:4340kB high:5208kB
> > > active_anon:180kB inactive_anon:0kB active_file:0kB inactive_file:0kB
> > > unevictable:0kB isolated(anon):0kB isolated(file):0kB present:778240kB
> > > managed:759252kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB
> > > shmem:0kB slab_reclaimable:328kB slab_unreclaimable:3372kB
> 
> Which agrees here.
> 
> > > [   12.401609] 834 slab pages
> 
> but not here... this is an interesting difference, because in the ARM
> version of show_mem(), we count the actual number of pages where
> PageSlab() returns true.  Can slab pages also be reserved pages or
> swap cache pages?  I thought they were exclusive of those.  So, the
> question comes... why the difference in accounting, and which one is
> correct.
> 
> Maybe there's a bug in the accounting somewhere...

Yes, the ARM show_mem wasn't updated after the various allocators
(SLUB, SLAB, SLOB) were updated to use compound pages.  Fixing it, you
get

[    7.081826] sysrq: SysRq : Show Memory
[    7.085610] Mem-info:
[    7.087890] DMA per-cpu:
[    7.090431] CPU    0: hi:  186, btch:  31 usd:  98
[    7.095230] HighMem per-cpu:
[    7.098116] CPU    0: hi:   90, btch:  15 usd:  29
[    7.102923] active_anon:724 inactive_anon:1189 isolated_anon:0
[    7.102923]  active_file:0 inactive_file:0 isolated_file:0
[    7.102923]  unevictable:0 dirty:0 writeback:0 unstable:0
[    7.102923]  free:253980 slab_reclaimable:83 slab_unreclaimable:846
[    7.102923]  mapped:429 shmem:1815 pagetables:15 bounce:0
[    7.102923]  free_cma:4032
[    7.133995] DMA free:753344kB min:3472kB low:4340kB high:5208kB active_anon:292kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:778240kB managed:759188kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:332kB slab_unreclaimable:3384kB kernel_stack:256kB pagetables:36kB unstable:0kB bounce:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
[    7.174080] lowmem_reserve[]: 0 0 264 264
[    7.178175] HighMem free:262576kB min:264kB low:572kB high:884kB active_anon:2604kB inactive_anon:4756kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:270336kB managed:270336kB mlocked:0kB dirty:0kB writeback:0kB mapped:1716kB shmem:7260kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:24kB unstable:0kB bounce:0kB free_cma:16128kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
[    7.218955] lowmem_reserve[]: 0 0 0 0
[    7.222687] DMA: 8*4kB (UEM) 8*8kB (UM) 4*16kB (UEM) 5*32kB (UM) 2*64kB (M) 4*128kB (UEM) 3*256kB (M) 2*512kB (EM) 5*1024kB (UEM) 6*2048kB (UEM) 3*4096kB (EM) 88*8192kB (MR) = 753344kB
[    7.239477] HighMem: 0*4kB 0*8kB 1*16kB (M) 1*32kB (M) 2*64kB (UM) 2*128kB (UM) 2*256kB (UC) 3*512kB (UMC) 2*1024kB (UC) 2*2048kB (UC) 2*4096kB (UC) 30*8192kB (MRC) = 262576kB
[    7.255455] 1815 total pagecache pages
[    7.259211] 0 pages in swap cache
[    7.262533] Swap cache stats: add 0, delete 0, find 0/0
[    7.267764] Free swap  = 0kB
[    7.270647] Total swap = 0kB
[    7.282890] 262144 pages of RAM
[    7.286041] 254274 free pages
[    7.289013] 4763 reserved pages
[    7.292157] 929 slab pages
[    7.294868] 1063 pages shared
[    7.297839] 0 pages swap cached

And now we see 83 slab_reclaimable + 846 slab_unreclaimable adds up
correctly to the total of 929.

The patch below will end up with the correct count.

8<===
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 1609b02..8d606bb 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -117,7 +117,7 @@ void show_mem(unsigned int filter)
                        else if (PageSwapCache(page))
                                cached++;
                        else if (PageSlab(page))
-                               slab++;
+                               slab += 1 << compound_order(page);
                        else if (!page_count(page))
                                free++;
                        else

-- 
 Gregory V. Fong >< GPG key: 0BAE9648

WARNING: multiple messages have this Message-ID (diff)
From: Gregory Fong <gregory.0xf0@gmail.com>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: "Wang, Yalin" <Yalin.Wang@sonymobile.com>,
	Mel Gorman <mgorman@suse.de>,
	Laura Abbott <lauraa@codeaurora.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Kees Cook <keescook@chromium.org>,
	Nicolas Pitre <nico@linaro.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	open list <linux-kernel@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"vishnu.ps@samsung.com" <vishnu.ps@samsung.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Johannes Weiner <hannes@cmpxchg.org>
Subject: Re: [PATCH] ARM: print cma-reserved pages from show_mem
Date: Sun, 12 Apr 2015 18:09:13 -0700	[thread overview]
Message-ID: <20150413010913.GA15225@corellia.local> (raw)
In-Reply-To: <20150410112430.GB12732@n2100.arm.linux.org.uk>

On Fri, Apr 10, 2015 at 12:24:31PM +0100, Russell King - ARM Linux wrote:
> On Fri, Apr 10, 2015 at 01:18:04PM +0800, Wang, Yalin wrote:
> > > [   12.212102] active_anon:734 inactive_anon:1189 isolated_anon:0
> > > [   12.212102]  active_file:0 inactive_file:0 isolated_file:0
> > > [   12.212102]  unevictable:0 dirty:0 writeback:0 unstable:0
> > > [   12.212102]  free:254104 slab_reclaimable:82 slab_unreclaimable:843
> 
> Here, we have 82 pages reclaimable, which is 328kB, and 843 unreclaimable
> which is 3372kB, which is a total of 925 pages.
> 
> > > [   12.212102]  mapped:429 shmem:1815 pagetables:13 bounce:0
> > > [   12.212102]  free_cma:4032
> > > [   12.243172] DMA free:754080kB min:3472kB low:4340kB high:5208kB
> > > active_anon:180kB inactive_anon:0kB active_file:0kB inactive_file:0kB
> > > unevictable:0kB isolated(anon):0kB isolated(file):0kB present:778240kB
> > > managed:759252kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB
> > > shmem:0kB slab_reclaimable:328kB slab_unreclaimable:3372kB
> 
> Which agrees here.
> 
> > > [   12.401609] 834 slab pages
> 
> but not here... this is an interesting difference, because in the ARM
> version of show_mem(), we count the actual number of pages where
> PageSlab() returns true.  Can slab pages also be reserved pages or
> swap cache pages?  I thought they were exclusive of those.  So, the
> question comes... why the difference in accounting, and which one is
> correct.
> 
> Maybe there's a bug in the accounting somewhere...

Yes, the ARM show_mem wasn't updated after the various allocators
(SLUB, SLAB, SLOB) were updated to use compound pages.  Fixing it, you
get

[    7.081826] sysrq: SysRq : Show Memory
[    7.085610] Mem-info:
[    7.087890] DMA per-cpu:
[    7.090431] CPU    0: hi:  186, btch:  31 usd:  98
[    7.095230] HighMem per-cpu:
[    7.098116] CPU    0: hi:   90, btch:  15 usd:  29
[    7.102923] active_anon:724 inactive_anon:1189 isolated_anon:0
[    7.102923]  active_file:0 inactive_file:0 isolated_file:0
[    7.102923]  unevictable:0 dirty:0 writeback:0 unstable:0
[    7.102923]  free:253980 slab_reclaimable:83 slab_unreclaimable:846
[    7.102923]  mapped:429 shmem:1815 pagetables:15 bounce:0
[    7.102923]  free_cma:4032
[    7.133995] DMA free:753344kB min:3472kB low:4340kB high:5208kB active_anon:292kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:778240kB managed:759188kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:332kB slab_unreclaimable:3384kB kernel_stack:256kB pagetables:36kB unstable:0kB bounce:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
[    7.174080] lowmem_reserve[]: 0 0 264 264
[    7.178175] HighMem free:262576kB min:264kB low:572kB high:884kB active_anon:2604kB inactive_anon:4756kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:270336kB managed:270336kB mlocked:0kB dirty:0kB writeback:0kB mapped:1716kB shmem:7260kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:24kB unstable:0kB bounce:0kB free_cma:16128kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
[    7.218955] lowmem_reserve[]: 0 0 0 0
[    7.222687] DMA: 8*4kB (UEM) 8*8kB (UM) 4*16kB (UEM) 5*32kB (UM) 2*64kB (M) 4*128kB (UEM) 3*256kB (M) 2*512kB (EM) 5*1024kB (UEM) 6*2048kB (UEM) 3*4096kB (EM) 88*8192kB (MR) = 753344kB
[    7.239477] HighMem: 0*4kB 0*8kB 1*16kB (M) 1*32kB (M) 2*64kB (UM) 2*128kB (UM) 2*256kB (UC) 3*512kB (UMC) 2*1024kB (UC) 2*2048kB (UC) 2*4096kB (UC) 30*8192kB (MRC) = 262576kB
[    7.255455] 1815 total pagecache pages
[    7.259211] 0 pages in swap cache
[    7.262533] Swap cache stats: add 0, delete 0, find 0/0
[    7.267764] Free swap  = 0kB
[    7.270647] Total swap = 0kB
[    7.282890] 262144 pages of RAM
[    7.286041] 254274 free pages
[    7.289013] 4763 reserved pages
[    7.292157] 929 slab pages
[    7.294868] 1063 pages shared
[    7.297839] 0 pages swap cached

And now we see 83 slab_reclaimable + 846 slab_unreclaimable adds up
correctly to the total of 929.

The patch below will end up with the correct count.

8<===
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 1609b02..8d606bb 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -117,7 +117,7 @@ void show_mem(unsigned int filter)
                        else if (PageSwapCache(page))
                                cached++;
                        else if (PageSlab(page))
-                               slab++;
+                               slab += 1 << compound_order(page);
                        else if (!page_count(page))
                                free++;
                        else

-- 
 Gregory V. Fong >< GPG key: 0BAE9648


  reply	other threads:[~2015-04-13  1:09 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-04 23:22 [PATCH] ARM: print cma-reserved pages from show_mem Gregory Fong
2015-02-04 23:22 ` Gregory Fong
2015-02-06  0:41 ` Laura Abbott
2015-02-06  0:41   ` Laura Abbott
2015-02-06 21:14   ` Gregory Fong
2015-02-06 21:14     ` Gregory Fong
2015-02-06 21:41     ` Laura Abbott
2015-02-06 21:41       ` Laura Abbott
2015-02-09 19:55       ` Gregory Fong
2015-02-09 19:55         ` Gregory Fong
2015-02-10 11:32         ` Russell King - ARM Linux
2015-02-10 11:32           ` Russell King - ARM Linux
2015-03-23  9:08           ` Gregory Fong
2015-03-23  9:08             ` Gregory Fong
2015-03-25 11:49             ` Mel Gorman
2015-03-25 11:49               ` Mel Gorman
2015-03-26 11:46             ` Russell King - ARM Linux
2015-03-26 11:46               ` Russell King - ARM Linux
2015-03-26 12:30               ` Mel Gorman
2015-03-26 12:30                 ` Mel Gorman
2015-03-26 13:22                 ` Russell King - ARM Linux
2015-03-26 13:22                   ` Russell King - ARM Linux
2015-03-26 13:47                   ` Mel Gorman
2015-03-26 13:47                     ` Mel Gorman
2015-04-10  4:36                 ` Gregory Fong
2015-04-10  4:36                   ` Gregory Fong
2015-04-10  5:18                   ` Wang, Yalin
2015-04-10  5:18                     ` Wang, Yalin
2015-04-10 11:24                     ` Russell King - ARM Linux
2015-04-10 11:24                       ` Russell King - ARM Linux
2015-04-13  1:09                       ` Gregory Fong [this message]
2015-04-13  1:09                         ` Gregory Fong
2015-04-13  1:21                         ` Gregory Fong
2015-04-13  1:21                           ` Gregory Fong
2015-04-13  9:56                           ` Russell King - ARM Linux
2015-04-13  9:56                             ` Russell King - ARM Linux
2015-04-13 10:04                             ` Mel Gorman
2015-04-13 10:04                               ` Mel Gorman
2015-04-13 10:05                               ` Russell King - ARM Linux
2015-04-13 10:05                                 ` Russell King - ARM Linux
2015-04-13 12:29                                 ` Gregory Fong
2015-04-13 12:29                                   ` Gregory Fong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150413010913.GA15225@corellia.local \
    --to=gregory.0xf0@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.