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.