iproute2/tc
Maxim Mikityanskiy b8b8b6d4c9 tc/htb: Hierarchical QoS hardware offload
This commit adds support for configuring HTB in offload mode. HTB
offload eliminates the single qdisc lock in the datapath and offloads
the algorithm to the NIC. The new 'offload' parameter is added to
enable this mode:

    # tc qdisc replace dev eth0 root handle 1: htb offload

Classes are created as usual, but filters should be moved to clsact for
lock-free classification (filters attached to HTB itself are not
supported in the offload mode):

    # tc filter add dev eth0 egress protocol ip flower dst_port 80
    action skbedit priority 1:10

tc qdisc show and tc class show will indicate whether the offload is
enabled. Example output:

$ tc qdisc show dev eth1
qdisc htb 1: root offloaded r2q 10 default 0 direct_packets_stat 0 direct_qlen 1000 offload
qdisc pfifo 0: parent 1: limit 1000p
qdisc pfifo 0: parent 1: limit 1000p
qdisc pfifo 0: parent 1: limit 1000p
qdisc pfifo 0: parent 1: limit 1000p
qdisc pfifo 0: parent 1: limit 1000p
qdisc pfifo 0: parent 1: limit 1000p
qdisc pfifo 0: parent 1: limit 1000p
qdisc pfifo 0: parent 1: limit 1000p
$ tc class show dev eth1
class htb 1:101 parent 1:1 prio 0 rate 4Gbit ceil 4Gbit burst 1000b cburst 1000b  offload
class htb 1:1 root rate 100Gbit ceil 100Gbit burst 0b cburst 0b  offload
class htb 1:103 parent 1:1 prio 0 rate 4Gbit ceil 4Gbit burst 1000b cburst 1000b  offload
class htb 1:102 parent 1:1 prio 0 rate 4Gbit ceil 4Gbit burst 1000b cburst 1000b  offload
class htb 1:105 parent 1:1 prio 0 rate 4Gbit ceil 4Gbit burst 1000b cburst 1000b  offload
class htb 1:104 parent 1:1 prio 0 rate 4Gbit ceil 4Gbit burst 1000b cburst 1000b  offload
class htb 1:107 parent 1:1 prio 0 rate 4Gbit ceil 4Gbit burst 1000b cburst 1000b  offload
class htb 1:106 parent 1:1 prio 0 rate 4Gbit ceil 4Gbit burst 1000b cburst 1000b  offload
class htb 1:108 parent 1:1 prio 0 rate 4Gbit ceil 4Gbit burst 1000b cburst 1000b  offload
$ tc -j qdisc show dev eth1
[{"kind":"htb","handle":"1:","root":true,"offloaded":true,"options":{"r2q":10,"default":"0","direct_packets_stat":0,"direct_qlen":1000,"offload":null}},{"kind":"pfifo","handle":"0:","parent":"1:","options":{"limit":1000}},{"kind":"pfifo","handle":"0:","parent":"1:","options":{"limit":1000}},{"kind":"pfifo","handle":"0:","parent":"1:","options":{"limit":1000}},{"kind":"pfifo","handle":"0:","parent":"1:","options":{"limit":1000}},{"kind":"pfifo","handle":"0:","parent":"1:","options":{"limit":1000}},{"kind":"pfifo","handle":"0:","parent":"1:","options":{"limit":1000}},{"kind":"pfifo","handle":"0:","parent":"1:","options":{"limit":1000}},{"kind":"pfifo","handle":"0:","parent":"1:","options":{"limit":1000}}]

Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
2021-02-04 21:54:13 -07:00
..
.gitignore make yacc usage POSIX compatible 2020-01-20 09:43:22 -08:00
Makefile tc: Add helpers to support qevent handling 2020-07-05 15:37:27 +00:00
e_bpf.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
em_canid.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
em_cmp.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
em_ipset.c Include bsd/string.h only in include/utils.h 2018-11-05 08:38:32 -08:00
em_ipt.c tc: fix spelling errors 2019-08-12 18:18:51 -07:00
em_meta.c tc/meta: make meta_table static and const 2018-11-19 11:42:44 -08:00
em_nbyte.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
em_u32.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
emp_ematch.l make yacc usage POSIX compatible 2020-01-20 09:43:22 -08:00
emp_ematch.y make yacc usage POSIX compatible 2020-01-20 09:43:22 -08:00
f_basic.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_bpf.c tc: full JSON support for 'bpf' filter 2020-05-05 16:19:06 +00:00
f_cgroup.c tc actions: Improved batching and time filtered dumping 2017-08-04 13:16:51 -07:00
f_flow.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_flower.c tc: flower: add tc conntrack inv ct_state support 2021-01-23 18:16:35 +00:00
f_fw.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_matchall.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_route.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_rsvp.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_tcindex.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
f_u32.c f_u32: fix compiler gcc-10 compiler warning 2020-11-29 16:20:33 -08:00
m_action.c tc: implement support for action terse dump 2020-12-03 03:51:06 +00:00
m_bpf.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_connmark.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_csum.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_ct.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_ctinfo.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_ematch.c tc/ematch: make local functions static 2018-11-19 11:42:44 -08:00
m_ematch.h tc/ematch: make local functions static 2018-11-19 11:42:44 -08:00
m_estimator.c tc/m_estimator: Print proper value for estimator interval in raw. 2020-07-20 13:25:56 -07:00
m_gact.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_gate.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
m_ife.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_ipt.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_mirred.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_mpls.c Merge branch 'main' into next 2020-11-24 22:04:48 -07:00
m_nat.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_pedit.c Merge branch 'main' into next 2020-12-16 04:06:06 +00:00
m_pedit.h tc/pedit: make functions static 2018-11-19 11:42:44 -08:00
m_police.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
m_sample.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_simple.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_skbedit.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_skbmod.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_tunnel_key.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_vlan.c Merge branch 'main' into next 2020-11-24 22:04:48 -07:00
m_xt.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
m_xt_old.c tc: skip actions that don't have options attribute when printing 2020-10-31 09:14:01 -06:00
p_eth.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
p_icmp.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
p_ip.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
p_ip6.c tc: fix compiler warnings in ip6 pedit 2020-11-29 16:20:23 -08:00
p_tcp.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
p_udp.c tc/pedit: use structure initialization 2018-11-19 11:42:44 -08:00
q_atm.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
q_cake.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_cbq.c lib: Move print_rate() from tc here; modernize 2020-12-09 02:30:15 +00:00
q_cbs.c tc: cbs: add support for JSON output 2019-12-29 09:57:27 -08:00
q_choke.c tc: choke: add support for JSON output 2019-12-29 09:57:27 -08:00
q_clsact.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
q_codel.c tc: codel: add support for JSON output 2019-12-29 09:57:27 -08:00
q_drr.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_dsmark.c treewide: Use addattr_nest()/addattr_nest_end() to handle nested attributes 2018-02-02 15:01:09 -08:00
q_etf.c etf: Add skip_sock_check 2019-07-18 15:44:21 -07:00
q_ets.c tc: Add support for ETS Qdisc 2020-01-18 21:54:12 +00:00
q_fifo.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_fq.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_fq_codel.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_fq_pie.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_gred.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_hfsc.c lib: Move print_rate() from tc here; modernize 2020-12-09 02:30:15 +00:00
q_hhf.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_htb.c tc/htb: Hierarchical QoS hardware offload 2021-02-04 21:54:13 -07:00
q_ingress.c ingress: Don't break JSON output 2018-04-25 11:08:39 -07:00
q_mqprio.c lib: Move print_rate() from tc here; modernize 2020-12-09 02:30:15 +00:00
q_multiq.c tc: B.W limits can now be specified in %. 2017-11-24 11:22:13 -08:00
q_netem.c lib: Move print_rate() from tc here; modernize 2020-12-09 02:30:15 +00:00
q_pie.c Revert "tc: pie: change maximum integer value of tc_pie_xstats->prob" 2020-03-10 18:29:26 +00:00
q_plug.c tc: add support for plug qdisc 2019-05-04 09:22:14 -07:00
q_prio.c tc: prio: fix space in JSON tag 2020-01-06 13:11:41 -08:00
q_qfq.c treewide: Use addattr_nest()/addattr_nest_end() to handle nested attributes 2018-02-02 15:01:09 -08:00
q_red.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_rr.c tc: B.W limits can now be specified in %. 2017-11-24 11:22:13 -08:00
q_sfb.c tc: sfb: add support for JSON output 2019-12-29 09:57:27 -08:00
q_sfq.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
q_skbprio.c tc: skbprio: add support for JSON output 2020-01-06 13:12:02 -08:00
q_taprio.c Replace open-coded instances of print_nl() 2020-05-04 17:13:53 -07:00
q_tbf.c lib: Move sprint_size() from tc here, add print_size() 2020-12-09 02:30:25 +00:00
static-syms.c SPDX license identifiers 2017-11-24 12:21:35 -08:00
tc.c iproute2: add check_libbpf() and get_libbpf_version() 2020-11-24 22:14:02 -07:00
tc_cbq.c tc: fix spelling errors 2019-08-12 18:18:51 -07:00
tc_cbq.h SPDX license identifiers 2017-11-24 12:21:35 -08:00
tc_class.c tc: parse attributes with NLA_F_NESTED flag 2020-01-22 03:45:48 +00:00
tc_common.h Move the use_iec declaration to the tools 2020-12-09 02:28:43 +00:00
tc_core.c iproute2-next: police: support 64bit rate and peakrate in tc utility 2019-09-15 10:39:19 -07:00
tc_core.h iproute2-next: police: support 64bit rate and peakrate in tc utility 2019-09-15 10:39:19 -07:00
tc_estimator.c tc: support conversions to or from 64 bit nanosecond-based time 2018-08-30 11:04:38 -07:00
tc_exec.c treewide: refactor help messages 2019-05-20 14:35:07 -07:00
tc_filter.c tc: implement support for terse dump 2020-10-31 09:15:15 -06:00
tc_monitor.c Tree wide: Drop sockaddr_nl arg 2018-10-22 09:43:48 -07:00
tc_qdisc.c tc: Look for blocks in qevents 2020-07-20 16:34:02 +00:00
tc_qevent.c tc: Add space after format specifier 2020-07-29 17:03:46 +00:00
tc_qevent.h tc: Look for blocks in qevents 2020-07-20 16:34:02 +00:00
tc_red.c tc: q_red: Support 'nodrop' flag 2020-03-25 16:45:37 +00:00
tc_red.h tc: move RED flag printing to helper 2018-11-24 07:10:58 -08:00
tc_stab.c drop unneeded include of syslog.h 2017-11-12 16:22:36 -08:00
tc_util.c lib: Move get_size() from tc here 2020-12-09 02:30:50 +00:00
tc_util.h lib: Move get_size() from tc here 2020-12-09 02:30:50 +00:00