Thursday, March 31, 2011

TCP Checksum Offload is not equal to TCP Task Offload

This is an issue that lately I have been answering a lot in the Hyper-V TechNet forum. 

Folks find a link that refers to disabling Checksum Offloading or TCP Offload  to help with strange networking behavior with an application server (Remote Desktop Services, XenApp, Exchange, SQL, SharePoint, etc.).  So they disable “TCP Checksum Offload” using netsh on the Hyper-V Server.  The end result is that the problem is not resolved, so they come to the forum.

In actuality they did not disable the correct feature.  So here is my third attempt to try and straighten this out.

In this particular scenario the features (yes, multiple with some NIC drivers) are referred to as TCP Task Offload.  These are things such as TCP Checksum Offload, Large Send Offload, etc.  And they are properties of the NIC driver – it is not a single server level setting.

There is a really ancient Microsoft KB article that talks about this.  You want to use Method 3 in this article:

I am going to paraphrase it here:

Method 3
If you do not want to disable TCP segmentation offloading on the whole system, and you want to only disable TCP segmentation offloading on the network adapters that Virtual Server 2005 guests use, you must not add the DisableTaskOffload registry entry that is described in Method 2. Instead, you can disable the task offload properties on the Advanced tab of the Properties dialog box of the network adapter.

Warning When you disable the task offload properties, guest virtual machines that are attached to the same virtual network may temporarily disconnect from the virtual network.

To disable the task offload properties, follow these steps:

  1. Click Start, click Run, type ncpa.cpl, and then click OK.
  2. Right-click your network adapter, and then click Properties.
  3. Click the General tab, and then click Configure.
  4. Click the Advanced tab.
  5. In the Property box, click the Offload TCP Segmentation property.
  6. In the Value list, click Off, and then click OK.
  7. If you also have the following task offload properties in the Property box, you must repeat step 5 to step 6 to disable these properties:
    • Offload Receive IP Checksum
    • Offload Receive TCP Checksum
    • Offload Transmit IP Checksum
    • Offload Transmit TCP Checksum

If you have Server Core the following might help:

“There are some settings for TCP/IP, go to "netsh interface tcp" and then run "set global" and you'll see all the options for some of the advanced TCP/IP configuration. One of those may help.”

The magical registry settings are documented in this MSDN article: Using Registry Values to Enable and Disable Task Offloading:

1 comment:

ferhat said...

Brian this is really life saver, Thank you for sharing