[PATCH v2 net-next 00/15] taprio automatic queueMaxSDU and new TXQ selection procedure

From: Vladimir Oltean
Date: Tue Feb 07 2023 - 08:55:10 EST


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@xxxxxxx/

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