From owner-freebsd-hackers@FreeBSD.ORG Sat Feb 2 19:37:01 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3CCEE16A418; Sat, 2 Feb 2008 19:37:01 +0000 (UTC) (envelope-from peterjeremy@optushome.com.au) Received: from mail15.syd.optusnet.com.au (mail15.syd.optusnet.com.au [211.29.132.196]) by mx1.freebsd.org (Postfix) with ESMTP id B3D9D13C459; Sat, 2 Feb 2008 19:37:00 +0000 (UTC) (envelope-from peterjeremy@optushome.com.au) Received: from server.vk2pj.dyndns.org (c220-239-20-82.belrs4.nsw.optusnet.com.au [220.239.20.82]) by mail15.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id m12Javbs006578 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 3 Feb 2008 06:36:58 +1100 Received: from server.vk2pj.dyndns.org (localhost.vk2pj.dyndns.org [127.0.0.1]) by server.vk2pj.dyndns.org (8.14.2/8.14.1) with ESMTP id m12Javsd077015; Sun, 3 Feb 2008 06:36:57 +1100 (EST) (envelope-from peter@server.vk2pj.dyndns.org) Received: (from peter@localhost) by server.vk2pj.dyndns.org (8.14.2/8.14.2/Submit) id m12JauNK077014; Sun, 3 Feb 2008 06:36:56 +1100 (EST) (envelope-from peter) Date: Sun, 3 Feb 2008 06:36:56 +1100 From: Peter Jeremy To: Alexander Motin Message-ID: <20080202193656.GR35170@server.vk2pj.dyndns.org> References: <47A25412.3010301@FreeBSD.org> <47A25A0D.2080508@elischer.org> <47A2C2A2.5040109@FreeBSD.org> <20080201185435.X88034@fledge.watson.org> <47A43873.40801@FreeBSD.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="n/aVsWSeQ4JHkrmm" Content-Disposition: inline In-Reply-To: <47A43873.40801@FreeBSD.org> X-PGP-Key: http://members.optusnet.com.au/peterjeremy/pubkey.asc User-Agent: Mutt/1.5.17 (2007-11-01) Cc: freebsd-hackers@freebsd.org, freebsd-performance@freebsd.org Subject: Re: Memory allocation performance X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Feb 2008 19:37:01 -0000 --n/aVsWSeQ4JHkrmm Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Feb 02, 2008 at 11:31:31AM +0200, Alexander Motin wrote: >To check UMA dependency I have made a trivial one-element cache which in m= y=20 >test case allows to avoid two for four allocations per packet. You should be able to implement this lockless using atomic(9). I haven't verified it, but the following should work. >.....alloc..... >- item =3D uma_zalloc(ng_qzone, wait | M_ZERO); >+ mtx_lock_spin(&itemcachemtx); >+ item =3D itemcache; >+ itemcache =3D NULL; >+ mtx_unlock_spin(&itemcachemtx); =3D item =3D atomic_readandclear_ptr(&itemcache); >+ if (item =3D=3D NULL) >+ item =3D uma_zalloc(ng_qzone, wait | M_ZERO); >+ else >+ bzero(item, sizeof(*item)); >.....free..... >- uma_zfree(ng_qzone, item); >+ mtx_lock_spin(&itemcachemtx); >+ if (itemcache =3D=3D NULL) { >+ itemcache =3D item; >+ item =3D NULL; >+ } >+ mtx_unlock_spin(&itemcachemtx); >+ if (item) >+ uma_zfree(ng_qzone, item); =3D if (atomic_cmpset_ptr(&itemcache, NULL, item) =3D=3D 0) =3D uma_zfree(ng_qzone, item); --=20 Peter Jeremy Please excuse any delays as the result of my ISP's inability to implement an MTA that is either RFC2821-compliant or matches their claimed behaviour. --n/aVsWSeQ4JHkrmm Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4 (FreeBSD) iD8DBQFHpMZY/opHv/APuIcRAjX8AJ9Tr3OIDEmNTcd6GFUNOG8/5JOt9wCfTaXz zXwtwl46hYGVRmJI8P2gfXw= =urmE -----END PGP SIGNATURE----- --n/aVsWSeQ4JHkrmm--