Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Nov 2012 09:51:47 +0100
From:      Fabien Thomas <fabien.thomas@netasq.com>
To:        Alexander V. Chernikov <melifaro@FreeBSD.org>
Cc:        freebsd-net@FreeBSD.org, freebsd-hackers@FreeBSD.org
Subject:   Re: [patch] reducing arp locking
Message-ID:  <49EE4F42-6162-40F4-9DE0-1ACA1289B225@netasq.com>
In-Reply-To: <509B88B1.3070905@FreeBSD.org>
References:  <509AEDAC.10002@FreeBSD.org> <509B884F.7040106@networx.ch> <509B88B1.3070905@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

Le 8 nov. 2012 =E0 11:25, Alexander V. Chernikov a =E9crit :

> On 08.11.2012 14:24, Andre Oppermann wrote:
>> On 08.11.2012 00:24, Alexander V. Chernikov wrote:
>>> Hello list!
>>>=20
>>> Currently we need to acquire 2 read locks to perform simple 6-byte
>>> copying from arp record to packet
>>> ethernet header.
>>>=20
>>> It seems that acquiring lle lock for fast path (main traffic flow) =
is
>>> not necessary even with
>>> current code.
>>>=20
>>> My tests shows ~10% improvement with this patch applied.
>>>=20
>>> If nobody objects I plan to commit this change at the end of next =
week.
>>=20
>> 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.
la_preempt modification is also write access to an unlocked structure.


>=20
>> 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.
>>=20
>=20
>=20
> --=20
> WBR, Alexander
>=20
>=20
> _______________________________________________
> 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"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49EE4F42-6162-40F4-9DE0-1ACA1289B225>