Networking – Extremely Slow SMB transfers

file-transfernetworkingperformancesmbwireless-networking

SMB transfers for me are extremely slow. I have two Windows 10 machines and have tried transferring data between the two and get only ~500 mbps over a gigabit connection in both directions.

I have also tried transferring files from android (Neuxs 6P and Pixel XL) to the Windows 10 machine and get an average speed of around ~800 kbps. However, when I transfer from the Windows 10 machine to the phone, I get speeds of ~40 mbps. This speed is faster in this direction, but still much slower than expected.

Iperf3 tests between the two Windows 10 machines show ~900 mbps in both directions. Iperf3 tests from android to the Windows 10 machine is ~200 mbps. I am using Unifi UAP-AC-Lites for the wireless transfers.

What is causing this slow transfer speed?

Best Answer

I haven't actually tried these myself but a lot of internet sources seem to recommended disabling TCP Large Send Offload in the network card device properties page and editing some TCP stack settings, mainly autotuninglevel of the TCP Receive Window size.

To show global TCP settings:

> netsh interface tcp show global

Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : enabled
Chimney Offload State : disabled

Receive Window Auto-Tuning Level : normal

Add-On Congestion Control Provider : default
ECN Capability : disabled
RFC 1323 Timestamps : disabled
Initial RTO : 3000
Receive Segment Coalescing State : enabled
Non Sack Rtt Resiliency : disabled
Max SYN Retransmissions : 2
Fast Open : enabled
Fast Open Fallback : enabled
Pacing Profile : off

Values for autotuninglevel:

disabled: Fix the receive window at its default value.
highlyrestricted: Allow the receive window to grow beyond its default value, but do so very conservatively.
restricted: Allow the receive window to grow beyond its default value, but limit such growth in some scenarios.
normal: Allow the receive window to grow to accommodate almost all scenarios.
experimental: Allow the receive window to grow to accommodate extreme scenarios.

The fix implies trying:

netsh interface tcp set global autotuninglevel=disabled

These settings require a computer restart. Here's a Microsoft article describing the TCP features.

Related Question