Hintergrund
Es gab einen Vorfall, bei dem ein Windows-Failovercluster unterbrochen wurde. Ein post mortem zeigte, dass der Knoten wie in diesem Artikel beschrieben "entfernt" wurde .
Wir haben diesen Cluster erst kürzlich vollständig in unsere VMware-Umgebung migriert, und es scheint, dass das oben beschriebene Ereignis die Ursache für den Ausfall gewesen sein könnte.
Der zugehörige VMware-KB-Artikel zu diesem Thema befasst sich mit dem Erhöhen der Small Rx Buffers
und der Rx Ring #1
Einstellung, warnt jedoch davor, dass ein zu starkes Erhöhen des Werts den Arbeitsspeicher auf dem Host drastisch erhöhen kann.
Nach einer Überprüfung der Network Interface\Packets Received Discarded
Leistungsindikatoren für unsere ~ 150 Windows-VMs hatten 22 vNICs auf 16 Gästen einige verworfene Pakete.
Ein Betrag, der klein genug ist, um die Hosts nicht mit zusätzlicher Speichernutzung zu belasten, aber ich möchte verstehen, wie Speicher für diese Einstellungen verwendet wird und woher der Speicher stammt.
Fragen
- Welche Beziehung besteht zwischen der Anzahl der Puffer und der Ringgröße?
- Wie berechnet man den für bestimmte Werte dieser Einstellungen verwendeten Speicherplatz?
- Da sich diese Einstellungen auf der Netzwerkkarte selbst innerhalb des Gastbetriebssystems befinden, gehe ich davon aus, dass es sich um Treibereinstellungen handelt. Dies lässt mich denken, dass der verwendete RAM ausgelagerter oder nicht ausgelagerter Pool sein könnte.
- Ist das richtig?
- Wenn ja, sollte ich mir darüber Sorgen machen?
- Gibt es Bedenken, die ich hier nicht berücksichtige?
Wir versuchen herauszufinden, ob es ein Nachteil ist, diese auf den betroffenen VMs auf ihre Maximalwerte zu setzen, abgesehen von der Speicherauslastung des VMware-Hosts. Wenn wir zum Beispiel das Risiko erhöhen, dass der Poolspeicher des Gasts aufgebraucht wird, neigen wir eher dazu, klein anzufangen.
Einige (möglicherweise alle) dieser Fragen beziehen sich möglicherweise nicht auf VMware oder Virtualisierung.
quelle
Antworten:
Sie sind verwandt, aber unabhängig. Der rx "Ring" bezieht sich auf eine Reihe von Puffern im Speicher, die als Warteschlange verwendet werden, um eingehende Netzwerkpakete vom Host (Hypervisor) an den Gast (Windows VM) weiterzuleiten. Der Speicher wird vom Netzwerktreiber im Gast reserviert und dem Hostspeicher zugeordnet.
Wenn neue Netzwerkpakete auf dem Host eingehen, werden sie in den nächsten verfügbaren Puffer im Ring gestellt. Dann löst der Host einen IRQ im Gast aus, auf den der Gasttreiber reagiert, indem er das Paket vom Ring nimmt und es an den Netzwerkstapel des Gastbetriebssystems sendet, der es vermutlich an die Gastanwendung sendet, um es zu empfangen. Vorausgesetzt, die Pakete kommen langsam genug an und der Gasttreiber verarbeitet sie schnell genug, sollte es immer einen freien Platz im Ring geben. Wenn Pakete jedoch zu schnell eingehen oder der Gast sie zu langsam verarbeitet, kann der Ring voll werden und Pakete werden möglicherweise verworfen (wie Sie in Ihrer Situation gesehen haben).
Durch Erhöhen der Ringgröße kann dieses Problem behoben werden. Wenn Sie den Wert erhöhen, sind gleichzeitig mehr Slots im Ring verfügbar. Dies geht in die zweite Einstellung über, "Small Rx Buffers" (Kleine Empfangspuffer). Hierbei handelt es sich um die Gesamtmenge der verfügbaren Puffer, die zum Füllen der Steckplätze im Ring verwendet werden können. Es müssen mindestens so viele Puffer vorhanden sein wie Steckplätze im Ring. Normalerweise möchten Sie mehr. Wenn der Gast einen Puffer aus dem Ring entnimmt, um ihn dem Gastnetzwerk-Stack zu übergeben, wird er möglicherweise nicht immer sofort an den Treiber zurückgesendet. In diesem Fall können Sie mit Reservepuffern zum Füllen des Rings länger arbeiten, ohne Pakete fallen zu lassen.
Die Rx Ring # 1 / Small Rx Buffers werden für Non-Jumbo-Frames verwendet. Wenn Sie eine Standard-NIC-Konfiguration haben, wird nur dieser Ring verwendet.
Angenommen, Sie sprechen von Non-Jumbo-Frames, muss jeder Puffer groß genug sein, um ein gesamtes Netzwerkpaket zu speichern, ungefähr 1,5 KB. Wenn Sie also 8192 Puffer zur Verfügung haben, würde dies 12 MB beanspruchen. Ein größerer Ring benötigt auch mehr Speicher, aber die Deskriptoren sind klein (Bytes), sodass Sie sich wirklich um die Puffer kümmern müssen.
Ja, es ist ein nicht ausgelagerter Pool. Wenn die Ringpuffer ausgelagert würden, würde dies wahrscheinlich zu verworfenen Paketen führen, während die Puffer wieder eingelagert würden.
Ich bin mir nicht sicher, ob dies für Ihre Situation relevant ist, aber es kann erwähnenswert sein, dass ein größerer Ring den Cache-Speicherbedarf des Netzwerkempfangspfads erhöht. In Mikrobenchmarks sehen Sie, dass ein größerer Ring normalerweise die Leistung beeinträchtigt. In realen Anwendungen ist das jedoch in der Regel ein größeres Problem, wenn ein Paket verworfen wird, als ein kleiner Leistungszuwachs bei Geschwindigkeits-Bursts.
Quelle: Ich habe bei VMware gearbeitet.
quelle
Ich habe keine Antwort für Punkt 1-2-3, aber Sie können sich bei Ihrem virtuellen Entwickler über die VMware-Hostkonfiguration erkundigen. Wenn er VCP ist, wird er das Zeug verstehen :)
Sie müssen Ihren Host wirklich überprüfen, da Windows-Probleme auf dem Host und nicht auf dem Gast auftreten können.
Es gibt viele Hardwarefunktionen, die Ihre Probleme erklären können: Direktpfad, RSS, VCPU, Energieverwaltungsschema ...
Ich kann dir einen Link geben, der deinem virtuellen Team oder dir hilft :)
Über diesen Link wird der Host optimiert. Http://buildvirtual.net/tuning-esxi-host-networking-configuration/
Und dieses fette PDF:
http://www.vmware.com/pdf/Perf_Best_Practices_vSphere5.0.pdf
Und hier geht es um rss:
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2008925
quelle
Ich bin nicht in der Lage, vollständig zu suchen und Sie auf die richtigen Seiten zu verweisen. Deshalb bitte ich Sie, selbst nach den Details zu suchen ... (Entschuldigung)
In Failover Cluster gibt es 4 Einstellungen, die wöchentlich geändert werden können. und sie wirken sich nicht auf Puffer oder ausgelagerte oder nicht ausgelagerte Objekte aus. Dies ändert die Art und Weise, in der Fail over Cluster die Entscheidung trifft, einen Knoten als "entfernt" zu betrachten. Diese Einstellungen sind:
SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold
Möglicherweise lösen sie Ihr Problem nicht, aber wenn Sie daran arbeiten, können Sie im Moment Probleme haben ...
Wenn ich am Montag zurück bin, werde ich auf diesen Beitrag zurückgreifen, wenn Sie weitere Fragen haben
HTH, Edwin.
quelle