RE: [Tsvwg] SCTP Checksum Change to the IESG

"THALER,PAT (A-Roseville,ex1)" <pat_thaler@agilent.com> Mon, 06 May 2002 18:30 UTC

Received: from optimus.ietf.org (ietf.org [132.151.1.19] (may be forged)) by ietf.org (8.9.1a/8.9.1a) with ESMTP id OAA01681 for <tsvwg-archive@odin.ietf.org>; Mon, 6 May 2002 14:30:25 -0400 (EDT)
Received: (from daemon@localhost) by optimus.ietf.org (8.9.1a/8.9.1) id OAA11166 for tsvwg-archive@odin.ietf.org; Mon, 6 May 2002 14:30:32 -0400 (EDT)
Received: from optimus.ietf.org (localhost [127.0.0.1]) by optimus.ietf.org (8.9.1a/8.9.1) with ESMTP id OAA09653; Mon, 6 May 2002 14:02:24 -0400 (EDT)
Received: from ietf.org (odin [132.151.1.176]) by optimus.ietf.org (8.9.1a/8.9.1) with ESMTP id OAA09618 for <tsvwg@ns.ietf.org>; Mon, 6 May 2002 14:02:21 -0400 (EDT)
Received: from msgbas1.cos.agilent.com (msgbas1x.cos.agilent.com [192.25.240.36]) by ietf.org (8.9.1a/8.9.1a) with ESMTP id OAA29962 for <tsvwg@ietf.org>; Mon, 6 May 2002 14:02:13 -0400 (EDT)
Received: from msgrel1.cos.agilent.com (msgrel1.cos.agilent.com [130.29.152.77]) by msgbas1.cos.agilent.com (Postfix) with ESMTP id 91820B23E; Mon, 6 May 2002 12:02:19 -0600 (MDT)
Received: from axcsbh2.cos.agilent.com (axcsbh2.cos.agilent.com [130.29.152.144]) by msgrel1.cos.agilent.com (Postfix) with SMTP id D6158D5; Mon, 6 May 2002 12:02:13 -0600 (MDT)
Received: from 130.29.152.144 by axcsbh2.cos.agilent.com (InterScan E-Mail VirusWall NT); Mon, 06 May 2002 12:02:13 -0600
Received: by axcsbh2.cos.agilent.com with Internet Mail Service (5.5.2653.19) id <262C4BP2>; Mon, 6 May 2002 12:02:12 -0600
Message-ID: <1BEBA5E8600DD4119A50009027AF54A00BC00E94@axcs04.cos.agilent.com>
From: "THALER,PAT (A-Roseville,ex1)" <pat_thaler@agilent.com>
To: Jonathan Stone <jonathan@dsg.stanford.edu>, Tuexen Michael <Michael.Tuexen@icn.siemens.de>, 'Scott Bradner' <sob@harvard.edu>, dotis@sanlight.net, "'rrs@cisco.com'" <rrs@cisco.com>, john.loughney@nokia.com, tsvwg@ietf.org
Cc: "THALER,PAT (A-Roseville,ex1)" <pat_thaler@agilent.com>
Subject: RE: [Tsvwg] SCTP Checksum Change to the IESG
Date: Mon, 06 May 2002 12:02:04 -0600
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2653.19)
Content-Type: text/plain; charset="iso-8859-1"
Sender: tsvwg-admin@ietf.org
Errors-To: tsvwg-admin@ietf.org
X-Mailman-Version: 1.0
Precedence: bulk
List-Id: Transport Area Working Group <tsvwg.ietf.org>
X-BeenThere: tsvwg@ietf.org

Dear Jonathan,

Getting data to and from a NIC generally involves going through a FIFO
crossing a clock boundary and some engineers design this crossing poorly
resulting in a circuit that occasionally passes the wrong data. It is
certainly possible to design the circuit so that it performs well and does
not exhibit this behavior. I've seen plenty of hardware that does it right.

I don't think that the statistic of 1 in 10,000 internet frames having a TCP
checksum error and a good Ethernet CRC indicates anything about the
prevalence of this kind of NIC error. Frames pass through middle boxes such
as routers where they are not covered by CRC and some portion of the errors
are occurring there. I know of cases where a middle box had internal bugs
that occasionally corrupted the data.

Even if this kind of error is a concern, I don't see how it is helped by
returning a CRC calculated by the checker. 

The concern in the existing draft seems to center on the checker, but the
hardware calculating the CRC to send with the packet is equally likely to
make an error as the checker receiving the packet. Whatever text is
developed should deal with both equally.

Probability of an undetected error due to an error by the CRC checker in the
NIC is:

 Pneterr * Pnicerr * Pcrcmatch

where 
Pneterr is the probability of an error to the packet on the network
Pnicerr is the probability that the NIC makes an error in the data over
which it calculates the CRC
Pcrcmatch is the probability that the CRC calculated over data with errors
matches the received CRC. As long as the probability of an error in the NIC
CRC checker is much less than one, this is much smaller than the probability
of an undetected error due to errors on the network alone which would be:

 Pneterr * Pcrcmatch

Since undetected errors by the CRC checker will be quite rare, an audit is
highly unlikely to catch the problem.

The most significant problem caused by errors in CRC offload hardware would
be errors in CRC generation.  If the CRC generator makes an error and the
retransmissions continue to use the same CRC rather than recalculating it,
then the frame will continue to get rejected. The secondary problem is that
errors in CRC checking will occasionally cause good frames to fail the CRC
check. 

I can see retaining the received CRC because it allows software to do a
double check that a packet which the hardware says failed CRC check really
did fail. I can see making the number of bytes processed through the CRC
generator and checker available to software (which I assume is what was
meant by "buffer size" in the draft), because a synchronizer error normally
results in processing extra bytes or dropping some bytes. If so, "buffer
size" should be changed to something like "number of bytes over which the
CRC was computed not including the received CRC" and should also be applied
to the generator. Buffer size in hardware often has little or no
relationship to frame size.

I can't see any purpose served by retaining the result calculated by the CRC
checker especially since that result will vary unless CRC checker
implementations are needlessly constrained.

Regards,
Pat Thaler



-----Original Message-----
From: Jonathan Stone [mailto:jonathan@dsg.stanford.edu]
Sent: Friday, May 03, 2002 2:02 PM
To: Tuexen Michael; 'Scott Bradner'; dotis@sanlight.net;
'rrs@cisco.com'; john.loughney@nokia.com; tsvwg@ietf.org
Cc: pat_thaler@agilent.com
Subject: Re: [Tsvwg] SCTP Checksum Change to the IESG 



Dear all,

Michael Tuexen and I have discussed the contentious text offline at
some length.  One example we addressed is a NIC with TCP checksum
assist in hardware.  The checksum assist in that NIC will occasionally
deliver incorrect TCP checksum indications for packets smaller than
the minimum Ethernet segment.

I hesitate to say such bugs are commonplace, but they certainly
aren't' rare: both in current, shipping server-class hardware and in the
previous generation of bugs. The open-source community device drivers
show the history of first enabling TCP checksum assist, then disabling,
then finding workarounds or diagnostic tests which are cheaper than
the alternative: deciding the checksum-assist hardware is busted,
and ignoring it altogether.

That is what the contentious text is saying. It is not saying
*anything* about how a hardware CRC assist should compute the CRC.  It
*is* saying that hardware assists for SCTP must provide some
additional ``audit-trail'' information on what the hardware really
did.  We can call that information ``CRC assist framing'': since it
leaves a record of where the CRC hw took its checksum value; the
length of the CRC computation; and the final result.

That said, here's an attempt at some text which explains when, and
where, and why, that audit information is necessary:

-----
   Errors in NICs and in outboard checksum acceleration have,
   historically, been commonplace. This document requires that
   hardware assists for the SCTP CRC provide more information than
   a single CRC-GOOD/CRC-NOT-GOOD bit.  Suppose that some particular
   NIC (or model of NIC) will occasionally give incorrect `CRC-GOOD'
   status for packets that are in fact damaged. In this scenario,
   GOOD/NOT-GOOD implementations give the SCTP software no recourse but
   to ignore the CRC assist entirely, and recompute the CRC of
   every packet in software.

   This extra ``CRC-assist framing'' information  gives
   software the option to apply a cheaper audit of the CRC assist
   result based on the framing, before resorting to a software CRC.
   Such checks are commonplace in the installed base of TCP stacks
   using hardware- assisted TCP checksum.

   Moreover, the CRC hardware assist, its associated NIC,
   and the NIC  device-driver will  in practice often
   be provided by a different vendor than is the SCTP stack.
   To ensure that the desired CRC-assist audit trail crosses the
   NIC-vendor/SCTP-stack-vendor boundary, this additional
   information is [currently] specified as a MUST.

-----

That isn't quite up to snuff for an I-D, but it will be soon:) and it
gets the idea across.  I hope Michael Tuexen will repost (or give me
permission to repost) an excerpt of our discussion.  I'm hoping that
together, those will resolve most of the contentiousness.

An anecdote: when I gave a talk on the background data at SIGCOMM 2000
in Stockholm, it was a hardware person (not a software guy) who
commented that there was a `right' way and a `wrong' way to do
checksum-offload assists; and that the one-bit GOOD/NOT-GOOD result
was a bad way which should be discouraged.  For pretty much the
reasons I give here, and of which I walked through an explicit example
with Michael.  (To be fair, this was in a context of presenting data
showing that some 1 in 10,00 frame in the Internet pass their Ethernet
CRC, but fail the TCP checksum -- often in circumstances which point
squarely at bugs in NICs.)

Even so, I'm surprised that this has been so contentious.

--Jonathan


_______________________________________________
tsvwg mailing list
tsvwg@ietf.org
https://www1.ietf.org/mailman/listinfo/tsvwg

_______________________________________________
tsvwg mailing list
tsvwg@ietf.org
https://www1.ietf.org/mailman/listinfo/tsvwg