From: Andi Kleen <ak@suse.de>
To: linux-arch@vger.kernel.org
Cc: Christoph Lameter <clameter@sgi.com>
Subject: Better local_t implementation needed
Date: Fri, 20 Apr 2007 12:56:12 +0200 [thread overview]
Message-ID: <200704201256.13008.ak@suse.de> (raw)
Right now local_t falls back to atomic.h on a lot of architectures:
% grep generic include/asm*/local.h
include/asm-arm/local.h:#include <asm-generic/local.h>
include/asm-arm26/local.h:#include <asm-generic/local.h>
include/asm-avr32/local.h:#include <asm-generic/local.h>
include/asm-cris/local.h:#include <asm-generic/local.h>
include/asm-frv/local.h:#include <asm-generic/local.h>
include/asm-h8300/local.h:#include <asm-generic/local.h>
include/asm-m32r/local.h:#include <asm-generic/local.h>
include/asm-m68k/local.h:#include <asm-generic/local.h>
include/asm-m68knommu/local.h:#include <asm-generic/local.h>
include/asm-powerpc/local.h:#include <asm-generic/local.h>
include/asm-s390/local.h:#include <asm-generic/local.h>
include/asm-sh/local.h:#include <asm-generic/local.h>
include/asm-sh64/local.h:#include <asm-generic/local.h>
include/asm-sparc/local.h:#include <asm-generic/local.h>
include/asm-v850/local.h:#include <asm-generic/local.h>
include/asm-xtensa/local.h:#include <asm-generic/local.h>
and asm-generic.h/local.h falls back to atomic_t
This is unfortunate because if one wants to use local_t for
per CPU counters it will be a full atomic operation which is probably
slow at least on all architectures that support MP.
Using local_t for per cpu counters is nice because then
one can use cpu_local_add() etc. and that generates very good
code at least on x86 and a few other architectures. That would
then allow very cheap per CPU statistics, which are useful
in a number of subsystems (like networking or MM code)
e.g. on x86 with some of the pending per cpu patches we could
in the end implement cpu_local_add as a single non atomic instruction.
This would compare very favourably to the complicated
code sequences that right now are generated for some of the
statistics counters.
There used to be a portable implementation of local.h
that instead defines local_t as a two value array
indexed by in_interrupt(). I'm considering to add that back.
Drawback will be larger code.
Architectures that have cheap atomic_t can just use the atomic_t
fallback. That should be all architectures that are not MP capable?
If you have cheap save_flags/cli/restore_flags that could be also used.
Or some other architecture specific implementation. For example x86
which has atomic on a CPU read/modify/write instructions can just use those.
I would urge you that if it's easy to do a better local_t to implement it.
Comments?
-Andi
next reply other threads:[~2007-04-20 10:56 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-20 10:56 Andi Kleen [this message]
2007-04-20 16:10 ` Better local_t implementation needed Christoph Lameter
2007-04-20 17:01 ` Andi Kleen
2007-04-20 17:05 ` Christoph Lameter
2007-04-20 18:31 ` Luck, Tony
2007-04-20 20:14 ` Andi Kleen
2007-04-20 20:27 ` Christoph Lameter
2007-04-20 21:25 ` Roman Zippel
2007-04-20 22:39 ` David Miller
2007-04-21 0:25 ` Christoph Lameter
2007-04-21 4:45 ` David Miller
[not found] <617E1C2C70743745A92448908E030B2A015F2392@scsmsx411.amr.corp.intel.com>
2007-04-20 20:38 ` Christoph Lameter
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=200704201256.13008.ak@suse.de \
--to=ak@suse.de \
--cc=clameter@sgi.com \
--cc=linux-arch@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).