Principles: - Packets are classified on flows. - This is a Stochastic model (as we use a hash, several flows might be hashed to the same slot) - Each flow has a PIE managed queue. - Flows are linked onto two (Round Robin) lists, so that new flows have priority on old ones. - For a given flow, packets are not reordered. - Drops during enqueue only. - ECN capability is off by default. - ECN threshold (if ECN is enabled) is at 10% by default. - Uses timestamps to calculate queue delay by default. Usage: tc qdisc ... fq_pie [ limit PACKETS ] [ flows NUMBER ] [ target TIME ] [ tupdate TIME ] [ alpha NUMBER ] [ beta NUMBER ] [ quantum BYTES ] [ memory_limit BYTES ] [ ecnprob PERCENTAGE ] [ [no]ecn ] [ [no]bytemode ] [ [no_]dq_rate_estimator ] defaults: limit: 10240 packets, flows: 1024 target: 15 ms, tupdate: 15 ms (in jiffies) alpha: 1/8, beta : 5/4 quantum: device MTU, memory_limit: 32 Mb ecnprob: 10%, ecn: off bytemode: off, dq_rate_estimator: off
Showing the changes to include/uapi/linux (1 of 5 files). Show all
Unified · Split
| @@ -971,6 +971,37 @@ struct tc_pie_xstats { · 970 unmodified lines | ||
| 971 | 971 | __u32 ecn_mark; /* packets marked with ecn*/ |
| 972 | 972 | }; |
| 973 | 973 | |
| 974 | +/* FQ PIE */ | |
| 975 | +enum { | |
| 976 | + TCA_FQ_PIE_UNSPEC, | |
| 977 | + TCA_FQ_PIE_LIMIT, | |
| 978 | + TCA_FQ_PIE_FLOWS, | |
| 979 | + TCA_FQ_PIE_TARGET, | |
| 980 | + TCA_FQ_PIE_TUPDATE, | |
| 981 | + TCA_FQ_PIE_ALPHA, | |
| 982 | + TCA_FQ_PIE_BETA, | |
| 983 | + TCA_FQ_PIE_QUANTUM, | |
| 984 | + TCA_FQ_PIE_MEMORY_LIMIT, | |
| 985 | + TCA_FQ_PIE_ECN_PROB, | |
| 986 | + TCA_FQ_PIE_ECN, | |
| 987 | + TCA_FQ_PIE_BYTEMODE, | |
| 988 | + TCA_FQ_PIE_DQ_RATE_ESTIMATOR, | |
| 989 | + __TCA_FQ_PIE_MAX | |
| 990 | +}; | |
| 991 | +#define TCA_FQ_PIE_MAX (__TCA_FQ_PIE_MAX - 1) | |
| 992 | + | |
| 993 | +struct tc_fq_pie_xstats { | |
| 994 | + __u32 packets_in; /* total number of packets enqueued */ | |
| 995 | + __u32 dropped; /* packets dropped due to fq_pie_action */ | |
| 996 | + __u32 overlimit; /* dropped due to lack of space in queue */ | |
| 997 | + __u32 overmemory; /* dropped due to lack of memory in queue */ | |
| 998 | + __u32 ecn_mark; /* packets marked with ecn */ | |
| 999 | + __u32 new_flow_count; /* count of new flows created by packets */ | |
| 1000 | + __u32 new_flows_len; /* count of flows in new list */ | |
| 1001 | + __u32 old_flows_len; /* count of flows in old list */ | |
| 1002 | + __u32 memory_usage; /* total memory across all queues */ | |
| 1003 | +}; | |
| 1004 | + | |
| 974 | 1005 | /* CBS */ |
| 975 | 1006 | struct tc_cbs_qopt { |
| 976 | 1007 | __u8 offload; |