6 votes

Comment empêcher le TCP ZeroWindow lors de l'écriture d'un fichier volumineux sur un partage Windows ?

On m'a donné accès à un partage sur un système Windows Server 2003 SP1 (10.a.bbb.ccc) qui est un serveur de fichiers et d'imprimantes, et de gros fichiers sont régulièrement copiés sur ce partage. Cependant, il arrive qu'une telle copie échoue. Lorsque je reproduis ce problème à l'aide de Robocopy (sur 10.xxx.yy.zzz), j'obtiens quelque chose comme

 70.4%
2013/07/31 11:20:21 ERROR 64 (0x00000040) Copying File <<file name removed>>
The specified network name is no longer available.

Waiting 30 seconds... Retrying...
         New File          105.2 m   <<file name removed>>
  0.0%

dumpcap + Wireshark montre que lorsque cela se produit, au milieu de la copie, le serveur n'accepte soudainement plus aucune donnée sur le port TCP 445, en fixant la taille de la fenêtre à zéro :

No.     Time           Source                Destination           Protocol Length Info
   7303 5.841186000    10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7304 6.149715000    10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7305 6.150137000    10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7306 6.749711000    10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7307 6.750087000    10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7308 7.946779000    10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7309 7.947130000    10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7310 10.349783000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7311 10.350201000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7312 15.149910000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7313 15.150283000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7314 24.747096000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7315 24.756210000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7316 43.958531000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      55     [TCP ZeroWindowProbe] [TCP segment of a reassembled PDU]
   7317 43.958863000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      60     [TCP ZeroWindowProbeAck] [TCP ZeroWindow] microsoft-ds > 57918 [ACK] Seq=10864 Ack=6973070 Win=0 Len=0
   7318 75.216401000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      54     57918 > microsoft-ds [RST, ACK] Seq=6973070 Ack=10864 Win=0 Len=0
   7319 75.225543000   10.xxx.yy.zzz         10.a.bbb.ccc          TCP      66     55972 > microsoft-ds [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1
   7320 75.225933000   10.a.bbb.ccc          10.xxx.yy.zzz         TCP      66     microsoft-ds > 55972 [SYN, ACK] Seq=0 Ack=1 Win=16384 Len=0 MSS=1460 WS=1 SACK_PERM=1

Au bout de 70 secondes, le client (ici : Robocopy) s'arrête.

Ma question : S'agit-il d'un problème connu avec les partages Windows ? Qu'est-ce qui peut être examiné/débogué/retrouvé sur le serveur de fichiers ? Y a-t-il des paramètres spécifiques que nous devons examiner ou expérimenter ?

Merci d'avance !

3voto

Jody Bruchon Points 155

Je suis d'accord avec @suprjami et j'aimerais proposer cette piste d'exploration : au lieu que les disques du serveur soient trop lent Dans le cas d'un disque dur, il se peut qu'il soit défaillant (les disques durs classiques se bloquent pendant environ 8 secondes par lecture d'un mauvais cluster), qu'il soit gravement fragmenté, qu'il manque d'espace (ce qui entraîne une fragmentation importante et une forte sollicitation du disque) ou qu'une tâche fortement liée au processeur ou au disque sur la machine affame tout le reste, y compris les sous-systèmes de réseau et de disque. Je recommande de vérifier les erreurs de disque dans l'Observateur d'événements du serveur et d'ouvrir le Gestionnaire de tâches ou l'Explorateur de processus avec quelques colonnes pour afficher les défauts de page, l'utilisation du CPU et les octets de lecture et d'écriture des E/S, et de voir ce que font les chiffres.

Étant donné que ZeroWindow est un symptôme de la saturation du tampon de réception TCP, je suis prêt à parier que le problème vient de quelque chose qui consomme 100 % de l'unité centrale du serveur ou qui provoque un trafic réseau excessivement élevé sur le serveur et qui bloque tout.

Une autre possibilité est le bufferbloat dans l'implémentation TCP d'un dispositif intermédiaire, si ce dispositif modifie les paquets qu'il relaie d'une manière ou d'une autre (par exemple, NAT). Vos transferts connaissent-ils par hasard des pics et des chutes de taux de transfert ?

0voto

humanzz Points 307

Avant d'examiner les paramètres de réglage TCP (vous pouvez modifier la pile TCP sous Windows, mais dans 99,9 % des cas, la mise à l'échelle automatique fonctionne bien), pourriez-vous nous donner un peu plus d'informations ? Par exemple : quelles sont les spécifications du serveur de réception, le client et le serveur sont-ils tous deux sur le même réseau de couche 2, à quelle vitesse les cartes d'interface réseau fonctionnent-elles, etc.

Aussi, serait-il intéressant d'expérimenter le paramètre /IPG de ROBOCOPY, et peut-être les paramètres /R : et /W : (retry et wait) ?

0voto

suprjami Points 3466

La fenêtre zéro TCP signifie que l'hôte récepteur est surchargé. Il a demandé à l'hôte expéditeur d'arrêter d'envoyer des données, car il a besoin d'un peu de temps pour traiter ce qu'il a déjà reçu.

Il semble que les disques du serveur soient trop lents et que le client finisse par abandonner et interrompre la connexion.

Ralentissez votre transfert lorsqu'il quitte le client ou installez des disques plus rapides sur le serveur.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X