freebsd_amp_hwpstate/sys
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
..
amd64 Sync back vmcontention branch into HEAD: 2013-03-18 00:25:02 +00:00
arm Eliminate an intermediate buffer and some memcpy() operations, and do 2013-03-17 16:31:09 +00:00
boot Attach the elf section headers to the loaded kernel as metadata, so 2013-03-10 00:43:01 +00:00
bsm - Implement two new system calls: 2013-03-02 21:11:30 +00:00
cam Re-enable CTL in GENERIC on i386 and amd64, but turn on the CTL disable 2013-03-04 21:18:45 +00:00
cddl Fix typo in sysctl description 2013-03-17 15:53:27 +00:00
compat Use m_get/m_gethdr instead of compat macros. 2013-03-15 12:55:30 +00:00
conf Sync back vmcontention branch into HEAD: 2013-03-18 00:25:02 +00:00
contrib Simplify TAILQ usage and avoid additional memory allocations. 2013-03-05 08:08:16 +00:00
crypto When porting XTS-related code from OpenBSD I forgot to update copyright (only 2013-02-20 22:59:53 +00:00
ddb
dev Fix a typo in a comment. 2013-03-17 07:28:17 +00:00
fs Remove negative name cache entry pointing to the target name, which 2013-03-17 15:11:37 +00:00
gdb
geom We don't need buffer to handle BIO_DELETE, so don't check buffer size for it. 2013-03-14 23:07:01 +00:00
gnu/fs/reiserfs Garbage collect XFS bits which are now already completely disconnected 2013-03-02 15:33:54 +00:00
i386 Sync back vmcontention branch into HEAD: 2013-03-18 00:25:02 +00:00
ia64 Add pmap function pmap_copy_pages(), which copies the content of the 2013-03-14 20:18:12 +00:00
isa
kern In m_align() add assertions that mbuf is virgin, similar to assertions 2013-03-17 07:41:14 +00:00
kgssapi
libkern Add __aeabi_memset to libkern, implemented using memset, as clang may 2013-03-16 23:11:55 +00:00
mips Add pmap function pmap_copy_pages(), which copies the content of the 2013-03-14 20:18:12 +00:00
modules In the uart module build ofw_bus_if.h on arm along with sparc64 as LINT 2013-03-17 06:33:49 +00:00
net Use m_get/m_gethdr instead of compat macros. 2013-03-15 12:55:30 +00:00
net80211 Kill this, it's not needed at this point and (hopefully) the parent 2013-03-10 04:38:06 +00:00
netatalk
netgraph Fix compilation warning. 2013-02-15 07:58:51 +00:00
netinet In m_megapullup() instead of reserving some space at the end of packet, 2013-03-17 07:37:10 +00:00
netinet6 - Use m_getcl() instead of hand allocating. 2013-03-15 13:48:53 +00:00
netipsec Use m_get2() + m_align() instead of hand made key_alloc_mbuf(). Code 2013-03-15 10:20:15 +00:00
netipx
netnatm
netpfil Use m_get/m_gethdr instead of compat macros. 2013-03-15 12:55:30 +00:00
netsmb Call make_dev_credf() rather than using the couple make_dev()/dev_ref(). 2013-03-09 16:58:19 +00:00
nfs Use m_get() and m_getcl() instead of compat macros. 2013-03-15 10:21:18 +00:00
nfsclient Revert 195703 and 195821 as this special stop handling in NFS is now 2013-03-13 21:06:03 +00:00
nfsserver Switch the vm_object mutex to be a rwlock. This will enable in the 2013-03-09 02:32:23 +00:00
nlm
ofed Switch the vm_object mutex to be a rwlock. This will enable in the 2013-03-09 02:32:23 +00:00
opencrypto When porting XTS-related code from OpenBSD I forgot to update copyright (only 2013-02-20 22:59:53 +00:00
pc98 Switch the vm_object mutex to be a rwlock. This will enable in the 2013-03-09 02:32:23 +00:00
pci Fix build. 2013-02-21 12:52:18 +00:00
powerpc Add pmap function pmap_copy_pages(), which copies the content of the 2013-03-14 20:18:12 +00:00
rpc Revert 195703 and 195821 as this special stop handling in NFS is now 2013-03-13 21:06:03 +00:00
security Switch the vm_object mutex to be a rwlock. This will enable in the 2013-03-09 02:32:23 +00:00
sparc64 Add pmap function pmap_copy_pages(), which copies the content of the 2013-03-14 20:18:12 +00:00
sys Add MEXT_ALIGN() macro, similar to M_ALIGN() and MH_ALIGN(), but for 2013-03-17 07:39:45 +00:00
teken
tools Further refine the handling of stop signals in the NFS client. The 2013-02-21 19:02:50 +00:00
ufs Remove negative name cache entry pointing to the target name, which 2013-03-17 15:11:37 +00:00
vm Sync back vmcontention branch into HEAD: 2013-03-18 00:25:02 +00:00
x86 MFcalloutng: 2013-02-28 13:46:03 +00:00
xdr Use m_get() and m_getcl() instead of compat macros. 2013-03-15 10:21:18 +00:00
xen
Makefile Remove netncp cscope entry missed in r248097 2013-03-12 14:21:52 +00:00