Re: Softirq priority inversion from "softirq: reduce latencies"
From: Peter Hurley <hidden>
Date: 2016-02-29 23:04:21
Also in:
lkml
On 02/29/2016 11:14 AM, Thomas Gleixner wrote:
On Mon, 29 Feb 2016, Peter Hurley wrote:quoted
On 02/29/2016 10:24 AM, Eric Dumazet wrote:quoted
quoted
Just to be clear if (time_before(jiffies, end) && !need_resched() && --max_restart) goto restart; aborts softirq *even if 0ns have elapsed*, if NET_RX has woken a process.Sure, now remove the 1st and 2nd condition.Well just removing the 2nd condition has everything working fine, because that fixes the priority inversion.No. It does not fix anything. It hides the shortcomings of the driver.quoted
However, when system resources are _not_ contended, it makes no sense to be forced to revert to ksoftirqd resolution, which is strictly intended as fallback.No. You claim it is simply because your driver does not handle that situation properly.quoted
Or flipping your argument on its head, why not just _always_ execute softirq in ksoftirqd?Which is what that change effectivley does. And that makes a lot of sense, because you get the softirq load under scheduler control and do not let the softirq run as a context stealing entity which is completely uncontrollable by the scheduler.
Ok, fair enough. However, charging [in the scheduler sense] very lightweight DMA completion for one subsystem collectively with very heavyweight NET_RX (doing garbage collection in softirq!) is hardly ideal. The alternative being threaded interrupt handlers (which are essentially treated as 0.000000 scheduler cost). I just want to make sure that's the conscious choice being made, when the patches for converting from tasklet to threaded irq start hitting subsystem maintainers. Regards, Peter Hurley