From owner-freebsd-arch Sat Jul 8 22:22:36 2000 Delivered-To: freebsd-arch@freebsd.org Received: from panzer.kdm.org (panzer.kdm.org [216.160.178.169]) by hub.freebsd.org (Postfix) with ESMTP id 1879137B6EB; Sat, 8 Jul 2000 22:22:27 -0700 (PDT) (envelope-from ken@panzer.kdm.org) Received: (from ken@localhost) by panzer.kdm.org (8.9.3/8.9.1) id XAA12359; Sat, 8 Jul 2000 23:22:26 -0600 (MDT) (envelope-from ken) Date: Sat, 8 Jul 2000 23:22:26 -0600 From: "Kenneth D. Merry" To: net@FreeBSD.ORG Subject: new zero copy sockets and NFS patches Message-ID: <20000708232226.A12332@panzer.kdm.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2i Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG [ -arch and -current BCC'ed for wider coverage, please direct followups to -net and/or me ] I have put a new copy of the zero copy sockets and NFS patches, against -current as of early July 8th, 2000, here: http://people.FreeBSD.ORG/~ken/zero_copy/ Feedback would be very welcome, we haven't gotten much response on this yet. Besides being generated against a newer version of -current, the following things have changed in the new patches posted above: - There was a potential panic caused by a bug in the driver side of the header splitting code. The bug only popped up with non-split packets that were long enough to fill up a mbuf. This generally meant IP fragments with a non-zero fragment offset, usually generated by NFS reads. Essentially the length of the initial receive buffer in the mbuf chain was overstated by two bytes, which caused the next mbuf pointer in the next contiguous mbuf to get partially overwritten. That could cause a panic in some situations. Thanks to Drew Gallatin for tracking this one down. - We now do header splitting on IP fragments with a fragment offset greater than 0. Thanks to Justin Gibbs for the idea. - The Tigon driver now loads and unloads cleanly. Thanks to Drew Gallatin for getting this working. - Outgoing IP fragments are now generated in page-multiple chunks if the outgoing interface's MTU is greater than a page in size. This helps receive-side bandwidth NFS significantly, since page flipping techniques can be used. Thanks to Drew Gallatin for this performance enhancement. Also, there are some new benchmark results in the benchmarks section of the web page -- Drew Gallatin has achieved 986Mbps TCP throughput with netperf, and 100MB/sec throughput over NFS. See the web page for a more detailed explanation of the hardware, conditions, etc. For those of you who missed the first message about this code (that went out to -net, -arch and -current), here's a quick list of what is included in the code: - Two sets of zero copy send code, written by Drew Gallatin and Robert Picco . - Zero copy receive code, written by Drew Gallatin. - Zero copy NFS code, written by Drew Gallatin. - Header splitting firmware for Alteon's Tigon II boards (written by me), based on version 12.4.11 of their firmware. This is used in combination with the zero copy receive code to guarantee that the payload of TCP or UDP packet is placed into a page-aligned buffer. - Alteon firmware debugging ioctls and supporting routines for the Tigon driver (also written by me). This will help anyone who is doing firmware development under FreeBSD for the Tigon boards. Ken -- Kenneth Merry ken@kdm.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message