To summarize a bit the story of this patch which you will find in
authorMichael Trimarchi <michael@panicking.kicks-ass.org>
Wed, 16 Dec 2009 10:04:53 +0000 (11:04 +0100)
committerMichael Trimarchi <michael@panicking.kicks-ass.org>
Wed, 16 Dec 2009 10:04:53 +0000 (11:04 +0100)
commit1623424a807210d761b829253c93cbc45fd74dba
tree2d12052c90d74175f428f2b5cfa0ac942c83f3e2
parent74edc6732e9e7229505d76655acb5aef38c74e47
To summarize a bit the story of this patch which you will find in
various posts on this list, this patch adds an option to the kernel
configuration which allows using the ARM FCSE in one of two modes:
- the guaranteed mode, where context switches are guaranteed to run
without flushing the caches, but where the number of processes is
limited to 95 with a virtual memory space limited to 32 MB;
- the best-effort mode, where the limitations are removed, but where
the cache is flushed when needed during context switches.

The patch can be considered as relatively stable, it has not changed
much since Linux 2.6.27, and has been validated by running LTP with
the best-effort mode, with no differences in the LTP results compared
to an unpatched kernel. Furthermore, it has been reported to work in
the field.

As for the performance improvement, running the hackbench test with
400 processes (so, well above the 95 processes limit) on an AT91RM9200
showed an improvement in the runing time which can be visualized here:
http://sisyphus.hd.free.fr/~gilles/hackbench.png.

The user-space worst-case scheduling latency is also improved by the
guaranteed mode, but this only interests people running an RT kernel
of any kind.

The patch is relatively simple and only modifies ARM-specific code,
but has been split to ease review, as I have been advised off-list to
do. Some parts of it, however, could be implemented more elegantly
(to say the least), especially patches 8 and 9 which intercept
set_pte_at() to count pages belonging to some types of mappings
whereas counting mappings would be enough but would probably require
to modify generic code.

This patch was done by Gilles Chanteperdrix

Signed-off-by: Michael Trimarchi <michael@panicking.kicks-ass.org>
23 files changed:
arch/arm/include/asm/cacheflush.h
arch/arm/include/asm/cpu-multi32.h
arch/arm/include/asm/cpu-single.h
arch/arm/include/asm/fcse.h [new file with mode: 0644]
arch/arm/include/asm/memory.h
arch/arm/include/asm/mmu.h
arch/arm/include/asm/mmu_context.h
arch/arm/include/asm/pgtable.h
arch/arm/include/asm/proc-fns.h
arch/arm/include/asm/processor.h
arch/arm/include/asm/tlbflush.h
arch/arm/kernel/Makefile
arch/arm/kernel/fcse.c [new file with mode: 0644]
arch/arm/kernel/smp.c
arch/arm/mm/Kconfig
arch/arm/mm/fault-armv.c
arch/arm/mm/fault.c
arch/arm/mm/flush.c
arch/arm/mm/mmap.c
arch/arm/mm/pgd.c
arch/arm/mm/proc-arm920.S
arch/arm/mm/proc-arm926.S
arch/arm/mm/proc-xscale.S