summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>1999-09-17 05:48:36 +0000
committerdillon <dillon@FreeBSD.org>1999-09-17 05:48:36 +0000
commit4c1e280de7db1d524317194a371a5d246f0f5cfa (patch)
treee531b699c7f123610311174da1d957ba766554a4 /sys/vm
parentd1666d7f52710e66e5f13de62ac5974fbbb7764b (diff)
downloadFreeBSD-src-4c1e280de7db1d524317194a371a5d246f0f5cfa.zip
FreeBSD-src-4c1e280de7db1d524317194a371a5d246f0f5cfa.tar.gz
Remove inappropriate VOP_FSYNC from vm_object_page_clean(). The fsync
syncs the entire underlying file rather then just the requested range, resulting in huge inefficiencies when the VM system is articulated in a certain way. The VOP_FSYNC was also found to massively reduce NFS performance in certain cases. Change MADV_DONTNEED and MADV_FREE to call vm_page_dontneed() instead of vm_page_deactivate(). Using vm_page_deactivate() causes all inactive and cache pages to be recycled before the dontneed/free page is recycled, effectively flushing our entire VM inactive & cache queues continuously even if only a few pages are being actively MADV free'd and reused (such as occurs with a sequential scan of a memory-mapped file). Reviewed by: Alan Cox <alc@cs.rice.edu>, David Greenman <dg@root.com>
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_object.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index 0ed361d..48c493a 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -641,7 +641,9 @@ rescan:
goto rescan;
}
+#if 0
VOP_FSYNC(vp, NULL, (pagerflags & VM_PAGER_PUT_SYNC)?MNT_WAIT:0, curproc);
+#endif
vm_object_clear_flag(object, OBJ_CLEANING);
return;
@@ -826,7 +828,7 @@ shadowlookup:
if (advise == MADV_WILLNEED) {
vm_page_activate(m);
} else if (advise == MADV_DONTNEED) {
- vm_page_deactivate(m);
+ vm_page_dontneed(m);
} else if (advise == MADV_FREE) {
/*
* Mark the page clean. This will allow the page
@@ -846,7 +848,7 @@ shadowlookup:
pmap_clear_modify(VM_PAGE_TO_PHYS(m));
m->dirty = 0;
m->act_count = 0;
- vm_page_deactivate(m);
+ vm_page_dontneed(m);
if (tobject->type == OBJT_SWAP)
swap_pager_freespace(tobject, tpindex, 1);
}
OpenPOWER on IntegriCloud