aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/linux
diff options
context:
space:
mode:
authorTerry Lam <vtlam@google.com>2013-12-15 03:30:21 -0500
committerDavid S. Miller <davem@davemloft.net>2013-12-19 14:48:42 -0500
commit10239edf86f137ce4c39b62ea9575e8053c549a0 (patch)
treef7f81307559556f9d435c1d2a91ea9e497a13a80 /include/uapi/linux
parent2a2529ef2bb477dbf11311710c6de46298192316 (diff)
net-qdisc-hhf: Heavy-Hitter Filter (HHF) qdisc
This patch implements the first size-based qdisc that attempts to differentiate between small flows and heavy-hitters. The goal is to catch the heavy-hitters and move them to a separate queue with less priority so that bulk traffic does not affect the latency of critical traffic. Currently "less priority" means less weight (2:1 in particular) in a Weighted Deficit Round Robin (WDRR) scheduler. In essence, this patch addresses the "delay-bloat" problem due to bloated buffers. In some systems, large queues may be necessary for obtaining CPU efficiency, or due to the presence of unresponsive traffic like UDP, or just a large number of connections with each having a small amount of outstanding traffic. In these circumstances, HHF aims to reduce the HoL blocking for latency sensitive traffic, while not impacting the queues built up by bulk traffic. HHF can also be used in conjunction with other AQM mechanisms such as CoDel. To capture heavy-hitters, we implement the "multi-stage filter" design in the following paper: C. Estan and G. Varghese, "New Directions in Traffic Measurement and Accounting", in ACM SIGCOMM, 2002. Some configurable qdisc settings through 'tc': - hhf_reset_timeout: period to reset counter values in the multi-stage filter (default 40ms) - hhf_admit_bytes: threshold to classify heavy-hitters (default 128KB) - hhf_evict_timeout: threshold to evict idle heavy-hitters (default 1s) - hhf_non_hh_weight: Weighted Deficit Round Robin (WDRR) weight for non-heavy-hitters (default 2) - hh_flows_limit: max number of heavy-hitter flow entries (default 2048) Note that the ratio between hhf_admit_bytes and hhf_reset_timeout reflects the bandwidth of heavy-hitters that we attempt to capture (25Mbps with the above default settings). The false negative rate (heavy-hitter flows getting away unclassified) is zero by the design of the multi-stage filter algorithm. With 100 heavy-hitter flows, using four hashes and 4000 counters yields a false positive rate (non-heavy-hitters mistakenly classified as heavy-hitters) of less than 1e-4. Signed-off-by: Terry Lam <vtlam@google.com> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/uapi/linux')
-rw-r--r--include/uapi/linux/pkt_sched.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h
index a806687ad98f..4566993b8385 100644
--- a/include/uapi/linux/pkt_sched.h
+++ b/include/uapi/linux/pkt_sched.h
@@ -790,4 +790,29 @@ struct tc_fq_qd_stats {
790 __u32 throttled_flows; 790 __u32 throttled_flows;
791 __u32 pad; 791 __u32 pad;
792}; 792};
793
794/* Heavy-Hitter Filter */
795
796enum {
797 TCA_HHF_UNSPEC,
798 TCA_HHF_BACKLOG_LIMIT,
799 TCA_HHF_QUANTUM,
800 TCA_HHF_HH_FLOWS_LIMIT,
801 TCA_HHF_RESET_TIMEOUT,
802 TCA_HHF_ADMIT_BYTES,
803 TCA_HHF_EVICT_TIMEOUT,
804 TCA_HHF_NON_HH_WEIGHT,
805 __TCA_HHF_MAX
806};
807
808#define TCA_HHF_MAX (__TCA_HHF_MAX - 1)
809
810struct tc_hhf_xstats {
811 __u32 drop_overlimit; /* number of times max qdisc packet limit
812 * was hit
813 */
814 __u32 hh_overlimit; /* number of times max heavy-hitters was hit */
815 __u32 hh_tot_count; /* number of captured heavy-hitters so far */
816 __u32 hh_cur_count; /* number of current heavy-hitters */
817};
793#endif 818#endif