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. 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 it is probably not best possible setting but it is easy and simple to try out to see if it fix my problem.