Come descrivere i requisiti di prestazione VMware per la nostra applicazione a un amministratore VMware?


23

Spesso, un'installazione della nostra applicazione basata sul sito debian-stable viene eseguita in una macchina virtuale, in genere in VMware ESXi. In generale, non abbiamo visibilità o influenza sul loro ambiente di virtualizzazione e non abbiamo accesso, ad esempio, al client VMware vCenter o equivalente. Mi concentro su VMware qui, perché questo è di gran lunga il più comune che vediamo.

Vorremmo:

  • Informa l'amministratore VMware di un cliente: puoi eseguire la nostra applicazione, ad es. Nel tuo ambiente VMware ESX, purché soddisfi i criteri di prestazione X, Y e Z.
  • Essere in grado di determinare se i criteri X, Y e Z sono effettivamente soddisfatti continuamente (ad es. Anche in questo momento ), anche su un sistema in esecuzione (non possiamo fermare la nostra applicazione ed eseguire benchmark, e un benchmark iniziale non sarà sufficiente, poiché le prestazioni in gli ambienti virtuali cambiano nel tempo).
  • Avere la certezza che se i criteri X, Y e Z sono soddisfatti, avremo adeguate risorse HW virtuali per eseguire la nostra applicazione con prestazioni soddisfacenti.

Cosa sono X, Y e Z?

Abbiamo visto più volte che quando ci sono problemi di prestazioni, il problema non è con la nostra applicazione, ma con l'ambiente di virtualizzazione. Ad esempio, un'altra macchina virtuale utilizza tonnellate di CPU, memoria o SAN su cui sono effettivamente archiviati i dischi e viene utilizzata pesantemente da qualcosa di diverso dalla nostra applicazione. Al momento non abbiamo modo di provarlo o smentirlo.

Teoricamente potrebbe anche essere possibile che a volte la nostra applicazione sia lenta ... ;-)

Come si determina la causa principale dei nostri problemi di prestazioni: l'ambiente virtuale o la nostra applicazione?

Esistono in genere 3 aree per problemi di prestazioni CPU, memoria e DISK I / O.

processore

In ad esempio VMware, l'amministratore può specificare Reservation and Limit, espresso in MHz, ma ad esempio 512 MHz su un host ESX è esattamente uguale a 512 MHz su un altro host ESX, possibilmente in un cluster ESX completamente diverso?

E come si misura se lo si ottiene effettivamente? Mentre la nostra applicazione è in esecuzione, possiamo forse vedere che siamo al 212% di utilizzo della CPU su 4 CPU. È perché la nostra applicazione sta facendo molto o perché un'altra macchina virtuale sullo stesso host sta eseguendo un'attività intensiva della CPU e sta utilizzando tutta la CPU?

Memoria (in mongolfiera?)

Se chiediamo, ad esempio, 16 GB di RAM, che è spesso configurato, ma a causa della mongolfiera , in realtà otteniamo solo 4 GB e, a sorpresa, la nostra applicazione funziona male.

Si può chiedere agli strumenti VMware informazioni sull'attuale mongolfiera, ma scopriamo che spesso si trova (o almeno è impreciso). Abbiamo visto esempi in cui il sistema operativo ritiene che ci sia 16 GB di RAM totale, la somma della memoria residente (RSS) di tutti i processi è 4 GB di RAM, ma c'è solo 2 GB di RAM libera, anche quando gli strumenti VMware ci dicono che c'è 0 ballooning: - (

Inoltre, l'aggiunta di RSS insieme non è valida, in quanto potrebbe essere facilmente condivisa la RAM, ad esempio la memoria di copia su scrittura, quindi 512 MB + 512 MB non significano necessariamente 1 GB, ma potrebbero significare qualcosa in meno. Quindi non si può semplicemente sottrarre RSS da tutti i processi per ottenere una misura di quanta RAM dovrebbe essere libera e quindi rilevare il ballooning in modo affidabile. Si possono rilevare alcuni casi di mongolfiera, ma ci sono altri casi in cui la mongolfiera è attiva, ma non rilevabile con questo metodo.

I / O del disco

Suppongo che nel tempo potremmo rappresentare graficamente il numero di letture e scritture su disco, il numero di byte letti e scritti e l'IO in attesa%. Ma questo ci darà un quadro preciso dell'I / O del disco? Immagino che se c'è un minatore di bitcoin in esecuzione in un'altra VM che utilizza tutta la CPU, il nostro% di attesa IO aumenterà, anche se la SAN sottostante offre esattamente le stesse prestazioni, semplicemente perché le risorse della nostra CPU diminuiscono, e quindi IO attendere ( che è misurato in% ) sale.

Quindi, in sintesi, quale lingua possiamo usare per descrivere, ad esempio, un amministratore VMware, quali prestazioni abbiamo bisogno, in modo portatile e misurabile?


Quali sono i requisiti effettivi della tua applicazione? Quello che hai descritto finora non è abbastanza per me per misurare con precisione i requisiti di risorse nel mio ambiente e sono esperto in VMware. Il tuo pubblico di riferimento avrebbe un momento ancora più difficile. In pratica, finisco per ignorare i requisiti del fornitore e misurare / dimensionare correttamente le VM in base a metriche e osservazioni storiche usando vRealize Operations Manager.
ewwhite,

1
@ewwhite: Non sono un esperto di hardware in alcun modo. Ma lasciami essere specifico e dire che funziona bene su un Core i7-5820K con 8 GB di RAM. Dischi magnetici ca. Il 2015 va bene, l'SSD è migliore (posso essere più specifico qui, se necessario). Abbiamo bisogno di 80 GB di spazio libero su disco.
Peter V. Mørch,

2
Come amministratore, direi: "quanti core devo allocare, qual è l'effettivo requisito di RAM, qual è il requisito di archiviazione da un punto di vista IOP e velocità effettiva, qual è il tasso di crescita dell'archiviazione, sto bene? con thin provisioning, ecc. "
ewwhite,

Cosa richiede la tua applicazione dal punto di vista delle prestazioni? Hai benchmark per la tua applicazione? Dire "It runs fine with x, y, and z"non è abbastanza preciso. Devi essere in grado di dire ai tuoi clienti esattamente ciò che richiede la tua applicazione. Se ti danno quelle risorse e l'applicazione funziona male, allora la domanda non lo è "What do we need from a resource perspective?", ma"Why is it performing poorly even though the proper resources have been allocated?"
joeqwerty,

1
@ewwhite: "Risolto"? No. Non ho ancora l'incantesimo di 25 parole che posso dare a un amministratore VMware e quindi essere in grado di testare e sapere che otterremo prestazioni prevedibili perché, come sapete, "dipende". Ma ho accettato la tua risposta, perché ora penso che un requisito così preciso e misurabile non sia possibile e le tue informazioni fanno molto per parlare la lingua corretta. In futuro, ti consiglierò di seguire il percorso "Se vuoi che risolviamo le prestazioni, dovremo almeno visualizzare l'accesso al tuo vCenter".
Peter V. Mørch,

Risposte:


23
  • Seriamente, la maggior parte degli amministratori di VMware non è brava in questo: scarsa comprensione della gestione delle risorse, spesso nessuna conoscenza di Linux (aiuta) e mancanza di larghezza di banda. Trovo che la maggior parte degli amministratori interni abbia difficoltà a mantenere una profonda conoscenza della virtualizzazione.

  • Fortunatamente, c'è un libro che puoi leggere !

  • La maggior parte degli ambienti VMware non è eccezionale: progettazione di cluster scadente, pianificazione delle risorse errata , archiviazione scadente (ad es. Synology NAS), HA non configurato correttamente, nessun monitoraggio o patching.

  • VMware come organizzazione ci fallisce: sono particolarmente incapaci di diffondere informazioni aggiornate e promuovere le migliori pratiche. Le ricerche di base per domande comuni generano risultati a partire dal 2009 e versioni precedenti di VMware, nonostante i processi e i progetti siano cambiati nel tempo.

Tutte queste cose funzioneranno contro di te.

È necessario determinare i reali requisiti della propria soluzione. Essere in grado di affermare con precisione che il tuo dispositivo richiede: 2 vCPU, 8 GB di RAM e 500 IOP di prestazioni di archiviazione farebbero molto per qualcuno come me.

L'altro approccio è osservare un ambiente sano o ideale ed estrapolare le metriche da lì.

Hai descritto problemi con determinate distribuzioni. Quali sono stati i problemi e le strozzature?


Un esempio di VM di dimensioni corrette:

Un server Exchange per un'organizzazione di 300 utenti.

  • Abbiamo 6 settimane di mappe di calore carico di lavoro / stress rispetto al tempo.
  • 6 vCPU ci tengono al di sopra della zona di stress con buffer room per picchi.
  • 32 GB di RAM ci tengono al di sopra del valore di stress, ma non è una quantità irragionevole al di sopra di ciò che è veramente necessario.

inserisci qui la descrizione dell'immagine

  • Potrei recuperare alcuni GB di RAM e una vCPU, ma tutto sommato, questa è una macchina virtuale efficiente.
  • Sarebbe saggio ottenere questo tipo di monitoraggio della tua applicazione in condizioni ideali.

inserisci qui la descrizione dell'immagine


Esempi di monitoraggio delle risorse delle macchine virtuali.

Buono: - VM ha le dimensioni giuste. - La CPU è sovraccaricata in tutto il cluster, ma non stiamo entrando in conflitto.

inserisci qui la descrizione dell'immagine

Bad-ish:

  • La VM non otterrà mai tutta la RAM con cui è configurata.
  • La VM sta già scambiando la RAM.
  • La CPU è troppo configurata.

inserisci qui la descrizione dell'immagine


2
Grazie, ewwhite per la tua risposta. Per ragioni di argomento, diciamo che per un cliente, funziona alla grande con: 2 vCPU, 8 GB di RAM e 500 IOP prestazioni di archiviazione (dalla tua risposta). Su un altro sito cliente, chiediamo la stessa cosa e la otteniamo, secondo l'amministratore VMware. Tuttavia, le 2vCPU sono condivise con altre 17 VM affamate di CPU e anche la RAM da 8 GB è gonfiata. Non capisco molto bene i dischi VM, quindi diciamo che in realtà lo capiamo. La nostra app funziona alla grande nel primo di questi due ambienti ESXi e terribilmente nell'altro. Come misuro questa differenza dall'interno delle macchine virtuali?
Peter V. Mørch,

1
Puoi monitorare " CPU Steal " nella parte superiore della tua VM per vedere se la CPU è stata sovraccaricata eccessivamente. Per il ballooning / swapping della RAM, è difficile dirlo dall'interno della VM, ad eccezione delle cattive prestazioni. Tuttavia, è possibile richiedere una vista di vCenter e delle risorse per la VM. Vedi sopra per esempi.
ewwhite,

1
Esaminerò CPU Steal. A volte finiamo con l'amministratore VMware che punta le dita verso la nostra applicazione e noi punta le dita verso l'ambiente VMware lento. Tuttavia, il più delle volte non abbiamo nemmeno accesso a vSphere e quindi diventa difficile risolvere i problemi, quando funziona bene in altre installazioni. Immagino che un approccio potrebbe essere: "Se vuoi che risolviamo i problemi relativi alle prestazioni, dovremo almeno visualizzare l'accesso al tuo vCenter"
Peter V. Mørch,

3
La maggior parte degli amministratori di VMware non sa nemmeno come leggere queste cose. Trascorro molto tempo a ripulirmi dopo di loro. Quindi, come fornitore, è difficile chiedere l'accesso o approfondire la loro configurazione. Ma penso che sarebbe meglio consolidare le tue esigenze e poi far rispettare. Anche se di solito non consiglio di impostare le prenotazioni, se la tua applicazione è fondamentale, potrebbe avere senso. O almeno impostando una "priorità condivisa". Cosa fa l'applicazione?
ewwhite,

1
Avete mai pensato di distribuire questo come dispositivo VMware con una configurazione consigliata piccola, media e grande?
ewwhite,
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.