Hi,
We use DPDK 24.11.1 rte_sched library for shaping traffic, and it happens that some queues, mainly low-bandwidth TCs, from time to time stop sending traffic.
After investigating, we found that this happens when a large packet is enqueued: if this is accepted and enqueued in the sched port, it might be too big to be sent out, completely blocking the queue, as there is no mechanism to get rid of that packet, even if it will never be dequeued.
In particular, in function grinder_credits_check_with_tc_ov(), pipe_tc_credits are lower than pkt_len, making enough_credit always false, so the packet is never dequeued.
This can be seen also using the qos_sched example, setting pipe tc rates to 6250 (50Kbps) on a 100Gbps nic: pipe_tc_credits will be 250, and any packet larger that that will completely block the queue, and no other packets, even small, will ever pass.
We could not find any solution other than preventing long packets to be enqueued.
Is there any other way to prevent queues from blocking?
Thanks