1. 29 1月, 2008 3 次提交
    • I
      [TCP]: Move FRTO checks out from write queue abstraction funcs · 8512430e
      Ilpo Järvinen 提交于
      Better place exists in update_send_head (other non-queue related
      adjustments are done there as well) which is the only caller of
      tcp_advance_send_head (now that the bogus call from mtu_probe is
      gone).
      Signed-off-by: NIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8512430e
    • I
      [TCP]: Rewrite SACK block processing & sack_recv_cache use · 68f8353b
      Ilpo Järvinen 提交于
      Key points of this patch are:
      
        - In case new SACK information is advance only type, no skb
          processing below previously discovered highest point is done
        - Optimize cases below highest point too since there's no need
          to always go up to highest point (which is very likely still
          present in that SACK), this is not entirely true though
          because I'm dropping the fastpath_skb_hint which could
          previously optimize those cases even better. Whether that's
          significant, I'm not too sure.
      
      Currently it will provide skipping by walking. Combined with
      RB-tree, all skipping would become fast too regardless of window
      size (can be done incrementally later).
      
      Previously a number of cases in TCP SACK processing fails to
      take advantage of costly stored information in sack_recv_cache,
      most importantly, expected events such as cumulative ACK and new
      hole ACKs. Processing on such ACKs result in rather long walks
      building up latencies (which easily gets nasty when window is
      huge). Those latencies are often completely unnecessary
      compared with the amount of _new_ information received, usually
      for cumulative ACK there's no new information at all, yet TCP
      walks whole queue unnecessary potentially taking a number of
      costly cache misses on the way, etc.!
      
      Since the inclusion of highest_sack, there's a lot information
      that is very likely redundant (SACK fastpath hint stuff,
      fackets_out, highest_sack), though there's no ultimate guarantee
      that they'll remain the same whole the time (in all unearthly
      scenarios). Take advantage of this knowledge here and drop
      fastpath hint and use direct access to highest SACKed skb as
      a replacement.
      
      Effectively "special cased" fastpath is dropped. This change
      adds some complexity to introduce better coveraged "fastpath",
      though the added complexity should make TCP behave more cache
      friendly.
      
      The current ACK's SACK blocks are compared against each cached
      block individially and only ranges that are new are then scanned
      by the high constant walk. For other parts of write queue, even
      when in previously known part of the SACK blocks, a faster skip
      function is used (if necessary at all). In addition, whenever
      possible, TCP fast-forwards to highest_sack skb that was made
      available by an earlier patch. In typical case, no other things
      but this fast-forward and mandatory markings after that occur
      making the access pattern quite similar to the former fastpath
      "special case".
      
      DSACKs are special case that must always be walked.
      
      The local to recv_sack_cache copying could be more intelligent
      w.r.t DSACKs which are likely to be there only once but that
      is left to a separate patch.
      Signed-off-by: NIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      68f8353b
    • I
      [TCP]: Convert highest_sack to sk_buff to allow direct access · a47e5a98
      Ilpo Järvinen 提交于
      It is going to replace the sack fastpath hint quite soon... :-)
      Signed-off-by: NIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a47e5a98
  2. 05 12月, 2007 1 次提交
  3. 23 11月, 2007 2 次提交
  4. 20 11月, 2007 1 次提交
  5. 12 10月, 2007 1 次提交
  6. 11 10月, 2007 16 次提交
  7. 19 7月, 2007 1 次提交
  8. 11 7月, 2007 1 次提交
  9. 09 5月, 2007 1 次提交
  10. 30 4月, 2007 1 次提交
  11. 29 4月, 2007 1 次提交
  12. 26 4月, 2007 8 次提交
  13. 10 4月, 2007 1 次提交
    • D
      [TCP]: slow_start_after_idle should influence cwnd validation too · 15d33c07
      David S. Miller 提交于
      For the cases that slow_start_after_idle are meant to deal
      with, it is almost a certainty that the congestion window
      tests will think the connection is application limited and
      we'll thus decrease the cwnd there too.  This defeats the
      whole point of setting slow_start_after_idle to zero.
      
      So test it there too.
      
      We do not cancel out the entire tcp_cwnd_validate() function
      so that if the sysctl is changed we still have the validation
      state maintained.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      15d33c07
  14. 03 4月, 2007 1 次提交
  15. 14 2月, 2007 1 次提交
    • I
      [TCP]: Prevent pseudo garbage in SYN's advertized window · 600ff0c2
      Ilpo Järvinen 提交于
      TCP may advertize up to 16-bits window in SYN packets (no window
      scaling allowed). At the same time, TCP may have rcv_wnd
      (32-bits) that does not fit to 16-bits without window scaling
      resulting in pseudo garbage into advertized window from the
      low-order bits of rcv_wnd. This can happen at least when
      mss <= (1<<wscale) (see tcp_select_initial_window). This patch
      fixes the handling of SYN advertized windows (compile tested
      only).
      
      In worst case (which is unlikely to occur though), the receiver
      advertized window could be just couple of bytes. I'm not sure
      that such situation would be handled very well at all by the
      receiver!? Fortunately, the situation normalizes after the
      first non-SYN ACK is received because it has the correct,
      scaled window.
      
      Alternatively, tcp_select_initial_window could be changed to
      prevent too large rcv_wnd in the first place.
      
      [ tcp_make_synack() has the same bug, and I've added a fix for
        that to this patch -DaveM ]
      Signed-off-by: NIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      600ff0c2