History

net: sched: add Flow Queue PIE packet scheduler

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

Mohit P. Tahiliani committed 6 years ago

Commit ec97ecf1 parent 5205ea05 files · +609 −0Browse files

Showing the changes to include/uapi/linux (1 of 5 files). Show all

Unified · Split

include/uapi/linux/pkt_sched.h+31−0
@@ -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 */
975enum {
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
993struct 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 */
975struct tc_cbs_qopt {1006struct tc_cbs_qopt {
976 __u8 offload;1007 __u8 offload;