[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <44db16a9-0e9f-6191-f6d1-845b05ce08d1@iogearbox.net>
Date: Wed, 25 Oct 2023 08:58:00 +0200
From: Daniel Borkmann <daniel@...earbox.net>
To: Coco Li <lixiaoyan@...gle.com>, Jakub Kicinski <kuba@...nel.org>,
Eric Dumazet <edumazet@...gle.com>, Neal Cardwell <ncardwell@...gle.com>,
Mubashir Adnan Qureshi <mubashirq@...gle.com>,
Paolo Abeni <pabeni@...hat.com>, Andrew Lunn <andrew@...n.ch>,
Jonathan Corbet <corbet@....net>
Cc: netdev@...r.kernel.org, Chao Wu <wwchao@...gle.com>,
Wei Wang <weiwan@...gle.com>, Pradeep Nemavat <pnemavat@...gle.com>,
David Ahern <dsahern@...nel.org>
Subject: Re: [PATCH v3 net-next 5/6] net-device: reorganize net_device fast
path variables
Hi Coco,
On 10/25/23 3:24 AM, Coco Li wrote:
> Reorganize fast path variables on tx-txrx-rx order
> Fastpath variables end after npinfo.
>
> Below data generated with pahole on x86 architecture.
>
> Fast path variables span cache lines before change: 12
> Fast path variables span cache lines after change: 4
>
> Signed-off-by: Coco Li <lixiaoyan@...gle.com>
> Suggested-by: Eric Dumazet <edumazet@...gle.com>
> Reviewed-by: David Ahern <dsahern@...nel.org>
> ---
> include/linux/netdevice.h | 101 ++++++++++++++++++++------------------
> net/core/dev.c | 45 +++++++++++++++++
> 2 files changed, 99 insertions(+), 47 deletions(-)
>
> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> index b8bf669212cce..d4a8c42d9a9aa 100644
> --- a/include/linux/netdevice.h
> +++ b/include/linux/netdevice.h
> @@ -2076,6 +2076,60 @@ enum netdev_ml_priv_type {
> */
>
> struct net_device {
> + /* Caacheline organization can be found documented in
> + * Documentation/networking/net_cachelines/net_device.rst.
> + * Please update the document when adding new fields.
> + */
> +
> + /* TX read-mostly hotpath */
> + __cacheline_group_begin(net_device_read);
> + unsigned long long priv_flags;
> + const struct net_device_ops *netdev_ops;
> + const struct header_ops *header_ops;
> + struct netdev_queue *_tx;
> + unsigned int real_num_tx_queues;
> + unsigned int gso_max_size;
> + unsigned int gso_ipv4_max_size;
> + u16 gso_max_segs;
> + s16 num_tc;
> + /* Note : dev->mtu is often read without holding a lock.
> + * Writers usually hold RTNL.
> + * It is recommended to use READ_ONCE() to annotate the reads,
> + * and to use WRITE_ONCE() to annotate the writes.
> + */
> + unsigned int mtu;
> + unsigned short needed_headroom;
> + struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE];
> +#ifdef CONFIG_XPS
> + struct xps_dev_maps __rcu *xps_maps[XPS_MAPS_MAX];
> +#endif
> +#ifdef CONFIG_NETFILTER_EGRESS
> + struct nf_hook_entries __rcu *nf_hooks_egress;
> +#endif
See earlier feedback from v2 [0], please also move tcx_egress over here:
#ifdef CONFIG_NET_XGRESS
struct bpf_mprog_entry __rcu *tcx_egress;
#endif
[0] https://lore.kernel.org/netdev/2965be9f-72b8-4972-0580-f96b2a562018@iogearbox.net/
Thanks,
Daniel
Powered by blists - more mailing lists