All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Davidlohr Bueso <davidlohr@hp.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Hugh Dickins <hughd@google.com>,
	Michel Lespinasse <walken@google.com>,
	Mel Gorman <mgorman@suse.de>, Rik van Riel <riel@redhat.com>,
	Guan Xuetao <gxt@mprc.pku.edu.cn>,
	aswin@hp.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH] mm: cache largest vma
Date: Mon, 4 Nov 2013 08:00:34 +0100	[thread overview]
Message-ID: <20131104070034.GD13030@gmail.com> (raw)
In-Reply-To: <1383538810.2373.22.camel@buesod1.americas.hpqcorp.net>


* Davidlohr Bueso <davidlohr@hp.com> wrote:

> On Sun, 2013-11-03 at 11:12 +0100, Ingo Molnar wrote:
> > * Davidlohr Bueso <davidlohr@hp.com> wrote:
> > 
> > > While caching the last used vma already does a nice job avoiding
> > > having to iterate the rbtree in find_vma, we can improve. After
> > > studying the hit rate on a load of workloads and environments,
> > > it was seen that it was around 45-50% - constant for a standard
> > > desktop system (gnome3 + evolution + firefox + a few xterms),
> > > and multiple java related workloads (including Hadoop/terasort),
> > > and aim7, which indicates it's better than the 35% value documented
> > > in the code.
> > > 
> > > By also caching the largest vma, that is, the one that contains
> > > most addresses, there is a steady 10-15% hit rate gain, putting
> > > it above the 60% region. This improvement comes at a very low
> > > overhead for a miss. Furthermore, systems with !CONFIG_MMU keep
> > > the current logic.
> > > 
> > > This patch introduces a second mmap_cache pointer, which is just
> > > as racy as the first, but as we already know, doesn't matter in
> > > this context. For documentation purposes, I have also added the
> > > ACCESS_ONCE() around mm->mmap_cache updates, keeping it consistent
> > > with the reads.
> > > 
> > > Cc: Hugh Dickins <hughd@google.com>
> > > Cc: Michel Lespinasse <walken@google.com>
> > > Cc: Ingo Molnar <mingo@kernel.org>
> > > Cc: Mel Gorman <mgorman@suse.de>
> > > Cc: Rik van Riel <riel@redhat.com>
> > > Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
> > > Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
> > > ---
> > > Please note that nommu and unicore32 arch are *untested*.
> > > 
> > > I also have a patch on top of this one that caches the most 
> > > used vma, which adds another 8-10% hit rate gain, However,
> > > since it does add a counter to the vma structure and we have
> > > to do more logic in find_vma to keep track, I was hesitant about
> > > the overhead. If folks are interested I can send that out as well.
> > 
> > Would be interesting to see.
> > 
> > Btw., roughly how many cycles/instructions do we save by increasing 
> > the hit rate, in the typical case (for example during a kernel build)?
> 
> Good point. The IPC from perf stat doesn't show any difference with or 
> without the patch -- note that this is probably the least interesting 
> one as we already get a really nice hit rate with the single mmap_cache. 
> I have yet to try it on the other workloads.

I'd be surprised if this was measureable via perf stat, unless you do the 
measurement in a really, really careful way - and even then it's easy to 
make a hard to detect mistake larger in magnitude than the measured effect 
...

An easier and more reliable measurement would be to stick 2-3 get_cycles() 
calls into the affected code and save the pure timestamps into 
task.se.statistics, and extract the timestamps via /proc/sched_debug by 
adding matching seq_printf()s to kernel/sched/debug.c. (You can clear the 
statistics by echoing 0 to /proc/<PID>/sched_debug, see 
proc_sched_set_task().)

That measurement is still subject to skid and other artifacts but 
hopefully the effect is larger than cycles fuzz - and we are interested in 
a ballpark figure in any case.

Thanks,

	Ingo

--
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: Ingo Molnar <mingo@kernel.org>
To: Davidlohr Bueso <davidlohr@hp.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Hugh Dickins <hughd@google.com>,
	Michel Lespinasse <walken@google.com>,
	Mel Gorman <mgorman@suse.de>, Rik van Riel <riel@redhat.com>,
	Guan Xuetao <gxt@mprc.pku.edu.cn>,
	aswin@hp.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH] mm: cache largest vma
Date: Mon, 4 Nov 2013 08:00:34 +0100	[thread overview]
Message-ID: <20131104070034.GD13030@gmail.com> (raw)
In-Reply-To: <1383538810.2373.22.camel@buesod1.americas.hpqcorp.net>


* Davidlohr Bueso <davidlohr@hp.com> wrote:

> On Sun, 2013-11-03 at 11:12 +0100, Ingo Molnar wrote:
> > * Davidlohr Bueso <davidlohr@hp.com> wrote:
> > 
> > > While caching the last used vma already does a nice job avoiding
> > > having to iterate the rbtree in find_vma, we can improve. After
> > > studying the hit rate on a load of workloads and environments,
> > > it was seen that it was around 45-50% - constant for a standard
> > > desktop system (gnome3 + evolution + firefox + a few xterms),
> > > and multiple java related workloads (including Hadoop/terasort),
> > > and aim7, which indicates it's better than the 35% value documented
> > > in the code.
> > > 
> > > By also caching the largest vma, that is, the one that contains
> > > most addresses, there is a steady 10-15% hit rate gain, putting
> > > it above the 60% region. This improvement comes at a very low
> > > overhead for a miss. Furthermore, systems with !CONFIG_MMU keep
> > > the current logic.
> > > 
> > > This patch introduces a second mmap_cache pointer, which is just
> > > as racy as the first, but as we already know, doesn't matter in
> > > this context. For documentation purposes, I have also added the
> > > ACCESS_ONCE() around mm->mmap_cache updates, keeping it consistent
> > > with the reads.
> > > 
> > > Cc: Hugh Dickins <hughd@google.com>
> > > Cc: Michel Lespinasse <walken@google.com>
> > > Cc: Ingo Molnar <mingo@kernel.org>
> > > Cc: Mel Gorman <mgorman@suse.de>
> > > Cc: Rik van Riel <riel@redhat.com>
> > > Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
> > > Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
> > > ---
> > > Please note that nommu and unicore32 arch are *untested*.
> > > 
> > > I also have a patch on top of this one that caches the most 
> > > used vma, which adds another 8-10% hit rate gain, However,
> > > since it does add a counter to the vma structure and we have
> > > to do more logic in find_vma to keep track, I was hesitant about
> > > the overhead. If folks are interested I can send that out as well.
> > 
> > Would be interesting to see.
> > 
> > Btw., roughly how many cycles/instructions do we save by increasing 
> > the hit rate, in the typical case (for example during a kernel build)?
> 
> Good point. The IPC from perf stat doesn't show any difference with or 
> without the patch -- note that this is probably the least interesting 
> one as we already get a really nice hit rate with the single mmap_cache. 
> I have yet to try it on the other workloads.

I'd be surprised if this was measureable via perf stat, unless you do the 
measurement in a really, really careful way - and even then it's easy to 
make a hard to detect mistake larger in magnitude than the measured effect 
...

An easier and more reliable measurement would be to stick 2-3 get_cycles() 
calls into the affected code and save the pure timestamps into 
task.se.statistics, and extract the timestamps via /proc/sched_debug by 
adding matching seq_printf()s to kernel/sched/debug.c. (You can clear the 
statistics by echoing 0 to /proc/<PID>/sched_debug, see 
proc_sched_set_task().)

That measurement is still subject to skid and other artifacts but 
hopefully the effect is larger than cycles fuzz - and we are interested in 
a ballpark figure in any case.

Thanks,

	Ingo

  parent reply	other threads:[~2013-11-04  7:00 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-01 20:17 [PATCH] mm: cache largest vma Davidlohr Bueso
2013-11-01 20:17 ` Davidlohr Bueso
2013-11-01 20:38 ` KOSAKI Motohiro
2013-11-01 20:38   ` KOSAKI Motohiro
2013-11-01 21:11   ` Davidlohr Bueso
2013-11-01 21:11     ` Davidlohr Bueso
2013-11-03  9:46     ` Ingo Molnar
2013-11-03  9:46       ` Ingo Molnar
2013-11-03 23:57     ` KOSAKI Motohiro
2013-11-03 23:57       ` KOSAKI Motohiro
2013-11-04  4:22       ` Davidlohr Bueso
2013-11-04  4:22         ` Davidlohr Bueso
2013-11-01 21:23 ` Rik van Riel
2013-11-01 21:23   ` Rik van Riel
2013-11-03 10:12 ` Ingo Molnar
2013-11-03 10:12   ` Ingo Molnar
2013-11-04  4:20   ` Davidlohr Bueso
2013-11-04  4:20     ` Davidlohr Bueso
2013-11-04  4:48     ` converting unicore32 to gate_vma as done for arm (was Re: [PATCH] mm: cache largest vma) Al Viro
2013-11-04  4:48       ` Al Viro
2013-11-05  2:49       ` 管雪涛
2013-11-05  2:49         ` 管雪涛
2013-11-11  7:25         ` converting unicore32 to gate_vma as done for arm (was " Al Viro
2013-11-11  7:25           ` Al Viro
2013-11-04  7:00     ` Ingo Molnar [this message]
2013-11-04  7:00       ` [PATCH] mm: cache largest vma Ingo Molnar
2013-11-04  7:05     ` Ingo Molnar
2013-11-04  7:05       ` Ingo Molnar
2013-11-04 14:20       ` Frederic Weisbecker
2013-11-04 14:20         ` Frederic Weisbecker
2013-11-04 17:52         ` Ingo Molnar
2013-11-04 17:52           ` Ingo Molnar
2013-11-04 18:10           ` Frederic Weisbecker
2013-11-04 18:10             ` Frederic Weisbecker
2013-11-05  8:24             ` Ingo Molnar
2013-11-05  8:24               ` Ingo Molnar
2013-11-05 14:27               ` Jiri Olsa
2013-11-05 14:27                 ` Jiri Olsa
2013-11-06  6:01                 ` Ingo Molnar
2013-11-06  6:01                   ` Ingo Molnar
2013-11-06 14:03                   ` Konstantin Khlebnikov
2013-11-06 14:03                     ` Konstantin Khlebnikov
2013-11-03 18:51 ` Linus Torvalds
2013-11-03 18:51   ` Linus Torvalds
2013-11-04  4:04   ` Davidlohr Bueso
2013-11-04  4:04     ` Davidlohr Bueso
2013-11-04  7:36     ` Ingo Molnar
2013-11-04  7:36       ` Ingo Molnar
2013-11-04 14:56       ` Michel Lespinasse
2013-11-04 14:56         ` Michel Lespinasse
2013-11-11  4:12       ` Davidlohr Bueso
2013-11-11  4:12         ` Davidlohr Bueso
2013-11-11  7:43         ` Michel Lespinasse
2013-11-11  7:43           ` Michel Lespinasse
2013-11-11 12:04           ` Ingo Molnar
2013-11-11 12:04             ` Ingo Molnar
2013-11-11 20:47             ` Davidlohr Bueso
2013-11-11 20:47               ` Davidlohr Bueso
2013-11-13 17:08               ` Davidlohr Bueso
2013-11-13 17:08                 ` Davidlohr Bueso
2013-11-13 17:59                 ` Ingo Molnar
2013-11-13 17:59                   ` Ingo Molnar
2013-11-13 18:16               ` Peter Zijlstra
2013-11-13 18:16                 ` Peter Zijlstra
2013-11-11 12:01         ` Ingo Molnar
2013-11-11 12:01           ` Ingo Molnar
2013-11-11 18:24           ` Davidlohr Bueso
2013-11-11 18:24             ` Davidlohr Bueso
2013-11-11 20:47             ` Ingo Molnar
2013-11-11 20:47               ` Ingo Molnar
2013-11-11 20:59               ` Davidlohr Bueso
2013-11-11 20:59                 ` Davidlohr Bueso
2013-11-11 21:09                 ` Ingo Molnar
2013-11-11 21:09                   ` Ingo Molnar
2013-11-04  7:03   ` Christoph Hellwig
2013-11-04  7:03     ` Christoph Hellwig

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=20131104070034.GD13030@gmail.com \
    --to=mingo@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=aswin@hp.com \
    --cc=davidlohr@hp.com \
    --cc=gxt@mprc.pku.edu.cn \
    --cc=hughd@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=riel@redhat.com \
    --cc=torvalds@linux-foundation.org \
    --cc=walken@google.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.