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
971971 __u32 ecn_mark; /* packets marked with ecn*/
972972 };
973973
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+
9741005 /* CBS */
9751006 struct tc_cbs_qopt {
9761007 __u8 offload;