From owner-freebsd-net@FreeBSD.ORG Sun Feb 25 14:56:50 2007 Return-Path: X-Original-To: freebsd-net@freebsd.org Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6F15916A404 for ; Sun, 25 Feb 2007 14:56:50 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from c00l3r.networx.ch (c00l3r.networx.ch [62.48.2.2]) by mx1.freebsd.org (Postfix) with ESMTP id D68D013C4AC for ; Sun, 25 Feb 2007 14:56:49 +0000 (UTC) (envelope-from andre@freebsd.org) Received: (qmail 81660 invoked from network); 25 Feb 2007 14:30:18 -0000 Received: from c00l3r.networx.ch (HELO [127.0.0.1]) ([62.48.2.2]) (envelope-sender ) by c00l3r.networx.ch (qmail-ldap-1.03) with SMTP for ; 25 Feb 2007 14:30:18 -0000 Message-ID: <45E1A3B4.7090002@freebsd.org> Date: Sun, 25 Feb 2007 15:56:52 +0100 From: Andre Oppermann User-Agent: Thunderbird 1.5.0.9 (Windows/20061207) MIME-Version: 1.0 To: Kip Macy References: <45E19B54.9060007@freebsd.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-net Subject: Re: improved TSO interface needed X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 25 Feb 2007 14:56:50 -0000 Kip Macy wrote: > On 2/25/07, Andre Oppermann wrote: >> Kip Macy wrote: >> > Evidently FreeBSD violates the LSO spec by sending down up to socket >> > buffer sized TSO segments to the network card. Is there a way to set >> > this other than reducing net.inet.tcp.sendbuf_max to a compliant value >> > (64k)? And is there a way to for a device to communicate to the stack >> > the maximum length of an mbuf chain? >> >> From netinet/ip_output.c: >> >> * When doing TSO limit a burst to TCP_MAXWIN minus the >> * IP, TCP and Options length to keep ip->ip_len from >> * overflowing. Prevent the last segment from being >> * fractional thus making them all equal sized and set >> * the flag to continue sending. >> >> TCP_MAXWIN is 64K. > > It is good to know that this how it is supposed to work even if it > doesn't. You didn't directly answer my last question, since they're > all supposed to be equal does that mean the max should be 32? The current TSO code will send mbuf chains of up to 64K (minus headers) to be split into MSS sized packets as specified by mbuf packet header usually resulting in an MTU of 1500 bytes. There is no way at the moment to tell the stack to send shorter mbuf chain while still using TSO. A google search for "LSO" doesn't yield any useful answers. The stack doesn't send socket buffer sized mbuf chains if it larger than 64K. Can you explain the problem you're seeing in more details perhaps? That'd certainly help in finding a fix for your problem. -- Andre