From owner-freebsd-net@FreeBSD.ORG Thu Nov 8 10:27:57 2012 Return-Path: Delivered-To: freebsd-net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BE3CA27A; Thu, 8 Nov 2012 10:27:57 +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 544CB8FC0C; Thu, 8 Nov 2012 10:27:57 +0000 (UTC) Received: from dhcp170-36-red.yandex.net ([95.108.170.36]) by mail.ipfw.ru with esmtpsa (TLSv1:CAMELLIA256-SHA:256) (Exim 4.76 (FreeBSD)) (envelope-from ) id 1TWPOO-000OgF-Ip; Thu, 08 Nov 2012 14:31:24 +0400 Message-ID: <509B88B1.3070905@FreeBSD.org> Date: Thu, 08 Nov 2012 14:25:53 +0400 From: "Alexander V. Chernikov" User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20120627 Thunderbird/13.0.1 MIME-Version: 1.0 To: Andre Oppermann Subject: Re: [patch] reducing arp locking References: <509AEDAC.10002@FreeBSD.org> <509B884F.7040106@networx.ch> In-Reply-To: <509B884F.7040106@networx.ch> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net@FreeBSD.org, freebsd-hackers@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: Thu, 08 Nov 2012 10:27:57 -0000 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. > 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