Optimiza el rendimiento de SSD locales

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, sigue 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 SO invitado para conseguir 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 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 incluyen la versión de kernel 3.19 o una posterior.

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

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
      

Ubuntu

  1. Importa tu imagen personalizada con la API de Compute Engine 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é dentro de 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 solo 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 ejemplo anterior, [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
    

Qué sigue

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine