linux/include
Christoph Lameter f8891e5e1f [PATCH] Light weight event counters
The remaining counters in page_state after the zoned VM counter patches
have been applied are all just for show in /proc/vmstat.  They have no
essential function for the VM.

We use a simple increment of per cpu variables.  In order to avoid the most
severe races we disable preempt.  Preempt does not prevent the race between
an increment and an interrupt handler incrementing the same statistics
counter.  However, that race is exceedingly rare, we may only loose one
increment or so and there is no requirement (at least not in kernel) that
the vm event counters have to be accurate.

In the non preempt case this results in a simple increment for each
counter.  For many architectures this will be reduced by the compiler to a
single instruction.  This single instruction is atomic for i386 and x86_64.
 And therefore even the rare race condition in an interrupt is avoided for
both architectures in most cases.

The patchset also adds an off switch for embedded systems that allows a
building of linux kernels without these counters.

The implementation of these counters is through inline code that hopefully
results in only a single instruction increment instruction being emitted
(i386, x86_64) or in the increment being hidden though instruction
concurrency (EPIC architectures such as ia64 can get that done).

Benefits:
- VM event counter operations usually reduce to a single inline instruction
  on i386 and x86_64.
- No interrupt disable, only preempt disable for the preempt case.
  Preempt disable can also be avoided by moving the counter into a spinlock.
- Handling is similar to zoned VM counters.
- Simple and easily extendable.
- Can be omitted to reduce memory use for embedded use.

References:

RFC http://marc.theaimsgroup.com/?l=linux-kernel&m=113512330605497&w=2
RFC http://marc.theaimsgroup.com/?l=linux-kernel&m=114988082814934&w=2
local_t http://marc.theaimsgroup.com/?l=linux-kernel&m=114991748606690&w=2
V2 http://marc.theaimsgroup.com/?t=115014808400007&r=1&w=2
V3 http://marc.theaimsgroup.com/?l=linux-kernel&m=115024767022346&w=2
V4 http://marc.theaimsgroup.com/?l=linux-kernel&m=115047968808926&w=2

Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-06-30 11:25:36 -07:00
..
acpi Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2006-06-23 07:52:36 -07:00
asm-alpha [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-arm [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-arm26 [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-cris [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-frv [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-generic [PATCH] Add EXPORT_UNUSED_SYMBOL and EXPORT_UNUSED_SYMBOL_GPL 2006-06-28 14:59:04 -07:00
asm-h8300 [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-i386 [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-ia64 [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-m32r [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-m68k [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-m68knommu [PATCH] m68knommu: fix clobber list in uCdimm/uCsimm helper asm 2006-06-28 15:03:47 -07:00
asm-mips [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-parisc [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-powerpc [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-ppc Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/devfs-2.6 2006-06-29 14:19:21 -07:00
asm-s390 [PATCH] zoned vm counters: create vmstat.c/.h from page_alloc.c/.h 2006-06-30 11:25:34 -07:00
asm-sh [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-sh64 [PATCH] genirq: add ->retrigger() irq op to consolidate hw_irq_resend() 2006-06-29 10:26:23 -07:00
asm-sparc Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2006-06-29 17:43:43 -07:00
asm-sparc64 Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2006-06-29 17:43:43 -07:00
asm-um [PATCH] genirq: add ->retrigger() irq op to consolidate hw_irq_resend() 2006-06-29 10:26:23 -07:00
asm-v850 [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-x86_64 [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
asm-xtensa [AF_UNIX]: Datagram getpeersec 2006-06-29 16:58:06 -07:00
keys [PATCH] keys: discard the contents of a key on revocation 2006-06-26 09:58:18 -07:00
linux [PATCH] Light weight event counters 2006-06-30 11:25:36 -07:00
math-emu
media Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/devfs-2.6 2006-06-29 14:19:21 -07:00
mtd Merge git://git.infradead.org/hdrcleanup-2.6 2006-06-20 15:10:08 -07:00
net [NET]: Add ECN support for TSO 2006-06-29 16:58:08 -07:00
pcmcia Don't include linux/config.h from anywhere else in include/ 2006-04-26 12:56:16 +01:00
rdma IB/uverbs: Don't serialize with ib_uverbs_idr_mutex 2006-06-17 20:44:49 -07:00
rxrpc
scsi Merge branch 'master' into upstream 2006-06-22 22:11:56 -04:00
sound [ALSA] ak4xxx-adda - Code clean-up 2006-06-28 19:31:09 +02:00
video Don't include linux/config.h from anywhere else in include/ 2006-04-26 12:56:16 +01:00