| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
minor leaks in pmap.c. Bruce Evans made me aware of this problem.
|
| |
|
|
|
|
|
|
| |
code improvements include significant simplification of the reservation
of the swap pager control blocks for reads. Add a panic for an inconsistent
swap pager control block count.
|
|
|
|
|
|
| |
reserving "cached" pages before waking up the pageout daemon. This will reserve
the faulted page, and keep the system from thrashing itself to death given
this condition.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
queue in vm_fault.
Move the PG_BUSY in vm_fault to the correct place.
Remove redundant/unnecessary code in pmap.c.
Properly block on rundown of page table pages, if they are busy.
I think that the VM system is in pretty good shape now, and the following
individuals (among others, in no particular order) have helped with this
recent bunch of bugs, thanks! If I left anyone out, I apologize!
Stephen McKay, Stephen Hocking, Eric J. Chet, Dan O'Brien, James Raynard,
Marc Fournier.
|
|
|
|
|
|
|
| |
some problems with the page-table page management code, since it can't
deal with the notion of page-table pages being paged out or in transit.
Also, clean up some stylistic issues per some suggestions from
Stephen McKay.
|
|
|
|
|
|
|
| |
operations don't work with FICTITIOUS pages.) Also, close a window
between PG_MANAGED and pmap_enter that can mess up the accounting of
the managed flag. This problem could likely cause a hold_count error
for page table pages.
|
|
|
|
|
|
| |
queue corruption problems, and to apply Gary Palmer's code cleanups.
David Greenman helped with these problems also. There is still
a hang problem using X in small memory machines.
|
|
|
|
|
| |
pages are calculated for deferred allocation of swap pager data structures.
This is a follow-on to the previous commit to this file.
|
|
|
|
|
|
| |
case where blocking can occur, thereby giving other process's a chance
to modify the queue where a page resides. This could cause numerous
process and system failures.
|
|
|
|
|
|
|
|
|
| |
that the datastructures needed to support the swap pager can take
enough space to fully deplete system memory, and cause a deadlock.
This change keeps large objects from being filled with dirty pages
without the appropriate swap pager datastructures. Right now,
default objects greater than 1/4 the size of available system memory
are converted to swap objects, thereby eliminating the risk of deadlock.
|
|
|
|
|
|
|
|
|
| |
a condition when blocking can occur, and the daemon did not check properly
for a page remaining on the expected queue. Additionally, the inactive
target was being set much too large for small memory machines. It is now
being calculated based upon the amount of user memory available on every
pageout daemon run. Another problem was that if memory was very low, the
pageout daemon could fail repeatedly to traverse the inactive queue.
|
|
|
|
|
|
| |
problem. BY MISTAKE, the vm_page_unqueue (or equiv) was removed from the
vm_fault code. Really bad things appear to happen if a page is on a queue
while it is being faulted.
|
| |
|
|
|
|
| |
an unnecessary test for dirty pages if it is already known to be dirty.
|
|
|
|
|
| |
queue. Also, modify the MADV_FREE policy (it probably still isn't the final
version.)
|
|
|
|
| |
in the face of low memory conditions.
|
| |
|
|
|
|
|
|
| |
about the contents anymore. This gives us alot of the advantage of
freeing individual pages through munmap, but with almost none of the
overhead.
|
|
|
|
| |
is never necessary, not just for PG_FICTICIOUS.
|
|
|
|
| |
a hang that occurs under certain circumstances when exiting X.
|
|
|
|
|
| |
supported, except madvise does not page in with MADV_WILLNEED, and
MADV_DONTNEED doesn't force dirty pages out.
|
|
|
|
|
| |
simple routines in vm_page.c, so that an unnecessary subroutine call
is removed.
|
|
|
|
| |
a global defn for 'exech_map.'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
contributions or ideas from Stephen McKay <syssgm@devetir.qld.gov.au>,
Alan Cox <alc@cs.rice.edu>, David Greenman <davidg@freebsd.org> and me:
More usage of the TAILQ macros. Additional minor fix to queue.h.
Performance enhancements to the pageout daemon.
Addition of a wait in the case that the pageout daemon
has to run immediately.
Slightly modify the pageout algorithm.
Significant revamp of the pmap/fork code:
1) PTE's and UPAGES's are NO LONGER in the process's map.
2) PTE's and UPAGES's reside in their own objects.
3) TOTAL elimination of recursive page table pagefaults.
4) The page directory now resides in the PTE object.
5) Implemented pmap_copy, thereby speeding up fork time.
6) Changed the pv entries so that the head is a pointer
and not an entire entry.
7) Significant cleanup of pmap_protect, and pmap_remove.
8) Removed significant amounts of machine dependent
fork code from vm_glue. Pushed much of that code into
the machine dependent pmap module.
9) Support more completely the reuse of already zeroed
pages (Page table pages and page directories) as being
already zeroed.
Performance and code cleanups in vm_map:
1) Improved and simplified allocation of map entries.
2) Improved vm_map_copy code.
3) Corrected some minor problems in the simplify code.
Implemented splvm (combo of splbio and splimp.) The VM code now
seldom uses splhigh.
Improved the speed of and simplified kmem_malloc.
Minor mod to vm_fault to avoid using pre-zeroed pages in the case
of objects with backing objects along with the already
existant condition of having a vnode. (If there is a backing
object, there will likely be a COW... With a COW, it isn't
necessary to start with a pre-zeroed page.)
Minor reorg of source to perhaps improve locality of ref.
|
|
|
|
| |
expected.
|
|
|
|
|
| |
the usage. I'm not satisfied with the naming, but now at least there is
less bogus stuff around.
|
|
|
|
|
|
|
|
|
| |
CLBYTES PD_SHIFT PGSHIFT NBPG PGOFSET CLSIZELOG2 CLSIZE pdei()
ptei() kvtopte() ptetov() ispt() ptetoav() &c &c
new:
NPDEPG
Major macro cleanup.
|
| |
|
|
|
|
| |
a side effect, correct the associated object offset.
|
|
|
|
|
| |
A page index was calculated incorrectly in vm_kern, and vm_object_page_remove
removed pages that should not have been.
|
|
|
|
|
|
|
| |
sometimes disabled clock interrupts for 60 msec or more on a P133.
Clock interrupts were lost ...
Reviewed by: dyson
|
|
|
|
|
|
| |
is needed because of the vm_fault used to bring the page table page
for the kernel stack (UPAGES) back in. The consequence of the
previous incorrect change was a system hang.
|
|
|
|
|
| |
map operations for it anymore. Certain deadlocks should never happen
anymore.
|
|
|
|
| |
copied from bad examples.
|
|
|
|
|
|
|
| |
in a suboptimal manner. I had also noticed some panics that appeared
to be at least superficially caused by this problem. Also, included
are some minor mods to support more general handling of page table page
faulting. More details in a future commit.
|
|
|
|
| |
better in most real-world cases.
|
| |
|
|
|
|
| |
Reviewed by: julian@freebsd.org
|
| |
|
|
|
|
|
| |
in anticipation of a fix in pmap that will allow the mlock system call to work
without panicing the system.
|
|
|
|
|
|
|
| |
performance when the map has been chopped up. The map simplify operations
really work now.
Reviewed by: dyson
Submitted by: Alan Cox <alc@cs.rice.edu>
|
|
|
|
| |
Submitted by: partly by "Marc G. Fournier" <scrappy@ki.net>
|
|
|
|
|
|
|
| |
device have reference count problems. We mark the underlying object
ono-persistent, and account for the reference count that the VM system
maintainsfor the special device close. This should fix the removable
device problem.
|
|
|
|
|
|
|
| |
to ever be COW and we need the mappings to be shared for backward
compatibilty.
Reviewed by: dyson
|
|
|
|
|
|
|
|
| |
regarding the "real" problem with maps that we have been having
over the last few weeks. He noted that the first_free pointer was
left dangling in certain circumstances -- and he was right!!! This
should fix the map problems that we were having, and also give us the
advantage of being able to simplify maps more aggressively.
|
|
|
|
| |
error.
|
|
|
|
|
| |
solution appeared to be to allow the child to maintain the same mapping as
the parent.
|
|
|
|
| |
Reviewed by: davidg & bde
|
|
|
|
| |
possible to deadlock with the low threshold that we had used.
|