Rendimiento lento del disco en la máquina virtual de Azure

9

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)

René
fuente

Respuestas:

7

Un poco tarde para la fiesta aquí, pero por lo que vale la pena, los SSD "adjuntos" en Azure tienen sus IOP acelerados en función del tamaño de la máquina. No se mencionó en el precio en ninguna parte, pero planteé este problema como un ticket con soporte técnico cuando me remitieron a la publicación del blog a continuación.

Ver este enlace: http://azure.microsoft.com/blog/2014/10/06/d-series-performance-expectations/

Richard Hauer
fuente
Gran información, gracias Richard! Sospeché que tenía que ver con el estrangulamiento, pero en ese momento no pude encontrar ninguna información específica al respecto. Esa publicación de blog responde mis preguntas.
René
azure limit disk io ... qué demonios ... me cambio a google cloud ... no limitan esto y el precio es mucho más barato.
tyan
4

Tal vez no está relacionado con la memoria. Los discos "físicos" en Azure usan lo que se llama almacenamiento Blob y esa es la razón por la cual el rendimiento no es el mismo que en su computadora local, incluso con hardware similar. Puede encontrar más información en este enlace . Este parece ser un problema común para la comunidad de SQL Server que depende en gran medida del rendimiento del disco. Citaré un artículo que encontré al respecto

La guía de rendimiento para SQL Server en las máquinas virtuales de Azure menciona (en las páginas 15 y 26) que en las máquinas virtuales de Azure, los espacios de almacenamiento se pueden usar para mejorar el rendimiento de almacenamiento para las cargas de trabajo de SQL Server

Storage Spaces es una característica integrada de Windows Server 2012 que le permite usar varios discos físicos para crear un solo disco virtual, por lo tanto, como una solución para las limitaciones de E / S del disco VM. Citando de nuevo:

Con máquinas virtuales más grandes que admiten muchos (hasta 16) discos físicos, es posible un aumento muy significativo en el rendimiento del almacenamiento. Esto puede habilitar Azure como una plataforma viable para muchas cargas de trabajo de SQL que, de lo contrario, estarían demasiado limitadas por el rendimiento de E / S de un solo disco de Azure.

Este artículo le mostrará los pasos para crear un espacio de almacenamiento.

Deberías probar esto primero. Probablemente incluso pueda usar una instancia más pequeña, ya que el servicio de almacenamiento es un servicio separado de la instancia misma.

Bruno Faria
fuente
Tienes razón en que los discos estándar en Azure realmente usan Blob Storage, pero no creo que ese sea el caso con los discos SSD. Según la información proporcionada a mi Microsoft, estos son discos SSD físicos locales. Y cuando ese es el caso, creo que es extraño que el rendimiento difiera mucho entre los tamaños de instancia D. Con respecto a los espacios de almacenamiento: exploré esto e hice algunas pruebas, pero desafortunadamente no me dio ninguna ganancia de rendimiento notable. Al final, llegué a la conclusión de que solo tengo que aceptar que necesito usar un tamaño de instancia más grande para esta tarea.
René
1
@ René, ¿tuvo la oportunidad de probar el nuevo Azure Storage Premium? Perdón por toparse con este viejo tema, pero tengo curiosidad por ver cómo funcionaría este nuevo almacenamiento en su entorno.
Bruno Faria
Lo siento por mi respuesta tardía. Gran consejo sobre Azure Storage Premium. No lo he probado ya que aún no está disponible en mi región. Pero lo vigilaré. ¡Gracias de nuevo!
René