• C
    tcp: introduce a per-route knob for quick ack · bcefe17c
    Cong Wang 提交于
    In previous discussions, I tried to find some reasonable heuristics
    for delayed ACK, however this seems not possible, according to Eric:
    
    	"ACKS might also be delayed because of bidirectional
    	traffic, and is more controlled by the application
    	response time. TCP stack can not easily estimate it."
    
    	"ACK can be incredibly useful to recover from losses in
    	a short time.
    
    	The vast majority of TCP sessions are small lived, and we
    	send one ACK per received segment anyway at beginning or
    	retransmits to let the sender smoothly increase its cwnd,
    	so an auto-tuning facility wont help them that much."
    
    and according to David:
    
    	"ACKs are the only information we have to detect loss.
    
    	And, for the same reasons that TCP VEGAS is fundamentally
    	broken, we cannot measure the pipe or some other
    	receiver-side-visible piece of information to determine
    	when it's "safe" to stretch ACK.
    
    	And even if it's "safe", we should not do it so that losses are
    	accurately detected and we don't spuriously retransmit.
    
    	The only way to know when the bandwidth increases is to
    	"test" it, by sending more and more packets until drops happen.
    	That's why all successful congestion control algorithms must
    	operate on explicited tested pieces of information.
    
    	Similarly, it's not really possible to universally know if
    	it's safe to stretch ACK or not."
    
    It still makes sense to enable or disable quick ack mode like
    what TCP_QUICK_ACK does.
    
    Similar to TCP_QUICK_ACK option, but for people who can't
    modify the source code and still wants to control
    TCP delayed ACK behavior. As David suggested, this should belong
    to per-path scope, since different pathes may want different
    behaviors.
    
    Cc: Eric Dumazet <eric.dumazet@gmail.com>
    Cc: Rick Jones <rick.jones2@hp.com>
    Cc: Stephen Hemminger <stephen@networkplumber.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Thomas Graf <tgraf@suug.ch>
    CC: David Laight <David.Laight@ACULAB.COM>
    Signed-off-by: NCong Wang <amwang@redhat.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    bcefe17c
tcp_input.c 162.8 KB