Discussion:
proper SACK behavior?
(too old to reply)
Greg Troxel
2008-06-28 12:51:25 UTC
Permalink
Is our SACK implementation believed to be complete in current?
netbsd-4? I noticed some sluggishness today on remote ssh, and went to
investigate. I found that when a packet is lost tcp correctly resends
it on the 3rd dup ack, and then doesn't retransmit the next outstanding
segments on subsequent dup acks (which is good, because they have been
sacked but not acked). The retransmit makes it, and after the ack
arrives new packets are sent and the rate recovers. But there's
essentially a timeout, rather than a halving of cnwd. It's a timeout of
actual RTT (which is large due to buffering, up to 300 ms from the 7 ms
unloaded RTT (FiOS)), rather than the estimate.

To analyze this, I ran a program that just connects to remote discard
port and sends 5 MB, capture dthe packets at the sender, and then ran it
through tcpdump2xplot. I've put the resulting xplot up at

http://www.lexort.com/netbsd/

Use pkgsrc/graphics/xplot to view this. The bottom line is the ack, the
top the receiver's window, vertical marks outgoing packets, and green
vertical marks sack contents.

It seems that the ack line doesn't lose much if any progress, but it
also sems like the pipe is not kept full.

Should the sender be sending new segments on receipt of each ack where
sack acks new data?

--
Posted automagically by a mail2news gateway at muc.de e.V.
Please direct questions, flames, donations, etc. to news-***@muc.de
Greg Troxel
2010-11-10 13:11:02 UTC
Permalink
[long ago, I questioned what happens with sack enabled]

Bev Schwartz, Laura Ma and I (all of BBN) have found and fixed a SACK
problem. I will send a patch as soon as I have a chance but I wanted to
outline the problem quickly.

When newreno (no sack) gets a triple duplicate ack, it halves cwnd,
retransmits, and continues. When running in sack mode, the triple
dupack causes cwnd to go to 1 instead. This is allowed by the specs,
but the preferred option is to halve cwnd. The code is confusing
because it sets cwnd to 1 to call tcp_output to retransmit a segment,
but then it doesn't restore it.

With this fixed, our TCP is competive with OS X; without it, we send
less than OS X.
YAMAMOTO Takashi
2011-03-09 04:39:24 UTC
Permalink
hi,
Post by Greg Troxel
[long ago, I questioned what happens with sack enabled]
Bev Schwartz, Laura Ma and I (all of BBN) have found and fixed a SACK
problem. I will send a patch as soon as I have a chance but I wanted to
outline the problem quickly.
When newreno (no sack) gets a triple duplicate ack, it halves cwnd,
retransmits, and continues. When running in sack mode, the triple
dupack causes cwnd to go to 1 instead. This is allowed by the specs,
but the preferred option is to halve cwnd. The code is confusing
because it sets cwnd to 1 to call tcp_output to retransmit a segment,
but then it doesn't restore it.
With this fixed, our TCP is competive with OS X; without it, we send
less than OS X.
sure, our sack code is too confusing. can you share your fix?

YAMAMOTO Takashi

--
Posted automagically by a mail2news gateway at muc.de e.V.
Please direct questions, flames, donations, etc. to news-***@muc.de
Loading...