• Yannick Vignon's avatar
    net: taprio offload: enforce qdisc to netdev queue mapping · 13511704
    Yannick Vignon authored
    Even though the taprio qdisc is designed for multiqueue devices, all the
    queues still point to the same top-level taprio qdisc. This works and is
    probably required for software taprio, but at least with offload taprio,
    it has an undesirable side effect: because the whole qdisc is run when a
    packet has to be sent, it allows packets in a best-effort class to be
    processed in the context of a task sending higher priority traffic. If
    there are packets left in the qdisc after that first run, the NET_TX
    softirq is raised and gets executed immediately in the same process
    context. As with any other softirq, it runs up to 10 times and for up to
    2ms, during which the calling process is waiting for the sendmsg call (or
    similar) to return. In my use case, that calling process is a real-time
    task scheduled to send a packet every 2ms, so the long sendmsg calls are
    leading to missed timeslots.
    
    By attaching each netdev queue to its own qdisc, as it is done with
    the "classic" mq qdisc, each traffic class can be processed independently
    without touching the other classes. A high-priority process can then send
    packets without getting stuck in the sendmsg call anymore.
    Signed-off-by: default avatarYannick Vignon <yannick.vignon@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    13511704
sch_taprio.c 51.4 KB