All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Weiner <hannes@cmpxchg.org>
To: Chen Yucong <slaoub@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	mgorman@suse.de, mhocko@suse.cz, riel@redhat.com,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] mm/vmscan.c: wrap five parameters into shrink_result for reducing the stack consumption
Date: Fri, 13 Jun 2014 12:28:07 -0400	[thread overview]
Message-ID: <20140613162807.GP2878@cmpxchg.org> (raw)
In-Reply-To: <1402636875.1232.13.camel@debian>

On Fri, Jun 13, 2014 at 01:21:15PM +0800, Chen Yucong wrote:
> On Thu, 2014-06-12 at 21:40 -0700, Andrew Morton wrote:
> > On Fri, 13 Jun 2014 12:36:31 +0800 Chen Yucong <slaoub@gmail.com> wrote:
> > 
> > > @@ -1148,7 +1146,8 @@ unsigned long reclaim_clean_pages_from_list(struct zone *zone,
> > >  		.priority = DEF_PRIORITY,
> > >  		.may_unmap = 1,
> > >  	};
> > > -	unsigned long ret, dummy1, dummy2, dummy3, dummy4, dummy5;
> > > +	unsigned long ret;
> > > +	struct shrink_result dummy = { };
> > 
> > You didn't like the idea of making this static?
> Sorry! It's my negligence.
> If we make dummy static, it can help us save more stack.
> 
> without change:  
> 0xffffffff810aede8 reclaim_clean_pages_from_list []:	184
> 0xffffffff810aeef8 reclaim_clean_pages_from_list []:	184
> 
> with change: struct shrink_result dummy = {};
> 0xffffffff810aed6c reclaim_clean_pages_from_list []:	152
> 0xffffffff810aee68 reclaim_clean_pages_from_list []:	152
> 
> with change: static struct shrink_result dummy ={};
> 0xffffffff810aed69 reclaim_clean_pages_from_list []:	120
> 0xffffffff810aee4d reclaim_clean_pages_from_list []:	120

FWIW, I copied bloat-o-meter and hacked up a quick comparison tool
that you can feed two outputs of checkstack.pl for a whole vmlinux and
it shows you the delta.

The output for your patch (with the static dummy) looks like this:

+0/-240 -240
shrink_inactive_list                         136     112     -24
shrink_page_list                             208     160     -48
reclaim_clean_pages_from_list                168       -    -168

(The stack footprint for reclaim_clean_pages_from_list is actually 96
after your patch, but checkstack.pl skips frames under 100)

---
#!/usr/bin/python
#
# Based on bloat-o-meter 

import sys
import re

if len(sys.argv) != 3:
   print("usage: %s file1 file2" % sys.argv[0])
   sys.exit(1)

def getsizes(filename):
   sym = {}
   for line in open(filename):
      x = re.split('(0x.*) (.*) (.*):[ \t]*(.*)', line)
      try:
         foo, addr, name, src, size, bar = x
      except:
         print(x)
         raise Exception
      try:
         sym[name] = int(size)
      except:
         continue
   return sym

old = getsizes(sys.argv[1])
new = getsizes(sys.argv[2])

inc = 0
dec = 0
delta = []
common = {}

for a in old:
   if a in new:
      common[a] = 1

for name in old:
   if name not in common:
      dec += old[name]
      delta.append((-old[name], name))

for name in new:
   if name not in common:
      inc += new[name]
      delta.append((new[name], name))

for name in common:
   d = new.get(name, 0) - old.get(name, 0)
   if d > 0: inc += d
   if d < 0: dec -= d
   delta.append((d, name))

delta.sort()
delta.reverse()

print("+%d/-%d %+d" % (inc, dec, inc - dec))
for d, name in delta:
   if d:
      print("%-40s %7s %7s %+7d" % (name, old.get(name, "-"), new.get(name, "-"), d))

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Johannes Weiner <hannes@cmpxchg.org>
To: Chen Yucong <slaoub@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	mgorman@suse.de, mhocko@suse.cz, riel@redhat.com,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] mm/vmscan.c: wrap five parameters into shrink_result for reducing the stack consumption
Date: Fri, 13 Jun 2014 12:28:07 -0400	[thread overview]
Message-ID: <20140613162807.GP2878@cmpxchg.org> (raw)
In-Reply-To: <1402636875.1232.13.camel@debian>

On Fri, Jun 13, 2014 at 01:21:15PM +0800, Chen Yucong wrote:
> On Thu, 2014-06-12 at 21:40 -0700, Andrew Morton wrote:
> > On Fri, 13 Jun 2014 12:36:31 +0800 Chen Yucong <slaoub@gmail.com> wrote:
> > 
> > > @@ -1148,7 +1146,8 @@ unsigned long reclaim_clean_pages_from_list(struct zone *zone,
> > >  		.priority = DEF_PRIORITY,
> > >  		.may_unmap = 1,
> > >  	};
> > > -	unsigned long ret, dummy1, dummy2, dummy3, dummy4, dummy5;
> > > +	unsigned long ret;
> > > +	struct shrink_result dummy = { };
> > 
> > You didn't like the idea of making this static?
> Sorry! It's my negligence.
> If we make dummy static, it can help us save more stack.
> 
> without change:  
> 0xffffffff810aede8 reclaim_clean_pages_from_list []:	184
> 0xffffffff810aeef8 reclaim_clean_pages_from_list []:	184
> 
> with change: struct shrink_result dummy = {};
> 0xffffffff810aed6c reclaim_clean_pages_from_list []:	152
> 0xffffffff810aee68 reclaim_clean_pages_from_list []:	152
> 
> with change: static struct shrink_result dummy ={};
> 0xffffffff810aed69 reclaim_clean_pages_from_list []:	120
> 0xffffffff810aee4d reclaim_clean_pages_from_list []:	120

FWIW, I copied bloat-o-meter and hacked up a quick comparison tool
that you can feed two outputs of checkstack.pl for a whole vmlinux and
it shows you the delta.

The output for your patch (with the static dummy) looks like this:

+0/-240 -240
shrink_inactive_list                         136     112     -24
shrink_page_list                             208     160     -48
reclaim_clean_pages_from_list                168       -    -168

(The stack footprint for reclaim_clean_pages_from_list is actually 96
after your patch, but checkstack.pl skips frames under 100)

---
#!/usr/bin/python
#
# Based on bloat-o-meter 

import sys
import re

if len(sys.argv) != 3:
   print("usage: %s file1 file2" % sys.argv[0])
   sys.exit(1)

def getsizes(filename):
   sym = {}
   for line in open(filename):
      x = re.split('(0x.*) (.*) (.*):[ \t]*(.*)', line)
      try:
         foo, addr, name, src, size, bar = x
      except:
         print(x)
         raise Exception
      try:
         sym[name] = int(size)
      except:
         continue
   return sym

old = getsizes(sys.argv[1])
new = getsizes(sys.argv[2])

inc = 0
dec = 0
delta = []
common = {}

for a in old:
   if a in new:
      common[a] = 1

for name in old:
   if name not in common:
      dec += old[name]
      delta.append((-old[name], name))

for name in new:
   if name not in common:
      inc += new[name]
      delta.append((new[name], name))

for name in common:
   d = new.get(name, 0) - old.get(name, 0)
   if d > 0: inc += d
   if d < 0: dec -= d
   delta.append((d, name))

delta.sort()
delta.reverse()

print("+%d/-%d %+d" % (inc, dec, inc - dec))
for d, name in delta:
   if d:
      print("%-40s %7s %7s %+7d" % (name, old.get(name, "-"), new.get(name, "-"), d))

  reply	other threads:[~2014-06-13 16:28 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-13  4:36 [PATCH v2] mm/vmscan.c: wrap five parameters into shrink_result for reducing the stack consumption Chen Yucong
2014-06-13  4:36 ` Chen Yucong
2014-06-13  4:40 ` Andrew Morton
2014-06-13  4:40   ` Andrew Morton
2014-06-13  5:21   ` Chen Yucong
2014-06-13  5:21     ` Chen Yucong
2014-06-13 16:28     ` Johannes Weiner [this message]
2014-06-13 16:28       ` Johannes Weiner
2014-06-14  3:04       ` Chen Yucong
2014-06-14  3:04         ` Chen Yucong
2014-06-13  4:52 ` Konstantin Khlebnikov
2014-06-13  4:52   ` Konstantin Khlebnikov
2014-06-13  5:21   ` Johannes Weiner
2014-06-13  5:21     ` Johannes Weiner
2014-06-13 10:21     ` Konstantin Khlebnikov
2014-06-13 10:21       ` Konstantin Khlebnikov
2014-06-13  5:10 ` Johannes Weiner
2014-06-13  5:10   ` Johannes Weiner

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=20140613162807.GP2878@cmpxchg.org \
    --to=hannes@cmpxchg.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=mhocko@suse.cz \
    --cc=riel@redhat.com \
    --cc=slaoub@gmail.com \
    /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.