Eric Dumazet
95bd09eb27
tcp: TSO packets automatic sizing
...
After hearing many people over past years complaining against TSO being
bursty or even buggy, we are proud to present automatic sizing of TSO
packets.
One part of the problem is that tcp_tso_should_defer() uses an heuristic
relying on upcoming ACKS instead of a timer, but more generally, having
big TSO packets makes little sense for low rates, as it tends to create
micro bursts on the network, and general consensus is to reduce the
buffering amount.
This patch introduces a per socket sk_pacing_rate, that approximates
the current sending rate, and allows us to size the TSO packets so
that we try to send one packet every ms.
This field could be set by other transports.
Patch has no impact for high speed flows, where having large TSO packets
makes sense to reach line rate.
For other flows, this helps better packet scheduling and ACK clocking.
This patch increases performance of TCP flows in lossy environments.
A new sysctl (tcp_min_tso_segs) is added, to specify the
minimal size of a TSO packet (default being 2).
A follow-up patch will provide a new packet scheduler (FQ), using
sk_pacing_rate as an input to perform optional per flow pacing.
This explains why we chose to set sk_pacing_rate to twice the current
rate, allowing 'slow start' ramp up.
sk_pacing_rate = 2 * cwnd * mss / srtt
v2: Neal Cardwell reported a suspect deferring of last two segments on
initial write of 10 MSS, I had to change tcp_tso_should_defer() to take
into account tp->xmit_size_goal_segs
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Cc: Van Jacobson <vanj@google.com>
Cc: Tom Herbert <therbert@google.com>
Acked-by: Yuchung Cheng <ycheng@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2013-08-29 15:50:06 -04:00
..
9p
9p: client: remove unused code and any reference to "cancelled" function
2013-07-30 15:54:28 -07:00
bluetooth
Bluetooth: Remove unneeded flag
2013-06-23 00:23:53 +01:00
caif
caif: Remove my bouncing email address.
2013-04-23 13:25:51 -04:00
irda
include: Convert ethernet mac address declarations to use ETH_ALEN
2013-08-02 12:33:54 -07:00
iucv
af_iucv: fix recvmsg by replacing skb_pull() function
2013-04-08 17:16:57 -04:00
netfilter
netfilter: add SYNPROXY core/target
2013-08-28 00:27:54 +02:00
netns
Revert "net: sctp: convert sctp_checksum_disable module param into sctp sysctl"
2013-08-09 13:09:41 -07:00
nfc
NFC: netlink: Rename CMD_FW_UPLOAD to CMD_FW_DOWNLOAD
2013-07-31 01:19:43 +02:00
phonet
net: remove my future former mail address
2012-06-17 16:29:38 -07:00
sctp
net: sctp: reorder sctp_globals to reduce cacheline usage
2013-08-29 14:55:54 -04:00
tc_act
act_api.h
net: Remove extern from include/net/ scheduling prototypes
2013-07-31 17:24:22 -07:00
addrconf.h
addrconf.h: Remove extern function prototypes
2013-07-31 17:50:01 -07:00
af_ieee802154.h
af_rxrpc.h
af_rxrpc.h: Remove extern from function prototypes
2013-07-31 17:50:01 -07:00
af_unix.h
af_unix: improve STREAM behavior with fragmented memory
2013-08-10 01:16:44 -07:00
af_vsock.h
VSOCK: Move af_vsock.h and vsock_addr.h to include/net
2013-07-27 22:14:06 -07:00
ah.h
arp.h
arp/neighbour.h: Remove extern from function prototypes
2013-07-31 17:50:02 -07:00
atmclip.h
ax25.h
ax25.h: Remove extern from function prototypes
2013-07-31 17:50:02 -07:00
ax88796.h
busy_poll.h
net: rename busy poll MIB counter
2013-08-09 11:39:08 -07:00
cfg80211-wext.h
cfg80211.h
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
2013-08-12 14:45:06 -04:00
checksum.h
checksum: Remove extern from function prototypes
2013-07-31 17:50:02 -07:00
cipso_ipv4.h
cipso: handle CIPSO options correctly when NetLabel is disabled
2012-06-01 14:18:29 -04:00
cls_cgroup.h
cls_cgroup.h netprio_cgroup.h: Remove extern from function prototypes
2013-07-31 17:50:02 -07:00
codel.h
codel: refine one condition to avoid a nul rec_inv_sqrt
2012-08-10 16:52:54 -07:00
compat.h
datalink.h
dcbevent.h
dcbnl.h
dn.h
dn_dev.h
dn_fib.h
decnet: Parse netlink attributes on our own
2013-03-22 10:31:16 -04:00
dn_neigh.h
dn_nsp.h
dn_route.h
decnet: use correct RCU API to deref sk_dst_cache field
2013-01-28 00:15:27 -05:00
dsa.h
dsfield.h
ipv6: Optimize ipv6_change_dsfield().
2013-01-09 23:59:53 -08:00
dst.h
Fix dst_neigh_lookup/dst_neigh_lookup_skb return value handling bug
2013-03-15 09:06:58 -04:00
dst_ops.h
net: Fix warnings in dst_ops.h
2012-07-19 10:43:03 -07:00
esp.h
ethoc.h
fib_rules.h
fib_rules: reorder struct fib_rules fields
2013-08-03 11:53:54 -07:00
firewire.h
firewire net, ipv4 arp: Extend hardware address and remove driver-level packet inspection.
2013-03-26 12:32:13 -04:00
flow.h
ipv4: Add FLOWI_FLAG_KNOWN_NH
2012-10-08 17:42:36 -04:00
flow_keys.h
flow_keys: include thoff into flow_keys for later usage
2013-03-20 12:14:36 -04:00
garp.h
gen_stats.h
net_sched: add 64bit rate estimators
2013-06-11 02:51:03 -07:00
genetlink.h
genl: Allow concurrent genl callbacks.
2013-04-25 01:43:15 -04:00
gre.h
net: gre: move GSO functions to gre_offload
2013-07-03 14:37:39 -07:00
gro_cells.h
gro: Fix kcalloc argument order
2013-01-27 22:46:33 -05:00
icmp.h
ipv4: fix error handling in icmp_protocol.
2013-02-22 15:10:18 -05:00
ieee80211_radiotap.h
mac80211: add radiotap flag and handling for 5/10 MHz
2013-07-16 09:58:05 +03:00
ieee802154.h
ieee802154_netdev.h
ieee802154/nl-mac.c: make some MLME operations optional
2013-04-08 12:00:16 -04:00
if_inet6.h
ipv6: resend MLD report if a link-local address completes DAD
2013-06-28 21:19:17 -07:00
inet6_connection_sock.h
ipv6: Add helper inet6_csk_update_pmtu().
2012-07-16 03:44:56 -07:00
inet6_hashtables.h
ipv6: use a stronger hash for tcp
2013-02-21 18:15:58 -05:00
inet_common.h
net-tcp: Fast Open client - sendmsg(MSG_FASTOPEN)
2012-07-19 11:02:03 -07:00
inet_connection_sock.h
tcp: Tail loss probe (TLP)
2013-03-12 08:30:34 -04:00
inet_ecn.h
net: Correct comparisons and calculations using skb->tail and skb-transport_header
2013-05-28 23:49:07 -07:00
inet_frag.h
net: frag, fix race conditions in LRU list maintenance
2013-05-06 11:06:51 -04:00
inet_hashtables.h
hlist: drop the node parameter from iterators
2013-02-27 19:10:24 -08:00
inet_sock.h
ipv4: remove is_data also from ip_options documentation.
2013-06-12 03:13:50 -07:00
inet_timewait_sock.h
hlist: drop the node parameter from iterators
2013-02-27 19:10:24 -08:00
inetpeer.h
ipv4: Maintain redirect and PMTU info in struct rtable again.
2012-07-10 22:40:14 -07:00
ip.h
ipv4: Add a socket release callback for datagram sockets
2013-01-21 14:17:05 -05:00
ip6_checksum.h
ipv6: move csum_ipv6_magic() and udp6_csum_init() into static library
2013-01-08 17:56:10 -08:00
ip6_fib.h
ipv6: prevent fib6_run_gc() contention
2013-08-01 14:16:20 -07:00
ip6_route.h
ipv6: handle Redirect ICMP Message with no Redirected Header option
2013-08-22 20:08:21 -07:00
ip6_tunnel.h
ip6tnl: add x-netns support
2013-08-15 01:00:20 -07:00
ip_fib.h
ipv4: remove fib_update_nh_saddrs() declaration.
2013-07-02 00:33:52 -07:00
ip_tunnels.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-08-16 15:37:26 -07:00
ip_vs.h
ipvs: add sync_persist_mode flag
2013-06-26 18:01:46 +09:00
ipcomp.h
ipconfig.h
ipv6.h
net: Add NEXTHDR_SCTP to ipv6.h
2013-08-23 16:43:08 -07:00
ipx.h
iw_handler.h
lapb.h
lib80211.h
hostap: Don't use create_proc_read_entry()
2013-04-29 15:41:56 -04:00
llc.h
llc: Remove stray reference to sysctl_llc_station_ack_timeout.
2012-09-17 13:13:24 -04:00
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc_conn.h
llc_if.h
llc_pdu.h
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc_sap.h
mac80211.h
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
2013-08-12 14:45:06 -04:00
mac802154.h
mac802154: add wpan device-class support
2012-06-26 21:06:11 -07:00
mip6.h
mld.h
mrp.h
net/802: Implement Multiple Registration Protocol (MRP)
2013-02-10 20:37:22 -05:00
ndisc.h
ndisc: Add missing inline to ndisc_addr_option_pad
2013-07-31 15:18:17 -07:00
neighbour.h
arp/neighbour.h: Remove extern from function prototypes
2013-07-31 17:50:02 -07:00
net_namespace.h
net: split rt_genid for ipv4 and ipv6
2013-07-31 14:56:36 -07:00
net_ratelimit.h
netdma.h
netevent.h
ipv6 netevent: Remove old_neigh from netevent_redirect.
2013-01-14 15:04:59 -05:00
netlabel.h
userns: Convert the audit loginuid to be a kuid
2012-09-17 18:08:54 -07:00
netlink.h
netlink: Rename pid to portid to avoid confusion
2012-09-10 15:30:41 -04:00
netprio_cgroup.h
cls_cgroup.h netprio_cgroup.h: Remove extern from function prototypes
2013-07-31 17:50:02 -07:00
netrom.h
hlist: drop the node parameter from iterators
2013-02-27 19:10:24 -08:00
nexthop.h
nl802154.h
p8022.h
ping.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-06-05 16:37:30 -07:00
pkt_cls.h
net: Remove extern from include/net/ scheduling prototypes
2013-07-31 17:24:22 -07:00
pkt_sched.h
net: Remove extern from include/net/ scheduling prototypes
2013-07-31 17:24:22 -07:00
protocol.h
net: Remove code duplication between offload structures
2012-11-15 17:39:51 -05:00
psnap.h
raw.h
rawv6.h
red.h
regulatory.h
regulatory: use RCU to protect last_request
2013-01-03 13:01:30 +01:00
request_sock.h
net: remove a stale comment for dl_next
2013-04-22 15:55:48 -04:00
rose.h
route.h
ipv4: avoid a test in ip_rt_put()
2012-11-03 14:59:04 -04:00
rtnetlink.h
rtnetlink: Remove passing of attributes into rtnl_doit functions
2013-03-22 10:31:16 -04:00
sch_generic.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-08-16 15:37:26 -07:00
scm.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-04-22 20:32:51 -04:00
secure_seq.h
net: defer net_secret[] initialization
2013-04-29 15:14:02 -04:00
slhc_vj.h
snmp.h
net: avoid reloads in SNMP_UPD_PO_STATS
2012-08-06 13:40:47 -07:00
sock.h
tcp: TSO packets automatic sizing
2013-08-29 15:50:06 -04:00
stp.h
tcp.h
tcp: TSO packets automatic sizing
2013-08-29 15:50:06 -04:00
tcp_memcontrol.h
tcp_states.h
timewait_sock.h
[PATCH] tcp: Cache inetpeer in timewait socket, and only when necessary.
2012-06-09 14:56:12 -07:00
transp_v6.h
transp_v6.h: style neatening
2013-06-04 16:43:42 -07:00
udp.h
pktgen: Add UDPCSUM flag to support UDP checksums
2013-07-27 22:16:36 -07:00
udplite.h
vsock_addr.h
VSOCK: Move af_vsock.h and vsock_addr.h to include/net
2013-07-27 22:14:06 -07:00
vxlan.h
vxlan: Factor out vxlan send api.
2013-08-20 00:15:43 -07:00
wext.h
wimax.h
wpan-phy.h
x25.h
x25device.h
xfrm.h
xfrm: constify mark argument of xfrm_find_acq()
2013-08-05 11:13:53 +02:00