RE: [Announce] rxe dev tree available (soft RDMAoE)

Robert Pearson
2009-12-17T21:43:56Z

I agree about the polynomial. That would have been nice. As currently
proposed the embedding of the IB transport in Ethernet frames preserves the
IB ICRC as part of the transport and trades the VCRC for Ethernet's CRC32
over the whole frame. This means that the packet is effectively covered by
CRC32 twice except for the 802 headers and the fields that are excluded from
the ICRC. CRC32C should give better protection.

We have thought that we could try CRC32C first and if that works then use
that, otherwise fall back to CRC32 which would allow rxe to use CRC32C when
talking to itself and get a speedup on new Intel CPUs.

The crc32 code we have is based on some suggestions from Intel and seems to
be much faster than the 'standard' code in the kernel and we are/were
planning to merge the crc computation with the data copy. It is actually
less explicitly optimized than the code in the kernel but when we use the
loop unrolling directive in the compiler we get better overall results. That
core loop gives us about 5-6GB/sec for the copy/crc vs about 500MB/sec for
the 'standard' crc + copy.

Our plan is to strip out all the trace and dump code when the driver is
stable. We will keep the warn and error messages.

Bob

-----Original Message-----
From: Roland Dreier [mailto:rdreier-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org]
Sent: Thursday, December 17, 2009 3:26 PM
To: Robert Pearson
Cc: 'Jason Gunthorpe'; 'frank zago'; linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; 'John
Groves'
Subject: Re: [Announce] rxe dev tree available (soft RDMAoE)

> Yes, but later. For now it is still being actively developed and is
changing
> a lot. Once it settles down we plan to convert to patches and push up
> stream.

I think you would probably be better off developing the kernel driver as
a branch in an up-to-date kernel tree, and then worrying about backports
later. You could get rid of some of the redundant infrastructure like
dump_hex() and crc32 (too bad IB didn't choose the CRC32C polynomial, so
you can't use the crypto API and get Intel CRC32 instruction
acceleration for free).

- R.