git: tcp: Implement "Rescue Retransmission for SACK-based Loss Recovery Algorithm"

Sepherosa Ziehau sephe at crater.dragonflybsd.org
Tue Apr 24 23:12:34 PDT 2012


commit 1bdfd72827460e22c240cfa103e21559a253cf26
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date:   Thu Apr 19 17:30:59 2012 +0800

    tcp: Implement "Rescue Retransmission for SACK-based Loss Recovery Algorithm"
    
    http://tools.ietf.org/html/draft-nishida-tcpm-rescue-retransmission-00
    
    When hsu@ implemented RFC3517, part of the fix mentioned in the above draft
    had been implemented, i.e. no SACK scoreboard left case, as mentioned in the
    above draft as example.  However, the original implementation still did not
    cover the case when there are small amount of SACK scoreboards left (< 3),
    and the original implmentation could be more aggressive than the method
    suggested in the above draft.
    
    - Whether to use this new mechanism is controlled by net.inet.tcp.rescuesack
      sysctl node; it is on by default.  Disable it will fallback to the original
      rescue retransmission behaviour implemented by hsu at .
    - Save rexmt_high, before we start retransmission using RFC3517, so if nothing
      is sent, rexmt_high could be restored.
    - Add statistics about rescue retransmission.
    
    We could futher examine whether do more than one rescue retransmission could
    be helpful or not.

Summary of changes:
 sys/netinet/tcp_input.c |   40 +++++++++++++++++++++++++++++-----------
 sys/netinet/tcp_sack.c  |   23 ++++++++++++++++++++---
 sys/netinet/tcp_timer.c |    1 +
 sys/netinet/tcp_var.h   |    9 +++++++--
 usr.bin/netstat/inet.c  |    4 ++++
 5 files changed, 61 insertions(+), 16 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/1bdfd72827460e22c240cfa103e21559a253cf26


-- 
DragonFly BSD source repository





More information about the Commits mailing list