Bien, antes que nada, permítanme decir que no soy una persona de operaciones, sino un desarrollador. Así que me voy a un poco de tierra desconocida aquí, así que tengan paciencia conmigo.
Me gustaría usar una máquina virtual de Azure para extraer un archivo XML de 50 GB de un archivo zip de 1.9 GB. Así que he estado probando qué tamaño de instancia en Azure debería usar para obtener un buen rendimiento sin pagar más de lo que necesito.
Sin embargo, el rendimiento del disco de las máquinas virtuales de Azure no ha sido sorprendente, y me gustaría saber si soy yo quien está haciendo algo mal o si mis resultados son los que se pueden esperar.
En primer lugar, ¿con qué he estado probando? Tengo una aplicación de consola .NET personalizada que no hace nada más que tomar un archivo zip como argumento e inmediatamente comienza a extraer el archivo zip en el mismo directorio en el que reside el archivo zip. Mientras continúa la extracción, la aplicación calcula cuántos megabytes la aplicación ha escrito en el archivo de destino por segundo y lo genera.
En mi máquina de desarrollo local, obtengo un rendimiento bastante bueno con esta aplicación, 160-210 MB / s escritos. Por lo tanto, todo el proceso de extracción dura unos 8 minutos. Las especificaciones de mi máquina local son Intel Core i7 950, 3 GHz, 4 núcleos (8 lógicos), 12 GB de RAM, Samsung SSD 830 series de 250 GB.
Bien, entonces comencé a probar diferentes tamaños de instancia, y aquí están mis resultados.
- En una instancia A4 con Windows Server 2012 Datacenter R2 (8 núcleos, 14 GB de RAM) con un RAID rayado de 4 discos virtuales con la misma cuenta de almacenamiento, sin almacenamiento en caché del host, obtuve 30-35 MB / s constantes, lo que significa que todo la extracción tomó 24 minutos y 48 segundos. También intenté habilitar el almacenamiento en caché del host, pero realmente no hizo ninguna diferencia.
- En una instancia D4 con Windows Server 2012 Datacenter (8 núcleos, 28 GB de RAM, 500 GB de disco SSD local) obtuve un rendimiento realmente bueno (más de 150 MB / s) durante los primeros minutos, y luego un rendimiento variable con picos de 200 MB / sy valles a 9 MB / s. El rendimiento promedio fue de entre 70 y 100 MB / s. La extracción tomó 9 min y 40 segundos.
- En una instancia D3 con Windows Server 2012 Datacenter (4 núcleos, 14 GB de RAM, 250 GB de disco SSD local) obtuve un rendimiento realmente bueno (150+ MB / s) el primer minuto, pero luego el rendimiento disminuyó a 20-40 MB / s, haciendo que el proceso de extracción tome 21 minutos y 49 segundos.
En una instancia D2 y D1, el rendimiento del disco es peor que en el D3.
Y esto realmente me sorprende. ¿Cómo puede un disco SSD local funcionar tan mal, como lo hace en las instancias D1, D2 y D3? ¿Y alguien sabe por qué el rendimiento del disco difiere tanto entre D1 y D4? ¿Es un problema de memoria? Cuando miro el administrador de tareas mientras se realiza la extracción, el uso de memoria está explotando. Sospecho que es porque Windows está almacenando en caché los datos escritos, pero cuando se queda sin memoria, tiene que vaciar los datos al disco. Cuando esto sucede, el rendimiento del disco disminuye. Pero esto no sucede en mi máquina local, entonces, ¿por qué es necesario un almacenamiento en caché tan agresivo en estas máquinas virtuales?
Sé que hay diferencias entre mi máquina local y una máquina virtual alojada en Azure, pero ¿es realmente esperable el rendimiento del disco que estoy experimentando?
(Originalmente publiqué mi pregunta en Stackoverflow , ya que sospechaba que era mi aplicación la causa. Pero ya no estoy tan seguro)