Contexte
Nous avons eu un incident lors duquel un cluster de basculement Windows a subi une interruption. Une autopsie a montré que le nœud avait été "supprimé" comme décrit dans cet article .
Nous avons récemment récemment entièrement migré ce cluster dans notre environnement VMware, et il semble que l'événement décrit ci-dessus ait pu être la cause de la panne.
L'article VMware KB associé à ce sujet parle d'augmentation de Small Rx Buffers
et du Rx Ring #1
paramètre, mais prévient qu'une augmentation excessive de ces paramètres pourrait considérablement augmenter la surcharge de mémoire sur l'hôte.
Après un audit des Network Interface\Packets Received Discarded
compteurs de performance pour nos ~ 150 machines virtuelles Windows, 22 vNIC sur 16 invités ont eu des paquets rejetés.
Une quantité suffisamment petite pour que je ne m'inquiète pas de taxer les hôtes avec une utilisation supplémentaire de la mémoire, mais je veux comprendre comment la mémoire est utilisée pour ces paramètres et d'où vient la mémoire.
Des questions
- Quelle est la relation entre le nombre de tampons et la taille de l'anneau?
- Comment calcule-t-on la quantité de mémoire utilisée pour des valeurs données de ces paramètres?
- Étant donné que ces paramètres se trouvent sur la carte réseau elle-même dans le système d'exploitation invité, je suppose que ce sont des paramètres de pilote. Cela me fait penser que la RAM utilisée peut être un pool paginé ou non paginé.
- Est-ce correct?
- Si oui, devrais-je m'en inquiéter?
- Y a-t-il des préoccupations que je ne prends pas en compte ici?
Nous essayons de déterminer s'il existe un inconvénient à les définir à leur maximum sur les machines virtuelles affectées, autres que l'utilisation de la mémoire hôte VMware. Si nous augmentons le risque d'épuisement de la mémoire du pool chez l'invité par exemple, nous sommes plus enclins à commencer petit.
Certaines (peut-être toutes) de ces questions peuvent ne pas être spécifiques à VMware ou à la virtualisation.
la source
Réponses:
Ils sont liés, mais indépendants. Le «anneau» rx fait référence à un ensemble de tampons en mémoire qui sont utilisés comme file d'attente pour transmettre les paquets réseau entrants de l'hôte (hyperviseur) à l'invité (machine virtuelle Windows). La mémoire est réservée dans l'invité par le pilote réseau et elle est mappée dans la mémoire hôte.
À mesure que de nouveaux paquets réseau arrivent sur l'hôte, ils sont placés sur le prochain tampon disponible dans l'anneau. Ensuite, l'hôte déclenche une IRQ dans l'invité, à laquelle le pilote invité répond en retirant le paquet de l'anneau et en le distribuant à la pile réseau de l'OS invité, qui l'envoie vraisemblablement à l'application invitée en prétendant le recevoir. En supposant que les paquets arrivent assez lentement et que le pilote invité les traite assez rapidement, il devrait toujours y avoir un emplacement libre dans l'anneau. Cependant, si les paquets arrivent trop rapidement ou si l'invité les traite trop lentement, l'anneau peut devenir plein et les paquets peuvent être abandonnés (comme vous l'avez vu dans votre situation).
L'augmentation de la taille de la bague peut aider à atténuer ce problème. Si vous l'augmentez, plus de slots seront disponibles dans le ring à la fois. Cela se poursuit dans le deuxième paramètre, "Small Rx Buffers", qui est la quantité totale de tampons disponibles qui peuvent être utilisés pour remplir les emplacements de l'anneau. Il doit y avoir au moins autant de tampons que d'emplacements dans l'anneau. En général, vous en voulez plus. Lorsque l'invité enlève un tampon de l'anneau pour le donner à la pile du réseau invité, il ne peut pas toujours être immédiatement renvoyé au pilote. Si cela se produit, avoir des tampons de rechange pour remplir l'anneau signifie que vous pouvez continuer plus longtemps sans perdre de paquets.
Les tampons Rx Ring # 1 / Small Rx sont utilisés pour les trames non jumbo. Si vous avez une configuration NIC par défaut, c'est le seul anneau qui sera utilisé.
En supposant que vous parlez de trames non jumbo, chaque tampon doit être suffisamment grand pour stocker un paquet réseau entier, environ 1,5 Ko. Donc, si vous avez 8192 tampons disponibles, cela utiliserait 12 Mo. Un anneau plus grand utilisera également plus de mémoire, mais les descripteurs sont petits (octets), c'est donc vraiment les tampons dont vous devez vous soucier.
Oui, c'est une piscine non paginée. Si les tampons en anneau étaient paginés, cela entraînerait probablement la perte de paquets pendant que les tampons étaient renvoyés.
Je ne suis pas sûr que cela soit pertinent pour votre situation, mais il convient de noter qu'un anneau plus grand augmentera l'encombrement du cache du chemin de réception réseau. Dans les microbenchmarks, vous verrez qu'un anneau plus grand nuit généralement aux performances. Cela dit, dans les applications réelles, si un paquet est abandonné, c'est généralement plus important qu'un petit gain de performances en rafales de vitesse.
Source: J'ai travaillé chez VMware.
la source
Je n'ai pas de réponse pour le point 1-2-3 mais vous pouvez vérifier auprès de votre ingénieur virtuel la configuration de l'hôte Vmware. S'il est VCP, il comprendra les choses :)
Vous devez vraiment vérifier votre hôte car les problèmes Windows peuvent être sur l'hôte et non sur l'invité.
Il existe de nombreuses fonctionnalités matérielles qui pourraient expliquer vos problèmes, directpath io, rss, vcpu, schéma de gestion de l'alimentation ...
Je peux vous donner un lien qui aide votre équipe virtuelle, ou vous :)
Ce lien concerne le réglage de l'hôte http://buildvirtual.net/tuning-esxi-host-networking-configuration/
Et ce gros pdf:
http://www.vmware.com/pdf/Perf_Best_Practices_vSphere5.0.pdf
Et celui-ci concerne rss:
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2008925
la source
Je ne suis pas en mesure de faire une recherche complète et de vous orienter vers les bonnes pages: je vous demande donc de rechercher vous-même les détails ... (désolé)
Dans Fail over Cluster, il y a 4 paramètres qui peuvent être modifiés; et ils n'affecteront pas les tampons ou paginés ou non paginés ... Cela change la façon dont le basculement de cluster prend la décision de considérer un nœud "supprimé". Ces paramètres sont les suivants:
SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold
Ils ne résoudront peut-être pas votre problème, mais les régler peut vous éviter des ennuis pour le moment ...
De retour lundi, je reviendrai sur cet article si vous avez d'autres questions
HTH, Edwin.
la source