public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Joseph D. Wagner" <wagnerjd@prodigy.net>
To: "'David S. Miller'" <davem@redhat.com>
Cc: <robm@fastmail.fm>, <hahn@physics.mcmaster.ca>,
	<linux-kernel@vger.kernel.org>, <jhoward@fastmail.fm>
Subject: RE: Strange load spikes on 2.4.19 kernel
Date: Sun, 13 Oct 2002 02:49:55 -0500	[thread overview]
Message-ID: <000c01c2728d$263c0ca0$7443f4d1@joe> (raw)
In-Reply-To: <20021013.000127.43007739.davem@redhat.com>

>> I'll let you in on a dirty little secret.  The Linux file
>> system does not utilize SMP.  That's right.  All file
>> processes go through one and only one processor.  It has
>> to do with the fact that the Linux kernel is a non-preemptive
>> kernel.

> Not true, page cache accesses (translation: read and write)
> go through the page cache which is fully multi-threaded.

> Allocating blocks and inodes, yes that is currently single
> threaded on SMP.

Now wait a minute!  Allocating blocks and inodes is an integral part of
a write.  Oh sure the actual writing of file data is SMP, but that
process is bottlenecked by single threaded allocation of blocks and
inodes.  Perhaps I could phrase what I said to be more technically
accurate by saying, "Writing makes such poor use of multi-threading on
SMP that in terms of performance it's as if it was single threaded."

> But there is no fundamental reason for that, we just haven't
> gotten around to threading that bit yet.

Oh yes there is.  What if an allocation of blocks and/or inodes is
preempted?  Another thread could attempt to allocate the same set of
blocks and/or inodes.

This isn't a problem on a uniprocessor system because only one processor
can access any data structure at any given time.

However, on SMP two kernel control paths running on different CPUs could
concurrently access the same data structure.  There's two ways to deal
with this error: 1) the lazy way and the way Linus decided to go was to
run block and inode allocation through one single thread, or 2) the
better way is to preempt the other process which would require a) a
preemptive kernel and b) synchronization (and as a programmer I can tell
you that synchronization gets messy if not thoroughly designed and
implemented).

Rather than go through all the work of rewriting the kernel to be
preemptive and significantly improving synchronization routines (a lot
of work), Linus chose to solve the problem by avoiding it, rather than
dealing with it as he should have.

If you don't believe me, prove me wrong.  Write the code.  If you ever
got your @$$ around to it, you'd see that I'm right.


  reply	other threads:[~2002-10-13  7:44 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Pine.LNX.4.33.0210130202070.17395-100000@coffee.psychology.mcmaster.ca>
2002-10-13  6:34 ` Strange load spikes on 2.4.19 kernel Rob Mueller
2002-10-13  7:01   ` Joseph D. Wagner
2002-10-13  7:01     ` David S. Miller
2002-10-13  7:49       ` Joseph D. Wagner [this message]
2002-10-13  7:50         ` David S. Miller
2002-10-13  8:16           ` Joseph D. Wagner
2002-10-13  8:13             ` David S. Miller
2002-10-13  8:40               ` Joseph D. Wagner
2002-10-13  8:45                 ` David S. Miller
2002-10-13  8:48                 ` Mike Galbraith
2002-10-13  8:48                   ` David S. Miller
2002-10-13  8:51                 ` William Lee Irwin III
2002-10-13 10:20                 ` Ingo Molnar
2002-10-13 19:42                 ` Rik van Riel
2002-10-16 21:00         ` Bill Davidsen
2002-10-13  8:59     ` Anton Blanchard
2002-10-13  9:26       ` William Lee Irwin III
2002-10-13 12:31   ` Marius Gedminas
2002-12-11 22:54 Steven Roussey
2002-12-11 23:09 ` Andrew Morton
2002-12-11 23:54   ` Steven Roussey
2002-12-12  0:13     ` Andrew Morton
2002-12-12  0:31       ` Steven Roussey
     [not found] <113001c27282$93955eb0$1900a8c0@lifebook.suse.lists.linux.kernel>
     [not found] ` <000001c27286$6ab6bc60$7443f4d1@joe.suse.lists.linux.kernel>
     [not found]   ` <20021013.000127.43007739.davem@redhat.com.suse.lists.linux.kernel>
2002-10-13  7:24     ` Andi Kleen
2002-10-13  7:21       ` David S. Miller
2002-10-13 11:47       ` Hugh Dickins
2002-10-13 18:29         ` Andrew Morton
     [not found] <Pine.LNX.4.33.0210121605490.16179-100000@coffee.psychology.mcmaster.ca>
2002-10-13  0:49 ` Rob Mueller
     [not found] <001401c2719b$9d45c4a0$53241c43@joe>
2002-10-12  6:54 ` Rob Mueller
  -- strict thread matches above, loose matches on Subject: below --
2002-10-12  3:13 Joseph D. Wagner
2002-10-12  3:10 Joseph D. Wagner
2002-10-12  1:12 Rob Mueller
2002-10-12  1:25 ` Andrew Morton
2002-10-12  2:25   ` Rob Mueller
2002-10-12  3:07     ` Andrew Morton
2002-10-12  6:37       ` Rob Mueller
2002-10-12  6:44         ` Andrew Morton
2002-10-12  6:52           ` Rob Mueller
2002-10-12  7:00             ` Andrew Morton
2002-10-13  6:14               ` Rob Mueller
2002-10-13  7:27                 ` Simon Kirby

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='000c01c2728d$263c0ca0$7443f4d1@joe' \
    --to=wagnerjd@prodigy.net \
    --cc=davem@redhat.com \
    --cc=hahn@physics.mcmaster.ca \
    --cc=jhoward@fastmail.fm \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robm@fastmail.fm \
    /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