From: Paolo Abeni <pabeni@redhat.com>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Eric Dumazet <edumazet@google.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>,
Daniel Bristot de Oliveira <bristot@kernel.org>,
Boqun Feng <boqun.feng@gmail.com>,
Daniel Borkmann <daniel@iogearbox.net>,
Frederic Weisbecker <frederic@kernel.org>,
Ingo Molnar <mingo@redhat.com>, Jakub Kicinski <kuba@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>,
Waiman Long <longman@redhat.com>, Will Deacon <will@kernel.org>,
Ben Segall <bsegall@google.com>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Juri Lelli <juri.lelli@redhat.com>, Mel Gorman <mgorman@suse.de>,
Valentin Schneider <vschneid@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>
Subject: Re: [PATCH v6 net-next 08/15] net: softnet_data: Make xmit.recursion per task.
Date: Fri, 14 Jun 2024 16:08:42 +0200 [thread overview]
Message-ID: <834b61b93df3cbf5053e459f337e622e2c510fbd.camel@redhat.com> (raw)
In-Reply-To: <20240614094809.gvOugqZT@linutronix.de>
On Fri, 2024-06-14 at 11:48 +0200, Sebastian Andrzej Siewior wrote:
> On 2024-06-14 10:38:15 [+0200], Eric Dumazet wrote:
> > > I think it should work fine. netdev folks, you want me to remove that
> > > ifdef and use a per-Task counter unconditionally?
> >
> > It depends if this adds another cache line miss/dirtying or not.
> >
> > What about other fields from softnet_data.xmit ?
>
> duh. Looking at the `more' member I realise that this needs to move to
> task_struct on RT, too. Therefore I would move the whole xmit struct.
>
> The xmit cacheline starts within the previous member (xfrm_backlog) and
> ends before the following member starts. So it kind of has its own
> cacheline.
> With defconfig, if we move it to the front of task struct then we go from
>
> > struct task_struct {
> > struct thread_info thread_info; /* 0 24 */
> > unsigned int __state; /* 24 4 */
> > unsigned int saved_state; /* 28 4 */
> > void * stack; /* 32 8 */
> > refcount_t usage; /* 40 4 */
> > unsigned int flags; /* 44 4 */
> > unsigned int ptrace; /* 48 4 */
> > int on_cpu; /* 52 4 */
> > struct __call_single_node wake_entry; /* 56 16 */
> > /* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
> > unsigned int wakee_flips; /* 72 4 */
> >
> > /* XXX 4 bytes hole, try to pack */
> >
> > long unsigned int wakee_flip_decay_ts; /* 80 8 */
>
> to
>
> > struct task_struct {
> > struct thread_info thread_info; /* 0 24 */
> > unsigned int __state; /* 24 4 */
> > unsigned int saved_state; /* 28 4 */
> > void * stack; /* 32 8 */
> > refcount_t usage; /* 40 4 */
> > unsigned int flags; /* 44 4 */
> > unsigned int ptrace; /* 48 4 */
> > struct {
> > u16 recursion; /* 52 2 */
> > u8 more; /* 54 1 */
> > u8 skip_txqueue; /* 55 1 */
> > } xmit; /* 52 4 */
> > struct __call_single_node wake_entry; /* 56 16 */
> > /* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */
> > int on_cpu; /* 72 4 */
> > unsigned int wakee_flips; /* 76 4 */
> > long unsigned int wakee_flip_decay_ts; /* 80 8 */
>
>
> stuffed a hole due to adding `xmit' and moving `on_cpu'. In the end the
> total size of task_struct remained the same.
> The cache line should be hot due to `flags' usage in
>
> > static void handle_softirqs(bool ksirqd)
> > {
> > unsigned long old_flags = current->flags;
> …
> > current->flags &= ~PF_MEMALLOC;
>
> Then there is a bit of code before net_XX_action() and the usage of
> either of the members so not sure if it is gone by then…
>
> Is this what we want or not?
I personally think (fear mostly) there is still the potential for some
(performance) regression. I think it would be safer to introduce this
change under a compiler conditional and eventually follow-up with a
patch making the code generic.
Should such later change prove to be problematic, we could revert it
without impacting the series as a whole.
Thanks!
Paolo
next prev parent reply other threads:[~2024-06-14 14:08 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-12 16:44 [PATCH v6 net-next 00/15] locking: Introduce nested-BH locking Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 01/15] locking/local_lock: Introduce guard definition for local_lock Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 02/15] locking/local_lock: Add local nested BH locking infrastructure Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 03/15] net: Use __napi_alloc_frag_align() instead of open coding it Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 04/15] net: Use nested-BH locking for napi_alloc_cache Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 05/15] net/tcp_sigpool: Use nested-BH locking for sigpool_scratch Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 06/15] net/ipv4: Use nested-BH locking for ipv4_tcp_sk Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 07/15] netfilter: br_netfilter: Use nested-BH locking for brnf_frag_data_storage Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 08/15] net: softnet_data: Make xmit.recursion per task Sebastian Andrzej Siewior
2024-06-12 17:18 ` Steven Rostedt
2024-06-14 8:27 ` Sebastian Andrzej Siewior
2024-06-14 8:38 ` Eric Dumazet
2024-06-14 9:48 ` Sebastian Andrzej Siewior
2024-06-14 14:08 ` Paolo Abeni [this message]
2024-06-14 16:04 ` Steven Rostedt
2024-06-14 16:04 ` Sebastian Andrzej Siewior
2024-06-14 16:01 ` [PATCH v6.5 08/15] net: softnet_data: Make xmit " Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 09/15] dev: Remove PREEMPT_RT ifdefs from backlog_lock.*() Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 10/15] dev: Use nested-BH locking for softnet_data.process_queue Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 11/15] lwt: Don't disable migration prio invoking BPF Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 12/15] seg6: Use nested-BH locking for seg6_bpf_srh_states Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 13/15] net: Use nested-BH locking for bpf_scratchpad Sebastian Andrzej Siewior
2024-06-12 16:44 ` [PATCH v6 net-next 14/15] net: Reference bpf_redirect_info via task_struct on PREEMPT_RT Sebastian Andrzej Siewior
2024-06-13 9:32 ` Jesper Dangaard Brouer
2024-06-12 16:44 ` [PATCH v6 net-next 15/15] net: Move per-CPU flush-lists to bpf_net_context " Sebastian Andrzej Siewior
2024-06-13 9:33 ` Jesper Dangaard Brouer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=834b61b93df3cbf5053e459f337e622e2c510fbd.camel@redhat.com \
--to=pabeni@redhat.com \
--cc=bigeasy@linutronix.de \
--cc=boqun.feng@gmail.com \
--cc=bristot@kernel.org \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dietmar.eggemann@arm.com \
--cc=edumazet@google.com \
--cc=frederic@kernel.org \
--cc=juri.lelli@redhat.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox