First round of changes from John Dyson and myself to the VM system. This
authorDavid Greenman <davidg@Root.COM>
Wed, 22 Dec 1993 12:52:00 +0000 (12:52 +0000)
committerDavid Greenman <davidg@Root.COM>
Wed, 22 Dec 1993 12:52:00 +0000 (12:52 +0000)
commit736d20f2339f35ca779856cf50dba7b890b8be30
tree2653ad53ca48b7b7b7f693fdfb4651a69ad61942
parentdc96bbfdc3791067aff3f2c707d585c7bec05dfb
First round of changes from John Dyson and myself to the VM system. This
set improves performance and fixes the following problems (description
from John Dyson):

1. Growing swap space problem in both static usage and
in situations with lots of fork/execs in heavy paging
situations.

2. Sparse swap space allocation (internal fragmentation.)

3. General swap_pager slowness.

Additionally, the new swap_pager also provides hooks for multi-page
I/O that is currently being developed (in early testing phases.)

Problem #1 is a result of a problem where objects cannot be collapsed
once a pager has been allocated for them.  This problem has been solved
by relaxing the restriction by allowing the pages contained in a shadow
object's pager be copied to the parent object's pager.  The copy is
afforded by manipulating pointers to the disk blocks on the swap space.
Since an improved swap_pager has already been developed with the data
structures to support the copy operation, this new swap_pager has been
introduced.  Also, shadow object bypass in the collapse code has been
enhanced to support checking for pages on disk.  The vm_pageout daemon
has also been modified to defer creation of an object's pager when the
object's shadow is paging.  This allows efficient immediate collapsing
of a shadow into a parent object under many circumstances without the
creation of an intermediate pager.

Problem #2 is solved by the allocation data structures and algorithms
in the new swap_pager.  Additionally, a newer version of this new swap_pager
is being tested that permits multiple page I/O and mitigation of the
fragmentation problems associated with allocation of large contiguous blocks
of swap space.

Problem #3 is addressed by better algorithms and a fix of a couple of bugs
in the swap_pager.  Additionally, this new pager has a growth path allowing
multi-page inputs from disk.  Approximately 50% performance improvement can
be expected under certain circumstances when using this pager in the standard
single page mode.

(Actually, I've seen more like twice the speed in my tests. -DLG)
sys/i386/doc/Changes
sys/kern/subr_rlist.c
sys/sys/buf.h
sys/vm/swap_pager.c
sys/vm/swap_pager.h
sys/vm/vm_object.c
sys/vm/vm_pageout.c