Windows Server 2008 または Windows Server 2008 R2 環境で、遅延 ACK を有効にするようにネットワーク環境を設定し、ストレージが iSCSI を使用して接続されている場合、一般的な操作を実行すると iScsiPrt エラーがシステム イベント ログに出力されます。

適用対象: Windows Server 2008 R2 DatacenterWindows Server 2008 R2 EnterpriseWindows Server 2008 R2 Standard

現象


Windows Server 2008 または Windows Server 2008 R2 環境で、遅延 ACK を有効にするようにネットワーク環境を設定し、ストレージが iSCSI を使用して接続されている場合、ファイルのコピーなどの一般的な操作を実行すると iScsiPrt エラーがシステム イベント ログに出力されます。

原因


このエラーは、ネットワーク アダプター (NIC) がパケットをドロップした場合に発生します。



パケットがネットワーク アダプターに到着すると、ネットワーク アダプターによって受信中断が生成されます。 ネットワーク アダプターによって受信中断が生成されると、受信ハンドラーを呼び出すための DPC ルーチンがキューに入れられます。 次に、DPC 中断のタイミングで受信バッファーからパケットが取得され、上位階層の受信ハンドラーに渡されます。 より優先度の高い DPC が実行されているか、その時点でシステムに大きな負荷がかかっている場合、DPC プロセスが実行される前に遅延が発生してバッファーが必要になることがあります。 このバッファーの大きさが十分でない場合、パケットがドロップされます。

一般的に、これは、サーバーの処理速度が遅いためにパケットの受信レート (パケット/秒) を維持できない場合に発生します。 イニシエーター (受信側) は、パケットをドロップすると、ターゲット (送信側) に再送信要求を送信します。 ただし、多くのパケットが一度にドロップされた場合、受信側が再送信を要求したフレームのシーケンス番号と送信側が送信した最新のフレームのシーケンス番号に大きな違いが発生することがあります。 この違いが現在の受信ウィンドウのサイズに達した場合、送信側はそれ以上のパケットを事前に送信することができなくなり、保留中のフレームの受信確認 (ACK) を受け取るまで待機します。 受信側は、DUP ACK を再送信した対象のフレームを受信した後に、他のフレームを受信しないので、0.2 秒の遅延 ACK を待機した後で、ACK を返します。 この結果、5 フレーム/秒の転送/受信レートになり、イニシエーターまたはターゲットでタイムアウトが発生します。

回避策


この問題を回避するには、次のいずれかの方法を使用します。

方法 1: 受信バッファーを増やす

注: この方法は、個別のネットワーク アダプターの設定なので、設定手順についてはネットワーク アダプターの製造元に問い合わせてください。


この例では、Intel PRO/1000 PT Dual Port Server Adapter を使用します。
  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
  2. [名前] ボックスに、「DevMgmt.msc」と入力し、[OK] をクリックします。
  3. [ネットワーク アダプター] を開き、[Intel PRO/1000 PT Dual Port Server Adapter] をクリックして、[プロパティ] をクリックします。
  4. [概要] タブをクリックします。
  5. [プロパティ] の一覧で、[受信バッファー] をクリックし、[値] の一覧から 2048 などの大きな値を選択します。
  6. [OK] をクリックして設定を有効にします。

方法 2: 遅延 ACK を無効にする

重要: このセクション、方法、またはタスクではレジストリの編集方法を説明します。 レジストリを誤って編集すると、重大な問題が発生する可能性があります。 レジストリを編集するときには十分に注意してください。 問題が発生したときレジストリを復元できるように編集する前にレジストリをバックアップしてください。 バックアップと復元の詳細については下のテクニカル サポート情報をクリックしてください。
322756 Windows でレジストリをバックアップおよび復元する方法
下の技術情報に従ってレジストリ値 TcpAckFrequency を 1 に設定すると、遅延 ACK が無効になります。 これにより、パケットがドロップされたときに再送信処理時間が 5 フレーム/秒にならなくなります。 この方法を使用してもパケットのドロップを防ぐことはできません。しかし、パケットがドロップされた場合でも、再送信処理の遅延が改善されるのでタイムアウトが発生しません。
328890 Windows XP および Windows Server 2003 で TCP ACK の動作を制御するための新しいレジストリ エントリ

方法 3: AutoTuningLevel を無効にしてウィンドウ サイズを固定する

下の技術情報の方法を実行して AutoTuningLevel を無効にすると、ウィンドウが拡張されなくなります。 結果として、受信レートが大幅に低下し、パケットがドロップしにくくなります。

注: この方法は、受信レートを低下させ、ネットワークのパフォーマンスも低下します。
934430 ファイアウォール デバイスの背後で Windows Vista を使用すると、ネットワーク接続が失敗する

詳細情報


問題の再現手順

  1. 遅延 ACK が有効になっているシステムで、iSCSI で接続されたディスクに大量のファイルをコピーまたはバックアップします。
  2. パフォーマンス カウンター [Network Interface\Packets Received Discarded] を使用してネットワーク アダプターによってパケットがドロップされているかどうかを確認します。

結果

いずれかの iScsiPrt エラーがシステム イベント ログに出力されます。