I found this tidbit at http://polygraph.ircache.net/Tips/FreeBSD-2.8/:
Put "options TCP_ACK_HACK" in your kernel config file, and delayed ACKs
will be disabled for small packets.
For MSS-sized packets, here's a suggestion given by Mark Allman:
// tcp_output.c
/*
* Compare available window to amount of window
* known to peer (as advertised window less
* next expected input). If the difference is at least two
* max size segments, or at least 50% of the maximum possible
* window, then want to send a window update to peer.
*/
if (win > 0) {
/*
* "adv" is the amount we can increase the window,
* taking into account that we are limited by
* TCP_MAXWIN << tp->rcv_scale.
*/
long adv = min(win, (long)TCP_MAXWIN << tp->rcv_scale) -
(tp->rcv_adv - tp->rcv_nxt);
#ifdef NO_DELACK
/*
* Changed the 2 * mss to 1 * mss, so we get an ACK sent after every
* data packet received.
*/
if (adv >= (long) (1 * tp->t_maxseg))
#else
if (adv >= (long) (2 * tp->t_maxseg))
#endif
goto send;
if (2 * adv >= (long) so->so_rcv.sb_hiwat)
goto send;
}