Date: Fri, 7 May 2010 05:23:15 +0000 (UTC) From: Alan Cox <alc@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r207739 - in head/sys: sys vm Message-ID: <201005070523.o475NFCq099385@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005070523.o475NFCq099385>