All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Emelyanov <xemul@parallels.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: David Miller <davem@davemloft.net>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Linux Netdev List <netdev@vger.kernel.org>
Subject: Re: [PATCH 1/5] net: Don't use ifindices in hash fns
Date: Mon, 06 Aug 2012 15:01:14 +0400	[thread overview]
Message-ID: <501FA3FA.9010107@parallels.com> (raw)
In-Reply-To: <1344249789.26674.8.camel@edumazet-glaptop>

On 08/06/2012 02:43 PM, Eric Dumazet wrote:
> On Mon, 2012-08-06 at 14:30 +0400, Pavel Emelyanov wrote:
>> Eric noticed, that when there will be devices with equal indices, some
>> hash functions that use them will become less effective as they could.
>>
>> Fix this in advance by taking the net_device address into calculations
>> instead of the device index. Since the net_device is always aligned in
>> memory, shift the pointer to eliminate always zero bits (like we do it
>> in net_hash_mix).
>>
>> This is true for arp and ndisc hash fns. The netlabel, can and llc ones
>> are also ifindex-based, but that three are init_net-only, thus will not
>> be affected.
>>
>> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
>>
>> ---
>>  include/linux/netdevice.h |    6 ++++++
>>  include/net/arp.h         |    2 +-
>>  include/net/ndisc.h       |    2 +-
>>  3 files changed, 8 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
>> index a9db4f3..6010b37 100644
>> --- a/include/linux/netdevice.h
>> +++ b/include/linux/netdevice.h
>> @@ -1330,6 +1330,12 @@ struct net_device {
>>  
>>  #define	NETDEV_ALIGN		32
>>  
>> +static inline unsigned int netdev_hash_mix(const struct net_device *dev)
>> +{
>> +	return (unsigned int)(((unsigned long)dev) >>
>> +			max(L1_CACHE_BYTES, NETDEV_ALIGN));
>> +}
>> +
> 
> I guess you didnt test this patch very well ...

Damn :( You're right.

> This returns 0 as is

Well, on 64-bit no, but what it does is also not what it was supposed to.

> I would define a generic pointer hash mix instead of a 'net_device
> thing'
> 
> static inline u32 ptr_hash_mix(void *ptr)
> {
> #if BITS_PER_LONG==32
> 	return (u32)(unsigned long)ptr;
> #else
> 	return (u32)((unsigned long)ptr >> L1_CACHE_SHIFT);
> #endif
> }

OK. It will also obsolete the net_hash_mix then. Any suggestions where to put
the new one?

Thanks,
Pavel

  reply	other threads:[~2012-08-06 11:01 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-06 10:30 [PATCH net-next 0/5] Per-net and on-demand link indices (and related) Pavel Emelyanov
2012-08-06 10:30 ` [PATCH 1/5] net: Don't use ifindices in hash fns Pavel Emelyanov
2012-08-06 10:43   ` Eric Dumazet
2012-08-06 11:01     ` Pavel Emelyanov [this message]
2012-08-06 11:51       ` Eric Dumazet
2012-08-06 10:31 ` [PATCH 2/5] net: Allow to create links with given ifindex Pavel Emelyanov
2012-08-06 10:31 ` [PATCH 3/5] veth: Allow to create peer link " Pavel Emelyanov
2012-08-06 10:31 ` [PATCH 4/5] net: Make ifindex generation per-net namespace Pavel Emelyanov
2012-08-06 10:32 ` [PATCH 5/5] net: Loopback ifindex is constant now Pavel Emelyanov
2012-08-06 11:54   ` Eric Dumazet
2012-08-06 12:13     ` Pavel Emelyanov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=501FA3FA.9010107@parallels.com \
    --to=xemul@parallels.com \
    --cc=davem@davemloft.net \
    --cc=ebiederm@xmission.com \
    --cc=eric.dumazet@gmail.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.