Optimizar el rendimiento de los discos persistentes


Los discos persistentes te ofrecen el rendimiento descrito en el gráfico de tipos de disco si la VM tiene un uso suficiente para alcanzar los límites de rendimiento. Una vez que hayas ajustado el tamaño de tus volúmenes de Persistent Disk para satisfacer tus necesidades de rendimiento, es posible que tengas que optimizar tu carga de trabajo y tu sistema operativo.

En las secciones siguientes se describen las características de las VMs y las cargas de trabajo que influyen en el rendimiento de los discos, y se analizan algunos elementos clave que se pueden ajustar para mejorar el rendimiento. Algunas de las sugerencias y cómo aplicarlas a tipos específicos de cargas de trabajo.

Factores que afectan al rendimiento del disco

En las siguientes secciones se describen los factores que influyen en el rendimiento del disco de una VM.

Límites de salida de red en el rendimiento de escritura

Tu VM tiene un límite de salida de red que depende del tipo de máquina de la VM.

Compute Engine almacena datos en Persistent Disk con varias escrituras paralelas para asegurar la redundancia integrada. Además, cada solicitud de escritura tiene una sobrecarga que usa ancho de banda de escritura adicional.

El tráfico de escritura máximo que puede emitir una instancia de VM es el límite de salida de red dividido por un multiplicador de ancho de banda que tiene en cuenta la replicación y la sobrecarga.

Los límites de salida de red se indican en la columna Ancho de banda de salida predeterminado (Gbps) de las tablas de tipos de máquinas de las familias de uso general, optimizadas para la computación, optimizadas para el almacenamiento, optimizadas para la memoria y optimizadas para aceleradores.

El multiplicador de ancho de banda es aproximadamente 1,16 veces cuando la red está totalmente utilizada, lo que significa que el 16% de los bytes escritos son de sobrecarga. En el caso de los discos persistentes regionales, el multiplicador de ancho de banda es de aproximadamente 2,32 para tener en cuenta la sobrecarga de replicación adicional.

En una situación en la que las operaciones de lectura y escritura de discos persistentes compiten con el ancho de banda de salida de la red, se asigna el 60% del ancho de banda de salida de la red máximo, definido por el tipo de máquina, a las escrituras de discos persistentes. El 40% restante está disponible para el resto del tráfico de salida de la red. Consulta la sección sobre el ancho de banda de salida para obtener información sobre otro tráfico de salida de red.

En el siguiente ejemplo se muestra cómo calcular el ancho de banda de escritura máximo de un disco persistente en una instancia de VM N1. La asignación de ancho de banda es la parte del ancho de banda de salida de red asignada a los discos persistentes. El ancho de banda de escritura máximo es el ancho de banda de escritura máximo del disco persistente ajustado para la sobrecarga.

Número de vCPUs de la VM Límite de salida de red (MB/s) Asignación de ancho de banda (MB/s) Ancho de banda de escritura máximo (MB/s) Ancho de banda de escritura máximo con la red a plena capacidad (MB/s)
1 250 150 216 129
2-7 1250 750 1078 647
8-15 2000 1200 1724 1034
16+ 4000 2400 3448 2069

Puedes calcular el ancho de banda máximo de los discos persistentes con las siguientes fórmulas:

Máquina virtual N1 con 1 vCPU

El límite de salida de red es el siguiente:

2 Gbps / 8 bits = 0,25 GB por segundo = 250 MB por segundo

La asignación de ancho de banda de Persistent Disk con la utilización completa de la red es la siguiente:

250 MB por segundo * 0,6 = 150 MB por segundo.

El ancho de banda de escritura máximo de Persistent Disk sin contención de red es el siguiente:

  • Discos zonales: 250 MB por segundo / 1,16 ≈ 216 MB por segundo
  • Discos regionales: 250 MB por segundo / 2,32 ≈ 108 MB por segundo

El ancho de banda de escritura máximo de Persistent Disk con la red totalmente utilizada es el siguiente:

  • Discos zonales: 150 MB por segundo / 1,16 ≈ 129 MB por segundo
  • Discos regionales: 150 MB por segundo / 2,32 ≈ 65 MB por segundo

Los límites de salida de la red proporcionan un límite superior del rendimiento. Otros factores pueden limitar el rendimiento por debajo de este nivel. Consulta las siguientes secciones para obtener información sobre otras restricciones de rendimiento.

Lecturas y escrituras simultáneas

En el caso de los discos persistentes estándar, las lecturas y escrituras simultáneas comparten los mismos recursos. Cuando tu VM usa más IOPS o un mayor rendimiento de lectura, puede realizar menos escrituras. Por el contrario, las instancias que usan un mayor rendimiento de escritura o IOPS pueden realizar menos lecturas.

Los volúmenes de Persistent Disk no pueden alcanzar simultáneamente sus límites máximos de rendimiento y de IOPS tanto para lecturas como para escrituras.

El cálculo del rendimiento es IOPS * I/O size. Para aprovechar los límites de rendimiento máximo de las lecturas y escrituras simultáneas en discos persistentes SSD, usa un tamaño de E/S de forma que las IOPS de lectura y escritura combinadas no superen el límite de IOPS.

En la siguiente tabla se indican los límites de IOPS por VM para lecturas y escrituras simultáneas.

Disco persistente estándar Disco persistente SSD (8 vCPUs) Disco persistente SSD (32 o más vCPUs) Disco persistente SSD (64 o más vCPUs)
Leer Escritura Leer Escritura Leer Escritura Leer Escritura
7500 0 15.000 0 60.000 0 100.000 0
5625 3750 11.250 3750 45.000 15.000 75.000 25.000
3750 7500 7500 7500 30.000 30.000 50.000 50.000
1875 11.250 3750 11.250 15.000 45.000 25.000 75.000
0 15.000 0 15.000 0 60.000 0 100.000

Los números de IOPS de esta tabla se basan en un tamaño de E/S de 8 KB. Otros tamaños de E/S, como 16 KB, pueden tener diferentes números de IOPS, pero mantienen la misma distribución de lectura/escritura.

En la siguiente tabla se muestran los límites de rendimiento (MiB por segundo) por instancia para lecturas y escrituras simultáneas.

Disco persistente estándar Disco persistente SSD (de 6 a 14 vCPUs) Disco persistente SSD (16 o más vCPUs)
Leer Escritura Leer Escritura Leer Escritura
1200 0 800* 800* 1200* 1200*
900 100
600 200
300 300
0 400

* En el caso de los discos persistentes SSD, el rendimiento máximo de lectura y el rendimiento máximo de escritura son independientes entre sí, por lo que estos límites son constantes.

Tamaño del volumen lógico

El tamaño de los discos persistentes puede ser de hasta 64 TiB y puedes crear volúmenes lógicos únicos de hasta 257 TiB mediante la gestión de volúmenes lógicos en tu VM. Un tamaño de volumen mayor afecta al rendimiento de las siguientes formas:

  • No todos los sistemas de archivos locales funcionan bien a esta escala. Las operaciones habituales, como el montaje y la comprobación del sistema de archivos, pueden tardar más de lo esperado.
  • El rendimiento máximo de los discos persistentes se consigue con tamaños más pequeños. Los discos tardan más en leer o escribir completamente con esta cantidad de almacenamiento en una VM. Si tu aplicación lo admite, considera la posibilidad de usar varias máquinas virtuales para aumentar el rendimiento total del sistema.
  • Crear una instantánea de un gran número de discos persistentes puede tardar más de lo esperado y puede proporcionar una vista incoherente de tu volumen lógico si no se coordina cuidadosamente con tu aplicación.

Varios discos vinculados a una sola instancia de VM

Los límites de rendimiento de los discos cuando tienes varios discos conectados a una VM dependen de si los discos son del mismo tipo o de tipos diferentes.

Varios discos del mismo tipo

Si tienes varios discos del mismo tipo conectados a una instancia de VM en el mismo modo (por ejemplo, lectura/escritura), los límites de rendimiento son los mismos que los de un solo disco que tenga el tamaño combinado de esos discos. Si utilizas todos los discos al 100%, el límite de rendimiento agregado se divide equitativamente entre los discos, independientemente del tamaño relativo de cada disco.

Por ejemplo, supongamos que tienes un disco pd-standard de 200 GB y un disco pd-standard de 1000 GB. Si no usas el disco de 1000 GB, el disco de 200 GB puede alcanzar el límite de rendimiento de un disco estándar de 1200 GB. Si utilizas ambos discos al 100%, cada uno tendrá el límite de rendimiento de un disco de 600 GB pd-standard (1200 GB / 2 discos = disco de 600 GB).

Varios discos de diferentes tipos

Si adjuntas diferentes tipos de discos a una VM, el rendimiento máximo posible será el límite de rendimiento del disco más rápido que admita la VM. El rendimiento acumulado de los discos conectados no superará los límites de rendimiento del disco más rápido que admita la VM.

Optimizar los discos para cargas de trabajo orientadas a IOPS o al rendimiento

Las recomendaciones de rendimiento dependen de si quieres maximizar las IOPS o el rendimiento.

Cargas de trabajo orientadas a IOPS

Las bases de datos, ya sean SQL o NoSQL, tienen patrones de uso de acceso aleatorio a los datos. Google recomienda los siguientes valores para las cargas de trabajo orientadas a las IOPS:

  • Valores de profundidad de cola de E/S de 1 por cada 400-800 IOPS, hasta un límite de 64 en volúmenes grandes

  • Una CPU gratuita por cada 2000 IOPS de lectura aleatoria y una CPU gratuita por cada 2500 IOPS de escritura aleatoria

  • Si está disponible para tu tipo de máquina virtual, usa discos Hyperdisk Extreme de Google Cloud, que te permiten cambiar las IOPS aprovisionadas.

En los documentos de prácticas recomendadas de MongoDB, Apache Cassandra y otras aplicaciones de bases de datos, se suelen sugerir valores de lectura anticipada más bajos.

Cargas de trabajo orientadas al rendimiento

Las operaciones de streaming, como los trabajos de Hadoop, se benefician de las lecturas secuenciales rápidas, y los tamaños de E/S más grandes pueden aumentar el rendimiento del streaming.

  • Usa un tamaño de E/S de 256 KB o superior.

  • Si está disponible para tu tipo de máquina virtual, usa discos Hyperdisk Throughput, que te permiten cambiar el rendimiento aprovisionado.

  • En el caso de los discos persistentes estándar, utiliza 8 o más flujos de E/S secuenciales paralelos siempre que sea posible. Standard Persistent Disk se ha diseñado para optimizar el rendimiento de E/S en el acceso secuencial a discos, de forma similar a un disco duro HDD físico.

  • Asegúrate de que tu aplicación esté optimizada para una localidad de datos razonable en discos grandes.

    Si tu aplicación accede a datos distribuidos en diferentes partes de un disco durante un breve periodo (cientos de GB por vCPU), no conseguirás IOPS óptimos. Para obtener el mejor rendimiento, optimiza la localidad de los datos. Para ello, ten en cuenta factores como la fragmentación del disco y la aleatoriedad de las partes del disco a las que se accede.

  • En el caso de los discos persistentes SSD, asegúrate de que el programador de E/S del sistema operativo esté configurado para satisfacer tus necesidades específicas.

    En sistemas basados en Linux, comprueba si el programador de E/S está configurado como none. Este programador de E/S no reordena las solicitudes y es ideal para dispositivos de E/S aleatoria rápidos.

    1. En la línea de comandos, comprueba la programación de E/S que usa tu máquina Linux:

      cat /sys/block/sda/queue/scheduler
      

      El resultado debería ser similar al siguiente:

      [mq-deadline] none
      

      El programador de E/S que está activo se muestra entre corchetes ([]).

    2. Si tu programador de E/S no está configurado como none, sigue uno de estos pasos:

      • Para cambiar el programador de E/S predeterminado a none, define elevator=none en la entrada GRUB_CMDLINE_LINUX del archivo de configuración de GRUB. Normalmente, este archivo se encuentra en /etc/default/grub, pero en algunas distribuciones anteriores puede estar en otro directorio.
      GRUB_CMDLINE_LINUX="elevator=none vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16
      

      Después de actualizar el archivo de configuración de GRUB, configura el gestor de arranque en el sistema para que pueda arrancar en Compute Engine.

      • También puedes cambiar el programador de E/S en tiempo de ejecución:
      echo 'none' | sudo tee /sys/block/sda/queue/scheduler
      

      Si usas este método, el sistema vuelve al programador de E/S predeterminado al reiniciar. Vuelve a ejecutar el comando cat para verificar tu programador de E/S.

Cambios en la carga de trabajo que pueden mejorar el rendimiento del disco

Determinados comportamientos de las cargas de trabajo pueden mejorar el rendimiento de las operaciones de E/S en los discos conectados.

Usar una profundidad de cola de E/alta

Los discos persistentes tienen una latencia mayor que los discos conectados localmente, como los discos SSD locales, porque son dispositivos conectados a la red. Pueden proporcionar un número muy alto de IOPS y un gran rendimiento, pero debes asegurarte de que se realicen suficientes solicitudes de E/S en paralelo. El número de solicitudes de E/S que se realizan en paralelo se denomina profundidad de la cola de E/S.

En las siguientes tablas se indica la profundidad de cola de E/S recomendada para conseguir un determinado nivel de rendimiento. Las tablas usan una ligera sobreestimación de la latencia típica para mostrar recomendaciones conservadoras. En el ejemplo se da por supuesto que utilizas un tamaño de E/S de 16 KB.

Generar suficientes operaciones de entrada/salida con un tamaño de entrada/salida grande

  • Usar un tamaño de E/S grande

    Para asegurarte de que los límites de IOPS y la latencia no supongan un cuello de botella para el rendimiento de tu aplicación, usa un tamaño de E/S mínimo de 256 KB o superior.

    Usa tamaños de franja grandes para las aplicaciones del sistema de archivos distribuido. Una carga de trabajo de E/S aleatoria que usa tamaños de franjas grandes (4 MB o más) consigue un rendimiento excelente en los discos persistentes estándar debido a la similitud de la carga de trabajo con el acceso al disco de varias secuencias secuenciales.

  • Asegúrate de que tu aplicación genera suficientes operaciones de entrada/salida

    Asegúrate de que tu aplicación genere suficientes operaciones de entrada/salida para usar por completo los límites de IOPS y de rendimiento del disco. Para comprender mejor el patrón de E/S de tu carga de trabajo, consulta las métricas de uso y rendimiento del disco en Cloud Monitoring.

  • Asegúrate de que haya suficiente CPU disponible en la instancia que genera la E/S.

    Si tu instancia de VM no tiene suficiente CPU, tu aplicación no podrá gestionar las IOPS descritas anteriormente. Te recomendamos que tengas una CPU disponible por cada 2000-2500 IOPS de tráfico previsto.

Limita las cargas de E/pesadas a un intervalo máximo

Un intervalo hace referencia a un intervalo contiguo de direcciones de bloque lógicas en un solo disco físico. Las cargas de E/pesadas alcanzan el máximo rendimiento cuando se limitan a un intervalo máximo determinado, que depende del tipo de máquina de la VM a la que esté conectado el disco, tal como se indica en la siguiente tabla.

Tipo de máquina Intervalo máximo recomendado
  • m2-megamem-416
  • Máquinas virtuales C2D
25 TB
Todos los demás tipos de máquinas 50 TB

Los tramos de discos persistentes independientes que sumen 50 TB o menos se pueden considerar iguales a un solo tramo de 50 TB a efectos de rendimiento.

Cambios en el sistema operativo para mejorar el rendimiento del disco

En algunos casos, puedes habilitar o inhabilitar funciones a nivel del sistema operativo o configurar los discos conectados de formas específicas para mejorar el rendimiento del disco.

Evita usar sistemas de archivos ext3 en Linux

Si se usa el sistema de archivos ext3 en una VM Linux, el rendimiento puede ser muy bajo en cargas de escritura pesadas. Usa ext4 siempre que sea posible. El controlador del sistema de archivos ext4 es compatible con ext3 y ext2, y permite montar sistemas de archivos ext3. El sistema de archivos ext4 es el predeterminado en la mayoría de los sistemas operativos Linux.

Si no puedes migrar a ext4, puedes activar sistemas de archivos ext3 con la opción de montaje data=journal como solución alternativa. De esta forma, se mejoran las IOPS de escritura a costa del rendimiento de escritura. Migrar a ext4 puede suponer una mejora de hasta 7 veces en algunas comparativas.

Inhabilitar la inicialización diferida y habilitar los comandos DISCARD

Los discos persistentes admiten operaciones de descarte o comandos TRIM, que permiten que los sistemas operativos informen a los discos cuando los bloques ya no se utilicen. La función de descarte permite que el sistema operativo marque los bloques de disco como innecesarios sin incurrir en el coste de poner a cero los bloques.

En la mayoría de los sistemas operativos Linux, puedes habilitar las operaciones de descarte cuando montes un disco persistente en tu VM. Las VMs de Windows Server 2012 R2 habilitan las operaciones de descarte de forma predeterminada al montar un disco persistente.

Habilitar las operaciones de descarte puede mejorar el rendimiento general del tiempo de ejecución y también puede acelerar el rendimiento del disco cuando se monta por primera vez. Formatear un volumen de disco completo puede llevar mucho tiempo, por lo que el formateo diferido es una práctica habitual. El inconveniente del formato diferido es que el coste se paga a menudo la primera vez que se monta el volumen. Si inhabilitas la inicialización diferida y habilitas las operaciones de descarte, podrás realizar operaciones de formato y montaje rápidas.

  • Para inhabilitar la inicialización diferida y habilitar las operaciones de descarte al formatear un disco, pasa los siguientes parámetros a mkfs.ext4:

    -E lazy_itable_init=0,lazy_journal_init=0,discard
    

    El parámetro lazy_journal_init=0 no funciona en instancias con imágenes de CentOS 6 o RHEL 6. En las VMs que usen esos sistemas operativos, formatea el disco persistente sin ese parámetro.

    -E lazy_itable_init=0,discard
    
  • Para habilitar las operaciones de descarte al montar un disco, pasa la siguiente marca al comando mount:

    -o discard
    

Persistent Disk funciona bien con las operaciones de descarte habilitadas. Sin embargo, puedes ejecutar fstrim periódicamente, además de usar operaciones de descarte o en lugar de ellas. Si no usas operaciones de descarte, ejecuta fstrim antes de crear una instantánea de tu disco de arranque. Recortar el sistema de archivos te permite crear imágenes de capturas más pequeñas, lo que reduce el coste de almacenar capturas.

Ajustar el valor de lectura anticipada

Para mejorar el rendimiento de las operaciones de E/S, los sistemas operativos emplean técnicas como la readahead, en la que se lee en la memoria una parte de un archivo mayor de la que se ha solicitado, con la suposición de que es probable que las lecturas posteriores necesiten esos datos. Cuanto mayor sea el readahead, mayor será el rendimiento, pero se consumirán más memoria y IOPS. Un valor de lectura anticipada más bajo aumenta las IOPS a costa del rendimiento.

En los sistemas Linux, puedes obtener y definir el valor de lectura anticipada con el comando blockdev:

$ sudo blockdev --getra /dev/DEVICE_ID
$ sudo blockdev --setra VALUE /dev/DEVICE_ID

El valor de lectura anticipada es <desired_readahead_bytes> / 512 bytes.

Por ejemplo, en el caso de una lectura anticipada de 8 MB, 8 MB son 8388608 bytes (8 * 1024 * 1024).

8388608 bytes / 512 bytes = 16384

Has configurado blockdev en 16384:

$ sudo blockdev --setra 16384 /dev/DEVICE_ID

Modificar una máquina virtual o crear una

Hay límites asociados a cada tipo de máquina virtual que pueden afectar al rendimiento que puedes obtener de los discos conectados. Entre estos límites se incluyen los siguientes:

  • El rendimiento de Persistent Disk aumenta a medida que lo hace el número de vCPUs disponibles.
  • Hyperdisk no es compatible con todos los tipos de máquinas.
  • Las tasas de salida de la red aumentan a medida que lo hace el número de vCPUs disponibles.

Asegúrate de que haya CPUs libres

Para leer y escribir en volúmenes de Persistent Disk, tu VM necesita ciclos de CPU. Para conseguir niveles de IOPS muy altos y constantes, debes tener CPUs libres para procesar las operaciones de E/S.

Para aumentar el número de vCPUs disponibles en tu VM, puedes crear una VM o editar el tipo de máquina de una instancia de VM.

Considera usar Google Cloud Hyperdisk

Si quieres conseguir más IOPS y un mayor rendimiento, te recomendamos que uses volúmenes Hyperdisk en lugar de Persistent Disk si tu serie de máquinas admite Hyperdisk.

Para determinar si tu serie de máquinas admite Hyperdisk, consulta Compatibilidad de series de máquinas con Hyperdisk.

Si la serie de máquinas de tu instancia admite Hyperdisk, sigue estos pasos para usar volúmenes de Hyperdisk:

  1. Elige un tipo de Hyperdisk que se adapte a las necesidades de tu carga de trabajo.

  2. Para cambiar al tipo de Hyperdisk que has elegido, consulta las instrucciones de Cambiar el tipo de disco.

Cambiar la serie de la máquina de la instancia para mejorar el rendimiento

Las nuevas series de máquinas virtuales suelen ejecutarse en CPUs más recientes, que pueden ofrecer un mejor rendimiento que sus predecesoras. Además, las CPUs más recientes pueden admitir funciones adicionales para mejorar el rendimiento de tus cargas de trabajo, como Advanced Matrix Extensions (AMX) o Intel Advanced Vector Extensions (AVX-512).

Siguientes pasos