Re: [RFC 1/2] softirq: Defer net rx/tx processing to ksoftirqd context

From: Mike Galbraith
Date: Fri Jan 12 2018 - 13:45:33 EST


On Fri, 2018-01-12 at 19:15 +0100, Mike Galbraith wrote:
> On Fri, 2018-01-12 at 09:51 -0800, Linus Torvalds wrote:
> > On Fri, Jan 12, 2018 at 9:44 AM, Mike Galbraith <efault@xxxxxx> wrote:
> > >
> > > Nah, a misunderstanding happened. RT that still offers full threading
> > > creates per-softirq threads per cpu. The regular trees split ksoftirqd
> > > into only two threads per cpu, one processes timer/hrtimer softriqs,
> > > the other processes the rest.
> >
> > Ok, that sounds like it should work, but it also sounds like it's very
> > specific to RT itself.
> >
> > For example, the dvb issue was not about the timer softirqs, but about
> > the tasklet ones.
> >
> > So maybe we wouldn't need to split it for _every_ softirq, but we'd
> > need to split it more than just along the timer case.
> >
> > And it does sound a bit excessive to have ten fixed threads for every
> > CPU. The days when tens of CPU's meant "huge system" are gone. These
> > days it can be a phone.
>
> Yeah, it is excessive more often than not. You get to prioritize, and
> segregate, which is nice, but you pay for it.

BTW, much of the softirq load in RT is processed by the raising task.

tbench_srv-6985 [000] d...112 293.902511: softirq_raise: vec=3 [action=NET_RX]
tbench_srv-6985 [000] .....13 293.902511: softirq_entry: vec=3 [action=NET_RX]
tbench_srv-6985 [000] .....13 293.902515: softirq_exit: vec=3 [action=NET_RX]
tbench-6984 [003] d...112 293.902520: softirq_raise: vec=3 [action=NET_RX]
tbench-6984 [003] .....13 293.902520: softirq_entry: vec=3 [action=NET_RX]
tbench-6984 [003] .....13 293.902523: softirq_exit: vec=3 [action=NET_RX]