From owner-svn-src-user@FreeBSD.ORG Sun Mar 17 16:49:38 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 64415264; Sun, 17 Mar 2013 16:49:38 +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 3D83E9A1; Sun, 17 Mar 2013 16:49:38 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2HGncIk070870; Sun, 17 Mar 2013 16:49:38 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2HGnc0I070869; Sun, 17 Mar 2013 16:49:38 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201303171649.r2HGnc0I070869@svn.freebsd.org> From: Alan Cox Date: Sun, 17 Mar 2013 16:49:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r248431 - 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 " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Mar 2013 16:49:38 -0000 Author: alc Date: Sun Mar 17 16:49:37 2013 New Revision: 248431 URL: http://svnweb.freebsd.org/changeset/base/248431 Log: The M_ZERO can be eliminated from the uma_zalloc() call in vm_radix_node_get() with a small change to vm_radix_reclaim_allnodes_int(). This change further reduced the average number of cycles per vm_page_insert() call from 532 to 519. Reviewed by: attilio Sponsored by: EMC / Isilon Storage Division Modified: user/attilio/vmcontention/sys/vm/vm_radix.c Modified: user/attilio/vmcontention/sys/vm/vm_radix.c ============================================================================== --- user/attilio/vmcontention/sys/vm/vm_radix.c Sun Mar 17 16:31:09 2013 (r248430) +++ user/attilio/vmcontention/sys/vm/vm_radix.c Sun Mar 17 16:49:37 2013 (r248431) @@ -110,7 +110,7 @@ vm_radix_node_get(vm_pindex_t owner, uin { struct vm_radix_node *rnode; - rnode = uma_zalloc(vm_radix_node_zone, M_NOWAIT | M_ZERO); + rnode = uma_zalloc(vm_radix_node_zone, M_NOWAIT); /* * The required number of nodes should already be pre-allocated @@ -314,6 +314,7 @@ vm_radix_reclaim_allnodes_int(struct vm_ continue; if (vm_radix_node_page(rnode->rn_child[slot]) == NULL) vm_radix_reclaim_allnodes_int(rnode->rn_child[slot]); + rnode->rn_child[slot] = NULL; rnode->rn_count--; } vm_radix_node_put(rnode); @@ -327,15 +328,32 @@ static void vm_radix_node_zone_dtor(void *mem, int size __unused, void *arg __unused) { struct vm_radix_node *rnode; + int slot; rnode = mem; KASSERT(rnode->rn_count == 0, - ("vm_radix_node_put: Freeing node %p with %d children\n", mem, + ("vm_radix_node_put: rnode %p has %d children", rnode, rnode->rn_count)); + for (slot = 0; slot < VM_RADIX_COUNT; slot++) + KASSERT(rnode->rn_child[slot] == NULL, + ("vm_radix_node_put: rnode %p has a child", rnode)); } #endif /* + * Radix node zone initializer. + */ +static int +vm_radix_node_zone_init(void *mem, int size __unused, int flags __unused) +{ + struct vm_radix_node *rnode; + + rnode = mem; + memset(rnode->rn_child, 0, sizeof(rnode->rn_child)); + return (0); +} + +/* * Pre-allocate intermediate nodes from the UMA slab zone. */ static void @@ -365,7 +383,8 @@ vm_radix_init(void) #else NULL, #endif - NULL, NULL, VM_RADIX_PAD, UMA_ZONE_VM | UMA_ZONE_NOFREE); + vm_radix_node_zone_init, NULL, VM_RADIX_PAD, UMA_ZONE_VM | + UMA_ZONE_NOFREE); } /*