Eric Dumazet
80ba92fa1a
codel: add ce_threshold attribute
...
For DCTCP or similar ECN based deployments on fabrics with shallow
buffers, hosts are responsible for a good part of the buffering.
This patch adds an optional ce_threshold to codel & fq_codel qdiscs,
so that DCTCP can have feedback from queuing in the host.
A DCTCP enabled egress port simply have a queue occupancy threshold
above which ECT packets get CE mark.
In codel language this translates to a sojourn time, so that one doesn't
have to worry about bytes or bandwidth but delays.
This makes the host an active participant in the health of the whole
network.
This also helps experimenting DCTCP in a setup without DCTCP compliant
fabric.
On following example, ce_threshold is set to 1ms, and we can see from
'ldelay xxx us' that TCP is not trying to go around the 5ms codel
target.
Queue has more capacity to absorb inelastic bursts (say from UDP
traffic), as queues are maintained to an optimal level.
lpaa23:~# ./tc -s -d qd sh dev eth1
qdisc mq 1: dev eth1 root
Sent 87910654696 bytes 58065331 pkt (dropped 0, overlimits 0 requeues 42961)
backlog 3108242b 364p requeues 42961
qdisc codel 8063: dev eth1 parent 1:1 limit 1000p target 5.0ms ce_threshold 1.0ms interval 100.0ms
Sent 7363778701 bytes 4863809 pkt (dropped 0, overlimits 0 requeues 5503)
rate 2348Mbit 193919pps backlog 255866b 46p requeues 5503
count 0 lastcount 0 ldelay 1.0ms drop_next 0us
maxpacket 68130 ecn_mark 0 drop_overlimit 0 ce_mark 72384
qdisc codel 8064: dev eth1 parent 1:2 limit 1000p target 5.0ms ce_threshold 1.0ms interval 100.0ms
Sent 7636486190 bytes 5043942 pkt (dropped 0, overlimits 0 requeues 5186)
rate 2319Mbit 191538pps backlog 207418b 64p requeues 5186
count 0 lastcount 0 ldelay 694us drop_next 0us
maxpacket 68130 ecn_mark 0 drop_overlimit 0 ce_mark 69873
qdisc codel 8065: dev eth1 parent 1:3 limit 1000p target 5.0ms ce_threshold 1.0ms interval 100.0ms
Sent 11569360142 bytes 7641602 pkt (dropped 0, overlimits 0 requeues 5554)
rate 3041Mbit 251096pps backlog 210446b 59p requeues 5554
count 0 lastcount 0 ldelay 889us drop_next 0us
maxpacket 68130 ecn_mark 0 drop_overlimit 0 ce_mark 37780
...
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Florian Westphal <fw@strlen.de>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Glenn Judd <glenn.judd@morganstanley.com>
Cc: Nandita Dukkipati <nanditad@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-05-10 19:50:20 -04:00
..
9p
9p: switch p9_client_read() to passing struct iov_iter *
2015-04-11 22:28:27 -04:00
bluetooth
Bluetooth: Read LE remote features during connection establishment
2015-04-09 08:36:54 +03:00
caif
caif: fix a signedness bug in cfpkt_iterate()
2015-02-20 17:35:14 -05:00
irda
irda: Convert function pointer arrays and uses to const
2014-12-10 15:33:16 -05:00
iucv
af_iucv: fix recvmsg by replacing skb_pull() function
2013-04-08 17:16:57 -04:00
netfilter
netfilter: nf_tables: mark stateful expressions
2015-04-13 20:12:31 +02:00
netns
ipv6: Flow label state ranges
2015-05-03 21:58:01 -04:00
nfc
nfc: nci: Add comment to explain NCI_HCI_MAX_PIPES
2015-04-06 00:19:05 +02:00
phonet
net: remove my future former mail address
2012-06-17 16:29:38 -07:00
sctp
sctp: avoid to repeatedly declare external variables
2015-03-25 11:40:16 -04:00
tc_act
act_bpf: add initial eBPF support for actions
2015-03-20 19:10:44 -04:00
6lowpan.h
ieee802154: 6lowpan: rename process_data and lowpan_process_data
2014-10-27 15:51:16 +01:00
act_api.h
net_sched: act: refuse to remove bound action outside
2014-02-12 19:23:32 -05:00
addrconf.h
net: Export IGMP/MLD message validation code
2015-05-04 14:49:23 -04:00
af_ieee802154.h
ieee802154: mac802154: remove FSF address
2014-10-25 08:07:30 +02:00
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
net: Remove iocb argument from sendmsg and recvmsg
2015-03-02 13:06:31 -05:00
ah.h
ipsec: Remove obsolete MAX_AH_AUTH_LEN
2014-09-18 10:54:36 +02:00
arp.h
neigh: Factor out ___neigh_lookup_noref
2015-03-04 00:23:23 -05:00
atmclip.h
ax25.h
ax25: Stop using magic neighbour cache operations.
2015-03-03 14:44:41 -05:00
ax88796.h
bond_3ad.h
bonding: Implement port churn-machine (AD standard 43.4.17).
2015-02-24 16:05:48 -05:00
bond_alb.h
net: Move bonding headers under include/net
2014-11-10 13:27:49 -05:00
bond_options.h
net: Move bonding headers under include/net
2014-11-10 13:27:49 -05:00
bonding.h
net/bonding: Make DRV macros private
2015-04-26 22:59:53 -04:00
busy_poll.h
sched, net: Fixup busy_loop_us_clock()
2014-01-13 17:39:11 +01:00
cfg80211-wext.h
cfg80211.h
cfg80211: change GO_CONCURRENT to IR_CONCURRENT for STA
2015-05-06 15:50:02 +02:00
cfg802154.h
nl802154: introduce support for cca settings
2014-12-19 00:19:23 +01:00
checksum.h
net: Fix remcsum in GRO path to not change packet
2015-02-11 15:12:09 -08:00
cipso_ipv4.h
cipso: don't use IPCB() to locate the CIPSO IP option
2015-02-11 14:46:37 -05:00
cls_cgroup.h
cgroup: clean up cgroup_subsys names and initialization
2014-02-08 10:36:58 -05:00
codel.h
codel: add ce_threshold attribute
2015-05-10 19:50:20 -04:00
compat.h
net: switch importing msghdr from userland to {compat_,}import_iovec()
2015-04-09 00:02:26 -04:00
datalink.h
net: Move prototype declaration to header file include/net/datalink.h from net/ipx/af_ipx.c
2014-02-09 17:32:50 -08:00
dcbevent.h
include/net/: Fix FSF address in file headers
2013-12-06 12:37:56 -05:00
dcbnl.h
net/dcb: Add IEEE QCN attribute
2015-03-06 21:50:02 -05:00
dn.h
net: Move prototype declaration to header file include/net/dn.h from net/decnet/af_decnet.c
2014-02-09 17:32:49 -08:00
dn_dev.h
dn_dev: add support for IFA_FLAGS nl attribute
2013-12-10 21:50:00 -05:00
dn_fib.h
decnet (dn*.h): Remove extern from function prototypes
2013-09-20 14:49:32 -04:00
dn_neigh.h
netfilter: Pass socket pointer down through okfn().
2015-04-07 15:25:55 -04:00
dn_nsp.h
decnet (dn*.h): Remove extern from function prototypes
2013-09-20 14:49:32 -04:00
dn_route.h
net: Move prototype declaration to appropriate header file from decnet/af_decnet.c
2014-02-09 17:32:49 -08:00
dsa.h
net: dsa: Add basic framework to support ndo_fdb functions
2015-03-29 13:23:54 -07:00
dsfield.h
ipv6: Optimize ipv6_change_dsfield().
2013-01-09 23:59:53 -08:00
dst.h
ipv6: Remove DST_METRICS_FORCE_OVERWRITE and _rt6i_peer
2015-05-01 20:57:06 -04:00
dst_ops.h
net: Remove protocol from struct dst_ops
2015-03-09 16:06:10 -04:00
esp.h
net: move pskb_put() to core code
2013-11-07 19:28:58 -05:00
ethoc.h
net: ethoc: set up MII management bus clock
2014-02-04 20:19:51 -08:00
fib_rules.h
net: Kill hold_net release_net
2015-03-12 14:39:40 -04: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, fib: pass LOOPBACK_IFINDEX instead of 0 to flowi4_iif
2014-04-16 15:05:11 -04:00
flow_keys.h
net: Add flow_keys digest
2015-05-04 00:09:09 -04:00
flowcache.h
flowcache: Make flow cache name space aware
2014-02-12 07:02:11 +01:00
fou.h
ip_tunnel: Ops registration for secondary encap (fou, gue)
2014-11-12 15:01:35 -05:00
garp.h
garp.h: Remove extern from function prototypes
2013-09-20 14:49:33 -04:00
gen_stats.h
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
genetlink.h
net: Introduce possible_net_t
2015-03-12 14:39:40 -04:00
geneve.h
openvswitch: Add support for checksums on UDP tunnels.
2015-01-28 23:04:15 -08:00
gre.h
gre: Call gso_make_checksum
2014-06-04 22:46:38 -07:00
gro_cells.h
ip_tunnel: Create percpu gro_cell
2015-01-18 01:56:32 -05:00
gue.h
gue: Protocol constants for remote checksum offload
2014-11-05 16:30:03 -05:00
icmp.h
icmp.h: Remove extern from function prototypes
2013-09-20 14:49:33 -04:00
ieee80211_radiotap.h
mac80211: propagate STBC / LDPC flags to radiotap
2014-02-06 09:34:58 +01:00
ieee802154_netdev.h
ieee802154: rework cca setting
2014-12-19 00:19:23 +01:00
if_inet6.h
ipv6: do retries on stable privacy addresses
2015-03-23 22:12:09 -04:00
inet6_connection_sock.h
inet: get rid of central tcp/dccp listener timer
2015-03-20 12:40:25 -04:00
inet6_hashtables.h
ipv6: get rid of __inet6_hash()
2015-03-18 22:00:35 -04:00
inet_common.h
net: Remove iocb argument from sendmsg and recvmsg
2015-03-02 13:06:31 -05:00
inet_connection_sock.h
inet: fix possible panic in reqsk_queue_unlink()
2015-04-24 11:39:15 -04:00
inet_ecn.h
tunnel: fix RFC number in comment for INET_ECN_decapsulate()
2014-05-07 15:30:52 -04:00
inet_frag.h
percpu_counter: add @gfp to percpu_counter_init()
2014-09-08 09:51:29 +09:00
inet_hashtables.h
inet: get rid of last __inet_hash_connect() argument
2015-03-18 22:00:35 -04:00
inet_sock.h
inet: fix request sock refcounting
2015-03-17 22:02:29 -04:00
inet_timewait_sock.h
tcp/dccp: get rid of central timewait timer
2015-04-13 16:40:05 -04:00
inetpeer.h
tcp: simplify inetpeer_addr_base use
2015-03-31 13:58:35 -04:00
ip.h
netfilter: Pass socket pointer down through okfn().
2015-04-07 15:25:55 -04:00
ip6_checksum.h
net: add gro_compute_pseudo functions
2014-08-24 18:09:23 -07:00
ip6_fib.h
ipv6: Remove DST_METRICS_FORCE_OVERWRITE and _rt6i_peer
2015-05-01 20:57:06 -04:00
ip6_route.h
netfilter: Pass socket pointer down through okfn().
2015-04-07 15:25:55 -04:00
ip6_tunnel.h
udp_tunnel: Pass UDP socket down through udp_tunnel{, 6}_xmit_skb().
2015-04-07 15:29:08 -04:00
ip_fib.h
ipv4: FIB Local/MAIN table collapse
2015-03-11 16:22:14 -04:00
ip_tunnels.h
ipip,gre,vti,sit: implement ndo_get_iflink
2015-04-02 14:05:00 -04:00
ip_vs.h
net: Introduce possible_net_t
2015-03-12 14:39:40 -04:00
ipcomp.h
ipconfig.h
ipv6.h
ipv6: Flow label state ranges
2015-05-03 21:58:01 -04:00
ipx.h
switch ipxrtr_route_packet() from iovec to msghdr
2014-11-24 04:28:49 -05:00
iw_handler.h
wext: add checked wrappers for adding events/points to streams
2015-02-28 21:31:12 +01:00
lapb.h
lapb.h: Remove extern from function prototypes
2013-09-21 14:01:38 -04:00
lib80211.h
lib80211: remove unused print_ssid()
2014-10-14 02:18:27 +02:00
llc.h
llc: make lock static
2014-01-03 20:56:48 -05:00
llc_c_ac.h
llc*.h: Remove extern from function prototypes
2013-09-21 14:01:38 -04:00
llc_c_ev.h
llc*.h: Remove extern from function prototypes
2013-09-21 14:01:38 -04:00
llc_c_st.h
llc: Make llc_conn_ev_qfyr_t function pointer arrays const
2014-12-10 15:21:24 -05:00
llc_conn.h
llc*.h: Remove extern from function prototypes
2013-09-21 14:01:38 -04:00
llc_if.h
llc*.h: Remove extern from function prototypes
2013-09-21 14:01:38 -04:00
llc_pdu.h
net: llc: fix order of evaluation in llc_conn_ac_inc_vr_by_1
2014-01-01 22:22:43 -05:00
llc_s_ac.h
llc*.h: Remove extern from function prototypes
2013-09-21 14:01:38 -04:00
llc_s_ev.h
llc*.h: Remove extern from function prototypes
2013-09-21 14:01:38 -04:00
llc_s_st.h
llc: Make llc_sap_action_t function pointer arrays const
2014-12-10 15:21:24 -05:00
llc_sap.h
llc*.h: Remove extern from function prototypes
2013-09-21 14:01:38 -04:00
mac80211.h
mac80211: extend get_key() to return PN for all ciphers
2015-05-06 13:30:00 +02:00
mac802154.h
mac802154: fix transmission power datatype
2015-04-09 19:56:15 +02:00
mip6.h
include/net/: Fix FSF address in file headers
2013-12-06 12:37:56 -05:00
mld.h
ipv6: mld: answer mldv2 queries with mldv1 reports in mldv1 fallback
2014-09-22 16:23:15 -04:00
mpls.h
openvswitch: Add basic MPLS support to kernel
2014-11-05 23:52:33 -08:00
mrp.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2013-10-01 17:06:14 -04:00
ndisc.h
neigh: Factor out ___neigh_lookup_noref
2015-03-04 00:23:23 -05:00
neighbour.h
net: neighbour: Add mcast_resolicit to configure the number of multicast resolicitations in PROBE state.
2015-03-20 21:47:40 -04:00
net_namespace.h
netlink: allow to listen "all" netns
2015-05-09 22:15:31 -04:00
net_ratelimit.h
netevent.h
netevent/netlink.h: Remove extern from function prototypes
2013-09-21 14:01:39 -04:00
netlabel.h
netlabel: fix the netlbl_catmap_setlong() dummy function
2014-08-07 20:55:21 -04:00
netlink.h
netlink: implement nla_get_in_addr and nla_get_in6_addr
2015-03-31 13:58:35 -04:00
netprio_cgroup.h
cgroup: clean up cgroup_subsys names and initialization
2014-02-08 10:36:58 -05:00
netrom.h
netrom.h: Remove extern from function prototypes
2013-09-21 14:01:39 -04:00
nexthop.h
nl802154.h
nl802154: introduce support for cca settings
2014-12-19 00:19:23 +01:00
p8022.h
p8022.h: Remove extern from function prototypes
2013-09-21 14:01:39 -04:00
ping.h
net: Remove iocb argument from sendmsg and recvmsg
2015-03-02 13:06:31 -05:00
pkt_cls.h
net: sched: remove tcf_proto from ematch calls
2014-10-06 18:02:32 -04:00
pkt_sched.h
net: rename vlan_tx_* helpers since "tx" is misleading there
2015-01-13 17:51:08 -05:00
protocol.h
net: Eliminate no_check from protosw
2014-05-23 16:28:53 -04:00
psnap.h
psnap.h: Remove extern from function prototypes
2013-09-23 01:51:08 -04:00
raw.h
raw/rawv6.h: Remove extern from function prototypes
2013-09-23 01:51:08 -04:00
rawv6.h
raw/rawv6.h: Remove extern from function prototypes
2013-09-23 01:51:08 -04:00
red.h
reciprocal_divide: update/correction of the algorithm
2014-01-21 23:17:20 -08:00
regulatory.h
cfg80211: allow wiphy specific regdomain management
2014-12-17 11:49:55 +01:00
request_sock.h
tcp: provide SYN headers for passive connections
2015-05-05 16:02:34 -04:00
rose.h
rose.h: Remove extern from function prototypes
2013-09-23 01:51:08 -04:00
route.h
ipv4: per cpu uncached list
2015-01-15 18:26:16 -05:00
rtnetlink.h
rtnetlink: Mark name argument of rtnl_create_link() const
2015-04-10 12:42:40 -07:00
sch_generic.h
net: sched: remove TC_MUNGED bits
2015-05-02 22:25:17 -04:00
scm.h
scm.h: Remove extern from function prototypes
2013-09-23 01:51:09 -04:00
secure_seq.h
inetpeer: get rid of ip_id_count
2014-06-02 11:00:41 -07:00
slhc_vj.h
snmp.h
Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-15 07:48:18 +02:00
sock.h
Merge branch 'iocb' into for-davem
2015-04-09 00:01:38 -04:00
Space.h
drivers: net: Include new header file in sbni.c
2013-12-19 18:51:20 -05:00
stp.h
stp.h: Remove extern from function prototypes
2013-09-23 01:51:09 -04:00
switchdev.h
switchdev: kernel-doc cleanup on swithdev ops
2015-03-20 21:36:53 -04:00
tcp.h
tcp: add TCPWinProbe and TCPKeepAlive SNMP counters
2015-05-09 16:42:32 -04:00
tcp_memcontrol.h
tcp_memcontrol: Kill struct tcp_memcontrol
2013-10-21 18:43:02 -04:00
tcp_states.h
inet: add TCP_NEW_SYN_RECV state
2015-03-12 22:58:12 -04:00
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
ipv6: make IPV6_RECVPKTINFO work for ipv4 datagrams
2014-01-19 19:53:18 -08:00
tso.h
net: Add a software TSO helper API
2014-05-22 14:57:15 -04:00
udp.h
net: Remove iocb argument from sendmsg and recvmsg
2015-03-02 13:06:31 -05:00
udp_tunnel.h
udp_tunnel: Pass UDP socket down through udp_tunnel{, 6}_xmit_skb().
2015-04-07 15:29:08 -04:00
udplite.h
net: switch memcpy_fromiovec()/memcpy_fromiovecend() users to copy_from_iter()
2015-02-04 01:34:15 -05:00
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
udp_tunnel: Pass UDP socket down through udp_tunnel{, 6}_xmit_skb().
2015-04-07 15:29:08 -04:00
wext.h
wext.h: Remove extern from function prototypes
2013-09-23 16:29:40 -04:00
wimax.h
net: treewide: Fix typo found in DocBook/networking.xml
2014-09-05 17:35:28 -07:00
x25.h
x25.h: Remove extern from function prototypes
2013-09-23 16:29:41 -04:00
x25device.h
xfrm.h
netfilter: Pass socket pointer down through okfn().
2015-04-07 15:25:55 -04:00