Poor 10Gbe performance between Windows and FreeNAS/BSD

I purchased two identical Intel Converged X540-T2 10Gb Network Adapters and I installed one in my Windows Desktop and the other in my home based FreeNAS 11 server which is based on FreeBSD. Both cards are attached to a Netgear 10Gb managed switch and they both attach at 10Gb speeds. When I copy large test files from the FreeNAS SMB share to the Windows system, I barely see over 1Gb per second transfer rates. When I copy from the Windows system to the FreeNAS servers SMB share, I get 3-5Gb per second. These are the only two cards on the switch and no VLANs are configured. Very simple.

I am looking to optimize my network performance between the two systems, but before I start making any tweaks, I just want to see how the cards configured themselves to compare apples to apples. I would like to match the settings between the cards as much as possible so they negotiate to the same rules.

I can see all the setting in Windows by looking at the properties and the Intel driver settings, but I only have ifconfig to read the current operational network settings on the FreeNAS system, which may be enough and I just don't know how to read all the output. For example, is flow control enabled? What are the receive and transmit buffers set to? What are the RSS queues set to? There are also parameters for Large Send Offload for V2 IPv4/IPv6 that look interesting.

Using ethtool under Linux would give me a lot of this type of information, but there doesn't seem to be a FreeBSD version and based on other threads this is not needed and they circle back to ifconfig. I would greatly appreciate any suggestions for a tutorial on how to read the ifconfig output below or maybe a tool like ethtool that will show these advanced settings. If you're aware of any obvious tweaks, please share those too.
Code:
root@freenas:/var # uname -a
FreeBSD freenas 11.0-STABLE FreeBSD 11.0-STABLE #0 r321665+c0805687fec(freenas/11.0-stable): Tue Sep  5 16:07:24 UTC 2017     root@gauntlet:/freenas-11-releng/freenas/_BE/objs/freenas-11-releng/freenas/_BE/os/sys/FreeNAS.amd64  amd64
   
root@freenas:/var # ifconfig ix0
ix0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=a400b9<RXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWTSO,RXCSUM_IPV6>
        ether a0:36:9f:50:fc:60
        inet 192.168.1.96 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 fe80::a236:9fff:fe50:fc60%ix0 prefixlen 64 scopeid 0x1
        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
        media: Ethernet autoselect (10Gbase-T <full-duplex,rxpause,txpause>)
        status: active
 
See ifconfig(8), you'll find it much more comprehensive than Linux counterpart. Some parameters may be also set using sysctl(8), I would start with sysctl -a | grep ix here. Those would be usually mentioned in the driver manpage, but I find ix* man rather sparse here.
 
Back
Top