Fangtooth Mellanox Connect-x3 speed issue

I was getting a normal 10Gbe connection prior to upgrading. After going to Fangtooth, file transfer would just pause after 10 seconds and remains that way for a very long time and times out. The same happens with browsing directories over SMB where no files will load after going into a directory. I did some iperf tests and saw that I was only getting 1gbit transfer. I don’t think it’s in infiniband mode since there’s an established connection and in can’t install open-ib to check due to apt restriction on truenas.

From Windows:

PS C:\Users\foure> cd .\Downloads\iperf-3.18-win64\
PS C:\Users\foure\Downloads\iperf-3.18-win64> .\iperf3.exe -c 192.168.1.5
Connecting to host 192.168.1.5, port 5201
[  5] local 192.168.1.32 port 50704 connected to 192.168.1.5 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.01   sec   114 MBytes   946 Mbits/sec
[  5]   1.01-2.01   sec  98.8 MBytes   830 Mbits/sec
[  5]   2.01-3.00   sec   107 MBytes   901 Mbits/sec
[  5]   3.00-4.01   sec   112 MBytes   939 Mbits/sec
[  5]   4.01-5.00   sec   107 MBytes   903 Mbits/sec
[  5]   5.00-6.00   sec   106 MBytes   887 Mbits/sec
[  5]   6.00-7.00   sec   111 MBytes   932 Mbits/sec
[  5]   7.00-8.01   sec   106 MBytes   884 Mbits/sec
[  5]   8.01-9.01   sec   110 MBytes   932 Mbits/sec
[  5]   9.01-10.02  sec   112 MBytes   935 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.02  sec  1.06 GBytes   909 Mbits/sec                  sender
[  5]   0.00-10.02  sec  1.06 GBytes   908 Mbits/sec                  receiver

iperf Done.

From TrueNAS:

admin@truenas[~]$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.1.32, port 50765
[  5] local 192.168.1.5 port 5201 connected to 192.168.1.32 port 50766
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   111 MBytes   931 Mbits/sec
[  5]   1.00-2.00   sec  85.5 MBytes   717 Mbits/sec
[  5]   2.00-3.00   sec   108 MBytes   910 Mbits/sec
[  5]   3.00-4.00   sec   110 MBytes   925 Mbits/sec
[  5]   4.00-5.00   sec   107 MBytes   899 Mbits/sec
[  5]   5.00-6.00   sec   112 MBytes   936 Mbits/sec
[  5]   6.00-7.00   sec   110 MBytes   922 Mbits/sec
[  5]   7.00-8.00   sec   111 MBytes   934 Mbits/sec
[  5]   8.00-9.00   sec   112 MBytes   936 Mbits/sec
[  5]   9.00-10.00  sec  86.0 MBytes   721 Mbits/sec
[  5]  10.00-10.00  sec   177 KBytes   634 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  1.03 GBytes   883 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)
-----------------------------------------------------------
^Ciperf3: interrupt - the server has terminated
admin@truenas[~]$ sudo ethtool enp1s0
[sudo] password for admin:
Settings for enp1s0:
        Supported ports: [ FIBRE ]
        Supported link modes:   1000baseX/Full
                                10000baseCR/Full
                                10000baseSR/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  1000baseX/Full
                                10000baseCR/Full
                                10000baseSR/Full
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 10000Mb/s
        Duplex: Full
        Auto-negotiation: off
        Port: FIBRE
        PHYAD: 0
        Transceiver: internal
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000014 (20)
                               link ifdown
        Link detected: yes

Restarting TrueNAS seems to have resolved the issue but after a while the connection would degrade to 1gbe. I can’t tell what’s causing this. Here’s my dmesg:

admin@truenas[~]$ sudo dmesg | grep mlx4
[    1.220356] mlx4_core: Mellanox ConnectX core driver v4.0-0
[    1.220368] mlx4_core: Initializing 0000:01:00.0
[    1.220414] mlx4_core 0000:01:00.0: enabling device (0140 -> 0142)
[    8.174375] mlx4_core 0000:01:00.0: DMFS high rate steer mode is: disabled performance optimized steering
[    8.174684] mlx4_core 0000:01:00.0: 31.504 Gb/s available PCIe bandwidth (8.0 GT/s PCIe x4 link)
[    8.207904] mlx4_en: Mellanox ConnectX HCA Ethernet driver v4.0-0
[    8.208195] mlx4_en 0000:01:00.0: Activating port:1
[    8.220667] mlx4_en: 0000:01:00.0: Port 1: Using 8 TX rings
[    8.226918] mlx4_en: 0000:01:00.0: Port 1: Using 8 RX rings
[    8.233477] mlx4_en: 0000:01:00.0: Port 1: Initializing port
[    8.239951] mlx4_en 0000:01:00.0: registered PHC clock
[    8.243417] <mlx4_ib> mlx4_ib_probe: mlx4_ib: Mellanox ConnectX InfiniBand driver v4.0-0
[    8.243829] <mlx4_ib> mlx4_ib_probe: counter index 1 for port 1 allocated 1
[    8.247878] mlx4_core 0000:01:00.0 enp1s0: renamed from eth0
[   10.763516] mlx4_en: enp1s0: Link Up
[   65.555787] mlx4_en: enp1s0: Steering Mode 1
[   65.567016] mlx4_en: enp1s0: Link Up

Last 100 lines since i can’t include the entire dmesg

[   30.653379] power_meter ACPI000D:00: Found ACPI power meter.
[   30.653450] power_meter ACPI000D:00: Ignoring unsafe software power cap!
[   63.335560] ioatdma: Intel(R) QuickData Technology Driver 5.00
[   63.340167] NTB Resource Split driver, version 1
[   63.342815] Software Queue-Pair Transport over NTB, version 4
[   63.355772] NMI watchdog: Enabled. Permanently consumes one hw-PMU counter.
[   65.351995] bond0: (slave eno1): Enslaving as a backup interface with a down link
[   65.417272] bond0: (slave eno2): Enslaving as a backup interface with a down link
[   65.555787] mlx4_en: enp1s0: Steering Mode 1
[   65.567016] mlx4_en: enp1s0: Link Up
[   69.041092] igb 0000:09:00.0 eno1: igb: eno1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[   69.073084] igb 0000:0a:00.0 eno2: igb: eno2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[   69.196702] bond0: (slave eno1): link status definitely up, 1000 Mbps full duplex
[   69.196719] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[   69.197936] bond0: (slave eno2): link status definitely up, 1000 Mbps full duplex
[   69.197949] bond0: active interface up!
[   80.373872] NFSD: Using nfsdcld client tracking operations.
[   80.373875] NFSD: no clients to reclaim, skipping NFSv4 grace period (net f0000000)

Interesting! I also use ConnectX-3 cards on my TrueNAS boxes. (They are end of life, but quite reliable on Linux in my experience, and come in compact form factors.) I was worried when I saw this post, but so far, my speeds still seem as expected:

[ ID][Role] Interval           Transfer     Bitrate
[  5][TX-C]   0.00-1.01   sec  1.10 GBytes  9.28 Gbits/sec
[  7][RX-C]   0.00-1.01   sec  1.09 GBytes  9.21 Gbits/sec
[  5][TX-C]   1.01-2.01   sec  1.05 GBytes  9.09 Gbits/sec
[  7][RX-C]   1.01-2.01   sec  1.05 GBytes  9.10 Gbits/sec
[  5][TX-C]   2.01-3.01   sec  1.08 GBytes  9.19 Gbits/sec
[  7][RX-C]   2.01-3.01   sec  1.09 GBytes  9.31 Gbits/sec
[  5][TX-C]   3.01-4.01   sec  1.07 GBytes  9.28 Gbits/sec
[  7][RX-C]   3.01-4.01   sec  1.08 GBytes  9.32 Gbits/sec
[  5][TX-C]   4.01-5.01   sec  1.09 GBytes  9.28 Gbits/sec
[  7][RX-C]   4.01-5.01   sec  1.09 GBytes  9.32 Gbits/sec
[  5][TX-C]   5.01-6.01   sec  1.07 GBytes  9.28 Gbits/sec
[  7][RX-C]   5.01-6.01   sec  1.08 GBytes  9.31 Gbits/sec
[  5][TX-C]   6.01-7.01   sec  1.07 GBytes  9.10 Gbits/sec
[  7][RX-C]   6.01-7.01   sec  1.08 GBytes  9.23 Gbits/sec
[  5][TX-C]   7.01-8.01   sec  1.05 GBytes  9.09 Gbits/sec
[  7][RX-C]   7.01-8.01   sec  1.07 GBytes  9.23 Gbits/sec
[  5][TX-C]   8.01-9.01   sec  1.09 GBytes  9.29 Gbits/sec
[  7][RX-C]   8.01-9.01   sec  1.09 GBytes  9.32 Gbits/sec
[  5][TX-C]   9.01-10.01  sec  1.07 GBytes  9.29 Gbits/sec
[  7][RX-C]   9.01-10.01  sec  1.08 GBytes  9.31 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID][Role] Interval           Transfer     Bitrate         Retr
[  5][TX-C]   0.00-10.01  sec  10.7 GBytes  9.22 Gbits/sec                  sender
[  5][TX-C]   0.00-10.01  sec  10.7 GBytes  9.22 Gbits/sec                  receiver
[  7][RX-C]   0.00-10.01  sec  10.8 GBytes  9.27 Gbits/sec    0             sender
[  7][RX-C]   0.00-10.01  sec  10.8 GBytes  9.27 Gbits/sec                  receiver

I’ll leave iperf3 running for a bit and see if the speeds degrade over time…

Thanks for confirming that it’s working fine for you. I went and swapped out my transceivers and it seems to have fixed the issue. It was strange because running iperf3 listener on windows shows about 7 - 8 Gbps, from from windows to linux (listener) it was under 1Gbps. My transceiver on the switch side was running super hot though, I wonder if that was the issue.

1 Like

Ah, that is strange, but glad it’s working for you now!

Indeed, I left it running for a couple hours and didn’t observe any drop in through between a Windows box (with a ConnectX-4 card) and a Fanghorn box (with a ConnectX-3 card):

[ ID][Role] Interval           Transfer     Bitrate
[  5][TX-C]   0.00-9224.92 sec  9.65 TBytes  9.20 Gbits/sec                  sender
[  5][TX-C]   0.00-9224.92 sec  0.00 Bytes  0.00 bits/sec                  receiver
[  7][RX-C]   0.00-9224.92 sec  0.00 Bytes  0.00 bits/sec                  sender
[  7][RX-C]   0.00-9224.92 sec  9.73 TBytes  9.27 Gbits/sec                  receiver

The issue started again.

From Windows 11 to Truenas is 1gbe, but from TrueNas to Windows 11 is around 8Gbps.

PS C:\Users\foure\Downloads\iperf-3.18-win64> .\iperf3.exe -c 192.168.1.5
Connecting to host 192.168.1.5, port 5201
[  5] local 192.168.1.32 port 52286 connected to 192.168.1.5 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.01   sec   111 MBytes   919 Mbits/sec
[  5]   1.01-2.01   sec   103 MBytes   863 Mbits/sec
[  5]   2.01-3.01   sec  87.4 MBytes   736 Mbits/sec
[  5]   3.01-4.01   sec   106 MBytes   888 Mbits/sec
[  5]   4.01-5.00   sec   106 MBytes   893 Mbits/sec
[  5]   5.00-6.02   sec   106 MBytes   875 Mbits/sec
[  5]   6.02-7.01   sec   104 MBytes   877 Mbits/sec
[  5]   7.01-8.01   sec  98.9 MBytes   834 Mbits/sec
[  5]   8.01-9.01   sec   104 MBytes   874 Mbits/sec
[  5]   9.01-10.00  sec   107 MBytes   898 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  1.01 GBytes   866 Mbits/sec                  sender
[  5]   0.00-10.01  sec  1.01 GBytes   864 Mbits/sec                  receiver

iperf Done.
PS C:\Users\foure\Downloads\iperf-3.18-win64> .\iperf3.exe -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.1.5, port 44566
[  5] local 192.168.1.32 port 5201 connected to 192.168.1.5 port 44572
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.01   sec   989 MBytes  8.25 Gbits/sec
[  5]   1.01-2.01   sec  1007 MBytes  8.42 Gbits/sec
[  5]   2.01-3.01   sec   946 MBytes  7.91 Gbits/sec
[  5]   3.01-4.01   sec   371 MBytes  3.13 Gbits/sec
[  5]   4.01-5.01   sec   875 MBytes  7.31 Gbits/sec
[  5]   5.01-6.01   sec   848 MBytes  7.09 Gbits/sec
[  5]   6.01-7.01   sec   593 MBytes  4.98 Gbits/sec
[  5]   7.01-8.01   sec   804 MBytes  6.73 Gbits/sec
[  5]   8.01-9.00   sec   807 MBytes  6.84 Gbits/sec
[  5]   9.00-10.00  sec   914 MBytes  7.70 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  7.96 GBytes  6.84 Gbits/sec                  receiver

Both are using Connect-X3 MCX311A-XCAT

Looks like it might be a Windows 11 issue instead of Truenas now that I am thinking about it.

Ah, quite possibly. I don’t remember the details, but I recall reading about driver issues with the ConnectX-3 cards on Windows 11. That’s why I got a ConnectX-4 for my Windows desktop. (It’s also an ancient card, but uses their newer WinOF-2 driver stack instead of the original WinOF driver that the X-3s use.)

FWIW, the example I gave above was 10G bidi traffic between a MCX311A-XCAT (TrueNAS 25.04) and a MCX4121A-ACAT (Windows 11). I haven’t had any issues with that setup, personally.

At least when I bought it, the ConnectX-4 cards were pretty decently priced. Only real drawback is they’re not tiny like the MCX311As.

Yea you’re right. I am seeing other people with Connect-X3 reporting degraded speed on windows 11 the past few months. Luckily I have two Connect-X4 available to swap out. I was just avoiding using them because they get so hot but nothing an extra intake fan won’t fix. Thanks for checking your settings to validate my issue!

1 Like

You’ve marked this as solved, but I wonder.
Could you post the output of sudo ifconfig please?

What I’ve seen with my connectx-3 card and windows 11 was a reduction to around half the normal speed after the windows box wakes up from sleep mode. If I disable sleep I don’t see a degration.

I’ve already swapped over to my Connect-X4 on my Windows 11 box and I haven’t seen that issue since. From the last iperf3 test I did, you can tell that it was the windows machine box that’s having issue.

Here is the ifconfig output from Truenas (enp1s0 is the Connect-X3 card):

bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 192.168.1.35  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::21e:67ff:fe54:1e2  prefixlen 64  scopeid 0x20<link>
        ether 00:1e:67:54:01:e2  txqueuelen 1000  (Ethernet)
        RX packets 6149252  bytes 4912470582 (4.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20795  bytes 2441673 (2.3 MiB)
        TX errors 0  dropped 2 overruns 0  carrier 0  collisions 0

eno1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:1e:67:54:01:e2  txqueuelen 1000  (Ethernet)
        RX packets 2015044  bytes 1282667034 (1.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12607  bytes 1466106 (1.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x9cb00000-9cbfffff

eno2: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:1e:67:54:01:e2  txqueuelen 1000  (Ethernet)
        RX packets 4134208  bytes 3629803548 (3.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8188  bytes 975567 (952.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x9c900000-9c9fffff

enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.5  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::e61d:2dff:fedf:5d10  prefixlen 64  scopeid 0x20<link>
        ether e4:1d:2d:df:5d:10  txqueuelen 1000  (Ethernet)
        RX packets 68062608  bytes 97624831726 (90.9 GiB)
        RX errors 0  dropped 75118  overruns 0  frame 0
        TX packets 74402729  bytes 107832583351 (100.4 GiB)
        TX errors 0  dropped 61 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 7418  bytes 2404084 (2.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7418  bytes 2404084 (2.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
1 Like

I’ve noticed this as well during my testing from seeing the issue in this thread. It has been happening for a while and I haven’t noticed. I’ve been storing my files on my external HDD recently and haven’t backed them up to my NAS. It was only that I started to catch up on missing backups that I noticed it, coincidentally right went Fangtooth released. It’s definitely Windows 11 and Connect-X3 drivers that are the issue. Switching to my spare Connect-X4 shows normal behavior.

It started happening again. This time I verified that it was not Windows causing the problem.

  1. Rebooted Windows first when this happened. (iperf 3 sub 1Gbit).
  2. Rebooted Truenas next and solved the issue. (expected 9.x Gbit).
  3. Left everything as is and tested a few hours later and iperf3 shows sub 1Gbit.

Things I’ve done:

  1. Tried turning of ASPM by adding GRUB_CMDLINE_LINUX="pcie_aspm=off pcie_port_pm=off" to /etc/default/grub.d/truenas.cfg and sudo update-grub. Did not fix the issue
  2. Looked through,dmesg, /var/log/error, /var/log/syslog no indication of error relating to the Connect X-3 card.
  3. Manually reloaded the Mellanox kernel modules: modprobe mlx4_core, modprobe mlx4_en, and modprobe mlx4_ib speed issue resolved, receiving expected 9.x Gbit.
    3a. I’ve also tested with multiple concurrent streams with iperf3, it does not make a difference when a normal connection test with iperf3 shows sub 1Gbit.
  4. I should mention my server specs at this point in case that has anything to do with it:
    4a. Intel S1200SPLR, Xeon E3-1270 V5, Intel Integrated RAID Mezzanine Module RMS3HC080 SAS/SATA H24093-204, Connect X-3 in PCI-E 3 x8 Slot 4 (direct to CPU), ASM2812 M.2 nvme bifurcation card PCI-E 3 x8 Slot 5 (PCH), Radian Memory Systems Inc. RMS-200 PCI-E x8 Slot 6 (direct to CPU).
    4b. I’ve switched the Connect X-3 and Radian card as well but the issue still occurs both lanes are directly connected to CPU. I have not bothered putting it on Slot 5 since that goes through PCH.
truenas_admin@truenas[~]$ sudo modprobe mlx4_core
truenas_admin@truenas[~]$ sudo modprobe mlx4_en  
truenas_admin@truenas[~]$ sudo modprobe mlx4_ib
truenas_admin@truenas[~]$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.1.32, port 50455
[  5] local 192.168.1.5 port 5201 connected to 192.168.1.32 port 50456
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  1.08 GBytes  9.31 Gbits/sec                  
[  5]   1.00-2.00   sec  1.10 GBytes  9.48 Gbits/sec                  
[  5]   2.00-3.00   sec  1.10 GBytes  9.48 Gbits/sec                  
[  5]   3.00-4.00   sec  1.10 GBytes  9.48 Gbits/sec                  
[  5]   4.00-5.00   sec  1.10 GBytes  9.48 Gbits/sec                  
[  5]   5.00-6.00   sec  1.10 GBytes  9.48 Gbits/sec                  
[  5]   6.00-7.00   sec  1.10 GBytes  9.48 Gbits/sec                  
[  5]   7.00-8.00   sec  1.10 GBytes  9.48 Gbits/sec                  
[  5]   8.00-9.00   sec  1.10 GBytes  9.48 Gbits/sec                  
[  5]   9.00-10.00  sec  1.10 GBytes  9.48 Gbits/sec                  
[  5]  10.00-10.01  sec  11.1 MBytes  9.46 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.01  sec  11.0 GBytes  9.46 Gbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)
-----------------------------------------------------------

Next thing I will test is reloading which particular kernel module(s) will resolve the speed degradation or will reloading all 3 necessary. I still don’t understand what is causing this or the interval at which this happens (may be related).

Lastly, to rule out upgrading as the source of the error, this was tested on a fresh install of Fangtooth with no previous configurations loaded.

Can you please post what sudo ifconfig looks like now?

I’ve made edits to my last posts to include my hardware specs

truenas_admin@truenas[~]$ sudo ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 192.168.1.35  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::21e:67ff:fe54:1e2  prefixlen 64  scopeid 0x20<link>
        ether 00:1e:67:54:01:e2  txqueuelen 1000  (Ethernet)
        RX packets 907363  bytes 1186476905 (1.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2306  bytes 270948 (264.5 KiB)
        TX errors 0  dropped 3 overruns 0  carrier 0  collisions 0

eno1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:1e:67:54:01:e2  txqueuelen 1000  (Ethernet)
        RX packets 52993  bytes 11326398 (10.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1334  bytes 158078 (154.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x9cb00000-9cbfffff  

eno2: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:1e:67:54:01:e2  txqueuelen 1000  (Ethernet)
        RX packets 854370  bytes 1175150507 (1.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 972  bytes 112870 (110.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x9c900000-9c9fffff  

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.5  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::e61d:2dff:fedf:5d10  prefixlen 64  scopeid 0x20<link>
        ether e4:1d:2d:df:5d:10  txqueuelen 1000  (Ethernet)
        RX packets 20350612  bytes 30658285188 (28.5 GiB)
        RX errors 0  dropped 7722  overruns 0  frame 0
        TX packets 597664  bytes 53084212 (50.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 7429  bytes 1570026 (1.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7429  bytes 1570026 (1.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Updated MTU to 9000 to match windows just for the sake of continuity.

truenas_admin@truenas[~]$ iperf3 -s                                
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.1.32, port 50779
[  5] local 192.168.1.5 port 5201 connected to 192.168.1.32 port 50780
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  1.15 GBytes  9.89 Gbits/sec                  
[  5]   1.00-2.00   sec  1.15 GBytes  9.91 Gbits/sec                  
[  5]   2.00-3.00   sec  1.15 GBytes  9.91 Gbits/sec                  
[  5]   3.00-4.00   sec  1.15 GBytes  9.91 Gbits/sec                  
[  5]   4.00-5.00   sec  1.15 GBytes  9.91 Gbits/sec                  
[  5]   5.00-6.00   sec  1.15 GBytes  9.91 Gbits/sec                  
[  5]   6.00-7.00   sec  1.15 GBytes  9.91 Gbits/sec                  
[  5]   7.00-8.00   sec  1.15 GBytes  9.91 Gbits/sec                  
[  5]   8.00-9.00   sec  1.15 GBytes  9.91 Gbits/sec                  
[  5]   9.00-10.00  sec  1.15 GBytes  9.91 Gbits/sec                  
[  5]  10.00-10.01  sec  6.67 MBytes  9.89 Gbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.01  sec  11.5 GBytes  9.91 Gbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)
-----------------------------------------------------------
^Ciperf3: interrupt - the server has terminated
truenas_admin@truenas[~]$ sudo ifconfig
[sudo] password for truenas_admin: 
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 192.168.1.35  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::21e:67ff:fe54:1e2  prefixlen 64  scopeid 0x20<link>
        ether 00:1e:67:54:01:e2  txqueuelen 1000  (Ethernet)
        RX packets 909170  bytes 1186856356 (1.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2332  bytes 273783 (267.3 KiB)
        TX errors 0  dropped 3 overruns 0  carrier 0  collisions 0

eno1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:1e:67:54:01:e2  txqueuelen 1000  (Ethernet)
        RX packets 53662  bytes 11471824 (10.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1348  bytes 159635 (155.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x9cb00000-9cbfffff  

eno2: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:1e:67:54:01:e2  txqueuelen 1000  (Ethernet)
        RX packets 855508  bytes 1175384532 (1.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 984  bytes 114148 (111.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x9c900000-9c9fffff  

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
        inet 192.168.1.5  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::e61d:2dff:fedf:5d10  prefixlen 64  scopeid 0x20<link>
        ether e4:1d:2d:df:5d:10  txqueuelen 1000  (Ethernet)
        RX packets 21763406  bytes 43129582092 (40.1 GiB)
        RX errors 0  dropped 7825  overruns 0  frame 0
        TX packets 1299630  bytes 95223998 (90.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 8074  bytes 1695390 (1.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8074  bytes 1695390 (1.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

You have two IP addresses on the same network on the same server, 192.168.1.5 (enp2s0) and 192.168.1.35 (bond0). That means there are two routes to/from your server on the same network.

This setup is invalid and is liable to cause at least some of the discrepancy you are seeing where you were limited to around 111 MBytes/s in one direction.

The solution is to not have two IPs on the same subnet on the same device.

I just thought about this as well and deleted the bond0 connection to see if it resolves the issue. That’s actually good to know not to do this. So the recommended practice is to always only have 1 connection? If I wanted a failover then I should group all 3 nics and set the other two for fail over with the same IP?