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 | __u32 ecn_mark; /* packets marked with ecn*/ | 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 | /* CBS */ | 1005 | /* CBS */ |
| 975 | struct tc_cbs_qopt { | 1006 | struct tc_cbs_qopt { |
| 976 | __u8 offload; | 1007 | __u8 offload; |