public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@zip.com.au>
To: Daniel Phillips <phillips@arcor.de>
Cc: Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>,
	Linus Torvalds <torvalds@transmeta.com>,
	Marcelo Tosatti <marcelo@conectiva.com.br>,
	linux-kernel@vger.kernel.org
Subject: Re: [RFC] [PATCH] Include LRU in page count
Date: Sun, 01 Sep 2002 16:08:03 -0700	[thread overview]
Message-ID: <3D729DD3.AE3681C9@zip.com.au> (raw)
In-Reply-To: E17ld5N-0004cg-00@starship

Daniel Phillips wrote:
> 
> On Monday 02 September 2002 00:09, Andrew Morton wrote:
> > Daniel Phillips wrote:
> > >
> > > ...
> > > I'm looking at your spinlock_irq now and thinking the _irq part could
> > > possibly be avoided.  Can you please remind me of the motivation for this -
> > > was it originally intended to address the same race we've been working on
> > > here?
> >
> > scalability, mainly.  If the CPU holding the lock takes an interrupt,
> > all the other CPUs get to spin until the handler completes.  I measured
> > a 30% reducton in contention from this.
> >
> > Not a generally justifiable trick, but this is a heavily-used lock.
> > All the new games in refill_inactive() are there to minimise the
> > interrupt-off time.
> 
> Ick.  I hope you really chopped the lock hold time into itty-bitty pieces.

Max hold is around 7,000 cycles.

> Note that I changed the spin_lock in page_cache_release to a trylock, maybe
> it's worth checking out the effect on contention.  With a little head
> scratching we might be able to get rid of the spin_lock in lru_cache_add as
> well.  That leaves (I think) just the two big scan loops.  I've always felt
> it's silly to run more than one of either at the same time anyway.

No way.  Take a look at http://samba.org/~anton/linux/2.5.30/

That's 8-way power4, the workload is "dd from 7 disks
dd if=/dev/sd* of=/dev/null bs=1024k".

The CPU load in this situation was dominated by the VM.  The LRU list and page
reclaim.  Spending more CPU in lru_cache_add() than in copy_to_user() is
pretty gross.

I think it's under control now - I expect we're OK up to eight or sixteen
CPUs per node, but I'm still not happy with the level of testing.  Most people
who have enough hardware to test this tend to have so much RAM that their
tests don't hit page reclaim.

slablru will probably change the picture too.  There's a weird effect with
the traditional try_to_free_pages() code.  The first thing it does is to run
kmem_cache_shrink().  Which takes a sempahore, fruitlessly fiddles with the
slab and then runs page reclaim.

On the 4-way I measured 25% contention on the spinlock inside that semaphore.
What is happening is that the combination of the sleeping lock and the slab
operations effectively serialises entry into page reclaim.

slablru removes that little turnstile on entry to try_to_free_pages(), and we
will now see a lot more concurrency in shrink_foo().

My approach was to keep the existing design and warm it up, rather than to
redesign.  Is it "good enough" now?   Dunno - nobody has run the tests
with slablru.  But it's probably too late for a redesign (such as per-cpu LRU,
per-mapping lru, etc).

It would be great to make presence on the LRU contribute to page->count, because
that would permit the removal of a ton of page_cache_get/release operations inside
the LRU lock, perhaps doubling throughput in there.   Guess I should get off my
lazy butt and see what you've done (will you for heaven's sake go and buy an IDE
disk and compile up a 2.5 kernel? :))

  reply	other threads:[~2002-09-01 22:52 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-08-22  2:29 MM patches against 2.5.31 Andrew Morton
2002-08-22 11:28 ` Christian Ehrhardt
2002-08-26  1:52   ` Andrew Morton
2002-08-26  9:10     ` Christian Ehrhardt
2002-08-26 14:22       ` Daniel Phillips
2002-08-26 15:29         ` Christian Ehrhardt
2002-08-26 17:56           ` Daniel Phillips
2002-08-26 19:24             ` Andrew Morton
2002-08-26 19:34               ` Daniel Phillips
2002-08-26 19:48               ` Christian Ehrhardt
2002-08-27  9:22               ` Christian Ehrhardt
2002-08-27 19:19                 ` Andrew Morton
2002-08-26 20:00             ` Christian Ehrhardt
2002-08-26 20:09               ` Daniel Phillips
2002-08-26 20:58                 ` Christian Ehrhardt
2002-08-27 16:48                   ` Daniel Phillips
2002-08-28 13:14                     ` Christian Ehrhardt
2002-08-28 17:18                       ` Daniel Phillips
2002-08-28 17:42                         ` Andrew Morton
2002-08-28 20:41                       ` Daniel Phillips
2002-08-28 21:03                         ` Andrew Morton
2002-08-28 22:04                           ` Daniel Phillips
2002-08-28 22:39                             ` Andrew Morton
2002-08-28 22:57                               ` Daniel Phillips
2002-08-26 21:31                 ` Andrew Morton
2002-08-27  3:42                   ` Benjamin LaHaise
2002-08-27  4:37                     ` Andrew Morton
2002-08-26 17:58     ` Linus Torvalds
2002-08-26 19:28       ` Rik van Riel
2002-08-30 23:03       ` [RFC] [PATCH] Include LRU in page count Daniel Phillips
2002-08-31 16:14         ` Christian Ehrhardt
2002-08-31 17:54           ` Andrew Morton
2002-08-31 19:47           ` Daniel Phillips
2002-08-31 20:26             ` Andrew Morton
2002-08-31 21:05               ` Daniel Phillips
2002-08-31 22:30                 ` William Lee Irwin III
2002-09-01  3:36                   ` Daniel Phillips
2002-09-01 21:32               ` Daniel Phillips
2002-09-01 22:09                 ` Andrew Morton
2002-09-01 22:08                   ` Daniel Phillips
2002-09-01 22:20                   ` Daniel Phillips
2002-09-01 23:08                     ` Andrew Morton [this message]
2002-09-01 23:19                       ` Daniel Phillips
2002-09-01 23:28                       ` William Lee Irwin III
2002-09-01 23:33                       ` Daniel Phillips
2002-09-02  0:17                         ` Andrew Morton
2002-09-02  0:30                           ` Daniel Phillips
2002-09-02  1:50                             ` Andrew Morton
2002-09-02  1:08                         ` Rik van Riel
2002-09-02 17:23             ` Christian Ehrhardt
2002-09-02 18:01               ` Daniel Phillips
2002-09-05  4:42         ` [RFC] Alternative raceless page free Daniel Phillips
2002-09-05 12:34           ` Christian Ehrhardt
2002-09-05 15:21             ` Daniel Phillips
2002-09-05 16:04               ` Christian Ehrhardt
2002-09-05 16:10                 ` Daniel Phillips
2002-09-05 16:31                 ` Daniel Phillips
2002-09-05 18:06                 ` [RFC] Alternative raceless page free, updated Daniel Phillips
2002-08-22 15:59 ` MM patches against 2.5.31 Steven Cole
2002-08-22 16:06   ` Martin J. Bligh
2002-08-22 19:45     ` Steven Cole
2002-08-26  2:15     ` Andrew Morton
2002-08-26  2:08       ` Martin J. Bligh
2002-08-26  2:32         ` Andrew Morton
2002-08-26  3:06           ` Steven Cole

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=3D729DD3.AE3681C9@zip.com.au \
    --to=akpm@zip.com.au \
    --cc=ehrhardt@mathematik.uni-ulm.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcelo@conectiva.com.br \
    --cc=phillips@arcor.de \
    --cc=torvalds@transmeta.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox