[Intel-wired-lan] [PATCH net v1] e1000e: Fix TSO not being disabled on i219-LM card

Palczewski, Mateusz mateusz.palczewski at intel.com
Wed Dec 21 10:15:28 UTC 2022


Hi,
Thanks for your feedback, I will address all of the commit message and code
issues in next version of the patch. Below I have added my testing results
with and without the patch applied. 
>Dear Mateusz,
>
>
>Thank you for the patch. In the commit message summary, you could write:
>
>> Disable TSO on i219-LM card to increase speed
>
>
>Am 20.12.22 um 10:47 schrieb Mateusz Palczewski:
>> While using i219-LM card currently it was only possible to achieve
>
>Please mention, that it’s a regression in Linux 5.8-rc1.
>
>> about 60% of maximum speed. This was caused by TSO not being disabled 
>> even thought it should be on this specific card. Fix that by moving 
>> the
>
>s/thought/though/
>
>Please reference the datasheet section, where that is documented.
>
>> part of the code responsible for this outside of adapter->flags & 
>> FLAG_TSO_FORCE check.
>
>How did you test the speed exactly?
>
>On a Dell Precision Tower 3620/0MWYPT, BIOS 2.22.0 07/13/2022, with
>
>     $ lspci -nn -s 00:1f.6
>     00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I219-LM [8086:15b7] (rev 31)
>
>I get more than 60 % bandwidth with iperf3.
>

For my setup it is:
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (3) I219-LM (rev 09)
with Intel Skylake platform.

>```
>$ iperf3 -c iperf3.molgen.mpg.de
>Connecting to host iperf3.molgen.mpg.de, port 5201 [  5] local 141.14.18.119 port 56092 connected to 141.14.27.109 port 5201
>[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
>[  5]   0.00-1.00   sec   102 MBytes   859 Mbits/sec    0   1.07 MBytes 
>
>[  5]   1.00-2.00   sec  98.7 MBytes   828 Mbits/sec    0   1.13 MBytes 
>
>[  5]   2.00-3.00   sec  99.8 MBytes   837 Mbits/sec    0   1.13 MBytes 
>
>[  5]   3.00-4.00   sec  99.9 MBytes   838 Mbits/sec    0   1.13 MBytes 
>
>[  5]   4.00-5.00   sec  98.7 MBytes   828 Mbits/sec    0   1.13 MBytes 
>
>[  5]   5.00-6.00   sec  99.7 MBytes   836 Mbits/sec    0   1.13 MBytes 
>
>[  5]   6.00-7.00   sec  99.9 MBytes   838 Mbits/sec    0   1.13 MBytes 
>
>[  5]   7.00-8.00   sec  98.5 MBytes   826 Mbits/sec    0   1.13 MBytes 
>
>[  5]   8.00-9.00   sec   100 MBytes   838 Mbits/sec    0   1.13 MBytes 
>
>[  5]   9.00-10.00  sec  98.8 MBytes   829 Mbits/sec    0   1.13 MBytes 
>
>- - - - - - - - - - - - - - - - - - - - - - - - -
>[ ID] Interval           Transfer     Bitrate         Retr
>[  5]   0.00-10.00  sec   996 MBytes   836 Mbits/sec    0             sender
>[  5]   0.00-10.00  sec   994 MBytes   833 Mbits/sec 
>receiver
>
>iperf Done.
>```

I have used iperf3 to test connection between two cards in the same server
with usage of namespaces, here are my results:
1. Without the patch:
ip netns exec test iperf3 -c 10.1.1.2
Connecting to host 10.1.1.2, port 5201
[  5] local 10.1.1.1 port 60690 connected to 10.1.1.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  81.8 MBytes   686 Mbits/sec    0    286 KBytes
[  5]   1.00-2.00   sec  80.3 MBytes   674 Mbits/sec    0    286 KBytes
[  5]   2.00-3.00   sec  80.3 MBytes   674 Mbits/sec    0    286 KBytes
[  5]   3.00-4.00   sec  80.6 MBytes   676 Mbits/sec    0    286 KBytes
[  5]   4.00-5.00   sec  80.5 MBytes   675 Mbits/sec    0    286 KBytes
[  5]   5.00-6.00   sec  80.5 MBytes   676 Mbits/sec    0    286 KBytes
[  5]   6.00-7.00   sec  80.7 MBytes   677 Mbits/sec    0    286 KBytes
[  5]   7.00-8.00   sec  81.0 MBytes   680 Mbits/sec    0    286 KBytes
[  5]   8.00-9.00   sec  80.7 MBytes   677 Mbits/sec    0    286 KBytes
[  5]   9.00-10.00  sec  80.7 MBytes   677 Mbits/sec    0    286 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   807 MBytes   677 Mbits/sec    0             sender
[  5]   0.00-10.00  sec   806 MBytes   676 Mbits/sec                  receiver


2. With the patch applied:
ip netns exec test iperf3 -c 10.1.1.2
Connecting to host 10.1.1.2, port 5201
[  5] local 10.1.1.1 port 60686 connected to 10.1.1.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   113 MBytes   947 Mbits/sec    0    419 KBytes
[  5]   1.00-2.00   sec   112 MBytes   941 Mbits/sec    0    419 KBytes
[  5]   2.00-3.00   sec   111 MBytes   928 Mbits/sec    0    419 KBytes
[  5]   3.00-4.00   sec   112 MBytes   936 Mbits/sec    0    419 KBytes
[  5]   4.00-5.00   sec   111 MBytes   935 Mbits/sec    0    419 KBytes
[  5]   5.00-6.00   sec   111 MBytes   934 Mbits/sec    0    419 KBytes
[  5]   6.00-7.00   sec   112 MBytes   936 Mbits/sec    0    419 KBytes
[  5]   7.00-8.00   sec   111 MBytes   935 Mbits/sec    0    419 KBytes
[  5]   8.00-9.00   sec   111 MBytes   934 Mbits/sec    0    419 KBytes
[  5]   9.00-10.00  sec   111 MBytes   935 Mbits/sec    0    419 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.09 GBytes   936 Mbits/sec    0             sender
[  5]   0.00-10.00  sec  1.09 GBytes   934 Mbits/sec                  receiver

>
>> Fixes: f29801030ac6 ("e1000e: Disable TSO for buffer overrun 
>> workaround")
>> Signed-off-by: Mateusz Palczewski <mateusz.palczewski at intel.com>
>> ---
>>   drivers/net/ethernet/intel/e1000e/netdev.c | 10 ++++++----
>>   1 file changed, 6 insertions(+), 4 deletions(-)
>> 
>> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c 
>> b/drivers/net/ethernet/intel/e1000e/netdev.c
>> index 04acd1a992fa..24f4ccb82dc4 100644
>> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
>> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
>> @@ -5307,10 +5307,6 @@ static void e1000_watchdog_task(struct work_struct *work)
>>   					/* oops */
>>   					break;
>>   				}
>> -				if (hw->mac.type == e1000_pch_spt) {
>> -					netdev->features &= ~NETIF_F_TSO;
>> -					netdev->features &= ~NETIF_F_TSO6;
>> -				}
>>   			}
>>   
>>   			/* enable transmits in the hardware, need to do this @@ -5326,6 
>> +5322,12 @@ static void e1000_watchdog_task(struct work_struct *work)
>>   			if (phy->ops.cfg_on_link_up)
>>   				phy->ops.cfg_on_link_up(hw);
>>   
>> +			/* Disable TSO for i219, to avoid transfer speed issue */
>
>Please remove the comma, and please elaborate also in the comment.
>
>> +			if (hw->mac.type == e1000_pch_spt) {
>> +					netdev->features &= ~NETIF_F_TSO;
>> +					netdev->features &= ~NETIF_F_TSO6;
>> +			}
>> +
>>   			netif_wake_queue(netdev);
>>   			netif_carrier_on(netdev);
>
>
>Kind regards,
>
>Paul
>


More information about the Intel-wired-lan mailing list