OpenCloudOS-Kernel/net/ipv4
Yuchung Cheng 0f1c28ae74 tcp: usec resolution SYN/ACK RTT
Currently SYN/ACK RTT is measured in jiffies. For LAN the SYN/ACK
RTT is often measured as 0ms or sometimes 1ms, which would affect
RTT estimation and min RTT samping used by some congestion control.

This patch improves SYN/ACK RTT to be usec resolution if platform
supports it. While the timestamping of SYN/ACK is done in request
sock, the RTT measurement is carefully arranged to avoid storing
another u64 timestamp in tcp_sock.

For regular handshake w/o SYNACK retransmission, the RTT is sampled
right after the child socket is created and right before the request
sock is released (tcp_check_req() in tcp_minisocks.c)

For Fast Open the child socket is already created when SYN/ACK was
sent, the RTT is sampled in tcp_rcv_state_process() after processing
the final ACK an right before the request socket is released.

If the SYN/ACK was retransmistted or SYN-cookie was used, we rely
on TCP timestamps to measure the RTT. The sample is taken at the
same place in tcp_rcv_state_process() after the timestamp values
are validated in tcp_validate_incoming(). Note that we do not store
TS echo value in request_sock for SYN-cookies, because the value
is already stored in tp->rx_opt used by tcp_ack_update_rtt().

One side benefit is that the RTT measurement now happens before
initializing congestion control (of the passive side). Therefore
the congestion control can use the SYN/ACK RTT.

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-09-21 16:19:01 -07:00
..
netfilter netfilter: Use nf_hook_state.net 2015-09-17 17:18:37 -07:00
Kconfig geneve: Consolidate Geneve functionality in single module. 2015-08-27 15:42:48 -07:00
Makefile geneve: Consolidate Geneve functionality in single module. 2015-08-27 15:42:48 -07:00
af_inet.c net: only check perm protocol when register proto 2015-09-17 21:02:59 -07:00
ah4.c ah4: Fix error return in ah_input(). 2015-08-25 13:38:50 -07:00
arp.c netfilter: Pass net into okfn 2015-09-17 17:18:37 -07:00
cipso_ipv4.c ipv4: coding style: comparison for inequality with NULL 2015-04-03 12:11:15 -04:00
datagram.c net: Set sk_txhash from a random number 2015-07-29 22:44:04 -07:00
devinet.c rtnetlink: RTEXT_FILTER_SKIP_STATS support to avoid dumping inet/inet6 stats 2015-09-15 15:25:02 -07:00
esp4.c esp4: Switch to new AEAD interface 2015-05-28 11:23:20 +08:00
fib_frontend.c net: Make table id type u32 2015-09-01 14:32:44 -07:00
fib_lookup.h ipv4: consider TOS in fib_select_default 2015-07-24 22:46:11 -07:00
fib_rules.c net: ipv6: use common fib_default_rule_pref 2015-09-09 14:19:50 -07:00
fib_semantics.c net: Make table id type u32 2015-09-01 14:32:44 -07:00
fib_trie.c net: FIB tracepoints 2015-08-29 13:05:16 -07:00
fou.c fou: reject IPv6 config 2015-08-29 13:07:54 -07:00
gre_demux.c gre: Remove support for sharing GRE protocol hook. 2015-08-10 14:03:54 -07:00
gre_offload.c ipv4: coding style: comparison for inequality with NULL 2015-04-03 12:11:15 -04:00
icmp.c net: Add support for VRFs to inetpeer cache 2015-08-28 13:32:36 -07:00
igmp.c IGMP: Inhibit reports for local multicast groups 2015-08-28 13:28:47 -07:00
inet_connection_sock.c inet: fix potential deadlock in reqsk_queue_unlink() 2015-08-13 22:46:22 -07:00
inet_diag.c net: inet_diag: always export IPV6_V6ONLY sockopt for listening sockets 2015-07-10 23:25:24 -07:00
inet_fragment.c inet: frags: remove INET_FRAG_EVICTED and use list_evictor for the test 2015-07-26 21:00:15 -07:00
inet_hashtables.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-07-23 00:41:16 -07:00
inet_lro.c lro: remove dead code 2013-12-29 16:34:25 -05:00
inet_timewait_sock.c inet: inet_twsk_deschedule factorization 2015-07-09 15:12:20 -07:00
inetpeer.c net: Add helper function to compare inetpeer addresses 2015-08-28 13:32:36 -07:00
ip_forward.c netfilter: Pass net into okfn 2015-09-17 17:18:37 -07:00
ip_fragment.c net: Add support for VRFs to inetpeer cache 2015-08-28 13:32:36 -07:00
ip_gre.c ip_tunnels: record IP version in tunnel info 2015-08-29 13:07:54 -07:00
ip_input.c netfilter: Pass net into okfn 2015-09-17 17:18:37 -07:00
ip_options.c ipv4: coding style: comparison for inequality with NULL 2015-04-03 12:11:15 -04:00
ip_output.c netfilter: Pass net into okfn 2015-09-17 17:18:37 -07:00
ip_sockglue.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-06-24 02:58:51 -07:00
ip_tunnel.c ip_gre: Add support to collect tunnel metadata. 2015-08-10 14:03:54 -07:00
ip_tunnel_core.c ip-tunnel: Use API to access tunnel metadata options. 2015-08-31 12:28:56 -07:00
ip_vti.c net: Merge dst_output and dst_output_sk 2015-09-17 17:18:32 -07:00
ipcomp.c ipv4: coding style: comparison for equality with NULL 2015-04-03 12:11:15 -04:00
ipconfig.c net: ipv4: increase dhcp inter device timeout 2015-08-12 16:40:22 -07:00
ipip.c ip_gre: Add support to collect tunnel metadata. 2015-08-10 14:03:54 -07:00
ipmr.c netfilter: Pass net into okfn 2015-09-17 17:18:37 -07:00
netfilter.c netfilter: don't use module_init/exit in core IPV4 code 2015-06-16 14:12:34 -04:00
ping.c ipv6: Nonlocal bind 2015-07-09 21:09:10 -07:00
proc.c net: track success and failure of TCP PMTU probing 2015-07-21 22:36:33 -07:00
protocol.c net: Export inet_offloads and inet6_offloads 2014-09-19 17:15:31 -04:00
raw.c netfilter: Pass net into okfn 2015-09-17 17:18:37 -07:00
route.c net: Initialize table in fib result 2015-09-17 21:34:08 -07:00
syncookies.c tcp: usec resolution SYN/ACK RTT 2015-09-21 16:19:01 -07:00
sysctl_net_ipv4.c IGMP: Inhibit reports for local multicast groups 2015-08-28 13:28:47 -07:00
tcp.c tcp: fix slow start after idle vs TSO/GSO 2015-08-25 11:22:50 -07:00
tcp_bic.c tcp: add tcp_in_slow_start helper 2015-07-09 14:22:52 -07:00
tcp_cdg.c tcp: do not slow start when cwnd equals ssthresh 2015-07-09 14:22:52 -07:00
tcp_cong.c tcp: use dctcp if enabled on the route to the initiator 2015-08-31 12:34:00 -07:00
tcp_cubic.c tcp_cubic: better follow cubic curve after idle period 2015-09-10 10:58:33 -07:00
tcp_dctcp.c net: tcp: dctcp_update_alpha() fixes. 2015-06-10 23:28:33 -07:00
tcp_diag.c sock_diag: implement a get_info handler for inet 2015-06-15 19:49:22 -07:00
tcp_fastopen.c tcp: Do not call tcp_fastopen_reset_cipher from interrupt context 2015-06-23 02:38:10 -07:00
tcp_highspeed.c tcp: add tcp_in_slow_start helper 2015-07-09 14:22:52 -07:00
tcp_htcp.c tcp: add tcp_in_slow_start helper 2015-07-09 14:22:52 -07:00
tcp_hybla.c tcp: do not slow start when cwnd equals ssthresh 2015-07-09 14:22:52 -07:00
tcp_illinois.c tcp: add tcp_in_slow_start helper 2015-07-09 14:22:52 -07:00
tcp_input.c tcp: usec resolution SYN/ACK RTT 2015-09-21 16:19:01 -07:00
tcp_ipv4.c tcp: provide skb->hash to synack packets 2015-09-17 21:01:04 -07:00
tcp_lp.c tcp: remove in_flight parameter from cong_avoid() methods 2014-05-03 19:23:07 -04:00
tcp_memcontrol.c memcg: cleanup static keys decrement 2015-02-12 18:54:10 -08:00
tcp_metrics.c net: Add helper function to compare inetpeer addresses 2015-08-28 13:32:36 -07:00
tcp_minisocks.c tcp: usec resolution SYN/ACK RTT 2015-09-21 16:19:01 -07:00
tcp_offload.c tcp: reserve tcp_skb_mss() to tcp stack 2015-06-11 16:33:10 -07:00
tcp_output.c tcp: provide skb->hash to synack packets 2015-09-17 21:01:04 -07:00
tcp_probe.c tcp: whitespace fixes 2014-09-01 18:12:45 -07:00
tcp_scalable.c tcp: add tcp_in_slow_start helper 2015-07-09 14:22:52 -07:00
tcp_timer.c tcp: do not export tcp_init_xmit_timers() 2015-07-09 21:44:38 -07:00
tcp_vegas.c tcp: add tcp_in_slow_start helper 2015-07-09 14:22:52 -07:00
tcp_vegas.h tcp: prepare CC get_info() access from getsockopt() 2015-04-29 17:10:38 -04:00
tcp_veno.c tcp: add tcp_in_slow_start helper 2015-07-09 14:22:52 -07:00
tcp_westwood.c tcp_westwood: fix tcp_westwood_info() 2015-05-05 19:50:09 -04:00
tcp_yeah.c tcp: stretch ACK fixes prep 2015-01-28 22:18:37 -08:00
tunnel4.c
udp.c udp: Handle VRF device in sendmsg 2015-08-13 22:43:20 -07:00
udp_diag.c sock_diag: specify info_size per inet protocol 2015-06-15 19:49:22 -07:00
udp_impl.h net: Remove iocb argument from sendmsg and recvmsg 2015-03-02 13:06:31 -05:00
udp_offload.c ipv4: coding style: comparison for inequality with NULL 2015-04-03 12:11:15 -04:00
udp_tunnel.c tunnel: introduce udp_tun_rx_dst() 2015-08-27 15:42:47 -07:00
udplite.c net: Eliminate no_check from protosw 2014-05-23 16:28:53 -04:00
xfrm4_input.c netfilter: Pass net into okfn 2015-09-17 17:18:37 -07:00
xfrm4_mode_beet.c ipv4: ERROR: code indent should use tabs where possible 2013-12-26 13:43:21 -05:00
xfrm4_mode_transport.c
xfrm4_mode_tunnel.c ipv4: hash net ptr into fragmentation bucket selection 2015-03-25 14:07:04 -04:00
xfrm4_output.c netfilter: Add blank lines in callers of netfilter hooks 2015-09-17 17:18:37 -07:00
xfrm4_policy.c net: Add FIB table id to rtable 2015-09-15 12:01:41 -07:00
xfrm4_protocol.c xfrm4: Remove duplicate semicolon 2014-06-30 07:49:47 +02:00
xfrm4_state.c inet: make no_pmtu_disc per namespace and kill ipv4_config 2013-12-18 16:58:20 -05:00
xfrm4_tunnel.c