Optimiza el rendimiento de discos persistentes


Los discos persistentes te proporcionan el rendimiento descrito en la tabla de tipos de disco si la VM genera un uso suficiente para alcanzar los límites de rendimiento. Una vez que dimensiones los volúmenes de discos persistentes para satisfacer tus necesidades de rendimiento, puede que tu carga de trabajo y tu sistema operativo necesiten algunos ajustes.

En las siguientes secciones, se describen las características de las VMs y las cargas de trabajo que afectan el rendimiento del disco, y hablaremos sobre algunos elementos clave que se pueden ajustar para obtener un mejor rendimiento. Algunas de las sugerencias y cómo aplicar algunas de ellas a tipos específicos de cargas de trabajo.

Factores que afectan el rendimiento del disco

En las siguientes secciones, se describen los factores que afectan el rendimiento del disco para una VM.

Límites de salida de red en la capacidad de procesamiento 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 discos persistentes con varias operaciones de escritura paralelas para garantizar 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 generar una instancia de VM equivale al límite de salida de red dividido por un multiplicador del ancho de banda que se tiene en cuenta para la replicación y la sobrecarga.

Los límites de salida de red se enumeran en la columna Ancho de banda de salida máximo (Gbps) en las tablas de tipo de máquina para familias de máquina de uso general, optimizadas para procesamiento, optimizadas para procesamiento, optimizadas para memoria y optimizadas para acelerador.

El multiplicador del ancho de banda es aproximadamente 1.16 veces cuando se usa toda la red, lo que significa que el 16% de los bytes escritos son sobrecarga. Para Persistent Disk regional, el multiplicador del ancho de banda es de alrededor de 2.32 veces mayor para cubrir la sobrecarga de replicación adicional.

En una situación en la que las operaciones de lectura y escritura de Persistent Disk compiten con el ancho de banda de salida de red, el 60% del ancho de banda de salida de red máximo, definido por el tipo de máquina, se asigna a las operaciones de escritura de Persistent Disk. El 40% restante está disponible para todo el resto del tráfico de salida de red. Consulta Ancho de banda de salida para obtener detalles 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 asignado al disco persistente. El ancho de banda máximo de escritura es el ancho de banda máximo de escritura del disco persistente que se ajusta para la sobrecarga.

Cantidad de CPU virtuales de 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 máximo de escritura en el uso completo de red (MB/s)
1 250 150 216 129
2-7 1,250 750 1,078 647
8-15 2,000 1,200 1,724 1,034
16+ 4,000 2,400 3,448 2,069

Puedes calcular el ancho de banda máximo de Persistent Disk con las fórmulas siguientes:

VM N1 con 1 CPU virtual

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 el uso completo de red es la siguiente:

250 MB por segundo * 0.6 = 150 MB por segundo.

El ancho de banda máximo de escritura en un disco persistente 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 máximo de escritura de Persistent Disk con el uso completo de red 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 red proporcionan un límite superior en el 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.

Operaciones de lectura y escritura simultáneas

En Persistent Disk estándar, las operaciones de lectura y escritura simultáneas comparten los mismos recursos. Cuando tu VM usa más capacidad de procesamiento de lectura o IOPS, puede realizar menos operaciones de escritura. Por el contrario, las instancias que usan más capacidad de procesamiento de escritura o IOPS pueden realizar menos operaciones de lectura.

Los volúmenes de Persistent Disk no pueden alcanzar los límites de capacidad de procesamiento e IOPS máximos de forma simultánea para lecturas y escrituras.

El cálculo de la capacidad de procesamiento es IOPS * I/O size. Para aprovechar los límites máximos de capacidad de procesamiento de operaciones de lectura y escritura simultáneas en discos persistentes SSD, usa un tamaño de E/S que no permita que las IOPS de lectura y escritura combinadas excedan el límite de IOPS.

En la siguiente tabla, se enumeran los límites de IOPS por VM para operaciones de lectura y escritura simultáneas.

Disco persistente estándar Disco persistente SSD (8 CPU virtuales) Disco persistente SSD (más de 32 CPU virtuales) Disco persistente SSD (más de 64 CPU virtuales)
Lectura Escritura Lectura Escritura Lectura Escritura Lectura Escritura
7,500 0 15,000 0 60,000 0 100,000 0
5,625 3,750 11,250 3,750 45,000 15,000 75,000 25,000
3,750 7,500 7,500 7,500 30,000 30,000 50,000 50,000
1,875 11,250 3,750 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 en 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 una cantidad diferente de IOPS, pero mantienen la misma distribución de operaciones de lectura y escritura.

En la siguiente tabla, se enumeran los límites de capacidad de procesamiento (MB por segundo) por VM para operaciones de lectura y escritura simultáneas.

Disco persistente estándar Disco persistente SSD (de 6 a 14 CPU virtuales) Disco persistente SSD (más de 16 CPU virtuales)
Lectura Escritura Lectura Escritura Lectura Escritura
1,200 0 800* 800* 1,200* 1,200*
900 100
600 200
300 300
0 400

* Para los discos persistentes SSD, las capacidades máximas de procesamiento de lectura y de escritura son independientes entre sí, por lo que estos límites son constantes.

Tamaño del volumen lógico

Persistent Disk puede tener un tamaño de hasta 64 TiB y se pueden crear volúmenes lógicos únicos de hasta 257 TiB mediante la administración de volúmenes lógicos dentro de la VM. Un tamaño de volumen mayor afecta el rendimiento de las siguientes maneras:

  • No todos los sistemas de archivos locales funcionan bien a esta escala. Las operaciones comunes, como la activación y la verificación del sistema de archivos, pueden tardar más de lo esperado.
  • El rendimiento máximo de Persistent Disk se logra en tamaños más pequeños. Los discos tardan más en leer o escribir de manera completa con este almacenamiento en una VM. Si es compatible con tu aplicación, considera usar varias VMs para obtener una mayor capacidad de procesamiento total del sistema.
  • Es posible que realizar instantáneas de grandes cantidades de Persistent Disk tome más tiempo del previsto en completarse y puede proporcionar una vista inconsistente del volumen lógico sin una cuidadosa coordinación con la aplicación.

Varios discos adjuntos 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 tiene la combinación tamaño de esos discos. Si usas todos los discos al 100%, el límite de rendimiento total se divide de manera uniforme entre los discos, sin importar el tamaño relativo del disco.

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

Varios discos de tipos diferentes

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

Optimiza los discos para IOPS o las cargas de trabajo orientadas a la capacidad de procesamiento

Las recomendaciones de rendimiento dependen de si deseas maximizar las IOPS o la capacidad de procesamiento.

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 IOPS:

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

  • Una CPU libre por cada 2,000 IOPS de lectura aleatoria y 1 CPU libre por cada 2,500 IOPS de escritura aleatoria

  • Si está disponible para tu tipo de máquina de VM, usa los discos extremos de disco de Google Cloud, que te permiten cambiar las IOPS aprovisionadas.

Por lo general, en los documentos de prácticas recomendadas, se sugieren valores de lectura anticipada menores para MongoDB, Apache Cassandra y otras aplicaciones de bases de datos.

Cargas de trabajo orientadas a la capacidad de procesamiento

Las operaciones de transmisión, como un trabajo de Hadoop, se benefician de las operaciones de lectura secuenciales rápidas; los tamaños más grandes de E/S pueden aumentar el rendimiento de la transmisión.

  • Usa un tamaño de E/S de 256 KB o más.

  • Si está disponible para tu tipo de máquina de VM, usa discos Hyperdisk Throughputo, que te permiten cambiar la capacidad de procesamiento aprovisionada.

  • Para Persistent Disk estándar, usa 8 o más transmisiones secuenciales de E/S paralelas cuando sea posible. Persistent Disk estándar está diseñado para optimizar el rendimiento de E/S con el acceso al disco secuencial, similar a un disco duro HDD.

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

    Si tu aplicación accede a datos que se distribuyen en diferentes partes de un disco durante un período corto (cientos de GB por CPU virtual), no obtendrás IOPS óptimas. Si quieres obtener un mejor rendimiento, optimiza para una localidad de datos temporales y ten en cuenta factores como la fragmentación del disco y la aleatoriedad de las partes accedidas del disco.

  • Para el disco persistente SSD, asegúrate de que el programador de E/S en el sistema operativo esté configurado para satisfacer tus necesidades específicas.

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

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

      cat /sys/block/sda/queue/scheduler
      

      El resultado es similar a este:

      [mq-deadline] none
      

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

    2. Si el programador de E/S no está configurado como none, realiza uno de los siguientes pasos:

      • Para cambiar tu programador de E/S predeterminado a none, configura elevator=none en la entrada GRUB_CMDLINE_LINUX del archivo de configuración GRUB. Por lo general, este archivo se encuentra en /etc/default/grub, pero, en algunas distribuciones anteriores, podría estar ubicado en un directorio diferente.
      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 bootloader en el sistema para que pueda iniciarse en Compute Engine.

      • Como alternativa, puedes cambiar el programador de E/S en el entorno de ejecución:
      echo 'none' > sudo /sys/block/sda/queue/scheduler
      

      Si usas este método, el sistema vuelve al programador de E/S predeterminado en el reinicio. Ejecuta el comando cat de nuevo para verificar tu programador de E/S.

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

Ciertos comportamientos de la carga de trabajo pueden mejorar el rendimiento de las operaciones de E/S en los discos conectados.

Usa una profundidad de cola de E/S alta

Los discos persistentes tienen una latencia más alta que los discos conectados localmente, como los SSD locales, porque son dispositivos conectados a la red. Pueden proporcionar IOPS y capacidad de procesamiento muy altos, pero debes asegurarte de que se realicen suficientes solicitudes de E/S en paralelo. La cantidad de solicitudes de E/S realizadas en paralelo se conoce como profundidad de cola de E/S.

En las siguientes tablas, se muestra la profundidad de cola de E/S recomendada para asegurarte de que puedas lograr un nivel de rendimiento determinado. Ten en cuenta que, en la tabla que aparece a continuación, se usa una leve sobreestimación de la latencia típica para mostrar recomendaciones conservadoras. En el ejemplo, se supone que usas un tamaño de E/S de 16 KB.

Genera suficientes E/S con un tamaño de E/S grande

  • Usa un tamaño de E/S grande.

    Para garantizar que los límites y la latencia de IOPS no generen un cuello de botella en el rendimiento de tu aplicación, usa un tamaño mínimo de E/S de 256 KB o más.

    Usa tamaños de franjas 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) logra un gran rendimiento en Persistent Disk estándar debido a la exactitud con que imita el acceso al disco con múltiples transmisiones secuenciales.

  • Asegúrate de que tu aplicación genere suficiente E/S

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

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

    Si tu instancia de VM consume mucha CPU, tu app no podrá administrar las IOPS descritas con anterioridad. Te recomendamos tener una CPU disponible por cada 2,000–2,500 IOPS de tráfico esperado.

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

Un intervalo hace referencia a un rango contiguo de direcciones de bloque lógicas en un solo disco físico. Las cargas pesadas de E/S alcanzan el rendimiento máximo 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, como se muestra en la siguiente tabla.

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

Los intervalos en discos persistentes distintos que agregan hasta 50 TB o menos pueden considerarse como un solo intervalo de 50 TB para fines 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 adjuntos de maneras específicas para mejorar el rendimiento del disco.

Evita usar sistemas de archivos ext3 en Linux

El uso del sistema de archivos ext3 en una VM de Linux puede dar como resultado un rendimiento muy bajo en cargas de escritura con mucho contenido. Usa ext4 cuando sea posible. El controlador del sistema de archivos ext4 es retrocompatible con ext3/ext2 y admite la activación de 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, como solución alternativa, puedes activar sistemas de archivos ext3 con la opción de activación data=journal. Esto mejora las IOPS de escritura a costa de la capacidad de procesamiento de escritura. La migración a ext4 puede mejorar hasta 7 veces hasta el valor en algunas comparativas.

Inhabilita la inicialización diferida y habilita los comandos DISCARD

Los discos persistentes admiten los comandos TRIM, que permiten a los sistemas operativos informar a los discos cuando los bloques ya no están en uso. La opción de descartar permite que el sistema operativo marque los bloques de disco cuando ya no sean necesarios, sin incurrir en el costo de poner los bloques a cero.

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

Habilitar operaciones de descarte puede aumentar el rendimiento general del entorno de ejecución y, también, puede acelerar el rendimiento del disco cuando se activa por primera vez. Formatear el volumen completo del disco puede llevar mucho tiempo, por lo que el formateo diferido es una práctica común. La desventaja del formateo diferido es que el costo se suele pagar la primera vez que se activa el volumen. Si inhabilitas la inicialización diferida y habilitas las operaciones de descarte, puedes obtener un formato rápido y activar operaciones.

  • Para inhabilitar la inicialización diferida y habilitar las operaciones de descarte cuando se formatea 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. Para las VMs que usan esos sistemas operativos, formatea el disco persistente sin ese parámetro.

    -E lazy_itable_init=0,discard
    
  • Para habilitar las operaciones de descarte cuando se activa 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 de manera periódica junto con las operaciones de descarte o en lugar de usarlas. Si no usas operaciones de descarte, ejecuta fstrim antes de crear una instantánea de tu disco de arranque. Reducir el sistema de archivos te permite crear imágenes de instantáneas más pequeñas, lo que reduce el costo de almacenamiento de instantáneas.

Ajusta el valor de lectura anticipada

Para mejorar el rendimiento de E/S, los sistemas operativos emplean técnicas como la lectura anticipada, que consiste en leer en la memoria más archivos de los solicitados en el supuesto de que las operaciones de lectura posteriores necesitarán esos datos. Una lectura anticipada mayor aumenta la capacidad de procesamiento a expensas de la memoria y las IOPS. Una lectura anticipada menor aumenta las IOPS a expensas de la capacidad de procesamiento.

En los sistemas Linux, puedes obtener y establecer 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, para una lectura anticipada de 8 MB, 8 MB es 8,388,608 bytes (8 * 1,024 * 1,024).

8388608 bytes / 512 bytes = 16384

Establece blockdev en 16384:

$ sudo blockdev --setra 16384 /dev/DEVICE_ID

Modifica tu VM o crea una nueva

Existen límites asociados con cada tipo de máquina de VM que pueden afectar el rendimiento que puedes obtener de los discos adjuntos. Estos son algunos de los límites:

  • El rendimiento de Persistent Disk aumenta a medida que aumenta la cantidad de CPU virtuales disponibles.
  • Hyperdisk no es compatible con todos los tipos de máquinas.
  • Las tarifas de salida de red aumentan a medida que aumenta la cantidad de CPU virtuales disponibles.

Asegúrate de tener CPU libres

Realizar operaciones de lectura y escritura en un disco persistente requiere ciclos de CPU de tu VM. Si quieres alcanzar niveles de IOPS muy altos y coherentes, debes tener CPU libres para procesar E/S.

Para aumentar la cantidad de CPU virtuales disponibles con tu VM, puedes crear una VM nueva o puedes editar el tipo de máquina de una instancia de VM.

Crea una VM nueva para obtener funcionalidades nuevas

Los tipos de discos más nuevos no son compatibles con todas las series o tipos de máquinas. Hyperdisk proporciona tasas de IOPS o capacidad de procesamiento más altas para tus cargas de trabajo, pero, en la actualidad, están disponibles con unas pocas series de máquinas y requieren al menos 64 CPU virtuales.

Por lo general, las series de máquinas de VM nuevas se ejecutan en CPUs más nuevas, lo que puede ofrecer un mejor rendimiento que sus antecesores. Además, las CPUs más recientes pueden admitir funciones adicionales para mejorar el rendimiento de tus cargas de trabajo, como extensiones de matriz avanzadas (AMX) o extensiones de vector avanzadas de Intel (AVX-512).

¿Qué sigue?