VMXNET3 riceve il dimensionamento del buffer e l'utilizzo della memoria


12

sfondo

Abbiamo avuto un incidente in cui un cluster di failover di Windows ha subito un'interruzione. Un post mortem ha mostrato che il nodo è stato "rimosso" come descritto in questo articolo .

Solo di recente abbiamo migrato completamente questo cluster nel nostro ambiente VMware e sembra che l'evento sopra descritto possa essere stato la causa dell'interruzione.

L'articolo VMware KB associato su questo parla di aumentare l' Small Rx Bufferse l' Rx Ring #1impostazione, ma avverte che l'aumento questi troppo potrebbe aumentare drasticamente sovraccarico di memoria sull'host.

Dopo un controllo dei Network Interface\Packets Received Discardedcontatori delle prestazioni per le nostre ~ 150 macchine virtuali Windows, 22 vNIC su 16 guest avevano alcuni pacchetti scartati.

Una quantità abbastanza piccola che non sono preoccupato di tassare gli host con l'utilizzo di memoria aggiuntiva, ma voglio capire come viene utilizzata la memoria per queste impostazioni e da dove proviene la memoria.

Domande

  1. Qual è la relazione tra numero di buffer e dimensioni dell'anello?
  2. Come si calcola la quantità di memoria utilizzata per determinati valori di queste impostazioni?
  3. Poiché queste impostazioni si trovano sulla stessa NIC all'interno del sistema operativo guest, presumo che siano impostazioni del driver. Questo mi fa pensare che la RAM utilizzata potrebbe essere pool paginato o non paginato.
    1. È corretto?
    2. Se è così, dovrei essere preoccupato per quello?
  4. Ci sono dubbi che non sto prendendo in considerazione qui?

Stiamo cercando di determinare se esiste un inconveniente nell'impostare questi valori al massimo sulle VM interessate, oltre all'utilizzo della memoria dell'host VMware. Se stiamo aumentando il rischio di esaurimento della memoria del pool nel guest, ad esempio, siamo più propensi a iniziare in piccolo.

Alcune (forse tutte) di queste domande potrebbero non essere specifiche per VMware o virtualizzazione.


Ho visto cose davvero traballanti quando il motore di offload TCP della NIC fisica si stava comportando male e le VM mostravano comportamenti strani, potrebbe essere un vantaggio su cui puoi dare seguito.
SpacemanSpiff

@SpacemanSpiff vale la pena verificare, ma solo 16 VM su 150+ mostrano il comportamento. Questi 16 sono distribuiti nel cluster a 12 nodi e ricevono tutti occasionalmente forti raffiche di traffico che sembrano essere ciò che scatena i sintomi descritti nell'articolo di KB. Alcuni di questi sono cluster di Windows, quindi non si spostano con DRS, altrimenti potrei verificare se tutti gli ospiti interessati hanno mostrato pacchetti rilasciati su un host specifico prima di essere vMotioned off. Controllerò di nuovo e vedrò se riesco a trovare delle correlazioni. Grazie.
Briantist,

Microbursting forse, che hardware è questo?
SpacemanSpiff

@SpacemanSpiff Server IBM, alcuni diversi modelli e revisioni, anche non sono sicuro di quali schede di rete, posso verificare le specifiche domani.
Briantist,

Risposte:


5

Qual è la relazione tra numero di buffer e dimensioni dell'anello?

Sono imparentati, ma indipendenti. Il "ring" rx si riferisce a un set di buffer in memoria che vengono utilizzati come coda per passare i pacchetti di rete in arrivo dall'host (hypervisor) al guest (VM di Windows). La memoria viene riservata nel guest dal driver di rete e viene mappata nella memoria host.

Quando arrivano nuovi pacchetti di rete sull'host, vengono messi sul successivo buffer disponibile sul ring. Quindi, l'host innesca un IRQ nel guest, a cui il driver guest risponde togliendo il pacchetto dall'anello e inviandolo allo stack di rete del sistema operativo guest, che presumibilmente lo invia all'applicazione guest inducendolo a riceverlo. Supponendo che i pacchetti arrivino abbastanza lentamente e che il driver guest li stia elaborando abbastanza velocemente, dovrebbe esserci sempre uno slot libero sul ring. Tuttavia, se i pacchetti arrivano troppo velocemente o l'ospite li sta elaborando troppo lentamente, l'anello può diventare pieno e i pacchetti potrebbero essere eliminati (come hai visto nella tua situazione).

L'aumento della dimensione dell'anello può aiutare a mitigare questo problema. Se lo aumenti, più slot saranno disponibili sul ring alla volta. Questo segue la seconda impostazione, "Small Rx Buffers", che è la quantità totale di buffer disponibili che possono essere utilizzati per riempire gli slot nell'anello. Devono esserci almeno tanti buffer quanti slot nell'anello. In genere vuoi di più. Quando il guest toglie un buffer dal ring per assegnarlo allo stack di rete del guest, potrebbe non essere sempre restituito immediatamente al driver. Se ciò accade, avere buffer di riserva per riempire l'anello significa che puoi andare più a lungo senza far cadere i pacchetti.

I buffer Rx Ring # 1 / Small Rx sono utilizzati per frame non jumbo. Se si dispone di una configurazione NIC predefinita, questo è l'unico anello che verrà utilizzato.

Come si calcola la quantità di memoria utilizzata per determinati valori di queste impostazioni?

Supponendo che tu stia parlando di frame non jumbo, ogni buffer deve essere abbastanza grande da contenere un intero pacchetto di rete, all'incirca 1,5 kb. Quindi, se hai 8192 buffer disponibili, utilizzare 12 MB. Un anello più grande utilizzerà anche più memoria, ma i descrittori sono piccoli (byte), quindi sono davvero i buffer di cui devi preoccuparti.

Poiché queste impostazioni si trovano sulla stessa NIC all'interno del sistema operativo guest, presumo che siano impostazioni del driver. Questo mi fa pensare che la RAM utilizzata potrebbe essere pool paginato o non paginato.

Sì, è un pool non di paging. Se i buffer ad anello fossero impaginati, ciò comporterebbe probabilmente la caduta di pacchetti mentre i buffer venivano ripagati.

Ci sono dubbi che non sto prendendo in considerazione qui?

Non sono sicuro che ciò sia rilevante per la tua situazione, ma potrebbe valere la pena notare che un anello più grande aumenterà il footprint della cache del percorso rx della rete. Nei microbenchmark vedrai che un anello più grande di solito fa male alle prestazioni. Detto questo, nelle applicazioni della vita reale, se un pacchetto viene eliminato, di solito si tratta di un affare maggiore rispetto a un piccolo aumento delle prestazioni in raffiche di velocità.

Fonte: ho lavorato in VMware.


1
Grazie Roger, ottima prima risposta. Non sono stato in questa compagnia per un po ', quindi questo problema è stato lontano dal mio radar, ma per completezza, c'è un problema di utilizzo della memoria per impostarli al massimo? L'articolo della KB fa sembrare che potresti usare molta memoria in quel modo, ma sembra che la quantità sarebbe piuttosto piccola. Lo chiedo perché non è anche chiaro come dimensionare questi valori oltre a tentativi ed errori, quindi potrebbe essere più semplice impostarli al massimo se non ci sono / piccoli svantaggi.
briantist

1
Ri: utilizzo della memoria, due cose che vorrei notare: 1) Se non si utilizzano i frame jumbo, sono d'accordo, la quantità di memoria con l'impostazione massima è ancora piuttosto piccola. Se si utilizzano frame jumbo, la dimensione del buffer è di circa 9kb e quindi si utilizza più memoria. 2) La quantità di memoria disponibile in un pool non di paging è inferiore alla quantità totale di memoria sull'host. Non sono un esperto qui, ma questo link ha una carrellata piuttosto completa su come calcolare la memoria disponibile: blogs.technet.microsoft.com/markrussinovich/2009/03/10/…
Roger Jacobson

Ottimo grazie. Spero che questa risposta aiuti qualcuno in futuro (forse sarò anche io se dovessi imbattermi di nuovo in questo!)
Briantist

0

Non ho una risposta per il punto 1-2-3, ma puoi verificare con il tuo ingegnere virtuale la configurazione dell'host Vmware. Se è VCP capirà le cose :)

Devi davvero controllare il tuo host perché i problemi di Windows potrebbero essere nell'host non nel guest.

Esistono molte funzionalità hardware che potrebbero spiegare i tuoi problemi, directpath io, rss, vcpu, schema di gestione dell'alimentazione ...

Posso darti qualche link che aiuti il ​​tuo team virtuale o tu :)

Questo link riguarda l'ottimizzazione dell'host http://buildvirtual.net/tuning-esxi-host-networking-configuration/

E questo grasso pdf:

http://www.vmware.com/pdf/Perf_Best_Practices_vSphere5.0.pdf

E questo riguarda rss:

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2008925


Grazie per la risposta, ma io sono un VCP. Non si tratta affatto della configurazione dell'host. L'articolo di Microsoft a cui ho collegato spiega che il contatore delle prestazioni in questione non dovrebbe essere superiore a 0 ed è presente su più macchine virtuali. Sto cercando di capire le impostazioni vNIC oltre a quanto spiegato nell'articolo KB di VMware.
Briantist

-1

Non sono in grado di cercare completamente e di indirizzarti alle pagine giuste: quindi ti sto chiedendo di cercare tu stesso i dettagli ... (scusa)

In Fail over Cluster ci sono 4 impostazioni che possono essere modificate; e non influenzeranno i buffer o paginati o non paginati ... Cambia il modo in cui Fail over Cluster prende la decisione di considerare un nodo "rimosso". Queste impostazioni sono:

SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold

Potrebbero non risolvere il tuo problema, ma ottimizzarli potrebbe metterti nei guai al momento ...

Quando tornerò lunedì, tornerò a questo post se hai ulteriori domande

HTH, Edwin.


PS: puoi farci sapere la versione di Windows che stai utilizzando?
Edwin van Mierlo,

Era Windows 2008. Ho ricevuto una risposta da VMware (dopo tutti questi mesi), ma non sono nemmeno nella società in cui mi trovavo quando è successo. La risposta non è semplice e ho intenzione di leggere la loro risposta e pubblicare qualcosa, ma non ho avuto il tempo. Apprezzo i tuoi consigli sul cluster, ma non posso provarli in questo momento.
Briantist

Noto solo che il post originale ha un paio di mesi, che non era molto chiaro nell'app Android ... La prossima volta darò un'occhiata più da vicino ... nel frattempo la mia risposta è ancora valida per gli altri utenti che possono cercare per esperienze simili.
Edwin van Mierlo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.