Re: [tcpm] Nagle Algorithm and Delayed ACKs

Carsten Bormann <> Sat, 25 July 2009 05:17 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 747C23A6975 for <>; Fri, 24 Jul 2009 22:17:55 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -6.249
X-Spam-Status: No, score=-6.249 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HELO_EQ_DE=0.35, RCVD_IN_DNSWL_MED=-4]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id X1qbhr4pBzTN for <>; Fri, 24 Jul 2009 22:17:54 -0700 (PDT)
Received: from ( [IPv6:2001:638:708:30c9:209:3dff:fe00:7136]) by (Postfix) with ESMTP id 155333A69A3 for <>; Fri, 24 Jul 2009 22:17:42 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
Received: from ( []) by (8.14.3/8.14.3) with ESMTP id n6P5HSVd012741; Sat, 25 Jul 2009 07:17:29 +0200 (CEST)
Received: from [] ( []) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTP id 89842B79D; Sat, 25 Jul 2009 07:17:28 +0200 (CEST)
From: Carsten Bormann <>
To: Thomas Narten <>
In-Reply-To: <>
References: <>
Message-Id: <>
Content-Type: text/plain; charset="US-ASCII"; format="flowed"; delsp="yes"
Content-Transfer-Encoding: 7bit
Mime-Version: 1.0 (Apple Message framework v935.3)
Date: Sat, 25 Jul 2009 07:17:26 +0200
X-Mailer: Apple Mail (2.935.3)
Subject: Re: [tcpm] Nagle Algorithm and Delayed ACKs
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sat, 25 Jul 2009 05:17:55 -0000

On Jul 24, 2009, at 21:52, Thomas Narten wrote:


My view would be that this is a well-documented option in the socket  
Even though the interaction with delayed ACKs is rarely explained  
correctly, there are lots of "Socket FAQ" and "Tuning Guide" documents  
that explain "Nagling" (ouch) and the TCP_NODELAY socket option (I get  
117000 google hits...).
TCP_NODELAY certainly is standard fare in any reasonable socket API  
People already need to think about the number of write/send operations  
they perform for one message.
(Note that Linux also has TCP_CORK.)

In essence, the kernel needs to know whether the programmer was not  
considering the issue (making it likely there will be lots of silly  
small writes) or whether the issue was considered and the program is  
optimized with respect to the writes.
A socket option defaulting to the first case sounds like the right way  
to communicate that information, which is hard to infer.

What would you want to improve?

Gruesse, Carsten