When a packet reaches a network adapter, a receive interrupt is generated by the network adapter. When a receive interrupt is generated by a network adapter, the DPC routine is placed in the queue to call the receive handler. Next, the packet is retrieved from the receive buffer at the timing of the DPC interrupt and handed to a higher layer receive handler. If a DPC with a higher priority is being executed or there is a heavy load on the system at this time, there may be a delay before the DPC process is executed making a buffer necessary. If this buffer is not big enough, then a packet is dropped.
In general, this occurs when the server processing speed is not fast enough to keep up with the packet reception rate (packets/sec). When the Initiator (receiving side) drops a packet, it will send a resend request to the Target (sending side). However, if a large number of packets are dropped at once, there may be a large discrepancy between the sequence numbers of the frames that the receiving side requests to be resent and the newest frames that the sending side has sent. When this discrepancy reaches the current receiving window size, the sending side is not able to send any more packets in advance and waits until it receives receive acknowledgement (ACK) for pending frames. After the receiving side receives the frame for which it resent a DUP ACK it does not receive any other frames, so that after waiting the 0.2 seconds of the Delay ACK, it returns the ACK. This results in a 5 frame/sec transmission/reception rate, so that a time out occurs at the Initiator or Target.
Method 1: Increase the receiving bufferNote: This method is a unique network adapter setting, so please ask the supplier of your network adapter for the setting procedures.
In this example, an Intel PRO/1000 PT Dual Port Server Adapter is used.
- Click Start button, then click Run.
- In Open box, type DevMgmt.msc, then click OK.
- Open Network Adapter, right click Intel PRO/1000 PT Dual Port Server Adapter, then click Properties.
- Click Summary tab.
- From Properties list, click Receive Buffers, then select a larger value from Value list, such as 2048.
- Click OK to enable the setting.
Method 2: Disable Delay ACKImportant: This section, method, or task describes how to edit the Registry. Making a mistake in the Registry can result in serious problems. Be very careful when editing the Registry. Making a backup of the Registry before editing it will allow restoring the Registry if a problem should occur. Click the Technical Support Information below for details on backing up and restoring.
Method 3: Disable AutoTuningLevel to fix the window sizeDisabling AutoTuningLevel by executing the technical information method below will prevent the window from expanding. As a result, there will be a great reduction in the receiving rate, making it more difficult to drop packets.
Note: This method will reduce the receiving rate and the performance of the network will also be reduced.
Procedure for Recreating the Problem
- In a system in which Delay ACK is enabled, copy or backup a large volume of files to a disk connected with iSCSI.
- Check for packets dropped by the network adapter with the performance counter [Network Interface\Packets Received Discarded].