Johannes Berg <johannes@xxxxxxxxxxxxxxxx> writes: > On Wed, 2019-12-11 at 15:47 +0100, Toke Høiland-Jørgensen wrote: > >> > Say you have some queues - some (Q1-Qn) got a LOT of traffic, and >> > another (Q0) just has some interactive traffic. >> > >> > You could then end up in a situation where you have 24ms queued up on >> > Q1-Qn (with n high enough to not have hit the per-queue AQL limit), >> > right? >> > >> > Say also the last frame on Q0 was dequeued by the hardware, but the >> > tx_dequeue() got NULL because of the AQL limit having been eaten up by >> > all the packets on Q1-Qn. >> > >> > Now you'll no longer get a new dequeue attempt on Q0 (it was already >> > empty last time, so no hardware reclaim to trigger new dequeues), and a >> > new dequeue on the *other* queues will not do anything for this queue. >> >> Oh, right, I see; yeah, that could probably happen. I guess we could >> either kick all available queues whenever the global limit goes from >> "above" to "below"; or we could remove the "return NULL" logic from >> tx_dequeue() and rely on next_txq() to throttle. I think the latter is >> probably simpler, but I'm a little worried that the throttling will >> become too lax (because the driver can keep dequeueing in the same >> scheduling round)... > > I honestly have no idea what's better ... :) Right, I guess we'll have to go and measure. Let's leave it as-is for now, then, and we can adjust in a separate patch. > You're the expert, I'm just poking holes into it ;-) And you're doing that very well, as it turns out; thanks! ;) -Toke