Messages in this thread | | | From | Vladimir Oltean <> | Subject | [PATCH v2 net-next 00/15] taprio automatic queueMaxSDU and new TXQ selection procedure | Date | Tue, 7 Feb 2023 15:54:25 +0200 |
| |
This patch set addresses 2 design limitations in the taprio software scheduler:
1. Software scheduling fundamentally prioritizes traffic incorrectly, in a way which was inspired from Intel igb/igc drivers and does not follow the inputs user space gives (traffic classes and TC to TXQ mapping). Patch 05/15 handles this, 01/15 - 04/15 are preparations for this work.
2. Software scheduling assumes that the gate for a traffic class closes as soon as the next interval begins. But this isn't true. If consecutive schedule entries have that traffic class gate open, there is no "gate close" event and taprio should keep dequeuing from that TC without interruptions. Patches 06/15 - 15/15 handle this. Patch 10/15 is a generic Qdisc change required for this to work.
Future development directions which depend on this patch set are:
- Propagating the automatic queueMaxSDU calculation down to offloading device drivers, instead of letting them calculate this, as vsc9959_tas_guard_bands_update() does today.
- A software data path for tc-taprio with preemptible traffic and Hold/Release events.
v1 at: https://patchwork.kernel.org/project/netdevbpf/cover/20230128010719.2182346-1-vladimir.oltean@nxp.com/
Vladimir Oltean (15): net/sched: taprio: delete peek() implementation net/sched: taprio: continue with other TXQs if one dequeue() failed net/sched: taprio: refactor one skb dequeue from TXQ to separate function net/sched: taprio: avoid calling child->ops->dequeue(child) twice net/sched: taprio: give higher priority to higher TCs in software dequeue mode net/sched: taprio: calculate tc gate durations net/sched: taprio: rename close_time to end_time net/sched: taprio: calculate budgets per traffic class net/sched: taprio: calculate guard band against actual TC gate close time net/sched: make stab available before ops->init() call net/sched: taprio: warn about missing size table net/sched: keep the max_frm_len information inside struct sched_gate_list net/sched: taprio: automatically calculate queueMaxSDU based on TC gate durations net/sched: taprio: split segmentation logic from qdisc_enqueue() net/sched: taprio: don't segment unnecessarily
drivers/net/ethernet/intel/igb/igb_main.c | 18 + drivers/net/ethernet/intel/igc/igc_main.c | 6 +- include/net/pkt_sched.h | 5 + net/sched/sch_api.c | 29 +- net/sched/sch_taprio.c | 639 ++++++++++++++++------ 5 files changed, 500 insertions(+), 197 deletions(-)
-- 2.34.1
| |