freebsd-nq/sys/i386/include
Attilio Rao 774d251d99 Sync back vmcontention branch into HEAD:
Replace the per-object resident and cached pages splay tree with a
path-compressed multi-digit radix trie.
Along with this, switch also the x86-specific handling of idle page
tables to using the radix trie.

This change is supposed to do the following:
- Allowing the acquisition of read locking for lookup operations of the
  resident/cached pages collections as the per-vm_page_t splay iterators
  are now removed.
- Increase the scalability of the operations on the page collections.

The radix trie does rely on the consumers locking to ensure atomicity of
its operations.  In order to avoid deadlocks the bisection nodes are
pre-allocated in the UMA zone.  This can be done safely because the
algorithm needs at maximum one new node per insert which means the
maximum number of the desired nodes is the number of available physical
frames themselves.  However, not all the times a new bisection node is
really needed.

The radix trie implements path-compression because UFS indirect blocks
can lead to several objects with a very sparse trie, increasing the number
of levels to usually scan.  It also helps in the nodes pre-fetching by
introducing the single node per-insert property.

This code is not generalized (yet) because of the possible loss of
performance by having much of the sizes in play configurable.
However, efforts to make this code more general and then reusable in
further different consumers might be really done.

The only KPI change is the removal of the function vm_page_splay() which
is now reaped.
The only KBI change, instead, is the removal of the left/right iterators
from struct vm_page, which are now reaped.

Further technical notes broken into mealpieces can be retrieved from the
svn branch:
http://svn.freebsd.org/base/user/attilio/vmcontention/

Sponsored by:	EMC / Isilon storage division
In collaboration with:	alc, jeff
Tested by:	flo, pho, jhb, davide
Tested by:	ian (arm)
Tested by:	andreast (powerpc)
2013-03-18 00:25:02 +00:00
..
pc - Re-shuffle the <machine/pc/bios.h> headers to move all kernel-specific 2012-09-28 11:59:32 +00:00
xen s/teh/the/g 2012-09-14 21:59:55 +00:00
_align.h Merge amd64/i386 _align.h by aligning on the size of register_t (copied 2010-11-26 10:59:20 +00:00
_bus.h
_inttypes.h Copy powerpc/include/_inttypes.h to x86 and replace i386/amd64/pc98 2011-01-08 18:09:48 +00:00
_limits.h Copy amd64 _limits.h to x86 and merge with i386 _limits.h. Replace 2012-02-28 18:24:28 +00:00
_stdint.h Copy amd64 _stdint.h to x86 and merge with i386 _stdint.h. Replace 2012-02-28 18:38:33 +00:00
_types.h Copy amd64 _types.h to x86 and merge with i386 _types.h. Replace existing 2012-02-28 18:15:28 +00:00
acpica_machdep.h
apicvar.h Add SMP/i386 suspend/resume support. 2012-05-18 18:55:58 +00:00
apm_bios.h Move identical copies of apm_bios.h to sys/x86/include, replace them with 2010-11-11 19:36:21 +00:00
apm_segments.h
asm.h Also import WEAK_ALIAS() from the MIPS code. 2012-01-05 08:51:06 +00:00
asmacros.h
atomic.h Add an unified macro to deny ability from the compiler to reorder 2012-10-09 14:32:30 +00:00
bootinfo.h i386 bootinfo: re-arrange EFI fields for natural alignment and packing 2012-05-13 09:25:39 +00:00
bus_dma.h
bus.h Revert r243960 based on feedback regarding keeping x86 headers unified 2012-12-13 21:27:20 +00:00
clock.h Implement boot-time TSC synchronization test for SMP. This test is executed 2011-05-09 17:34:00 +00:00
cpu.h Use cpu_ticks() for get_cyclecount(9) rather than checking existence of TSC 2011-04-04 22:56:33 +00:00
cpufunc.h Add lfence(). 2012-08-01 17:24:53 +00:00
cputypes.h
cserial.h
db_machdep.h
elan_mmcr.h
elf.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
endian.h Copy amd64 endian.h to x86 and merge with i386 endian.h. Replace 2012-02-28 19:39:54 +00:00
exec.h
float.h Copy amd64 float.h to x86 and merge with i386 float.h. Replace 2012-03-04 14:00:32 +00:00
floatingpoint.h
frame.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
gdb_machdep.h
ieeefp.h People porting FreeBSD to new architectures ought not have to 2011-10-21 06:41:46 +00:00
if_wl_wavelan.h
in_cksum.h MFp4 bz_ipv6_fast: 2012-05-24 22:00:48 +00:00
intr_machdep.h x86 suspend/resume: suspend pics and pseudo-pics in reverse order 2013-02-02 12:02:42 +00:00
ioctl_bt848.h
ioctl_meteor.h
iodev.h
kdb.h
limits.h
md_var.h Add SMP/i386 suspend/resume support. 2012-05-18 18:55:58 +00:00
memdev.h Add reader/writer lock around mem_range_attr_get() and mem_range_attr_set(). 2011-01-17 22:58:28 +00:00
metadata.h
minidump.h
mp_watchdog.h
nexusvar.h
npx.h MFCamd64 r238598: 2012-07-21 21:52:48 +00:00
param.h Parly revert r239255: reinstate a default maxswzone on i386, where KVA is 2012-08-27 13:22:27 +00:00
pcaudioio.h Convert files to UTF-8 2012-01-15 13:23:18 +00:00
pcb_ext.h
pcb.h - Fix resumectx() prototypes to reflect reality. 2012-06-13 21:03:01 +00:00
pci_cfgreg.h Move {amd64,i386}/pci/pci_bus.c and {amd64,i386}/include/pci_cfgreg.h to 2011-06-22 21:04:13 +00:00
pcpu.h MFamd64 r238623: 2012-07-26 09:11:37 +00:00
perfmon.h
pmap.h Sync back vmcontention branch into HEAD: 2013-03-18 00:25:02 +00:00
pmc_mdep.h Add software PMC support. 2012-03-28 20:58:30 +00:00
ppireg.h
privatespace.h
proc.h Handle spurious page faults that may occur in no-fault sections of the 2012-03-22 04:52:51 +00:00
profile.h Use intr_disable() and intr_restore() instead of frobbing the flags register 2010-10-25 15:28:03 +00:00
psl.h Copy i386 psl.h to x86 and replace amd64/i386/pc98 psl.h with stubs. 2012-03-19 21:29:57 +00:00
ptrace.h Copy amd64 ptrace.h to x86 and merge with i386 ptrace.h. Replace 2012-03-04 20:24:28 +00:00
reg.h Copy i386 reg.h to x86 and merge with amd64 reg.h. Replace i386/amd64/pc98 2012-03-18 19:06:38 +00:00
reloc.h
resource.h
runq.h
segments.h Move userland bits (and some common kernel bits) from amd64 and i386 2012-03-19 21:24:50 +00:00
setjmp.h Copy amd64 setjmp.h to x86 and replace amd64/i386/pc98 setjmp.h with stubs. 2012-02-28 22:17:52 +00:00
sf_buf.h Commit the support for removing cpumask_t and replacing it directly with 2011-05-05 14:39:14 +00:00
sigframe.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
signal.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
smapi.h
smp.h Share IPI init and startup code of mp_machdep.c with acpi_wakeup.c 2012-06-12 00:14:54 +00:00
speaker.h
specialreg.h Copy i386 specialreg.h to x86 and merge with amd64 specialreg.h. Replace 2012-03-19 21:34:11 +00:00
stack.h
stdarg.h Copy amd64 stdarg.h to x86 and replace amd64/i386/pc98 stdarg.h with stubs. 2012-02-28 22:30:58 +00:00
sysarch.h Copy amd64 sysarch.h to x86 and merge with i386 sysarch.h. Replace 2012-03-19 21:57:31 +00:00
timerreg.h
trap.h Copy amd64 trap.h to x86 and replace amd64/i386/pc98 trap.h with stubs. 2012-03-04 14:12:57 +00:00
tss.h
ucontext.h Convert machine/elf.h, machine/frame.h, machine/sigframe.h, 2013-02-20 17:39:52 +00:00
varargs.h
vdso.h Implement mechanism to export some kernel timekeeping data to 2012-06-22 07:06:40 +00:00
vm86.h Increase maximum number of page table entries per VM86 context from 8 to 24 2010-08-25 21:13:23 +00:00
vm.h - Rename VM_MEMATTR_UNCACHED to VM_MEMATTR_WEAK_UNCACHEABLE on x86 to 2012-03-29 16:51:22 +00:00
vmparam.h Remove unused VM_MAX_AUTOTUNE_NMBCLUSTERS define. 2013-02-01 14:16:37 +00:00
xbox.h