Va bene, quindi prima di tutto, permettimi di dire che non sono una persona operativa, ma uno sviluppatore. Quindi vado in un po 'di terra sconosciuta qui, quindi per favore abbi pazienza con me.
Vorrei usare una macchina virtuale di Azure per estrarre un file XML da 50 GB da un file zip da 1,9 GB. Quindi ho testato quale dimensione dell'istanza su Azure dovrei usare per ottenere buone prestazioni senza pagare più del necessario.
Tuttavia, le prestazioni del disco delle macchine virtuali di Azure non sono state sorprendenti e vorrei sapere se sono io a fare qualcosa di sbagliato o se i miei risultati sono quelli che ci si può aspettare.
Prima di tutto, con cosa ho testato? Ho un'applicazione console .NET personalizzata che non fa altro che prendere un file zip come argomento e inizia immediatamente a estrarre il file zip nella stessa directory in cui si trova il file zip. Mentre l'estrazione è in corso, l'applicazione calcola quanti megabyte l'applicazione ha scritto nel file di destinazione al secondo e l'output.
Sulla mia macchina di sviluppo locale, ottengo prestazioni abbastanza buone con questa applicazione, scritta 160-210 MB / s. Quindi l'intero processo di estrazione dura circa 8 minuti. Le specifiche della mia macchina locale sono Intel Core i7 950, 3 GHz, 4 core (8 logici), 12 GB RAM, Samsung SSD 830 serie 250 GB.
Ok, quindi ho iniziato a testare diverse dimensioni di istanza ed ecco i miei risultati.
- In un'istanza A4 con Windows Server 2012 Datacenter R2 (8 core, 14 GB RAM) con un RAID con striping di 4 dischi virtuali che utilizzano lo stesso account di archiviazione, senza memorizzazione nella cache dell'host, ho ottenuto 30-35 MB / s costanti, il che significa che l'intero l'estrazione ha richiesto 24 minuti e 48 secondi. Ho anche provato ad abilitare la memorizzazione nella cache dell'host, ma non ha fatto alcuna differenza.
- In un'istanza D4 con Windows Server 2012 Datacenter (8 core, 28 GB di RAM, disco SSD locale da 500 GB) ho ottenuto prestazioni davvero buone (150+ MB / s) per i primi minuti, quindi con prestazioni variabili con picchi a 200 MB / se e valli a 9 MB / s. Le prestazioni medie sono state tra 70 e 100 MB / s. L'estrazione ha richiesto 9 minuti e 40 secondi.
- In un'istanza D3 con Windows Server 2012 Datacenter (4 core, 14 GB RAM, disco SSD locale da 250 GB) ho ottenuto prestazioni davvero buone (150+ MB / s) al primo minuto, ma poi le prestazioni sono scese a 20-40 MB costanti / s, facendo in modo che il processo di estrazione impieghi 21 minuti e 49 secondi.
Su un'istanza D2 e D1, le prestazioni del disco sono peggiori rispetto alla D3.
E questo mi sorprende davvero. Come può un disco SSD locale funzionare così male, come fa sulle istanze D1, D2 e D3? E qualcuno sa perché le prestazioni del disco differiscono così tanto tra D1 e D4? È un problema di memoria? Quando guardo il task manager mentre l'OS di estrazione è in corso, l'utilizzo della memoria sta esplodendo. Sospetto sia perché Windows sta memorizzando nella cache i dati scritti, ma quando la memoria si esaurisce, deve scaricare i dati sul disco. Quando ciò accade, le prestazioni del disco diminuiscono. Ma ciò non accade sul mio computer locale, quindi perché è necessaria una cache così aggressiva su queste VM?
So che ci sono differenze tra la mia macchina locale e una macchina virtuale ospitata in Azure, ma le prestazioni del disco che sto riscontrando sono davvero prevedibili?
(Inizialmente avevo pubblicato la mia domanda su StackOverflow , poiché sospettavo fosse la causa della mia applicazione. Ma non ne sono più così sicuro)