• Vladimir Oltean's avatar
    net: dsa: felix: offload per-tc max SDU from tc-taprio · 1712be05
    Vladimir Oltean authored
    Our current vsc9959_tas_guard_bands_update() algorithm has a limitation
    imposed by the hardware design. To avoid packet overruns between one
    gate interval and the next (which would add jitter for scheduled traffic
    in the next gate), we configure the switch to use guard bands. These are
    as large as the largest packet which is possible to be transmitted.
    
    The problem is that at tc-taprio intervals of sizes comparable to a
    guard band, there isn't an obvious place in which to split the interval
    between the useful portion (for scheduling) and the guard band portion
    (where scheduling is blocked).
    
    For example, a 10 us interval at 1Gbps allows 1225 octets to be
    transmitted. We currently split the interval between the bare minimum of
    33 ns useful time (required to schedule a single packet) and the rest as
    guard band.
    
    But 33 ns of useful scheduling time will only allow a single packet to
    be sent, be that packet 1200 octets in size, or 60 octets in size. It is
    impossible to send 2 60 octets frames in the 10 us window. Except that
    if we reduced the guard band (and therefore the maximum allowable SDU
    size) to 5 us, the useful time for scheduling is now also 5 us, so more
    packets could be scheduled.
    
    The hardware inflexibility of not scheduling according to individual
    packet lengths must unfortunately propagate to the user, who needs to
    tune the queueMaxSDU values if he wants to fit more small packets into a
    10 us interval, rather than one large packet.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    1712be05
felix_vsc9959.c 78.6 KB