diff mbox series

[LEDE-DEV] ag71xx: Reorder ring structs for lower cache trashing.

Message ID 1517328846-47-1-git-send-email-rosenp@gmail.com
State Accepted
Headers show
Series [LEDE-DEV] ag71xx: Reorder ring structs for lower cache trashing. | expand

Commit Message

Rosen Penev Jan. 30, 2018, 4:14 p.m. UTC
Based on Qualcomm's upstream code. Reordered a bit different.

iperf3 speed goes from ~279mbps to ~320mbps.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 .../files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h      | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

Comments

Lucian Cristian Feb. 1, 2018, 5:23 p.m. UTC | #1
On 30.01.2018 18:14, Rosen Penev wrote:
> Based on Qualcomm's upstream code. Reordered a bit different.
>
> iperf3 speed goes from ~279mbps to ~320mbps.
>
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
> ---
>   .../files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h      | 13 ++++++++-----
>   1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
> index a712812..d181240 100644
> --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
> +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
> @@ -106,13 +106,16 @@ struct ag71xx_buf {
>   };
>   
>   struct ag71xx_ring {
> -	struct ag71xx_buf	*buf;
> -	u8			*descs_cpu;
> -	dma_addr_t		descs_dma;
> -	u16			desc_split;
> -	u16			order;
> +	/* "Hot" fields in the data path. */
>   	unsigned int		curr;
>   	unsigned int		dirty;
> +
> +	/* "Cold" fields - not used in the data path. */
> +	struct ag71xx_buf	*buf;
> +	u16			order;
> +	u16			desc_split;
> +	dma_addr_t		descs_dma;
> +	u8			*descs_cpu;
>   };
>   
>   struct ag71xx_mdio {

I can confirm that this one gives a nice performance boost !


Regards
Rosen Penev Feb. 10, 2018, 4:11 a.m. UTC | #2
On Thu, Feb 1, 2018 at 9:23 AM, Lucian Cristian <luci@createc.ro> wrote:
> On 30.01.2018 18:14, Rosen Penev wrote:
>>
>> Based on Qualcomm's upstream code. Reordered a bit different.
>>
>> iperf3 speed goes from ~279mbps to ~320mbps.
>>
>> Signed-off-by: Rosen Penev <rosenp@gmail.com>
>> ---
>>   .../files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h      | 13
>> ++++++++-----
>>   1 file changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git
>> a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
>> b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
>> index a712812..d181240 100644
>> ---
>> a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
>> +++
>> b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
>> @@ -106,13 +106,16 @@ struct ag71xx_buf {
>>   };
>>     struct ag71xx_ring {
>> -       struct ag71xx_buf       *buf;
>> -       u8                      *descs_cpu;
>> -       dma_addr_t              descs_dma;
>> -       u16                     desc_split;
>> -       u16                     order;
>> +       /* "Hot" fields in the data path. */
>>         unsigned int            curr;
>>         unsigned int            dirty;
>> +
>> +       /* "Cold" fields - not used in the data path. */
>> +       struct ag71xx_buf       *buf;
>> +       u16                     order;
>> +       u16                     desc_split;
>> +       dma_addr_t              descs_dma;
>> +       u8                      *descs_cpu;
>>   };
>>     struct ag71xx_mdio {
>
Seems this patch got dropped from patchwork for some reason.
>
> I can confirm that this one gives a nice performance boost !
>
>
> Regards
>
>
> _______________________________________________
> Lede-dev mailing list
> Lede-dev@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev
Lucian Cristian Feb. 10, 2018, 11:03 a.m. UTC | #3
On 10.02.2018 06:11, Rosen Penev wrote:
> On Thu, Feb 1, 2018 at 9:23 AM, Lucian Cristian <luci@createc.ro> wrote:
>> On 30.01.2018 18:14, Rosen Penev wrote:
>>> Based on Qualcomm's upstream code. Reordered a bit different.
>>>
>>> iperf3 speed goes from ~279mbps to ~320mbps.
>>>
>>> Signed-off-by: Rosen Penev <rosenp@gmail.com>
>>> ---
>>>    .../files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h      | 13
>>> ++++++++-----
>>>    1 file changed, 8 insertions(+), 5 deletions(-)
>>>
>>> diff --git
>>> a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
>>> b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
>>> index a712812..d181240 100644
>>> ---
>>> a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
>>> +++
>>> b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
>>> @@ -106,13 +106,16 @@ struct ag71xx_buf {
>>>    };
>>>      struct ag71xx_ring {
>>> -       struct ag71xx_buf       *buf;
>>> -       u8                      *descs_cpu;
>>> -       dma_addr_t              descs_dma;
>>> -       u16                     desc_split;
>>> -       u16                     order;
>>> +       /* "Hot" fields in the data path. */
>>>          unsigned int            curr;
>>>          unsigned int            dirty;
>>> +
>>> +       /* "Cold" fields - not used in the data path. */
>>> +       struct ag71xx_buf       *buf;
>>> +       u16                     order;
>>> +       u16                     desc_split;
>>> +       dma_addr_t              descs_dma;
>>> +       u8                      *descs_cpu;
>>>    };
>>>      struct ag71xx_mdio {
> Seems this patch got dropped from patchwork for some reason.
>> I can confirm that this one gives a nice performance boost !
>>
>>
>> Regards
>>
>>
>> _______________________________________________
>> Lede-dev mailing list
>> Lede-dev@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/lede-dev

I have

uptime
  13:01:41 up 6 days, 22:39,  load average: 0.27, 0.10, 0.02

and can't spot any problems in normal functionality of the router


Regards
diff mbox series

Patch

diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
index a712812..d181240 100644
--- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
+++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h
@@ -106,13 +106,16 @@  struct ag71xx_buf {
 };
 
 struct ag71xx_ring {
-	struct ag71xx_buf	*buf;
-	u8			*descs_cpu;
-	dma_addr_t		descs_dma;
-	u16			desc_split;
-	u16			order;
+	/* "Hot" fields in the data path. */
 	unsigned int		curr;
 	unsigned int		dirty;
+
+	/* "Cold" fields - not used in the data path. */
+	struct ag71xx_buf	*buf;
+	u16			order;
+	u16			desc_split;
+	dma_addr_t		descs_dma;
+	u8			*descs_cpu;
 };
 
 struct ag71xx_mdio {