Troubleshooting Unexplained Gigabit Network Throttling on Windows 7 with NVIDIA nForce 520: TCP Window Scaling and Packet Loss Analysis


2 views

After migrating from Windows Vista to Windows 7 x64 RTM, my HP Pavilion dv9700 with NVIDIA nForce 520 chipset exhibited bizarre network performance characteristics:

  • Upload speeds reaching 909Mbps in iperf tests with 64K window size
  • Download speeds capped at 20Mbps regardless of window size adjustment
  • Wireshark showing TCP retransmissions and out-of-order packets

The smoking gun appeared in Wireshark captures showing repeated patterns like:

37792 27.286370 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1  TCP [TCP Previous segment lost]
37794 27.286375 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1  TCP [TCP Fast Retransmission]
37795 27.286377 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1  TCP [TCP Out-Of-Order]

Since NVIDIA doesn't provide native Windows 7 drivers for nForce 520, we need to modify registry settings for TCP autotuning:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]
"EnableRSS"=dword:00000000
"EnableTCPA"=dword:00000000
"TcpWindowSize"=dword:00040000
"Tcp1323Opts"=dword:00000001
"DefaultTTL"=dword:00000040
"EnablePMTUDiscovery"=dword:00000001
"GlobalMaxTcpWindowSize"=dword:00040000

PowerShell commands to verify and adjust network settings:

# Check current TCP settings
Get-NetTCPSetting | Select SettingName, InitialCongestionWindow, CongestionProvider

# Disable autotuning for testing
netsh interface tcp set global autotuninglevel=restricted

# Enable explicit congestion notification
netsh interface tcp set global ecncapability=enabled

Using SMB direct for file transfers bypasses some TCP limitations:

# On Windows 7 client
New-SmbMapping -LocalPath Z: -RemotePath \\server\share -RequirePrivacy $true

# Verify SMB version
Get-SmbConnection | Select ServerName, Dialect, Encrypted

For NVIDIA nForce adapters, these advanced properties often help:

  • Disable "Interrupt Moderation" in adapter properties
  • Set "Jumbo Packet" to disabled (even if switch supports it)
  • Enable "Receive Buffers" at maximum value (2048)
  • Disable all power management options

Modified iperf commands for comprehensive testing:

# Test bidirectional throughput
iperf3 -c server -d -t 30 -w 128k -P 4

# Test with parallel streams
iperf3 -c server -t 20 -w 256k -P 8 -R

After extensive testing with multiple variables (driver versions, firewall configurations, and antivirus software removal), the core symptom persists: While upload speeds reach 909Mbps (with optimized window size), download speeds plateau at a dismal 17.6-20.8Mbps. The iperf results reveal a critical TCP window size dependency:

// Normal upload test (136Mbps)
iperf -c naru  

// Optimized upload (909Mbps)  
iperf -c naru -w 64k

// Download tests (both show throttling)
iperf -c miyuki          // 20.8Mbps  
iperf -c miyuki -w 64k   // 17.6Mbps

The packet captures show recurring TCP anomalies during server-to-laptop transfers:

37792 27.286370 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1 TCP [TCP Previous segment lost]
37794 27.286375 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1 TCP [TCP Fast Retransmission]  
37795-37797 TCP Out-Of-Order segments

For NVIDIA nForce 520 on Windows 7 x64 (where official drivers are unavailable), implement these registry tweaks:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpWindowSize"=dword:00010000
"GlobalMaxTcpWindowSize"=dword:00010000  
"Tcp1323Opts"=dword:00000003
"DefaultTTL"=dword:00000040
"EnablePMTUDiscovery"=dword:00000001

Create a PowerShell script to disable energy-efficient Ethernet:

# Disable NIC power saving
Get-NetAdapter | Where-Object {$_.InterfaceDescription -match "nForce"} | 
ForEach-Object {
    Disable-NetAdapterPowerManagement -Name $_.Name
    Set-NetAdapterAdvancedProperty -Name $_.Name -DisplayName "Energy Efficient Ethernet" -DisplayValue "Disabled"
}

Extract and modify Vista x64 drivers using these INF edits:

[Manufacturer]
%NVIDIA% = NVIDIA, NTamd64.10.0...6.1

[NVIDIA.NTamd64.10.0...6.1]
%NVIDIA_DEV.XXXX.XXXX% = Section_Install, PCI\VEN_10DE&DEV_XXXX

Despite CAT5e cabling, run this Linux-based cable diagnostic (via LiveUSB):

sudo ethtool -mi eth0
sudo mii-tool -v eth0
sudo ethtool -t eth0 offline