From owner-svn-src-user@FreeBSD.ORG  Sun Mar 17 16:23:19 2013
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by hub.freebsd.org (Postfix) with ESMTP id E87DE6BE;
 Sun, 17 Mar 2013 16:23:19 +0000 (UTC) (envelope-from alc@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 by mx1.freebsd.org (Postfix) with ESMTP id C37738C5;
 Sun, 17 Mar 2013 16:23:19 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HGNJIj063682;
 Sun, 17 Mar 2013 16:23:19 GMT (envelope-from alc@svn.freebsd.org)
Received: (from alc@localhost)
 by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HGNJHc063681;
 Sun, 17 Mar 2013 16:23:19 GMT (envelope-from alc@svn.freebsd.org)
Message-Id: <201303171623.r2HGNJHc063681@svn.freebsd.org>
From: Alan Cox <alc@FreeBSD.org>
Date: Sun, 17 Mar 2013 16:23:19 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
Subject: svn commit: r248429 - user/attilio/vmcontention/sys/vm
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.14
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
 src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
 <mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Sun, 17 Mar 2013 16:23:20 -0000

Author: alc
Date: Sun Mar 17 16:23:19 2013
New Revision: 248429
URL: http://svnweb.freebsd.org/changeset/base/248429

Log:
  Most allocation of pages to objects proceeds from lower to higher
  indices.  Consequentially, vm_page_insert() should use
  vm_radix_lookup_le() instead of vm_radix_lookup_ge().  Here's why.  In
  the expected case, vm_radix_lookup_le() will quickly find a page less
  than the specified key at the same radix node.  In contrast,
  vm_radix_lookup_ge() is expected to return NULL, but to do that it must
  examine every slot in the radix tree that is greater than the key.
  
  Prior to this change, the average cost of a vm_page_insert() call on my
  test machine was 992 cycles.  After this change, the average cost is only
  532 cycles, a reduction of 46%.
  
  Reviewed by:	attilio
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  user/attilio/vmcontention/sys/vm/vm_page.c

Modified: user/attilio/vmcontention/sys/vm/vm_page.c
==============================================================================
--- user/attilio/vmcontention/sys/vm/vm_page.c	Sun Mar 17 16:06:03 2013	(r248428)
+++ user/attilio/vmcontention/sys/vm/vm_page.c	Sun Mar 17 16:23:19 2013	(r248429)
@@ -827,14 +827,14 @@ vm_page_insert(vm_page_t m, vm_object_t 
 	if (object->resident_page_count == 0) {
 		TAILQ_INSERT_TAIL(&object->memq, m, listq);
 	} else {
-		neighbor = vm_radix_lookup_ge(&object->rtree, pindex);
+		neighbor = vm_radix_lookup_le(&object->rtree, pindex);
 		if (neighbor != NULL) {
-		    	KASSERT(pindex < neighbor->pindex,
-			    ("vm_page_insert: offset %ju not minor than %ju",
+		    	KASSERT(pindex > neighbor->pindex,
+			    ("vm_page_insert: offset %ju less than %ju",
 			    (uintmax_t)pindex, (uintmax_t)neighbor->pindex));
-			TAILQ_INSERT_BEFORE(neighbor, m, listq);
+			TAILQ_INSERT_AFTER(&object->memq, neighbor, m, listq);
 		} else 
-			TAILQ_INSERT_TAIL(&object->memq, m, listq);
+			TAILQ_INSERT_HEAD(&object->memq, m, listq);
 	}
 	vm_radix_insert(&object->rtree, m);