[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1dcc27f7-f223-d5dd-5945-917e76b1b9df@gmail.com>
Date: Wed, 5 Jan 2022 10:34:31 -0800
From: Florian Fainelli <f.fainelli@...il.com>
To: Vladimir Oltean <vladimir.oltean@....com>, netdev@...r.kernel.org
Cc: "David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>, Andrew Lunn <andrew@...n.ch>,
Vivien Didelot <vivien.didelot@...il.com>
Subject: Re: [PATCH v2 net-next 6/7] net: dsa: move dsa_switch_tree :: ports
and lags to first cache line
On 1/5/22 5:21 AM, Vladimir Oltean wrote:
> dst->ports is accessed most notably by dsa_master_find_slave(), which is
> invoked in the RX path.
>
> dst->lags is accessed by dsa_lag_dev(), which is invoked in the RX path
> of tag_dsa.c.
>
> dst->tag_ops, dst->default_proto and dst->pd don't need to be in the
> first cache line, so they are moved out by this change.
>
> Before:
>
> pahole -C dsa_switch_tree net/dsa/slave.o
> struct dsa_switch_tree {
> struct list_head list; /* 0 16 */
> struct raw_notifier_head nh; /* 16 8 */
> unsigned int index; /* 24 4 */
> struct kref refcount; /* 28 4 */
> bool setup; /* 32 1 */
>
> /* XXX 7 bytes hole, try to pack */
>
> const struct dsa_device_ops * tag_ops; /* 40 8 */
> enum dsa_tag_protocol default_proto; /* 48 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_platform_data * pd; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> struct list_head ports; /* 64 16 */
> struct list_head rtable; /* 80 16 */
> struct net_device * * lags; /* 96 8 */
> unsigned int lags_len; /* 104 4 */
> unsigned int last_switch; /* 108 4 */
>
> /* size: 112, cachelines: 2, members: 13 */
> /* sum members: 101, holes: 2, sum holes: 11 */
> /* last cacheline: 48 bytes */
> };
>
> After:
>
> pahole -C dsa_switch_tree net/dsa/slave.o
> struct dsa_switch_tree {
> struct list_head list; /* 0 16 */
> struct list_head ports; /* 16 16 */
> struct raw_notifier_head nh; /* 32 8 */
> unsigned int index; /* 40 4 */
> struct kref refcount; /* 44 4 */
> struct net_device * * lags; /* 48 8 */
> bool setup; /* 56 1 */
>
> /* XXX 7 bytes hole, try to pack */
>
> /* --- cacheline 1 boundary (64 bytes) --- */
> const struct dsa_device_ops * tag_ops; /* 64 8 */
> enum dsa_tag_protocol default_proto; /* 72 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_platform_data * pd; /* 80 8 */
> struct list_head rtable; /* 88 16 */
> unsigned int lags_len; /* 104 4 */
> unsigned int last_switch; /* 108 4 */
>
> /* size: 112, cachelines: 2, members: 13 */
> /* sum members: 101, holes: 2, sum holes: 11 */
> /* last cacheline: 48 bytes */
> };
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@....com>
Reviewed-by: Florian Fainelli <f.fainelli@...il.com>
--
Florian
Powered by blists - more mailing lists