From owner-freebsd-net@FreeBSD.ORG Wed Aug 21 20:51:11 2013 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 820AE73B for ; Wed, 21 Aug 2013 20:51:11 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from c00l3r.networx.ch (c00l3r.networx.ch [62.48.2.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 85A4A2A2C for ; Wed, 21 Aug 2013 20:51:10 +0000 (UTC) Received: (qmail 74325 invoked from network); 21 Aug 2013 21:34:11 -0000 Received: from c00l3r.networx.ch (HELO [127.0.0.1]) ([62.48.2.2]) (envelope-sender ) by c00l3r.networx.ch (qmail-ldap-1.03) with SMTP for ; 21 Aug 2013 21:34:11 -0000 Message-ID: <52152837.9010101@freebsd.org> Date: Wed, 21 Aug 2013 22:51:03 +0200 From: Andre Oppermann User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 MIME-Version: 1.0 To: "Alexander V. Chernikov" Subject: Re: route/arp lifetime (Re: it's the output, not ack coalescing (Re: TSO and FreeBSD vs Linux)) References: <520A6D07.5080106@freebsd.org> <520B74DD.1060102@ipfw.ru> <20130814124024.GA64548@onelab2.iet.unipi.it> <201308141740.28779.zec@fer.hr> <20130814154853.GA66341@onelab2.iet.unipi.it> <521204A9.7080607@ipfw.ru> In-Reply-To: <521204A9.7080607@ipfw.ru> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@freebsd.org X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Aug 2013 20:51:11 -0000 On 19.08.2013 13:42, Alexander V. Chernikov wrote: > On 14.08.2013 19:48, Luigi Rizzo wrote: >> On Wed, Aug 14, 2013 at 05:40:28PM +0200, Marko Zec wrote: >>> On Wednesday 14 August 2013 14:40:24 Luigi Rizzo wrote: >>>> On Wed, Aug 14, 2013 at 04:15:25PM +0400, Alexander V. Chernikov wrote: >> ... >>> FWIW, apparently we already have that infrastrucure in place - if_rele() >>> calls if_free_internal() only when the last reference to the ifnet is >>> dropped, so with little care this should be usable for caching ifp pointers >>> w/o fears for kernel crashes mentioned above. >> maybe Alexander was referring to holding references to the rte entries >> returned as a result of the lookup. The rte holds a reference to the ifp. > > Yes. Since there is the only refcount which is protected (and is also a huge performance killer). > > Btw, there is a picture describing IPv4 packet flow from my still-not-written post related network > stack performance, > maybe it can be useful: http://static.ipfw.ru/images/freebsd_ipv4_flow.png Wow, that's really cool. Please note that a rmlock doesn't cost anything for the read case (unless contended of course). Whereas normal rlocks or rwlocks write to the lock memory location and cause atomic bus lock cycles as well as a lot of cache line invalidations across cores. The same is true for refcounts. -- Andre