linux/include
Christoph Lameter 2244b95a7b [PATCH] zoned vm counters: basic ZVC (zoned vm counter) implementation
Per zone counter infrastructure

The counters that we currently have for the VM are split per processor.  The
processor however has not much to do with the zone these pages belong to.  We
cannot tell f.e.  how many ZONE_DMA pages are dirty.

So we are blind to potentially inbalances in the usage of memory in various
zones.  F.e.  in a NUMA system we cannot tell how many pages are dirty on a
particular node.  If we knew then we could put measures into the VM to balance
the use of memory between different zones and different nodes in a NUMA
system.  For example it would be possible to limit the dirty pages per node so
that fast local memory is kept available even if a process is dirtying huge
amounts of pages.

Another example is zone reclaim.  We do not know how many unmapped pages exist
per zone.  So we just have to try to reclaim.  If it is not working then we
pause and try again later.  It would be better if we knew when it makes sense
to reclaim unmapped pages from a zone.  This patchset allows the determination
of the number of unmapped pages per zone.  We can remove the zone reclaim
interval with the counters introduced here.

Futhermore the ability to have various usage statistics available will allow
the development of new NUMA balancing algorithms that may be able to improve
the decision making in the scheduler of when to move a process to another node
and hopefully will also enable automatic page migration through a user space
program that can analyse the memory load distribution and then rebalance
memory use in order to increase performance.

The counter framework here implements differential counters for each processor
in struct zone.  The differential counters are consolidated when a threshold
is exceeded (like done in the current implementation for nr_pageache), when
slab reaping occurs or when a consolidation function is called.

Consolidation uses atomic operations and accumulates counters per zone in the
zone structure and also globally in the vm_stat array.  VM functions can
access the counts by simply indexing a global or zone specific array.

The arrangement of counters in an array also simplifies processing when output
has to be generated for /proc/*.

Counters can be updated by calling inc/dec_zone_page_state or
_inc/dec_zone_page_state analogous to *_page_state.  The second group of
functions can be called if it is known that interrupts are disabled.

Special optimized increment and decrement functions are provided.  These can
avoid certain checks and use increment or decrement instructions that an
architecture may provide.

We also add a new CONFIG_DMA_IS_NORMAL that signifies that an architecture can
do DMA to all memory and therefore ZONE_NORMAL will not be populated.  This is
only currently set for IA64 SGI SN2 and currently only affects
node_page_state().  In the best case node_page_state can be reduced to
retrieving a single counter for the one zone on the node.

[akpm@osdl.org: cleanups]
[akpm@osdl.org: export vm_stat[] for filesystems]
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-06-30 11:25:34 -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] zoned vm counters: basic ZVC (zoned vm counter) implementation 2006-06-30 11:25:34 -07:00
math-emu Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
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 [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
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