Re: Take 2: new IP Checksum Code from DragonFlyBSD

From: Alexander Leidinger <Alexander_at_Leidinger.net>
Date: Thu, 25 May 2006 16:04:37 +0200
Quoting Peter Jeremy <peterjeremy_at_optushome.com.au> (Thu, 25 May 2006 21:54:48 +1000):

> On Thu, 2006-May-25 12:40:00 +0200, Gordon Bergling wrote:
> >* Thus spake Max Laier (max_at_love2party.net):
> >> I'm a little scared about this.  We have had several problems in the 
> >> checksumming code that were due to -O2 or -O0 that screwed up just a little 
> 
> > | * This routine is very heavily used in the network
> > | * code and should be modified for each CPU to be as fast as
> > | * possible.
> 
> But _correct_ code is far more important.  And I'm not sure that comment
> is still as relevant as it used to be - most (if not all) gigabit NICs
> have checksum offloading and processors are fast enough that generic
> checksum code should be "good enough" for most lesser purposes.

I don't comment on the GB-NIC part (except for: not everything is GB
today...), but regarding the "correct" part above: sorry, but that's
exactly the reason why I put up the entry for porting this on our ideas
page (it never showed up there, since Gordon took it before the page
went life). More below.

> >So having a better situated implementation is still an improved. The
> >patch doesn't touch any arch !i386 and derivates, so I don't see any reason
> >why it shouldn't be included.
> 
> You stated that you don't understand the code.  IP checksumming is a
> crucial part of the kernel so the Project needs to be very careful about
> making changes.  As Max pointed out, there have been past situations
> where the checksum code revealed gcc optimiser bugs so any change has
> to be checked using a variety of compiler flags.

These are not bugs in the optimizer, but mostly bugs in our assembly
code. I had the same problems with the Intel C compiler. The guys at
Intel had a look at the code and told me that it's it no the fault of
the compiler, but the code is not done right. Therefore I switched to
the plain-C version when icc is used to compile the kernel.

Here's a short discussion on our mailinglists where Matt tells a little
bit more about it:
 http://lists.freebsd.org/pipermail/freebsd-arch/2004-June/002271.html

Basically most of our "huge assembly one" is reduced to a faster
"nearly everything is plain-C and only a small part is done in
assembly" version.

Bye,
Alexander.

-- 
Selling GoodYear Eagle F1 235/40ZR18, 2x 4mm + 2x 5mm, ~150 EUR
you have to pick it up between Germany/Saarland and Luxembourg/Capellen
http://www.Leidinger.net    Alexander _at_ Leidinger.net: PGP ID = B0063FE7
http://www.FreeBSD.org       netchild _at_ FreeBSD.org  : PGP ID = 72077137
Received on Thu May 25 2006 - 12:04:59 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:56 UTC