From owner-svn-src-projects@FreeBSD.ORG Fri Jun 29 14:39:04 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B0B7C106564A; Fri, 29 Jun 2012 14:39:04 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9AF778FC16; Fri, 29 Jun 2012 14:39:04 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5TEd4cA051276; Fri, 29 Jun 2012 14:39:04 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5TEd48q051273; Fri, 29 Jun 2012 14:39:04 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201206291439.q5TEd48q051273@svn.freebsd.org> From: Gleb Smirnoff Date: Fri, 29 Jun 2012 14:39:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r237783 - projects/pf/head/sys/contrib/pf/net X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Jun 2012 14:39:04 -0000 Author: glebius Date: Fri Jun 29 14:39:04 2012 New Revision: 237783 URL: http://svn.freebsd.org/changeset/base/237783 Log: - Make hash sizes configurable via loader tunables. - Reduce default size to a more conservative value of 32768. Modified: projects/pf/head/sys/contrib/pf/net/pf.c projects/pf/head/sys/contrib/pf/net/pfvar.h Modified: projects/pf/head/sys/contrib/pf/net/pf.c ============================================================================== --- projects/pf/head/sys/contrib/pf/net/pf.c Fri Jun 29 14:33:00 2012 (r237782) +++ projects/pf/head/sys/contrib/pf/net/pf.c Fri Jun 29 14:39:04 2012 (r237783) @@ -375,13 +375,24 @@ VNET_DEFINE(struct pf_limit, pf_limits[P } while (0) static MALLOC_DEFINE(M_PFHASH, "pf_hash", "pf(4) hash header structures"); -/* XXXGL: make static? */ VNET_DEFINE(struct pf_keyhash *, pf_keyhash); VNET_DEFINE(struct pf_idhash *, pf_idhash); VNET_DEFINE(u_long, pf_hashmask); VNET_DEFINE(struct pf_srchash *, pf_srchash); VNET_DEFINE(u_long, pf_srchashmask); +SYSCTL_NODE(_net, OID_AUTO, pf, CTLFLAG_RW, 0, "pf(4)"); + +VNET_DEFINE(u_long, pf_hashsize); +#define V_pf_hashsize VNET(pf_hashsize) +SYSCTL_VNET_UINT(_net_pf, OID_AUTO, states_hashsize, CTLFLAG_RDTUN, + &VNET_NAME(pf_hashsize), 0, "Size of pf(4) states hashtable"); + +VNET_DEFINE(u_long, pf_srchashsize); +#define V_pf_srchashsize VNET(pf_srchashsize) +SYSCTL_VNET_UINT(_net_pf, OID_AUTO, source_nodes_hashsize, CTLFLAG_RDTUN, + &VNET_NAME(pf_srchashsize), 0, "Size of pf(4) source nodes hashtable"); + VNET_DEFINE(void *, pf_swi_cookie); /* @@ -715,6 +726,13 @@ pf_initialize() struct pf_srchash *sh; u_int i; + TUNABLE_ULONG_FETCH("net.pf.states_hashsize", &V_pf_hashsize); + if (V_pf_hashsize == 0 || !powerof2(V_pf_hashsize)) + V_pf_hashsize = PF_HASHSIZ; + TUNABLE_ULONG_FETCH("net.pf.source_nodes_hashsize", &V_pf_srchashsize); + if (V_pf_srchashsize == 0 || !powerof2(V_pf_srchashsize)) + V_pf_srchashsize = PF_HASHSIZ / 4; + /* States and state keys storage. */ V_pf_state_z = uma_zcreate("pf states", sizeof(struct pf_state), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); @@ -724,11 +742,11 @@ pf_initialize() V_pf_state_key_z = uma_zcreate("pf state keys", sizeof(struct pf_state_key), NULL, NULL, pf_state_key_ini, NULL, UMA_ALIGN_PTR, 0); - V_pf_keyhash = malloc(PF_HASHSIZ * sizeof(struct pf_keyhash), M_PFHASH, - M_WAITOK|M_ZERO); - V_pf_idhash = malloc(PF_HASHSIZ * sizeof(struct pf_idhash), M_PFHASH, - M_WAITOK|M_ZERO); - V_pf_hashmask = PF_HASHSIZ - 1; + V_pf_keyhash = malloc(V_pf_hashsize * sizeof(struct pf_keyhash), + M_PFHASH, M_WAITOK | M_ZERO); + V_pf_idhash = malloc(V_pf_hashsize * sizeof(struct pf_idhash), + M_PFHASH, M_WAITOK | M_ZERO); + V_pf_hashmask = V_pf_hashsize - 1; for (i = 0, kh = V_pf_keyhash, ih = V_pf_idhash; i <= V_pf_hashmask; i++, kh++, ih++) { mtx_init(&kh->lock, "pf_keyhash", NULL, MTX_DEF); @@ -741,9 +759,9 @@ pf_initialize() 0); V_pf_limits[PF_LIMIT_SRC_NODES].zone = V_pf_sources_z; uma_zone_set_max(V_pf_sources_z, PFSNODE_HIWAT); - V_pf_srchash = malloc((PF_HASHSIZ / 4) * sizeof(struct pf_srchash), + V_pf_srchash = malloc(V_pf_srchashsize * sizeof(struct pf_srchash), M_PFHASH, M_WAITOK|M_ZERO); - V_pf_srchashmask = (PF_HASHSIZ / 4) - 1; + V_pf_srchashmask = V_pf_srchashsize - 1; for (i = 0, sh = V_pf_srchash; i <= V_pf_srchashmask; i++, sh++) mtx_init(&sh->lock, "pf_srchash", NULL, MTX_DEF); Modified: projects/pf/head/sys/contrib/pf/net/pfvar.h ============================================================================== --- projects/pf/head/sys/contrib/pf/net/pfvar.h Fri Jun 29 14:33:00 2012 (r237782) +++ projects/pf/head/sys/contrib/pf/net/pfvar.h Fri Jun 29 14:39:04 2012 (r237783) @@ -1672,7 +1672,7 @@ struct pf_idhash { struct mtx lock; }; -#define PF_HASHSIZ (262144) /* now 2^18 XXXGL: grow? */ +#define PF_HASHSIZ (32768) VNET_DECLARE(struct pf_keyhash *, pf_keyhash); VNET_DECLARE(struct pf_idhash *, pf_idhash); VNET_DECLARE(u_long, pf_hashmask);