From owner-freebsd-hackers@FreeBSD.ORG Fri Nov 9 09:06:13 2012 Return-Path: Delivered-To: freebsd-hackers@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8798973F; Fri, 9 Nov 2012 09:06:13 +0000 (UTC) (envelope-from melifaro@FreeBSD.org) Received: from mail.ipfw.ru (unknown [IPv6:2a01:4f8:120:6141::2]) by mx1.freebsd.org (Postfix) with ESMTP id 198848FC0C; Fri, 9 Nov 2012 09:06:13 +0000 (UTC) Received: from v6.mpls.in ([2a02:978:2::5] helo=ws.su29.net) by mail.ipfw.ru with esmtpsa (TLSv1:CAMELLIA256-SHA:256) (Exim 4.76 (FreeBSD)) (envelope-from ) id 1TWkap-000Akh-VY; Fri, 09 Nov 2012 13:09:40 +0400 Message-ID: <509CC776.9010200@FreeBSD.org> Date: Fri, 09 Nov 2012 13:05:58 +0400 From: "Alexander V. Chernikov" User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120121 Thunderbird/9.0 MIME-Version: 1.0 To: Fabien Thomas Subject: Re: [patch] reducing arp locking References: <509AEDAC.10002@FreeBSD.org> <509B884F.7040106@networx.ch> <509B88B1.3070905@FreeBSD.org> <49EE4F42-6162-40F4-9DE0-1ACA1289B225@netasq.com> In-Reply-To: <49EE4F42-6162-40F4-9DE0-1ACA1289B225@netasq.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Cc: freebsd-net@FreeBSD.org, Andre Oppermann , freebsd-hackers@FreeBSD.org X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Nov 2012 09:06:13 -0000 On 09.11.2012 12:51, Fabien Thomas wrote: > > Le 8 nov. 2012 à 11:25, Alexander V. Chernikov a écrit : > >> On 08.11.2012 14:24, Andre Oppermann wrote: >>> On 08.11.2012 00:24, Alexander V. Chernikov wrote: >>>> Hello list! >>>> >>>> Currently we need to acquire 2 read locks to perform simple 6-byte >>>> copying from arp record to packet >>>> ethernet header. >>>> >>>> It seems that acquiring lle lock for fast path (main traffic flow) is >>>> not necessary even with >>>> current code. >>>> >>>> My tests shows ~10% improvement with this patch applied. >>>> >>>> If nobody objects I plan to commit this change at the end of next week. >>> >>> This is risky and prone to race conditions. The copy of the MAC address >>> should be done while the table read lock is held to protect against the >> It is done exactly as you say: table read lock is held. > > How do you protect from entry update if i've a ref to the entry ? > You can end up doing bcopy of a partial mac address. I see no problems in copying incorrect mac address in that case: if host mac address id updated, this is, most likely, another host, and several packets being lost changes nothing. However, there can be some realistic scenario where this can be the case (L2 load balancing/failover). I'll update in_arpinput() to do lle removal/insertion in that case. > la_preempt modification is also write access to an unlocked structure. This one changes nothing: current code does this under _read_ lock. > > >> >>> entry going away. You can either return with table lock held and drop >>> it after the copy, or you could a modified lookup function that takes a >>> pointer for the copy destination, do the copy with the read lock, and then >>> return. If no entry is found an error is returned and obviously no copy >>> is done. >>> >> >> >> -- >> WBR, Alexander >> >> >> _______________________________________________ >> freebsd-hackers@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers >> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" > >