Sono possibili test ripetibili sulle prestazioni su una VM?

1

La mia applicazione fa molti inserimenti nel database, quindi l'I / O del disco è una parte importante del carico di lavoro. Il QA esegue quasi tutti i test su VM. Sono preoccupato che i test intesi a rilevare regressioni di prestazioni non forniscano risultati ripetibili validi in un ambiente VM, dal momento che altre attività sulla macchina fisica influenzeranno le prestazioni dell'applicazione.

Si tratta di una preoccupazione legittima, oppure i moderni ambienti virtuali hanno un modo per isolare veramente l'ambiente di un'applicazione che consentirebbe di eseguire test delle prestazioni ripetibili?

Voglio mettere la mia applicazione e il mio database su una "macchina", eseguire un test e annotare quanto tempo è occorso (che sarà un numero di ore / minuti, non secondi / millisecondi). Più avanti nel mio ciclo di sviluppo, voglio eseguire lo stesso test e verificare se le prestazioni sono regredite a causa di modifiche al codice. Quando si esegue su una macchina fisica dedicata, ottengo risultati ragionevolmente coerenti. La mia domanda è: se eseguo questo test su una macchina virtuale, potrei ottenere differenze significative nel tempo di esecuzione a causa del lavoro svolto da altre VM sulla stessa casella fisica? C'è un modo per configurare la VM per controllare per questo, considerando che l'I / O del disco è una parte importante del carico di lavoro?

    
posta Dana 14.08.2017 - 20:20
fonte

2 risposte

1

Per rispondere ad alcuni dei commenti in primo luogo, sì tutti gli hypervisor che valgono la costruzione di un ambiente VM hanno la capacità di limitare il consumo di risorse e anche di garantire i minimi. È possibile sfruttare queste impostazioni per stabilire i livelli di servizio delle prestazioni. Stabilire i requisiti minimi e tradurli in un dimensionamento VM. Ad esempio, un vCpu a 2 core e una RAM da 4 GB e allocare una VM che non può più essere fornita e convalidare le prestazioni dell'app è nei requisiti.

Questa guida di vmWare spiega dalla prospettiva di questi prodotti: link

Un punto chiave in questa guida è eseguire i test delle prestazioni mentre si controlla anche l'hypervisor per assicurarsi che la CPU < Il 70% e la memoria non sono affamati, quindi lo scambio virtuale sta accadendo.

Una regola generale è quando una di queste cose accade (CPU dell'hypervisor > 70% o memoria fisica esaurita sull'hypervisor) ci si può aspettare di vedere un degrado delle prestazioni delle VM.

Puoi fare lo stesso per le dimensioni di archiviazione e di I / O netto, ma ciò sarà guidato dall'investimento fatto nell'architettura sottostante. La mia organizzazione mette le macchine virtuali su SAN con più uplink da 10 GB verso la SAN, e questo fa sì che le macchine virtuali vedano un I / O di memoria superiore a quello che vedrebbero con il disco locale.

Idealmente, l'organizzazione in cui verrà distribuita l'app dispone di un'infrastruttura VM gestita con monitoraggio degli hypervisor in corso e una gestione proattiva in modo tale che gli hypervisor non vengano spinti al punto da creare rallentamenti della VM. Se è possibile, ottenere le metriche sull'hypervisor per comprenderne le tendenze generali sul rendimento e quindi tenere traccia di ciò mentre si testano e si specificano i requisiti della propria app in base all'assunto che l'hypervisor verrà gestito per rimanere all'interno degli stessi parametri.

Se non è possibile ottenere metriche sulla risorsa e sulle prestazioni dell'hypervisor, in realtà tutto ciò che si può fare è misurare la risorsa utilizzata dal proprio sistema operativo e rendere tale requisito che deve essere garantito dall'hypervisor.

Poiché la tua preoccupazione riguarda principalmente l'archiviazione dell'IO, questo blog si concentra sulla misurazione degli IOP: link

    
risposta data 14.08.2017 - 23:23
fonte
3

Molto di ciò che stai chiedendo è altamente dipendente dall'ambiente. Esistono fornitori che consentono la ripartizione di CPU min e max e IO in una VM tra un numero molto elevato di altre opzioni. Il rovescio della medaglia di questo è che quando si inizia a ridurre le risorse in questo modo, si finisce generalmente con tassi di utilizzo inferiori. La maggior parte delle applicazioni non usa continuamente la CPU sempre alla stessa velocità in modo da consentire alle macchine virtuali di utilizzare ciò di cui hanno bisogno da un pool condiviso, si tende a essere in grado di raggiungere un utilizzo medio (come percentuale di tutta la CPU disponibile) superiore a se dovessi allocare min e max per ciascuno.

In generale, la mia esperienza con i risultati delle prestazioni è che le prestazioni possono variare per molte ragioni che possono essere difficili da controllare. Penso che abbia più senso pensare alle prestazioni in termini più statistici. Se si sta per eseguire questa applicazione su una VM in produzione, direi che è necessario eseguirlo in una VM in testing delle prestazioni e configurarlo nel modo in cui si pianifica di configurarlo in prod. Esegui molti test in diversi momenti della giornata senza cambiare nulla e vedi quale variazione ottieni nei risultati. Questo, di per sé è informazioni utili. Potresti scoprire di voler riconsiderare la configurazione per la produzione al fine di ridurre la variabilità delle prestazioni.

Se hai intenzione di eseguirlo su hardware dedicato in produzione, l'opzione migliore è, di nuovo, eseguire i test delle prestazioni il più vicino possibile a un'installazione simile. Se si sta andando alle VM per il test a causa di vincoli di risorse, suggerirei di impostare le risorse di ripartizione sulla VM in modo che siano fisse come sarebbero sull'hardware dedicato.

    
risposta data 14.08.2017 - 21:48
fonte

Leggi altre domande sui tag