[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <492A4962.1080400@cosmosbay.com>
Date: Mon, 24 Nov 2008 07:27:46 +0100
From: Eric Dumazet <dada1@...mosbay.com>
To: David Miller <davem@...emloft.net>
CC: netdev@...r.kernel.org
Subject: Re: [PATCH] eth: Declare an optimized compare_ether_addr_64bits()
function
David Miller a écrit :
> From: Eric Dumazet <dada1@...mosbay.com>
> Date: Sat, 22 Nov 2008 08:19:17 +0100
>
>> This patch implements a compare_ether_addr_64bits() function, that
>> handles the case of x86 cpus, but might be used on other arches as
>> well, if their potential misaligned long word reads are not
>> expensive.
>
> We have a test for this, HAVE_EFFICIENT_UNALIGNED_ACCESS
>
> Please use that instead of CONFIG_X86 and I'll apply this
> to net-next-2.6
>
Excellent !
I missed this cool feature.
Thanks David
[PATCH] eth: Declare an optimized compare_ether_addr_64bits() function
Linus mentioned we could try to perform long word operations, even
on potentially unaligned addresses, on x86 at least. David mentioned
the HAVE_EFFICIENT_UNALIGNED_ACCESS test to handle this on all
arches that have efficient unailgned accesses.
I tried this idea and got nice assembly on 32 bits:
158: 33 82 38 01 00 00 xor 0x138(%edx),%eax
15e: 33 8a 34 01 00 00 xor 0x134(%edx),%ecx
164: c1 e0 10 shl $0x10,%eax
167: 09 c1 or %eax,%ecx
169: 74 0b je 176 <eth_type_trans+0x87>
And very nice assembly on 64 bits of course (one xor, one shl)
Nice oprofile improvement in eth_type_trans(), 0.17 % instead of 0.41 %,
expected since we remove 8 instructions on a fast path.
This patch implements a compare_ether_addr_64bits() function,
that uses the CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS ifdef
and get_unaligned() macro to efficiently perform the 6 bytes
comparison on all capable arches.
Signed-off-by: Eric Dumazet <dada1@...mosbay.com>
---
include/linux/etherdevice.h | 44 ++++++++++++++++++++++++++++++++++
net/ethernet/eth.c | 6 ++--
2 files changed, 47 insertions(+), 3 deletions(-)
View attachment "ether.patch" of type "text/plain" (2839 bytes)
Powered by blists - more mailing lists