I'm sure I'll manage to stumble across some
linux-specific-I-dont-understand here, but while disabling delayed
ACKs may mitigate the symptoms of an application written such that it
interacts badly with Nagle and delayed ACK, that is not _completely_
the same as disabling Nagle.
Original:
send1 ->
send2 -|
time - RTT+delack
<- delack2 (TCP ACK syntax - ie ACK send1)
-> send2
<- response (assuming it happens within the delayed ack interval)
Disable the delayed acks and you get
send1 ->
send2 -|
time - RTT
<- immack2
-> send2
<- immack3
<- response
disabling Nagle would be
send1 ->
send2 ->
<- response
whereas giving both sends at once is
send1+2 ->
<- response
(modulo some shotcuts on displaying all the time sequences.)
if there is no way to disable Nagle system wide, you might see if you
can write a small shim library to intercept calls to socket() that the
tacks-on a call to setsockopt(). After that, you should have the
ammunition to get the database re-written to provide logically
associated data at the same time and not need to worry about disabling
Nagle.
There have been instances where stacks have botched their
implementation of Nagle, such that applciations that should not have
encountered it, actually did. One way to find such stacks is to take
the netperf TCP_RR test, and run it with a request size of 1MSS, and
then run it with a request size of 1MSS+1byte. If there is a large
delta in the transaction rates between the two tests, it suggests the
stack has a broken implementation of Nagle and you could confirm it
with a packet trace.
http://www.netperf.org/
hth,
rick jones
--
a wide gulf separates "what if" from "if only"
these opinions are mine, all mine; HP might not want them anyway...

feel free to post, OR email to raj in cup.hp.com but NOT BOTH...