Netdev Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH iproute2] tc: fq: add horizon attributes
@ 2021-06-04 16:00 Eric Dumazet
2021-06-07 2:55 ` David Ahern
0 siblings, 1 reply; 2+ messages in thread
From: Eric Dumazet @ 2021-06-04 16:00 UTC (permalink / raw)
To: David Ahern, Stephen Hemminger; +Cc: netdev, Eric Dumazet, Eric Dumazet
From: Eric Dumazet <edumazet@google.com>
Commit 39d010504e6b ("net_sched: sch_fq: add horizon attribute")
added kernel support for horizon attributes in linux-5.8
$ tc -s -d qd sh dev wlp2s0
qdisc fq 8006: root refcnt 2 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028b initial_quantum 15140b low_rate_threshold 550Kbit refill_delay 40ms timer_slack 10us horizon 10s horizon_drop
Sent 690924 bytes 3234 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
flows 112 (inactive 104 throttled 0)
gc 0 highprio 0 throttled 2 latency 8.25us
$ tc qd change dev wlp2s0 root fq horizon 500ms horizon_cap
$ tc -s -d qd sh dev wlp2s0
qdisc fq 8006: root refcnt 2 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028b initial_quantum 15140b low_rate_threshold 550Kbit refill_delay 40ms timer_slack 10us horizon 500ms horizon_cap
Sent 831220 bytes 3844 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
flows 122 (inactive 120 throttled 0)
gc 0 highprio 0 throttled 2 latency 8.25us
Signed-off-by: Eric Dumazet <edumazet@google.com>
---
tc/q_fq.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 60 insertions(+), 6 deletions(-)
diff --git a/tc/q_fq.c b/tc/q_fq.c
index cff21975b89789321af76579db119bcad8508a96..8dbfc41a1e05b46cda6ccaa3e36c43de805ba169 100644
--- a/tc/q_fq.c
+++ b/tc/q_fq.c
@@ -58,7 +58,9 @@ static void explain(void)
" [ low_rate_threshold RATE ]\n"
" [ orphan_mask MASK]\n"
" [ timer_slack TIME]\n"
- " [ ce_threshold TIME ]\n");
+ " [ ce_threshold TIME ]\n"
+ " [ horizon TIME ]\n"
+ " [ horizon_{cap|drop} ]\n");
}
static unsigned int ilog2(unsigned int val)
@@ -88,6 +90,8 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,
unsigned int orphan_mask;
unsigned int ce_threshold;
unsigned int timer_slack;
+ unsigned int horizon;
+ __u8 horizon_drop = 255;
bool set_plimit = false;
bool set_flow_plimit = false;
bool set_quantum = false;
@@ -99,6 +103,7 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,
bool set_low_rate_threshold = false;
bool set_ce_threshold = false;
bool set_timer_slack = false;
+ bool set_horizon = false;
int pacing = -1;
struct rtattr *tail;
@@ -163,6 +168,17 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,
return -1;
}
set_timer_slack = true;
+ } else if (strcmp(*argv, "horizon_drop") == 0) {
+ horizon_drop = 1;
+ } else if (strcmp(*argv, "horizon_cap") == 0) {
+ horizon_drop = 0;
+ } else if (strcmp(*argv, "horizon") == 0) {
+ NEXT_ARG();
+ if (get_time(&horizon, *argv)) {
+ fprintf(stderr, "Illegal \"horizon\"\n");
+ return -1;
+ }
+ set_horizon = true;
} else if (strcmp(*argv, "defrate") == 0) {
NEXT_ARG();
if (strchr(*argv, '%')) {
@@ -260,6 +276,12 @@ static int fq_parse_opt(struct qdisc_util *qu, int argc, char **argv,
if (set_timer_slack)
addattr_l(n, 1024, TCA_FQ_TIMER_SLACK,
&timer_slack, sizeof(timer_slack));
+ if (set_horizon)
+ addattr_l(n, 1024, TCA_FQ_HORIZON,
+ &horizon, sizeof(horizon));
+ if (horizon_drop != 255)
+ addattr_l(n, 1024, TCA_FQ_HORIZON_DROP,
+ &horizon_drop, sizeof(horizon_drop));
addattr_nest_end(n, tail);
return 0;
}
@@ -275,6 +297,8 @@ static int fq_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
unsigned int orphan_mask;
unsigned int ce_threshold;
unsigned int timer_slack;
+ unsigned int horizon;
+ __u8 horizon_drop;
SPRINT_BUF(b1);
@@ -374,6 +398,23 @@ static int fq_print_opt(struct qdisc_util *qu, FILE *f, struct rtattr *opt)
sprint_time64(timer_slack, b1));
}
+ if (tb[TCA_FQ_HORIZON] &&
+ RTA_PAYLOAD(tb[TCA_FQ_HORIZON]) >= sizeof(__u32)) {
+ horizon = rta_getattr_u32(tb[TCA_FQ_HORIZON]);
+ print_uint(PRINT_JSON, "horizon", NULL, horizon);
+ print_string(PRINT_FP, NULL, "horizon %s ",
+ sprint_time(horizon, b1));
+ }
+
+ if (tb[TCA_FQ_HORIZON_DROP] &&
+ RTA_PAYLOAD(tb[TCA_FQ_HORIZON_DROP]) >= sizeof(__u8)) {
+ horizon_drop = rta_getattr_u8(tb[TCA_FQ_HORIZON_DROP]);
+ if (!horizon_drop)
+ print_null(PRINT_ANY, "horizon_cap", "horizon_cap ", NULL);
+ else
+ print_null(PRINT_ANY, "horizon_drop", "horizon_drop ", NULL);
+ }
+
return 0;
}
@@ -430,12 +471,25 @@ static int fq_print_xstats(struct qdisc_util *qu, FILE *f,
print_lluint(PRINT_ANY, "flows_plimit", " flows_plimit %llu",
st->flows_plimit);
- if (st->pkts_too_long || st->allocation_errors) {
+ if (st->pkts_too_long || st->allocation_errors ||
+ st->horizon_drops || st->horizon_caps) {
print_nl();
- print_lluint(PRINT_ANY, "pkts_too_long",
- " pkts_too_long %llu", st->pkts_too_long);
- print_lluint(PRINT_ANY, "alloc_errors", " alloc_errors %llu",
- st->allocation_errors);
+ if (st->pkts_too_long)
+ print_lluint(PRINT_ANY, "pkts_too_long",
+ " pkts_too_long %llu",
+ st->pkts_too_long);
+ if (st->allocation_errors)
+ print_lluint(PRINT_ANY, "alloc_errors",
+ " alloc_errors %llu",
+ st->allocation_errors);
+ if (st->horizon_drops)
+ print_lluint(PRINT_ANY, "horizon_drops",
+ " horizon_drops %llu",
+ st->horizon_drops);
+ if (st->horizon_caps)
+ print_lluint(PRINT_ANY, "horizon_caps",
+ " horizon_caps %llu",
+ st->horizon_caps);
}
return 0;
--
2.32.0.rc1.229.g3e70b5a671-goog
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH iproute2] tc: fq: add horizon attributes
2021-06-04 16:00 [PATCH iproute2] tc: fq: add horizon attributes Eric Dumazet
@ 2021-06-07 2:55 ` David Ahern
0 siblings, 0 replies; 2+ messages in thread
From: David Ahern @ 2021-06-07 2:55 UTC (permalink / raw)
To: Eric Dumazet, Stephen Hemminger; +Cc: netdev, Eric Dumazet
On 6/4/21 10:00 AM, Eric Dumazet wrote:
> From: Eric Dumazet <edumazet@google.com>
>
> Commit 39d010504e6b ("net_sched: sch_fq: add horizon attribute")
> added kernel support for horizon attributes in linux-5.8
>
> $ tc -s -d qd sh dev wlp2s0
> qdisc fq 8006: root refcnt 2 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028b initial_quantum 15140b low_rate_threshold 550Kbit refill_delay 40ms timer_slack 10us horizon 10s horizon_drop
> Sent 690924 bytes 3234 pkt (dropped 0, overlimits 0 requeues 0)
> backlog 0b 0p requeues 0
> flows 112 (inactive 104 throttled 0)
> gc 0 highprio 0 throttled 2 latency 8.25us
>
> $ tc qd change dev wlp2s0 root fq horizon 500ms horizon_cap
>
> $ tc -s -d qd sh dev wlp2s0
> qdisc fq 8006: root refcnt 2 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028b initial_quantum 15140b low_rate_threshold 550Kbit refill_delay 40ms timer_slack 10us horizon 500ms horizon_cap
> Sent 831220 bytes 3844 pkt (dropped 0, overlimits 0 requeues 0)
> backlog 0b 0p requeues 0
> flows 122 (inactive 120 throttled 0)
> gc 0 highprio 0 throttled 2 latency 8.25us
>
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> ---
> tc/q_fq.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 60 insertions(+), 6 deletions(-)
>
applied to iproute2-next. Thanks,
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-06-07 2:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-04 16:00 [PATCH iproute2] tc: fq: add horizon attributes Eric Dumazet
2021-06-07 2:55 ` David Ahern
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).