1. 15 Aug, 2012 14 commits
  2. 14 Aug, 2012 9 commits
  3. 09 Aug, 2012 7 commits
  4. 07 Aug, 2012 4 commits
  5. 06 Aug, 2012 4 commits
    • Eric Dumazet's avatar
      tcp: ecn: dont delay ACKS after CE · aae06bf5
      Eric Dumazet authored
      While playing with CoDel and ECN marking, I discovered a
      non optimal behavior of receiver of CE (Congestion Encountered)
      segments.
      
      In pathological cases, sender has reduced its cwnd to low values,
      and receiver delays its ACK (by 40 ms).
      
      While RFC 3168 6.1.3 (The TCP Receiver) doesn't explicitly recommend
      to send immediate ACKS, we believe its better to not delay ACKS, because
      a CE segment should give same signal than a dropped segment, and its
      quite important to reduce RTT to give ECE/CWR signals as fast as
      possible.
      
      Note we already call tcp_enter_quickack_mode() from TCP_ECN_check_ce()
      if we receive a retransmit, for the same reason.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Neal Cardwell <ncardwell@google.com>
      Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      aae06bf5
    • Eric Dumazet's avatar
      net: tcp: GRO should be ECN friendly · a9e050f4
      Eric Dumazet authored
      While doing TCP ECN tests, I discovered GRO was reordering packets if it
      receives one packet with CE set, while previous packets in same NAPI run
      have ECT(0) for the same flow :
      
      09:25:25.857620 IP (tos 0x2,ECT(0), ttl 64, id 27893, offset 0, flags
      [DF], proto TCP (6), length 4396)
          172.30.42.19.54550 > 172.30.42.13.44139: Flags [.], seq
      233801:238145, ack 1, win 115, options [nop,nop,TS val 3397779 ecr
      1990627], length 4344
      
      09:25:25.857626 IP (tos 0x3,CE, ttl 64, id 27892, offset 0, flags [DF],
      proto TCP (6), length 1500)
          172.30.42.19.54550 > 172.30.42.13.44139: Flags [.], seq
      232353:233801, ack 1, win 115, options [nop,nop,TS val 3397779 ecr
      1990627], length 1448
      
      09:25:25.857638 IP (tos 0x0, ttl 64, id 34581, offset 0, flags [DF],
      proto TCP (6), length 64)
          172.30.42.13.44139 > 172.30.42.19.54550: Flags [.], cksum 0xac8f
      (incorrect -> 0xca69), ack 232353, win 1271, options [nop,nop,TS val
      1990627 ecr 3397779,nop,nop,sack 1 {233801:238145}], length 0
      
      We have two problems here :
      
      1) GRO reorders packets
      
        If NIC gave packet1, then packet2, which happen to be from "different
      flows"  GRO feeds stack with packet2, then packet1. I have yet to
      understand how to solve this problem.
      
      2) GRO is not ECN friendly
      
      Delivering packets out of order makes TCP stack not as fast as it could
      be.
      
      In this patch I suggest we make the tos test not part of the 'same_flow'
      determination, but part of the 'should flush' logic
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Herbert Xu <herbert@gondor.apana.org.au>
      Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a9e050f4
    • Eric Dumazet's avatar
      net: reorganize IP MIB values · 14a19680
      Eric Dumazet authored
      Reduce IP latencies by placing hot MIB IP fields in a single cache line.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      14a19680
    • Eric Dumazet's avatar
      net: avoid reloads in SNMP_UPD_PO_STATS · d25398df
      Eric Dumazet authored
      Avoid two instructions to reload dev->nd_net->mib.ip_statistics pointer,
      unsing a temp variable, in ip_rcv(), ip_output() paths for example.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d25398df
  6. 04 Aug, 2012 2 commits
    • Eric Dumazet's avatar
      ipv4: Introduce IN_DEV_NET_ROUTE_LOCALNET · 9eb43e76
      Eric Dumazet authored
      performance profiles show a high cost in the IN_DEV_ROUTE_LOCALNET()
      call done in ip_route_input_slow(), because of multiple dereferences,
      even if cache lines are clean and available in cpu caches.
      
      Since we already have the 'net' pointer, introduce
      IN_DEV_NET_ROUTE_LOCALNET() macro avoiding two dereferences
      (dev_net(in_dev->dev))
      
      Also change the tests to use IN_DEV_NET_ROUTE_LOCALNET() only if saddr
      or/and daddr are loopback addresse.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9eb43e76
    • Eric Dumazet's avatar
      ipv4: change inet_addr_hash() · 40384999
      Eric Dumazet authored
      Use net_hash_mix(net) instead of hash_ptr(net, 8), and use
      hash_32() instead of using a serie of XOR
      
      Define IN4_ADDR_HSIZE_SHIFT for clarity
      
      __ip_dev_find() can perform the net_eq() call only if ifa_local
      matches the key, to avoid unneeded dereferences.
      
      remove inline attributes
      
      # size net/ipv4/devinet.o.before net/ipv4/devinet.o
         text	   data	    bss	    dec	    hex	filename
        17471	   2545	   2048	  22064	   5630	net/ipv4/devinet.o.before
        17335	   2545	   2048	  21928	   55a8	net/ipv4/devinet.o
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      40384999