Optimiza el rendimiento de los discos persistentes y SSD locales

Los discos persistentes son la opción de almacenamiento más común debido a su precio, rendimiento y durabilidad. También puedes elegir SSD locales, que proporcionan un rendimiento aún mayor y una latencia más baja, pero no son redundantes y existen solo durante la vida útil de una instancia específica. Cuando configuras una opción de almacenamiento para apps que se ejecutan en tus instancias, usa los siguientes procesos:

  • Determina cuánto espacio necesitas.
  • Determina cuáles son las características de rendimiento que requieren tus apps.
  • Configura tus instancias para optimizar el rendimiento del almacenamiento.

En las siguientes secciones, se describen las opciones de almacenamiento en bloque disponibles que puedes adjuntar a tus instancias de Compute Engine. Para obtener una lista completa de las opciones de almacenamiento en Google Cloud Platform, consulta los productos de Cloud Storage.

Comparación de rendimiento de almacenamiento en bloques

Si quieres determinar con facilidad el tipo y tamaño de disco correctos para tus instancias, ten en cuenta tus requisitos de rendimiento y de tamaño de almacenamiento. Los requisitos de rendimiento para una app determinada se suelen dividir en dos patrones de E/S distintos:

  • Operaciones de lectura y escritura pequeñas
  • Operaciones de lectura y escritura grandes

Para las operaciones de lectura y escritura pequeñas, el factor limitante son las operaciones de entrada/salida aleatorias por segundo, IOPS por sus siglas en inglés.

Para las operaciones de lectura y escritura grandes, el factor limitante es la capacidad de procesamiento.

Las IOPS por GB y la capacidad de procesamiento representan el rendimiento agregado total de los datos en un solo disco, ya sea adjunto a una sola instancia o compartido entre varias instancias. Para varias instancias que leen desde el mismo disco, la capacidad de procesamiento agregada y la capacidad de IOPS del disco se comparten entre las instancias. Para fines de planificación, te recomendamos usar las siguientes IOPS por GB y los índices por capacidad de procesamiento:

Discos persistentes
estándar
zonales
Discos persistentes
estándar
regionales
Discos persistentes
SSD
zonales
Discos persistentes
SSD
regionales
SSD local (SCSI) SSD local (NVMe)
IOPS máximas sostenidas
IOPS de lectura por GB 0.75 0.75 30 30 266.7 453.3
IOPS de escritura por GB 1.5 1.5 30 30 186.7 240
IOPS de lectura por instancia 3,000* 3,000* 15,000–60,000* 15,000–60,000* 400,000 680,000
IOPS de escritura por instancia 15,000* 15,000* 15,000–30,000* 15,000–30,000* 280,000 360,000
Capacidad de procesamiento máxima sostenida (MB/s)
Capacidad de procesamiento de lectura por GB 0.12 0.12 0.48 0.48 1.04 1.77
Capacidad de procesamiento de escritura por GB 0.12 0.12 0.48 0.48 0.73 0.94
Capacidad de procesamiento de lectura por instancia 240* 240* 240–1,200* 240–1,200* 1,560 2,650
Capacidad de procesamiento de escritura por instancia 76-240** 38-200** 76–400* 38–200* 1,090 1,400

* Las IOPS de disco persistente y el rendimiento de la capacidad de procesamiento dependen de la cantidad de CPU virtuales de instancia y del tamaño del bloque IO. Consulta la página sobre límites de rendimiento del disco persistente SSD para obtener detalles sobre el disco persistente SSD y la página sobre límites de rendimiento del disco persistente estándar para obtener detalles sobre el disco persistente estándar.

** El SSD y los discos persistentes estándar pueden lograr un mayor rendimiento de la capacidad de procesamiento en instancias con un mayor número de CPU virtuales. Consulta la página acerca de los límites de salida de red en la capacidad de procesamiento de escritura para obtener más detalles.

Comparación de un disco persistente con un disco duro físico

Cuando especificas el tamaño de tus discos persistentes, ten en cuenta cómo estos discos se comparan con los discos duros físicos tradicionales. En las siguientes tablas, se comparan discos persistentes estándar y discos persistentes SSD con el rendimiento típico que se esperaría de una unidad SATA de 7,200 RPM, que suele alcanzar 75 IOPS o 120 MB/s.

Tipo de E/S Patrón de E/S Tamaño requerido para igualar una unidad SATA de 7,200 RPM
Disco persistente estándar Disco persistente SSD
Operaciones de lectura pequeñas aleatorias 75 operaciones de lectura pequeñas aleatorias 100 GB 3 GB
Operaciones de escritura pequeñas aleatorias 75 operaciones de escritura pequeñas aleatorias 50 GB 3 GB
Operaciones de lectura grandes por transmisión Operaciones de lectura por transmisión de 120 MB/s 1,000 GB 250 GB
Operaciones de escritura grandes por transmisión Operaciones de escritura por transmisión de 120 MB/s 1,000 GB 250 GB

Resumen de tamaño, precio y rendimiento

Si bien debes tener en cuenta varias entradas cuando seleccionas el tamaño y tipo de volumen para tu app, uno de los factores que no necesitas tener en cuenta es el precio por el uso del volumen. El disco persistente no tiene costo por E/S. Por lo tanto, no es necesario estimar la E/S mensual para calcular el presupuesto que se gastará en discos. Sin embargo, para las cargas de trabajo orientadas a IOPS, es posible desglosar el costo mensual a fin de ver el precio por IOPS, con fines comparativos.

En los siguientes ejemplos de cálculo de precios, se usan precios de disco persistente de EE.UU. En estos ejemplos, considera los costos relativos de los discos persistentes estándar en comparación con los discos persistentes SSD. Los discos persistentes estándar tienen un precio de $0.040 por GB y los discos persistentes SSD tienen un precio de $0.170 por GB. Cuando aumentas el tamaño de un volumen, también aumentas los límites de rendimiento de forma automática, sin costo adicional.

Para determinar el costo de un disco persistente por IOPS, divide el precio por GB por mes por la cantidad de IOPS por GB. En la siguiente tabla, se calcula el precio por IOPS de lectura aleatoria por GB. Además, puedes usar los mismos cálculos para obtener el precio por IOPS de escritura.

Tipo de disco Precio por GB por mes IOPS de lectura por GB Precio por IOPS por GB
Disco persistente estándar $0.040 0.75 $0.040 / 0.75 = $0.0533
Disco persistente SSD $0.170 30 $0.170 / 30 = $0.2267

Los discos persistentes SSD alcanzan su límite de 60,000 IOPS de lectura aleatorias a los 2,000 GB y de 30,000 IOPS de escritura aleatorias a los 1,000 GB. En contraste, los discos persistentes estándar alcanzan su límite de 3,000 IOPS de lectura aleatorias a los 4 TB y de 15,000 IOPS de escritura aleatorias a los 10 TB.

Los discos persistentes SSD están diseñados para latencias de milisegundos de un solo dígito. La latencia observada es específica de la app.

Disco persistente estándar

El rendimiento de un disco persistente estándar escala de manera lineal hasta los límites de rendimiento de la VM. Una cantidad de 4 o más CPU virtuales para tu instancia no limita el rendimiento de los discos persistentes estándar.

Tener menos de 4 CPU virtuales para tu instancia reduce el límite de operaciones de escritura para IOPS porque los límites de salida de red son proporcionales a la cantidad de CPU virtuales. El límite de operaciones de escritura también depende del tamaño de la E/S (16 KB de E/S consumen más ancho de banda que 8 KB de E/S en el mismo nivel de IOPS).

Las IOPS de disco persistente estándar y el rendimiento de la capacidad de procesamiento aumentan de manera lineal con el tamaño del disco hasta que alcanzan los siguientes límites por instancia:

  • Capacidad de procesamiento de lectura: hasta 240 MB/s con un tamaño de disco de 2 TB.
  • Capacidad de procesamiento de escritura: hasta 240 MB/s con un tamaño de disco de 2 TB.
  • IOPS de lectura: hasta 3,000 IOPS con un tamaño de disco de 4 TB.
  • IOPS de escritura: hasta 15,000 IOPS con un tamaño de disco de 10 TB.

Para obtener beneficios de rendimiento de disco persistente en tus instancias existentes, cambia el tamaño de tus discos persistentes a fin de aumentar las IOPS y la capacidad de procesamiento por disco persistente.

Tamaño de volumen (GB) IOPS aleatorias sostenidas Capacidad de procesamiento sostenido (MB/s)
Lectura
(<=16 KB/IO)
Escritura
(<=8 KB/IO)
Escritura
(16 KB/IO)
Lectura Escritura
10 * * * * *
32 24 48 48 3 3
64 48 96 96 7 7
128 96 192 192 15 15
256 192 384 384 30 30
512 384 768 768 61 61
1,000 750 1,500 1,500 120 120
1,500 1,125 2,250 2,250 180 180
2,048 1,536 3,072 3,072 240 240
4,000 3,000 6,000 6,000 240 240
5,000 3,000 7,500 7,500 240 240
8,192 3,000 12,288 7,500 240 240
10,000 3,000 15,000 7,500 240 240
16,384 3,000 15,000 7,500 240 240
32,768 3,000 15,000 7,500 240 240
65,536 3,000 15,000 7,500 240 240

* Usa este tamaño de volumen solo para volúmenes de inicio. Un pico de actividad de E/S proporciona un mayor rendimiento para los volúmenes de inicio que el escalamiento lineal descrito aquí.

Disco persistente SSD

El rendimiento de IOPS de los discos persistentes SSD depende de la cantidad de CPU virtuales en la instancia y del tamaño del disco.

Las VM de núcleo inferior tienen límites de capacidad de procesamiento y de IOPS de escritura inferiores debido a las limitaciones de salida de red en la capacidad de procesamiento de escritura. Para obtener más información, consulta la página sobre los límites de salida de red en la capacidad de procesamiento de escritura.

El rendimiento del disco persistente SSD escala de manera lineal hasta que alcanza los límites de volumen o de cada instancia de Compute Engine. El ancho de banda de lectura del SSD y la coherencia de IOPS cerca de los límites máximos dependen, en gran medida, del uso de la entrada de red. Es normal que haya cierta variabilidad, en especial para E/S de 16 KB cerca de los límites máximos de IOPS.

Cantidad de CPU virtuales de instancia IOPS aleatorias sostenidas Capacidad de procesamiento sostenido (MB/s)
Lectura
(<=16 KB/IO)
Escritura
(<=8 KB/IO)
Escritura
(16 KB/IO)
Lectura* Escritura
1 CPU virtual 15,000 9,000 4,500 240 72
De 2 a 3 CPU virtuales 15,000 15,000 4,500/CPU virtual 240 72/CPU virtual
De 4 a 7 CPU virtuales 15,000 15,000 15,000 240 240
De 8 a 15 CPU virtuales 15,000 15,000 15,000 800 400
De 16 a 31 CPU virtuales 25,000 25,000 25,000 1,200 400
De 32 a 63 CPU virtuales 60,000 30,000 25,000 1,200 400
Más de 64 CPU virtuales** 60,000 30,000 25,000 1,200 400

* Capacidad de procesamiento máxima según los tamaños de bloque de E/S de 256 KB o más.

** Es posible que no se pueda alcanzar el máximo rendimiento con el uso completo de CPU.

Para mejorar el rendimiento del disco persistente SSD en tus instancias existentes, cambia el tipo de máquina de la instancia a fin de aumentar los límites por VM y cambia el tamaño de tus discos persistentes a fin de aumentar las IOPS y la capacidad de procesamiento por disco persistente.

Tamaño de volumen (GB) IOPS aleatorias sostenidas Capacidad de procesamiento sostenido (MB/s)
Lectura
(<=16 KB/IO)
Escritura
(<=8 KB/IO)
Escritura
(16 KB/IO)
Lectura Escritura
10 300 300 300 4.8 4.8
32 960 960 960 15 15
64 1,920 1,920 1,920 30 30
128 3,840 3,840 3,840 61 61
256 7,680 7,680 7,680 122 122
500 15,000 15,000 15,000 240 240
834 25,000 25,000 25,000 400 400
1,000 30,000 30,000 25,000 480 400
1,334 40,000 30,000 25,000 640 400
1,667 50,000 30,000 25,000 800 400
2,048 60,000 30,000 25,000 983 400
4,096 60,000 30,000 25,000 1,200 400
8,192 60,000 30,000 25,000 1,200 400
16,384 60,000 30,000 25,000 1,200 400
32,768 60,000 30,000 25,000 1,200 400
65,536 60,000 30,000 25,000 1,200 400

Límites de discos C2

Los tipos de máquina optimizados para el procesamiento están sujetos a límites de disco persistentes específicos por CPU virtual que difieren de los límites para otros tipos de máquina. En las siguientes tablas, se muestran estos límites.

Ten en cuenta que el rendimiento por volumen sigue siendo el mismo que el descrito en las secciones sobre el rendimiento de disco estándar y el rendimiento de disco SSD.

Disco persistente estándar
Cantidad de CPU virtuales de instancia IOPS aleatorias sostenidas Capacidad de procesamiento sostenido (MB/s)
Lectura
(<=16 KB/IO)
Escritura
(<=8 KB/IO)
Escritura
(16 KB/IO)
Lectura* Escritura
4 CPU virtuales 3,000 4,000 4,000 240 240
8 CPU virtuales 3,000 4,000 4,000 240 240
16 CPU virtuales 3,000 4,000 4,000 240 240
30 CPU virtuales 3,000 8,000 8,000 240 240
60 CPU virtuales 3,000 15,000 15,000 240 240
Disco persistente SSD
Cantidad de CPU virtuales de instancia IOPS aleatorias sostenidas Capacidad de procesamiento sostenido (MB/s)
Lectura
(<=16 KB/IO)
Escritura
(<=8 KB/IO)
Escritura
(16 KB/IO)
Lectura* Escritura
4 CPU virtuales 4,000 4,000 4,000 240 240
8 CPU virtuales 4,000 4,000 4,000 240 240
16 CPU virtuales 8,000 4,000 4,000 320 240
30 CPU virtuales 15,000 8,000 8,000 600 240
60 CPU virtuales 30,000 15,000 15,000 1,200 400

Operaciones de lectura y escritura simultáneas

En los discos persistentes estándar, las operaciones de lectura y escritura simultáneas comparten los mismos recursos. Si tu instancia usa una capacidad de procesamiento de lectura o IOPS mayor, será capaz de realizar menos operaciones de escritura. Por el contrario, las instancias que usen una capacidad de procesamiento de escritura mayor, serán capaces de realizar menos operaciones de lectura.

Los discos persistentes SSD son capaces de alcanzar los límites máximos de capacidad de procesamiento de lectura y escritura de forma simultánea. Sin embargo, este no es el caso de IOPS. No es posible que los discos persistentes SSD alcancen sus límites máximos de lectura y escritura de forma simultánea. Si quieres alcanzar los límites máximos de capacidad de procesamiento de operaciones de lectura y escritura simultáneas, debes optimizar el tamaño de E/S a fin de que el volumen pueda alcanzar sus límites de capacidad de procesamiento sin sufrir un cuello de botella de IOPS.

Límites de IOPS de instancia para operaciones de lectura y escritura simultáneas:

Los números de IOPS en la siguiente tabla están basados 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.

Disco persistente estándar Disco persistente SSD (8 CPU virtuales) Disco persistente SSD (más de 32 CPU virtuales)
Lectura Escritura Lectura Escritura Lectura Escritura
3,000 IOPS 0 IOPS 15,000 IOPS 0 IOPS 60,000 IOPS 0 IOPS
2,250 IOPS 3,750 IOPS 11,250 IOPS 3,750 IOPS 45,000 IOPS 7,500 IOPS
1,500 IOPS 7,500 IOPS 7,500 IOPS 7,500 IOPS 30,000 IOPS 15,000 IOPS
750 IOPS 11,250 IOPS 3,750 IOPS 11,250 IOPS 15,000 IOPS 22,500 IOPS
0 IOPS 15,000 IOPS 0 IOPS 15,000 IOPS 0 IOPS 30,000 IOPS

Límites de capacidad de procesamiento de instancia para operaciones de lectura y escritura simultáneas:

Disco persistente estándar Disco persistente SSD (8 CPU virtuales) Disco persistente SSD (más de 16 CPU virtuales)
Lectura Escritura Lectura Escritura Lectura Escritura
240 MB/s 0 MB/s 800 MB/s* 400 MB/s* 1,200 MB/s* 400 MB/s*
180 MB/s 60 MB/s
120 MB/s 120 MB/s
60 MB/s 180 MB/s
0 MB/s 240 MB/s

* Para los discos persistentes SSD, la capacidad de procesamiento máxima de lectura y de escritura son independientes entre sí, por lo que estos límites son constantes. Puede que observes un aumento en la capacidad de procesamiento de disco persistente SSD por instancia que supere los límites publicados debido a las mejoras continuas.

Límites de salida de red en la capacidad de procesamiento de escritura

Cada operación de escritura de disco persistente contribuye al límite de salida de red acumulativo de la instancia de tu máquina virtual (VM).

Para calcular el tráfico máximo de operaciones de escritura de disco persistente que puede emitir una instancia de VM, resta el tráfico de salida de red de una instancia de su límite de red de 2 Gbit/s/CPU virtual. La capacidad de procesamiento restante representa la capacidad de procesamiento disponible para el tráfico de operaciones de escritura de disco persistente.

Los discos persistentes de Compute Engine ofrecen redundancia incorporada. Las instancias escriben datos en el disco persistente tres veces en paralelo para lograr esta redundancia. Además, cada solicitud de escritura posee una cierta cantidad de sobrecarga, que usa el ancho de banda de salida.

Cada instancia tiene un límite de operaciones de escritura de disco persistente basado en el límite de salida de red de la VM. En una situación en la que el disco persistente compite con el tráfico IP de la salida de red, el 60% del límite de salida de red se aplica al tráfico de disco persistente, lo que deja un 40% para el tráfico IP. En la siguiente tabla, se muestra el ancho de banda esperado de operaciones de escritura de disco persistente, con tráfico IP adicional y sin él:

Disco persistente estándar Disco persistente de estado sólido
Cantidad de CPU virtuales Límite de operaciones de escritura de disco persistente estándar (MB/s) Asignación de operaciones de escritura de disco persistente estándar (MB/s) Tamaño de volumen estándar necesario para alcanzar el límite (GB) Límite de operaciones de escritura de disco persistente SSD (MB/s) Asignación de operaciones de escritura de disco persistente SSD (MB/s) Tamaño de disco persistente SSD necesario para alcanzar el límite (GB)
1 72 43 600 72 43 150
2 144 86 1,200 144 86 300
4 240 173 2,000 240 173 500
8+ 240 240 2,000 400 346 834

Para comprender cómo se calcularon los valores de esta tabla, tomemos, por ejemplo, el valor de 1 CPU virtual y disco persistente estándar. En este ejemplo, calculamos que el multiplicador de ancho de banda para cada solicitud de operación de escritura es 3.3x, lo que significa que los datos se escriben 3 veces y tienen una sobrecarga del 10%. Para calcular el límite de salida, divide el límite de salida de red (2 Gbit/s, que es equivalente a 238 MB/s) por 3.3:

Ancho de banda de operación de escritura máximo para 1 CPU virtual = 238 / 3.3 = ~72 MB/s en tu disco persistente estándar.

También puedes obtener la capacidad de disco necesaria para alcanzar este rendimiento mediante la capacidad de escritura de disco persistente estándar por GB proporcionada en la tabla de rendimiento presentada con anterioridad:

Capacidad de disco necesaria a fin de alcanzar el ancho de banda de escritura máximo para 1 CPU virtual = 72 / 0.12 = ~600 GB

Similar a los discos persistentes zonales, el tráfico de operaciones de escritura desde los discos persistentes regionales contribuye al límite de salida de red acumulativo de una instancia de VM. Si quieres calcular la salida de red disponible para discos persistentes regionales, usa el factor de 6.6.

Ancho de banda de operación de escritura máximo para 1 CPU virtual = 238 / 6.6 = ~36 MB/s para tu disco persistente estándar replicado.

Optimiza el rendimiento de los discos persistentes y SSD locales

Puedes optimizar los discos persistentes y los SSD locales para manejar tus datos de manera más eficiente.

Optimiza 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 app y tu sistema operativo necesiten algunos ajustes.

En las siguientes secciones, se describen algunos elementos clave que se pueden ajustar para obtener un mejor rendimiento y se explica cómo aplicar algunos de ellos a tipos específicos de cargas de trabajo.

Inhabilita la inicialización diferida y habilita los comandos DISCARD

Los discos persistentes admiten los comandos DISCARD o TRIM, que permiten a los sistemas operativos informar a los discos cuando los bloques ya no están en uso. La compatibilidad con DISCARD 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, puedes habilitar DISCARD cuando activas un disco persistente en tu instancia. Las instancias de Windows 2012 R2 habilitan DISCARD de forma predeterminada cuando activas un disco persistente. Windows 2008 R2 no es compatible con DISCARD.

Habilitar DISCARD 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 los comandos DISCARD, puedes obtener una activación y un formateo veloces.

  • Inhabilita la inicialización diferida y habilita DISCARD durante el formateo. Para ello, 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 CentOS 6 o RHEL 6. Para esas instancias, formatea los discos persistentes sin ese parámetro.

    -E lazy_itable_init=0,discard
    
  • Habilita los comandos DISCARD en la activación. Para ello, pasa la marca siguiente al comando de activación:

    -o discard
    

Los discos persistentes funcionan bien con la opción discard habilitada. De todas formas, puedes ejecutar fstrim de manera periódica junto con la opción discard o sin ella. Si no usas la opción discard, ejecuta fstrim antes de crear una instantánea de tu disco. 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.

Profundidad de la cola de E/S

Muchas apps tienen opciones de configuración que afectan la profundidad de la cola de E/S. Las profundidades de la cola mayores aumentan las IOPS, pero también pueden aumentar la latencia. Las profundidades de cola menores disminuyen la latencia por E/S, pero también pueden producir IOPS máximas más bajas.

Caché 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 bajo el supuesto de que las lecturas 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

Debes establecer blockdev como 16384:

$ sudo blockdev --setra 16384 /dev/[DEVICE_ID]

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.

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–800 IOPS, hasta un límite de 64 para 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

Por lo general, en los documentos de recomendaciones, 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. Para cargas de trabajo orientadas a la capacidad de procesamiento, recomendamos E/S con un tamaño de 256 KB o más.

Optimiza el rendimiento del disco persistente SSD

En la tabla de rendimiento por tipo de disco, se describe el rendimiento máximo alcanzable esperado para los discos persistentes de estado sólido. Para optimizar tus apps y tus instancias de VM a fin de alcanzar estas velocidades, usa las siguientes recomendaciones:

  • Asegúrate de que tu app genere suficiente E/S

    Si tu app genera menos IOPS que el límite descrito en la tabla anterior, no alcanzarás ese nivel de IOPS. Por ejemplo, en un disco de 500 GB, el límite de IOPS esperado es de 15,000 IOPS. Sin embargo, si generas menos IOPS o si las operaciones de E/S superan los 8 KB, no obtendrás 15,000 IOPS.

  • Asegúrate de proporcionar E/S con suficiente paralelismo

    Usa una profundidad de cola lo bastante alta como para aprovechar el paralelismo del sistema operativo. Si proporcionas 1,000 IOPS, pero lo haces de forma sincrónica con una profundidad de la cola de 1, obtendrás muchas menos IOPS que el límite descrito en la tabla. Como mínimo, tu app debe tener una profundidad de cola de 1 por cada 400–800 IOPS.

  • 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.

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

    Si tu app 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 en cuenta factores como la fragmentación del disco y la aleatoriedad de las partes accedidas del disco.

  • 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, puedes configurar el programador de E/S como noop para lograr el mayor número de IOPS en dispositivos respaldados por SSD.

Haz una evaluación comparativa del rendimiento del disco persistente SSD

Los siguientes comandos se basan en un dispositivo PD-SSD de 2,500 GB. Si el tamaño de tu dispositivo es diferente, modifica el valor del argumento --filesize. Este tamaño de disco es necesario para alcanzar los límites de capacidad de procesamiento de VM de 32 CPU virtuales.

    # Install dependencies
    sudo apt-get update
    sudo apt-get install -y fio
  1. Llena el disco con datos distintos de cero. Las operaciones de lectura de disco persistente de bloques vacíos tienen un perfil de latencia diferente del de los bloques que contienen datos. Recomendamos llenar el disco antes de ejecutar una evaluación comparativa de latencia de operaciones de lectura.

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    sudo fio --name=fill_disk \
      --filename=/dev/sdb --filesize=2500G \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=128K --iodepth=64 --rw=randwrite
    
  2. Prueba el ancho de banda de operaciones de escritura. Para ello, realiza operaciones de escritura secuenciales con múltiples transmisiones paralelas (más de 8) con un tamaño de E/S de 1 MB y una profundidad de E/S mayor o igual que 64.

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    sudo fio --name=write_bandwidth_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=1M --iodepth=64 --rw=write --numjobs=8 --offset_increment=100G
    
  3. Prueba las IOPS de escritura. Para alcanzar las IOPS de PD máximas, debes mantener una cola de E/S profunda. Por ejemplo, si la latencia de operación de escritura es de 1 milisegundo, la VM puede alcanzar, como máximo, 1,000 IOPS por cada E/S en tránsito. Para alcanzar 15,000 IOPS, la VM debe mantener al menos 15 E/S en tránsito. Si tu disco y tu VM pueden alcanzar 30,000 IOPS, el número de E/S en tránsito debe ser de al menos 30 E/S. Si el tamaño de E/S supera los 4 KB, puede que la VM alcance el límite de ancho de banda antes de alcanzar el límite de IOPS.

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    sudo fio --name=write_iops_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=4K --iodepth=64 --rw=randwrite
    
  4. Prueba la latencia de operaciones de escritura. Mientras pruebas la latencia de E/S, la VM no debe alcanzar el ancho de banda máximo ni las IOPS máximas. De lo contrario, la latencia observada no reflejará la latencia de E/S real del disco persistente. Por ejemplo, si el límite de IOPS se alcanza a una profundidad de E/S de 30 y el comando fio duplica ese valor, el total de IOPS se mantendrá igual y la latencia de E/S informada se duplicará.

    # Running this command causes data loss on the second device.
    # We strongly recommend using a throwaway VM and disk.
    sudo fio --name=write_latency_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=4K --iodepth=4 --rw=randwrite
    
  5. Prueba el ancho de banda de operaciones de lectura. Para ello, realiza operaciones de lectura secuenciales con múltiples transmisiones paralelas (más de 8) con un tamaño de E/S de 1 MB y una profundidad de E/S mayor o igual que 64.

    sudo fio --name=read_bandwidth_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=1M --iodepth=64 --rw=read --numjobs=8 --offset_increment=100G
    
  6. Prueba las IOPS de lectura. Para alcanzar las IOPS de PD máximas, debes mantener una cola de E/S profunda. Por ejemplo, si el tamaño de E/S supera los 4 KB, puede que la VM alcance el límite de ancho de banda antes de alcanzar el límite de IOPS.

    sudo fio --name=read_iops_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=4K --iodepth=64 --rw=randread
    
  7. Prueba la latencia de operaciones de lectura. Es importante llenar el disco con datos para obtener una medición de latencia realista. Es importante también que la VM no alcance los límites de IOPS o de capacidad de procesamiento durante esta prueba, ya que después de que el disco persistente alcanza su límite de saturación, rechaza la E/S entrante y esto se refleja en un aumento artificial en la latencia de E/S.

    sudo fio --name=read_latency_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --bs=4K --iodepth=4 --rw=randread
    
  8. Prueba el ancho de banda de operaciones de lectura secuenciales.

    sudo fio --name=read_bandwidth_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --numjobs=4 --thread --offset_increment=500G \
      --bs=1M --iodepth=64 --rw=read
    
  9. Prueba el ancho de banda de operaciones de escritura secuenciales.

    sudo fio --name=write_bandwidth_test \
      --filename=/dev/sdb --filesize=2500G \
      --time_based --ramp_time=2s --runtime=1m \
      --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
      --numjobs=4 --thread --offset_increment=500G \
      --bs=1M --iodepth=64 --rw=write
    

Optimiza SSD locales

En la tabla de rendimiento por tipo de disco, se describe el rendimiento máximo alcanzable para dispositivos SSD locales. Para optimizar tus apps y tus instancias de VM a fin de alcanzar estas velocidades, usa las siguientes recomendaciones:

Usa optimizaciones del entorno de invitado para SSD locales

De forma predeterminada, la mayoría de las imágenes de Linux proporcionadas por Compute Engine ejecutan de forma automática una secuencia de comandos de optimización que configura la instancia para el rendimiento máximo del SSD local. La secuencia de comandos habilita ciertas opciones de configuración de la lista sysfs que mejoran el rendimiento general de tu máquina y enmascaran solicitudes de interrupción (IRQ) a CPU virtuales específicas. Esta secuencia de comandos solo optimiza el rendimiento para los dispositivos SSD locales de Compute Engine.

Puede que Ubuntu, SLES y otras imágenes más antiguas no estén configuradas para incluir esta optimización de rendimiento. Si usas alguna de estas imágenes o una imagen anterior a la versión v20141218, puedes instalar el entorno de invitado para habilitar estas optimizaciones.

Selecciona la mejor imagen para las interfaces NVMe o SCSI

Los SSD locales pueden exponer una interfaz NVMe o SCSI. La mejor opción depende del sistema operativo que uses. Para tus dispositivos SSD locales, elige la interfaz que mejor se adapte a tu imagen de disco de arranque. Si tus instancias se conectan a SSD locales mediante interfaces SCSI, puedes habilitar una SCSI de múltiples colas en el sistema operativo de invitado para alcanzar un rendimiento óptimo a través de la interfaz SCSI.

Habilita una SCSI de múltiples colas en instancias con imágenes personalizadas y SSD locales

Algunas imágenes públicas admiten una SCSI de múltiples colas. Si necesitas la capacidad de una SCSI de múltiples colas en las imágenes personalizadas que importas a tu proyecto, debes habilitarla tú mismo. Tus imágenes de Linux importadas pueden usar una SCSI de múltiples colas solo si incluye la versión de kernel 3.19 o posterior.

Para habilitar una SCSI de múltiples colas en una imagen personalizada, importa la imagen con la característica VIRTIO_SCSI_MULTIQUEUE del sistema operativo de invitado habilitada y agrega una entrada a tu configuración de GRUB:

En CentOS

Solo para CentOS7.

  1. Importa tu imagen personalizada con la API y, luego, incluye un elemento guestOsFeatures con un valor type de VIRTIO_SCSI_MULTIQUEUE.

  2. Crea una instancia con tu imagen personalizada y adjunta uno o más SSD locales.

  3. Conéctate a tu instancia a través de SSH.

  4. Verifica el valor del archivo /sys/module/scsi_mod/parameters/use_blk_mq

    $ cat /sys/module/scsi_mod/parameters/use_blk_mq
    

    Si el valor de este archivo es Y, entonces la SCSI de múltiples colas ya está habilitada en tu imagen importada. Si el valor del archivo es N, incluye scsi_mod.use_blk_mq=Y en la entrada GRUB_CMDLINE_LINUX de tu archivo de configuración GRUB y reinicia el sistema.

    1. Abre el archivo de configuración GRUB /etc/default/grub en un editor de texto.

      $ sudo vi /etc/default/grub
      
    2. Agrega scsi_mod.use_blk_mq=Y a la entrada GRUB_CMDLINE_LINUX.

      GRUB_CMDLINE_LINUX=" vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16 scsi_mod.use_blk_mq=Y"
      
    3. Guarda el archivo de configuración.

    4. Ejecuta el comando grub2-mkconfig para regenerar el archivo GRUB y completar la configuración.

      $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      
    5. Reinicia la instancia.

      $ sudo reboot
      

En Ubuntu

  1. Importa tu imagen personalizada con la API y, luego, incluye un elemento guestOsFeatures con un valor type de VIRTIO_SCSI_MULTIQUEUE.

  2. Crea una instancia con tu imagen personalizada y adjunta uno o más SSD locales mediante la interfaz SCSI.

  3. Conéctate a tu instancia a través de SSH.

  4. Verifica el valor del archivo /sys/module/scsi_mod/parameters/use_blk_mq.

    $ cat /sys/module/scsi_mod/parameters/use_blk_mq
    

    Si el valor de este archivo es Y, entonces la SCSI de múltiples colas ya está habilitada en tu imagen importada. Si el valor del archivo es N, incluye scsi_mod.use_blk_mq=Y en la entrada GRUB_CMDLINE_LINUX de tu archivo de configuración GRUB y reinicia el sistema.

    1. Abre el archivo de configuración GRUB sudo nano /etc/default/grub en un editor de texto.

      $ sudo nano /etc/default/grub
      
    2. Agrega scsi_mod.use_blk_mq=Y a la entrada GRUB_CMDLINE_LINUX.

      GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=Y"
      
    3. Guarda el archivo de configuración.

    4. Ejecuta el comando update-grub para regenerar el archivo GRUB y completar la configuración.

      $ sudo update-grub
      
    5. Reinicia la instancia.

      $ sudo reboot
      

Inhabilita la limpieza de caché de escritura

Los sistemas de archivos, las bases de datos y otras apps usan la limpieza de caché para garantizar que los datos se envíen a un almacenamiento duradero en varios puntos de control. Para la mayoría de los dispositivos de almacenamiento, esta configuración predeterminada tiene sentido. Sin embargo, las limpiezas de caché de escritura son bastante lentas en los SSD locales. Puedes aumentar el rendimiento de las operaciones de escritura para algunas apps si inhabilitas los comandos de limpieza automática en ellas o si inhabilitas las opciones de limpieza en el nivel del sistema de archivos.

Los SSD locales siempre limpian las escrituras almacenadas en caché en dos segundos, sin importar los comandos de limpieza que establezcas para tus apps y sistemas de archivos; por lo tanto, las fallas temporales de hardware te pueden hacer perder dos segundos de escritura en caché como máximo. Las fallas de hardware permanentes pueden causar la pérdida de todos los datos del dispositivo, más allá de la limpieza de los datos, por lo que debes crear copias de seguridad de los datos críticos en discos persistentes o depósitos de Cloud Storage.

Para inhabilitar la limpieza de caché de escritura en sistemas de archivos ext4, incluye la configuración nobarrier en tus opciones de activación o en tus entradas /etc/fstab. Por ejemplo:

$ sudo mount -o discard,defaults,nobarrier /dev/[LOCAL_SSD_ID] /mnt/disks/[MNT_DIR]

en el que: [LOCAL_SSD_ID] es el ID de dispositivo del SSD local que deseas activar y [MNT_DIR] es el directorio en el que se debe activar.

Haz una evaluación comparativa del rendimiento del SSD local

En la sección sobre rendimiento, se muestran cifras de rendimiento de SSD locales que se obtuvieron mediante el uso de opciones de configuración específicas en la instancia de SSD local. Si tu instancia tiene problemas para alcanzar estos límites de rendimiento y ya la configuraste mediante la configuración de SSD local recomendada, puedes comparar tus límites de rendimiento con los límites publicados. Para ello, replica la configuración que usa el equipo de Compute Engine.

  1. Crea una instancia de SSD local con cuatro o con ocho CPU virtuales para cada dispositivo, según tu carga de trabajo. Por ejemplo, si deseas conectar cuatro dispositivos SSD locales a una instancia, usa un tipo de máquina con 16 o 32 CPU virtuales.

    Con el siguiente comando, se crea una máquina virtual con 8 CPU virtuales y un único SSD local:

    gcloud compute instances create ssd-test-instance \
    --machine-type "n1-standard-8" \
    --local-ssd interface="SCSI"
    
  2. Ejecuta la siguiente secuencia de comandos en tu VM. La secuencia de comandos replica la configuración que se usó para alcanzar las cifras de rendimiento del SSD proporcionadas en la sección sobre rendimiento. Ten en cuenta que el parámetro --bs define el tamaño del bloque, el cual afecta los resultados para los diferentes tipos de operaciones de lectura y escritura.

    # install dependencies
    sudo apt-get update -y
    sudo apt-get install -y build-essential git libtool gettext autoconf \
    libgconf2-dev libncurses5-dev python-dev fio bison autopoint
    
    # blkdiscard
    git clone https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git
    cd util-linux/
    ./autogen.sh
    ./configure --disable-libblkid
    make
    sudo mv blkdiscard /usr/bin/
    sudo blkdiscard /dev/disk/by-id/google-local-ssd-0
    
    # full write pass - measures write bandwidth with 1M blocksize
    sudo fio --name=writefile --size=100G --filesize=100G \
    --filename=/dev/disk/by-id/google-local-ssd-0 --bs=1M --nrfiles=1 \
    --direct=1 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 \
    --iodepth=200 --ioengine=libaio
    
    # rand read - measures max read IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randread --blocksize=4k --group_reporting
    
    # rand write - measures max write IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
    

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine