From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: 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>,
Paolo Abeni <pabeni@redhat.com>,
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 11:48:09 +0200 [thread overview]
Message-ID: <20240614094809.gvOugqZT@linutronix.de> (raw)
In-Reply-To: <CANn89i+YfdmKSMgHni4ogMDq0BpFQtjubA0RxXcfZ8fpgV5_fw@mail.gmail.com>
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?
Sebastian
next prev parent reply other threads:[~2024-06-14 9:48 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 [this message]
2024-06-14 14:08 ` Paolo Abeni
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=20240614094809.gvOugqZT@linutronix.de \
--to=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=pabeni@redhat.com \
--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