acooks / tn40xx-driver

Linux driver for tn40xx from Tehuti Networks
71 stars 50 forks source link

Retransmissions in case of 1G speed #67

Open ViktorButskikh opened 7 months ago

ViktorButskikh commented 7 months ago

Hello to all

On my PC I use network 10G card based on tehuti + Marvell MV88X3310

On the 10G everything work fine. But when I connect my PC to another (direct connection) with Intel 82574L I'm getting a lot of retransmission. I use 10G certified cable 2 meter lengths. On the both PC installed Linux Fedora 38.

Th retransmission quite easy to reproduce with iperf3.

On the Fedora 38 (with 82574L) I'm launching iperf3 server:

iperf3 -s -i 10

On the Fedora 38 (with tehuti) client: iperf3 -c 192.168.101.73 -i 10 -t 1800

In log of iperf3 client I see a lot of retransmission:

Connecting to host 192.168.101.73, port 5201 [ 5] local 192.168.101.136 port 41950 connected to 192.168.101.73 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 1.08 GBytes 927 Mbits/sec 16502 59.4 KBytes
[ 5] 10.00-20.00 sec 1.08 GBytes 927 Mbits/sec 17137 63.6 KBytes
[ 5] 20.00-30.00 sec 1.08 GBytes 929 Mbits/sec 16485 60.8 KBytes
[ 5] 30.00-40.00 sec 1.08 GBytes 926 Mbits/sec 17191 52.3 KBytes

Summary problem looks like (in case of 1G connection):

Transferring Tehuti+Marvell - > Intel 82574L: a lot of retransmission Transferring Intel 82574L -> Tehuti+Marvell: no retransmission

Looks like something wrong in case of transmit data from Tehuti + Marvell to Intel 8254L

Also I have tried other PC (with Fedora 38) and Intel I219-LM with the same result.

On Marvell I have tried 0.3.10 and 0.3.11 firmwares. But on both cases I have retransmissions.

Can anybody share the idea for this behavior? For me is really strange that 10G works ok but 1 G not.

acooks commented 7 months ago

Thanks for the report. I've taken note that pause frames are not functional or not implemented and will look into it.

ViktorButskikh commented 7 months ago

Hello,

How can I help for fix and test it? :)

ViktorButskikh commented 6 months ago

Hello to all From my side I've tried to play around with pause frames parameter: https://github.com/acooks/tn40xx-driver/blob/92c112d8481b91e67fb74774b78ef577a6948729/tn40.c#L1028

_WRITE_REG(priv, 0x12E0, 0x28); WRITE_REG(priv, regPAUSE_QUANT, 0xFFFF); WRITEREG(priv, 0x6064, 0xF);

Unfortunately without success. Has anybody idea how to fix it?