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