svn commit: r207739 - in head/sys: sys vm
Alan Cox
alc at FreeBSD.org
Fri May 7 05:23:15 UTC 2010
Author: alc
Date: Fri May 7 05:23:15 2010
New Revision: 207739
URL: http://svn.freebsd.org/changeset/base/207739
Log:
Eliminate acquisitions of the page queues lock that are no longer needed.
Switch to a per-processor counter for the number of pages freed during
process termination.
Modified:
head/sys/sys/vmmeter.h
head/sys/vm/vm_object.c
Modified: head/sys/sys/vmmeter.h
==============================================================================
--- head/sys/sys/vmmeter.h Fri May 7 04:14:07 2010 (r207738)
+++ head/sys/sys/vmmeter.h Fri May 7 05:23:15 2010 (r207739)
@@ -74,7 +74,7 @@ struct vmmeter {
u_int v_tcached; /* (q) total pages cached */
u_int v_dfree; /* (q) pages freed by daemon */
- u_int v_pfree; /* (q) pages freed by exiting processes */
+ u_int v_pfree; /* (p) pages freed by exiting processes */
u_int v_tfree; /* (p) total pages freed */
/*
* Distribution of page usages.
Modified: head/sys/vm/vm_object.c
==============================================================================
--- head/sys/vm/vm_object.c Fri May 7 04:14:07 2010 (r207738)
+++ head/sys/vm/vm_object.c Fri May 7 05:23:15 2010 (r207739)
@@ -722,14 +722,11 @@ vm_object_terminate(vm_object_t object)
("vm_object_terminate: freeing busy page %p "
"p->busy = %d, p->oflags %x\n", p, p->busy, p->oflags));
vm_page_lock(p);
- vm_page_lock_queues();
if (p->wire_count == 0) {
vm_page_free(p);
- cnt.v_pfree++;
- } else {
+ PCPU_INC(cnt.v_pfree);
+ } else
vm_page_remove(p);
- }
- vm_page_unlock_queues();
vm_page_unlock(p);
}
@@ -1634,14 +1631,12 @@ vm_object_backing_scan(vm_object_t objec
* can simply destroy it.
*/
vm_page_lock(p);
- vm_page_lock_queues();
KASSERT(!pmap_page_is_mapped(p),
("freeing mapped page %p", p));
if (p->wire_count == 0)
vm_page_free(p);
else
vm_page_remove(p);
- vm_page_unlock_queues();
vm_page_unlock(p);
p = next;
continue;
@@ -1660,14 +1655,12 @@ vm_object_backing_scan(vm_object_t objec
* Leave the parent's page alone
*/
vm_page_lock(p);
- vm_page_lock_queues();
KASSERT(!pmap_page_is_mapped(p),
("freeing mapped page %p", p));
if (p->wire_count == 0)
vm_page_free(p);
else
vm_page_remove(p);
- vm_page_unlock_queues();
vm_page_unlock(p);
p = next;
continue;
More information about the svn-src-all
mailing list