

Disable checksum offloading to resolve network slowdown caused by Windows Firewall

Windows Firewall has an issue with some network adapters that support a hardware feature called checksum offloading. While there's no complete fix, there is a workaround.

A while back, I looked at what caused gigabit networking to slow to a crawl in Windows XP Service Pack 2 under heavy network usage. This happened if you were using gigabit networking in conjunction with two things:

  1. A network card with hardware support for certain acceleration features (in this case, the Large Send Offload feature), and
  2. the Windows Firewall service enabled.

As it turns out, Windows Firewall has a similar issue with some network adapters that support a hardware feature called checksum offloading.

When data comes in through a network, it's "checksummed," meaning the data is checked against a checksum (or validation code) in the headers in the packets it was delivered in. If the data and checksum don't match, the packet is determined to be bad and has to be retransmitted.

To speed things up, some network cards can "offload" the checksumming, i.e., perform the checksumming on the network card itself, rather than leave the job to the CPU. This frees up the CPU to do that much more work on its own, and on a server with extremely high network throughput, that much CPU savings can add up.

Windows XP and Windows Server 2003 both have driver-level support for checksum offloading in many network cards (that is, when the card itself also supports it). However, sometimes this causes the network link on the computer in question to drop unexpectedly.

Microsoft knows about the problem, and while there's no complete fix, there is a workaround: You can either disable offloading to the network adapter, or disable Windows Firewall. (The problem may be due more to the network driver than Windows itself, but it's not clear which would be more at fault.)

To disable checksum offloading:

  1. Open the Registry and navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.
  2. Add a new DWORD value named DisableTaskOffload and set it to 1.
  3. You may need to restart the system to make these changes take effect.


More information on this topic:


This was last published in November 2006

Dig Deeper on Enterprise infrastructure management

Start the conversation

Send me notifications when other members comment.

Please create a username to comment.