On Thu 06 Sep 2018 at 08:39, Kirill Tkhai <ktk...@virtuozzo.com> wrote: > On 06.09.2018 11:30, Eric Dumazet wrote: >> >> >> On 09/06/2018 12:58 AM, Vlad Buslov wrote: >> >> ... >> >>> diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h >>> index 18e22a5a6550..239c73f29471 100644 >>> --- a/include/net/sch_generic.h >>> +++ b/include/net/sch_generic.h >>> @@ -90,6 +90,7 @@ struct Qdisc { >>> struct gnet_stats_queue __percpu *cpu_qstats; >>> int padded; >>> refcount_t refcnt; >>> + struct rcu_head rcu; >>> >>> /* >>> * For performance sake on SMP, we put highly modified fields at the end >> >> Probably better to move this at the end of struct Qdisc, >> not risking unexpected performance regressions in fast path. > > Do you mean regressions on UP? On SMP it looks like this field > fits in the unused gap created by: > > struct sk_buff_head gso_skb ____cacheline_aligned_in_smp; > > Kirill
Hi Eric, Kirill I intentionally put rcu_head here in order for it not to be in same cache line with "highly modified fields" (according to comment).