• Jon Maloy's avatar
    tipc: add smart nagle feature · c0bceb97
    Jon Maloy authored
    We introduce a feature that works like a combination of TCP_NAGLE and
    TCP_CORK, but without some of the weaknesses of those. In particular,
    we will not observe long delivery delays because of delayed acks, since
    the algorithm itself decides if and when acks are to be sent from the
    receiving peer.
    
    - The nagle property as such is determined by manipulating a new
      'maxnagle' field in struct tipc_sock. If certain conditions are met,
      'maxnagle' will define max size of the messages which can be bundled.
      If it is set to zero no messages are ever bundled, implying that the
      nagle property is disabled.
    - A socket with the nagle property enabled enters nagle mode when more
      than 4 messages have been sent out without receiving any data message
      from the peer.
    - A socket leaves nagle mode whenever it receives a data message from
      the peer.
    
    In nagle mode, messages smaller than 'maxnagle' are accumulated in the
    socket write queue. The last buffer in the queue is marked with a new
    'ack_required' bit, which forces the receiving peer to send a CONN_ACK
    message back to the sender upon reception.
    
    The accumulated contents of the write queue is transmitted when one of
    the following events or conditions occur.
    
    - A CONN_ACK message is received from the peer.
    - A data message is received from the peer.
    - A SOCK_WAKEUP pseudo message is received from the link level.
    - The write queue contains more than 64 1k blocks of data.
    - The connection is being shut down.
    - There is no CONN_ACK message to expect. I.e., there is currently
      no outstanding message where the 'ack_required' bit was set. As a
      consequence, the first message added after we enter nagle mode
      is always sent directly with this bit set.
    
    This new feature gives a 50-100% improvement of throughput for small
    (i.e., less than MTU size) messages, while it might add up to one RTT
    to latency time when the socket is in nagle mode.
    Acked-by: default avatarYing Xue <ying.xue@windreiver.com>
    Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c0bceb97
node.h 5.06 KB