QUIC servers would like to use SO_TXTIME, without having CAP_NET_ADMIN, to efficiently pace UDP packets. As far as sch_fq is concerned, we need to add safety checks, so that a buggy application does not fill the qdisc with packets having delivery time far in the future. This patch adds a configurable horizon (default: 10 seconds), and a configurable policy when a packet is beyond the horizon at enqueue() time: - either drop the packet (default policy) - or cap its delivery time to the horizon. $ tc -s -d qd sh dev eth0 qdisc fq 8022: root refcnt 257 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 10Kb initial_quantum 51160b low_rate_threshold 550Kbit refill_delay 40.0ms timer_slack 10.000us horizon 10.000s Sent 1234215879 bytes 837099 pkt (dropped 21, overlimits 0 requeues 6) backlog 0b 0p requeues 6 flows 1191 (inactive 1177 throttled 0) gc 0 highprio 0 throttled 692 latency 11.480us pkts_too_long 0 alloc_errors 0 horizon_drops 21 horizon_caps 0 v2: fixed an overflow on 32bit kernels in fq_init(), reported by kbuild test robot <lkp@intel.com>
Showing the changes to include/uapi/linux (1 of 2 files). Show all
Unified · Split
| @@ -913,6 +913,10 @@ enum { · 912 unmodified lines | |||
| 913 | 913 | ||
| 914 | TCA_FQ_TIMER_SLACK, /* timer slack */ | 914 | TCA_FQ_TIMER_SLACK, /* timer slack */ |
| 915 | 915 | ||
| 916 | TCA_FQ_HORIZON, /* time horizon in us */ | ||
| 917 | |||
| 918 | TCA_FQ_HORIZON_DROP, /* drop packets beyond horizon, or cap their EDT */ | ||
| 919 | |||
| 916 | __TCA_FQ_MAX | 920 | __TCA_FQ_MAX |
| 917 | }; | 921 | }; |
| 918 | 922 | ||
| @@ -932,6 +936,8 @@ struct tc_fq_qd_stats { · 13 unmodified lines | |||
| 932 | __u32 throttled_flows; | 936 | __u32 throttled_flows; |
| 933 | __u32 unthrottle_latency_ns; | 937 | __u32 unthrottle_latency_ns; |
| 934 | __u64 ce_mark; /* packets above ce_threshold */ | 938 | __u64 ce_mark; /* packets above ce_threshold */ |
| 939 | __u64 horizon_drops; | ||
| 940 | __u64 horizon_caps; | ||
| 935 | }; | 941 | }; |
| 936 | 942 | ||
| 937 | /* Heavy-Hitter Filter */ | 943 | /* Heavy-Hitter Filter */ |