On Thu, Aug 01, 2024 at 01:34:21PM -0400, Olivier Langlois wrote:
> On Thu, 2024-08-01 at 12:32 -0400, Olivier Langlois wrote:
> > > 
> > > This is the kthread that invokes the callbacks for CPU 1, assuming
> > > you
> > > have a non-preemptible kernel (otherwise rcuop/1 for historical
> > > reasons
> > > that seemed like a good idea at the time).  Do you also have an
> > > rcuos/2?
> > > (See the help text for CONFIG_RCU_NOCB_CPU.)
> > 
> > yes I do.
> > 
> > $ ps -eo pid,cpuid,comm | grep rcu
> >       4     0 kworker/R-rcu_gp
> >       8     0 kworker/0:0-rcu_gp
> >      14     0 rcu_tasks_rude_kthread
> >      15     0 rcu_tasks_trace_kthread
> >      17     3 rcu_sched
> >      18     3 rcuog/0
> >      19     0 rcuos/0
> >      20     0 rcu_exp_par_gp_kthread_worker/0
> >      21     3 rcu_exp_gp_kthread_worker
> >      31     3 rcuos/1
> >      38     3 rcuog/2
> >      39     3 rcuos/2
> >      46     0 rcuos/3
> > 
> > and yes my kernel is built without CONFIG_PREEMPT. Since my system
> > consists of 3 isolated cpus out of 4, I have figured that there was
> > not
> > much to preempt for the overhead coming along with the feature.
> > 
> > but here again, I am thankful for the cue... If all else fail,
> > running
> > the setup with CONFIG_PREEMPT enabled to see if it change anything,
> > this might be something interesting to try.
> 
> I have just set rcutree.rcu_nocb_gp_stride=4.
> 
> $ ps -eo pid,cpuid,comm | grep rcu
>       4     0 kworker/R-rcu_gp
>       8     0 kworker/0:0-rcu_gp
>      14     0 rcu_tasks_rude_kthread
>      15     0 rcu_tasks_trace_kthread
>      17     3 rcu_sched
>      18     3 rcuog/0
>      19     0 rcuos/0
>      20     0 rcu_exp_par_gp_kthread_worker/0
>      21     3 rcu_exp_gp_kthread_worker
>      31     3 rcuos/1
>      38     0 rcuos/2
>      45     0 rcuos/3
> 
> this different setting did not eliminate the sporadic IWI and LOC
> interrupts on CPU1
> 
> I think that I have misunderstood the explanation about the RCU kthread
> groups. I thought that this setting would add a rcuog process for CPU1.

This presentation might be helpful:

        https://www.youtube.com/watch?v=5yTf7u5J_kc

> you didn't seem concerned that rcuog was missing for cpu1.
> rcutree.rcu_nocb_gp_stride sets the group size (stride) and there is 1
> rcuog per group. I guess if I wanted to see a rcuog/1, I would need to
> set rcutree.rcu_nocb_gp_stride=1

The grace-period functions of the lead rcuos kthreads have been pushed
off into a smaller number of rcuog kthreads.  Which is why you do not
(repeat, *not*) have an rcuog kthread for each CPU.

> it is probably not best possible setting but it is easy and simple to
> try out to see if it fix my problem.

You probably do not want an rcuog kthread for each CPU, but it cannot
hurt to try it.

                                                        Thanx, Paul

Reply via email to