Skip site navigation (1)Skip section navigation (2)
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>